Computer Science/DataStructure

[자료구조] C언어로 쉽게 풀어쓴 자료구조 : 3장 연습문제

섬지 2022. 4. 12. 03:14

제 네이버 블로그에서 그대로 가져왔습니다 ⇒ https://blog.naver.com/racoo_oon/222435357391

내용은 동일하고 시간복잡도 문제는 제외하였습니다.


1. int a[10][20]에서 배열이 차지하는 메모리 공간의 크기는 얼마인가? int형은 4바이트라고 하자.

: 800바이트

 

2. float a[100]으로 선언된 배열의 시작 주소를 1000번지라고 할 때 배열의 10번째 요소의 주소는 몇 번지인가?

: base + 9 * sizeof(int) = 1036번지

 

3. 다음 배열 중에서 크기가 가장 큰 배열은?

: double array2[10]; (크기 8*10)

 

4. 크기가 10인 배열 two[]를 선언하고 2의 제곱 값들을 저장 (2^0부터 2^9까지), 전체 요소 값 출력

#include <stdio.h>
#include <math.h>

void printarray(int array[10]) {
	for (int i = 0; i < 10; i++) {
		printf("%d ", array[i]);
	}
	printf("\n");
}

int main() {

	int two[10];

	// pow 함수 이용
	for (int i = 0; i < 10; i++) {
		two[i] = pow(2, i);
	}

	// pow 함수 이용 x
	for (int i = 0; i < 10; i++) {
		if (i == 0) two[i] = 1;
		else {
			two[i] = 1;
			for (int j = 1; j <= i; j++) {
				two[i] *= 2;
			}
		}
	}
	printarray(two);
}

pow를 이용하는 게 훨씬 간단하다. 라이브러리를 잘 활용하자..

 

 

 

5. 이름, 나이, 월급 등이 포함된 구조체 person 정의

typedef struct {
	char name[10];
	int age;
	float income;
	char dream[100];
} person;

사람을 이름 나이 월급만으로 나타내기엔 너무 암울한거같아서 dream도 넣어줬다. 꿈은 크게 가지세요.

 

 

6. 복소수 자료형 정의

#include <stdio.h>

typedef struct {
	float real;
	float imag;
} Complex;

int main() {

	Complex c1 = { 1,0 };
	Complex c2 = { 0,1 };

}

 

 

7. 복소수 덧셈 함수

// 6번에서 정의한 구조체를 그대로 이용.

Complex complex_add(Complex a, Complex b) {
	Complex c;
	c.real = a.real + b.real;
	c.imag = a.imag + c.imag;

	return c;
}

 

 

8. 크기가 n인 배열 array에서 임의의 위치 loc에 정수 value를 삽입하는 함수 작성 (원소 갯수 = items, items<n)

#define n 100
#include <stdio.h>

void insert(int array[n], int loc, int value, int items) {

	for (int i = items; i >= loc; i--) {
		array[i + 1] = array[i];
	}
	array[loc] = value;
}

int main() {
	int array[n] = { 1, 2, 3, 4, 5, 6, 7 };
	insert(array, 3, 10, 7);

	for (int i = 0; i <= 7; i++) {
		printf("%d ", array[i]);
	}
}

 

 

10. array의 loc 위치에 있는 정수를 삭제하는 함수 delete()

int* delete(int array[n], int loc, int items) {
	static int temp[n];

	for (int i = 0; i < loc; i++) {
		temp[i] = array[i];
	}

	for (int i = loc + 1; i < items; i++) {
		temp[i - 1] = array[i];
	}

	return temp;
}

 

 

11. 1개의 정수와 크기가 20인 문자열로 이루어진 구조체를 저장할 수 있도록 동적 메모리 할당, 저장, 반납

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	int num;
	char str[20];
} mystruct;

int main() {
	mystruct* s;
	s = (mystruct*)malloc(sizeof(mystruct));
	if (s == NULL) exit(1);

	strcpy(s->str, "just testing");
	s->num = 100;

	free(s);
}