C
C - 자료구조 3장 연습문제 풀이
해변
2022. 4. 7. 17:27
1.
int a[10][20]에서 배열이 차지하는 메모리 공간의 크기는 얼마인가?
정답은 4(int 자료형의 크기)x10x20 = 800바이트
2.
float a[100]으로 선언된 배열의 시작 주소를 1000번지라고 할 때, 배열의 10번째 요소의 주소는 몇 번지인가?
float 자료형의 크기는 4이다.
1000+(4*10) 이므로 정답은 1040번지이다.
3.
다음의 배열 중에서 크기가 가장 큰 배열은?
(1)int array1[10] (2)double array2[10]
(3)char array3[40] (4)float array4[10]
(1)4*10 = 40
(2)8*10 = 80
(3)1*40 = 40
(4)4*10 = 40
이므로 정답은 (2)이다.
4.
크기가 10인 배열 two를 선언하고 여기에 2의 제곱 값들을 저장해보자. 즉 배열의 첫번째 요소에는 2^0을
저장하고 두번째 요소에는 2^1값을 저장한다. 마지막 요소에는 2^9값을 저장한다.
for문을 이용하여 two[]배열의 전체 요소의 값을 출력하는 프로그램을 작성하라
void print(int two[]) {
for (int i = 0; i < 10; i++) {
printf("%d", two[i]);
}
}
5.
person이라는 구조체를 만들어보자. 이 구조체에는 문자 배열로 된 이름, 사람의 나이를 나타내는
정수값, 각 개인의 월급을 나타내는 float 값 등이 변수로 들어가야한다
typedef struct {
char name[10];
int age;
float money;
}person;
6.
C언어의 typedef를 이용하여 complex라고 하는 새로운 자료형을 정의하라. complex 자료형은
구조체로서 float형인 real 변수와 역시 float형인 imaginary 변수를 갖는다.
complex 자료형으로 변수 c1과 c2를 선언하여보라.
typedef struct {
float real;
float imaginary
}complex;
int main(void) {
complex c1;
complex c2;
}
7.
복소수를 구조체로 표현해보자. 복소수 a와 복소수 b를 입력받아서 a+b를 계산하는 함수를
작성해보자. 함수는 구조체를 반환할 수 있다. 복소수는 real+imag*i와 같은 형태를 가진다.
#include <stdio.h>
typedef struct {
float real;
float imaginary
}complex;
complex complex_add(complex a, complex b) {
complex result;
result.real = a.real + b.real;
result.imaginary = a.imaginary + b.imaginary;
return result;
}
8.
크기가 n인 배열 array에서 임의의 위치 loc에 정수 value를 삽입하는 함수 insert()를 작성하라.
정수가 삽입되면 그 뒤에 있는 정수들은 한 칸씩 뒤로 밀려야 한다.
현재 배열에 들어있는 원소의 개수는 items개라고 하자.(items << n 이라고 가정)
void insert(int array[], int loc, int value) {
int temp;
for (int i = items - 1; i >= loc; i--) {
array[i + 1] = array[i];
}
array[loc] = value;
items++;
return temp;
}
9.
앞의 문제에서 구현한 insert() 함수의 시간 복잡도는?
배열에 들어있는 원소의 개수를 n개라고 가정하면 loc = 0(최악의 경우)일 때
모든 n개의 원소를 한칸씩 뒤로 밀어내야 하므로 시간복잡도는 O(n)이다,
10.
크기가 n인 배열 array에서 임의의 위치 loc에 있는 정수를 삭제하는 함수 delete()를 작성하라.
정수가 삭제되면 그 뒤에 있는 정수들은 한칸씩 앞으로 이동하여야 한다.
현재 배열에 들어있는 원소의 개수는 items개라고 하자.(items << n라고 가정)
void delete(int array[], int loc) {
int temp = array[loc];
for (int i = loc; i<items-1; i++) {
array[i] = array[i+1];
}
array[items-1] = 0;
items--;
return temp;
}
11.
앞의 문제에서 구현한 delete() 함수의 시간 복잡도는?
배열에 들어있는 원소의 개수를 n개라고 가정하면 loc = 0(최악의 경우)일 때
가장 앞에 있는 원소를 삭제하는 경우 나머지 원소(n-1)를 한칸씩 앞으로 당겨야 하므로
시간 복잡도는 O(n)이다.
12.
1개의 정수와 최대 크기가 20인 문자열로 이루어진 구조체를 저장할 수 있도록 동적 메모리를 할당받고
여기에 정수 100과 문자열 "just testing"을 저장한 다음, 동적 메모리를 반납하는 프로그램을 작성하라
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int num;
char str[20];
}a;
int main(void) {
a* A;
A = (a*)malloc(sizeof(a));
A->num = 100;
strcpy(A->str, "just testing");
printf("%d\n", A->num);
printf("%s", A->str);
free(A);
}
출력 결과
100
just testing