01 책을 나타내는 구조체 book을 선언해서 사용해보자. 책은 제목(title), 저자(author), 분야(subject)를 가지고 있다고 가정한다. {1, "바람과 함께 사라지다", "마가렛 미첼"}의 값을 가지는 구조체 변수를 생성했다가 다시 화면에 출력해보자.
|
1
2
3
4
5
|
struct book {
int id;
char title[100];
char author[20];
};
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
struct book {
int id;
char title[100];
char author[20];
};
int main() {
book b = { 1,"바람과 함께 사라지다","마가렛 미첼" };
printf("{ %d, %s, %s }", b.id, b.title, b.author);
return 0;
}
|
cs |
02 은행계좌를 나타내는 구조체 account를 선언해서 사용해보자. 계좌는 계좌번호(number), 이름(name), 잔액(balance) 등의 정보를 가지고 있다고 하자. {1, "홍길동", 100000}의 값을 가지는 구조체 변수를 생성했다가 다시 화면에 출력해보자.
|
1
2
3
4
5
|
struct account {
int number;
char name[20];
int balance;
};
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
struct account {
int number;
char name[20];
int balance;
};
int main() {
account a = { 1,"홍길동",100000 };
printf("{ %d, %s, %d }", a.number, a.name, a.balance);
return 0;
}
|
cs |
03 구조체를 이용하여 이메일을 표현할 수 있는 구조체를 정의하고, 적당한 초기값을 부여하고 출력하는 프로그램을 작성하라. 구조체의 멤버는 제목(title), 수신자(sender), 발신자(receiver), 내용(content), 날짜(date), 우선순위(pri) 등으로 구성된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h>
struct email {
char title[40];
char sender[40];
char receiver[40];
char content[100];
char date[20];
int pri;
};
int main() {
email e = {
"안부 메일","chulsoo@hankuk.ac.kr",
"hsh@hankuk.ac.kr","안녕하십니까? 별일 없으신지요?",
"2010/9/1",1
};
printf("제목: %s\n", e.title);
printf("수신자: %s\n", e.sender);
printf("발신자: %s\n", e.receiver);
printf("내용: %s\n", e.content);
printf("날짜: %s\n", e.date);
printf("우선순위: %d\n", e.pri);
return 0;
}
|
cs |
04 구조체를 이용하여 복소수를 다음과 같이 정의하고 복소수의 덧셈을 수행하는 함수를 작성하고 테스트하라.
|
1
2
3
4
5
6
|
struct complex {
double real;
double imag;
};
complex complex_add(complex c1, complex c2) { ... }
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <stdio.h>
struct complex {
double real;
double imag;
};
complex complex_add(complex c1, complex c2) {
complex c3;
c3.real = c1.real + c2.real;
c3.imag = c1.imag + c2.imag;
return c3;
}
int main() {
complex c1 = { 1,2 };
complex c2 = { 2,3 };
complex c3 = complex_add(c1, c2);
printf("%lf+%lfi\n", c1.real, c1.imag);
printf("%lf+%lfi\n", c2.real, c2.imag);
printf("%lf+%lfi\n", c3.real, c3.imag);
return 0;
}
|
cs |
05 2차원 평면에서 점은 (x, y) 좌표로 나타낼 수 있다. 따라서 하나의 점은 다음과 같은 point라는 구조체로 정의할 수 있다. 이 point 구조체를 받아서 두 점의 좌표가 일치하면 1을 반환하고 그렇지 않으면 0을 반환하는 함수 int equal(struct point p1, struct point p2)를 작성하고 테스트하라.
|
1
2
3
|
struct point {
int x, y;
};
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
struct point {
int x, y;
};
int equal(point p1, point p2) {
if ((p1.x == p2.x) && (p1.y == p2.y))
return 1;
else
return 0;
}
int main() {
point p1 = { 1,2 };
point p2 = { 3,5 };
if (equal(p1, p2) == 1)
printf("(%d, %d) == (%d, %d)", p1.x, p1.y, p2.x, p2.y);
else
printf("(%d, %d) != (%d, %d)", p1.x, p1.y, p2.x, p2.y);
return 0;
}
|
cs |
06 앞의 문제에서 equal() 함수를 다음과 같이 구조체의 포인터를 받도록 변경하여서 작성하고 테스트하라.
|
1
|
int equal(point* p1, point* p2);
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
struct point {
int x, y;
};
int equal(point* p1, point* p2) {
if ((p1->x == p2->x) && (p1->y == p2->y))
return 1;
else
return 0;
}
int main() {
point p1 = { 1,2 };
point p2 = { 3,5 };
if (equal(&p1, &p2) == 1)
printf("(%d, %d) == (%d, %d)", p1.x, p1.y, p2.x, p2.y);
else
printf("(%d, %d) != (%d, %d)", p1.x, p1.y, p2.x, p2.y);
return 0;
}
|
cs |
07 2차원 공간에 있는 점의 좌표를 받아서 이 점이 속하는 사분면의 번호를 반환하는 함수 int quadrant(struct point p)를 작성하고 테스트하라. 앞의 point 구조체를 사용한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include <stdio.h>
struct point {
int x, y;
};
int quadrant(point p) {
if ((p.x > 0) && (p.y > 0))
return 1;
else if ((p.x < 0) && (p.y > 0))
return 2;
else if ((p.x < 0) && (p.y < 0))
return 3;
else
return 4;
}
int main() {
point p = { -1,2 };
printf("(%d, %d)의 사분면 = %d", p.x, p.y, quadrant(p));
return 0;
}
|
cs |
08 원의 중심을 나타내는데 point 구조체를 사용할 수 있다. 원을 나타내는 circle 구조체를 정의하라. 이 circle 구조체를 받아서 다음과 같은 기능을 하는 함수를 작성하고 테스트하라.
|
1
2
3
4
5
6
7
8
|
struct point {
int x, y;
};
struct circle {
point center;
double radius;
};
|
cs |
(a) 원의 면적을 계산하는 함수 double area(struct circle c)
(b) 원의 둘레를 계산하는 함수 double perimeter(struct circle c)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h>
struct point {
int x, y;
};
struct circle {
point center;
double radius;
};
double area(circle c) {
return 3.14 * c.radius * c.radius;
}
double perimeter(circle c) {
return 2 * 3.14 * c.radius;
}
int main() {
circle c = { { 0,0 },10 };
printf("원의 중심점: %d %d\n", c.center.x, c.center.y);
printf("원의 반지름: %.0lf\n", c.radius);
printf("원의 면적=%lf, 원의 둘레=%lf\n", area(c), perimeter(c));
return 0;
}
|
cs |
(c) typedef을 사용하여 struct circle을 CIRCLE로 정의한 후에 (a)와 (b)를 다시 작성해보자.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
struct point {
int x, y;
};
typedef struct circle {
point center;
double radius;
} CIRCLE;
double area(CIRCLE c) {
return 3.14 * c.radius * c.radius;
}
double perimeter(CIRCLE c) {
return 2 * 3.14 * c.radius;
}
int main() {
CIRCLE c = { {0,0},10 };
printf("원의 중심점: %d %d\n", c.center.x, c.center.y);
printf("원의 반지름: %.0lf\n", c.radius);
printf("원의 면적=%lf, 원의 둘레=%lf\n", area(c), perimeter(c));
return 0;
}
|
cs |
09 각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다. 사용자가 하루 동안 먹은 음식들을 구조체의 배열에 저장하고 하루 동안 먹은 음식의 칼로리를 계산하는 프로그램을 작성하라.
|
1
2
3
4
|
struct food {
char name[100];
int calories;
};
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
struct food {
char name[100];
int calories;
};
int main() {
food food_array[3] = {
{"햄버거",600},{"파스타",700},{"피자",800}
};
int sum = 0;
for (int i = 0; i < 3; i++)
sum += food_array[i].calories;
printf("총 칼로리=%d", sum);
return 0;
}
|
cs |
10 직원을 나타내는 구조체 employee가 사번(정수), 이름(문자열), 전화번호(문자열), 나이(정수) 등으로 구성된다. 구조체의 배열을 선언하고 10명의 데이터로 초기화하라. 이중에서 나이가 20이상 30이하인 직원을 찾아서 출력하도록 하라. typedef을 사용하여서 구조체 타입을 정의해서 사용하라.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <stdio.h>
typedef struct employee {
int num;
char name[20];
char phonenum[15];
int age;
} EMPLOYEE;
int main() {
EMPLOYEE e[10] = {
{1,"홍길동1","010-1111-1111",20},
{2,"홍길동2","010-2222-2222",25},
{3,"홍길동3","010-3333-3333",35},
{4,"홍길동4","010-4444-4444",40},
{5,"홍길동5","010-5555-5555",38},
{6,"홍길동6","010-6666-6666",52},
{7,"홍길동7","010-7777-7777",53},
{8,"홍길동8","010-8888-8888",23},
{9,"홍길동9","010-9999-9999",29},
{10,"홍길동10","010-0000-0000",32},
};
for (int i = 0; i < 10; i++) {
if ((e[i].age >= 20) && (e[i].age <= 30))
printf("이름=%s 나이=%d\n", e[i].name, e[i].age);
}
return 0;
}
|
cs |
11 전화번호부를 구성하기 위하여 이름, 집전화번호, 휴대폰 번호로 구성되는 구조체를 정의한 후에 이 구조체의 배열을 선언하여 전화번호부를 구성한다. 3명의 데이터를 사용자로부터 받아서 저장하여 보라. 사용자로부터 이름을 입력받아서 전화번호를 검색하는 프로그램을 작성하라.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
struct phonebook {
char name[20];
char homenum[15];
char phonenum[15];
};
int main() {
phonebook p[3];
char name[20];
for (int i = 0; i < 3; i++) {
printf("이름을 입력하시오:");
scanf("%s", p[i].name);
printf("집전화번호를 입력하시오:");
scanf("%s", p[i].homenum);
printf("휴대폰번호를 입력하시오:");
scanf("%s", p[i].phonenum);
}
printf("검색할 이름을 입력하시오:");
scanf("%s", name);
for (int i = 0; i < 3; i++) {
if (strcmp(name, p[i].name) == 0) {
printf("집전화번호: %s\n", p[i].homenum);
printf("휴대폰번호: %s\n", p[i].phonenum);
}
}
return 0;
}
|
cs |
12 포커 게임에 사용되는 카드를 구조체 card로 정의하고 52개의 카드를 구조체의 배열로 나타내라. 52개의 카드를 적절한 값으로 초기화하고 값들을 출력하는 프로그램을 작성하라. card 구조체는 다음과 같은 멤버값을 가진다고 가정하라. 먼저 카드의 수는 정수로 표현되며 멤버의 이름은 value라고 하라. value는 1부터 13까지의 값을 가질 수 있다. 카드의 타입은 하나의 문자로 표현되며 멤버의 이름은 suit라고 하라. suit은 'c', 'd', 'h', 's'의 값을 가질 수 있다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <stdio.h>
struct card {
int value;
char suit;
};
int main() {
card c[52];
for (int i = 0; i < 52; i++) {
if (i < 13) {
c[i].value = i + 1;
c[i].suit = 'c';
}
else if (i < 26) {
c[i].value = i - 12;
c[i].suit = 'd';
}
else if (i < 39) {
c[i].value = i - 25;
c[i].suit = 'h';
}
else {
c[i].value = i - 38;
c[i].suit = 's';
}
}
for (int i = 0; i < 52; i++)
printf("%d:%c ", c[i].value, c[i].suit);
printf("계속하려면 아무 키나 누르십시오 . . .\n");
return 0;
}
|
cs |
13 삼각형, 사각형, 원을 동시에 표현할 수 있는 공용체를 설계하라. 삼각형은 밑변과 높이, 사각형은 가로와 세로, 원은 반지름만을 저장하도록 하라. 현재의 공용체가 표현하고 있는 도형의 종류는 열거형 변수를 사용하여 나타낸다. 사용자로부터 도형의 종류와 도형의 데이터를 받아서 저장하여 보자.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
enum shape_type { TRI, RECT, CIRC };
struct shape {
union {
struct {
int base, height;
} tri;
struct {
int width, height;
} rect;
struct {
int radius;
} circ;
} data;
};
int main() {
shape s;
shape_type t;
double area = 0;
printf("도형의 타입을 입력하시오(0, 1, 2): ");
scanf("%d", &t);
switch (t) {
case TRI:
printf("밑변과 높이의 길이를 입력하시오(예를 들어서 100 200):");
scanf("%d %d", &s.data.tri.base, &s.data.tri.height);
area = s.data.tri.base * s.data.tri.height / 2.0;
break;
case RECT:
printf("가로와 세로의 길이를 입력하시오(예를 들어서 100 200):");
scanf("%d %d", &s.data.rect.width, &s.data.rect.height);
area = s.data.rect.width * s.data.rect.height;
break;
case CIRC:
printf("반지름의 길이를 입력하시오(예를 들어서 100):");
scanf("%d", &s.data.circ.radius);
area = 3.14 * s.data.circ.radius * s.data.circ.radius;
break;
}
printf("면적은 %.0lf", area);
return 0;
}
|
cs |
14 데이터베이스의 기능을 하는 간단한 프로그램을 작성하여 보자. 이 프로그램은 mp3와 같은 음악 파일을 관리한다. 사용자는 음악 파일을 추가, 삭제, 출력할 수 있으며 제목을 가지고 특정 곡을 탐색할 수 있다. 사용자 인터페이스는 다음과 같다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
struct music {
char title[50];
char singer[50];
char location[50];
int genre;
};
music m[100];
int index = 0;
void music_add() {
if (index >= 100) {
printf("곡을 추가할 수 없습니다.\n");
return;
}
printf("제목:");
gets_s(m[index].title);
printf("가수:");
gets_s(m[index].singer);
printf("위치:");
gets_s(m[index].location);
printf("장르(0: 가요, 1: 팝, 2:클래식, 3: 영화음악)");
scanf("%d", &m[index].genre);
index++;
}
void music_print() {
for (int i = 0; i < index; i++) {
printf("제목:%s\n", m[i].title);
printf("가수:%s\n", m[i].singer);
printf("위치:%s\n", m[i].location);
printf("장르:%d\n", m[i].genre);
}
}
void music_search() {
char title[50];
printf("제목:");
gets_s(title);
for (int i = 0; i < index; i++) {
if (strcmp(title, m[i].title) == 0) {
printf("가수:%s\n", m[i].singer);
printf("위치:%s\n", m[i].location);
printf("장르:%d\n", m[i].genre);
}
}
}
int main() {
int choice;
while (true) {
printf("====================\n");
printf("1. 추가\n");
printf("2. 출력\n");
printf("3. 검색\n");
printf("4. 종료\n");
printf("====================\n");
printf("정수값을 입력하시오 : ");
scanf("%d", &choice);
getchar();
switch (choice) {
case 1:
music_add();
break;
case 2:
music_print();
break;
case 3:
music_search();
break;
case 4:
return 0;
}
}
}
|
cs |
'C > 쉽게 풀어쓴 C언어 Express' 카테고리의 다른 글
| 쉽게 풀어쓴 C언어 Express 12장 Programming (1) | 2024.02.29 |
|---|---|
| 쉽게 풀어쓴 C언어 Express 11장 Programming (2) | 2024.02.04 |
| 쉽게 풀어쓴 C언어 Express 10장 Programming (0) | 2024.02.02 |
| 쉽게 풀어쓴 C언어 Express 9장 Programming (0) | 2024.01.31 |
| 쉽게 풀어쓴 C언어 Express 8장 Programming (1) | 2024.01.30 |