당신은 주제를 찾고 있습니까 “쉽게 풀어 쓴 c 언어 express 13 장 – C++ struct03 구조체“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 1인개발TV 이(가) 작성한 기사에는 조회수 215회 및 좋아요 4개 개의 좋아요가 있습니다.
쉽게 풀어 쓴 c 언어 express 13 장 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 C++ struct03 구조체 – 쉽게 풀어 쓴 c 언어 express 13 장 주제에 대한 세부정보를 참조하세요
쉽게 풀어 쓴 c 언어 express 13 장 주제에 대한 자세한 내용은 여기를 참조하세요.
쉽게 풀어쓴 C언어 express 연습문제 13장/ 17장(일부) – 블로그
쉽게 풀어쓴 C언어 express 연습문제 13장/ 17장(일부) … (c). struct part{. char name[20];. int num;. int price;. } . 13-09.
Source: blog.naver.com
Date Published: 3/14/2021
View: 6699
쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설 – 문풀이
쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설 쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설 1. (a) #include struct point { int …
Source: tistorysolution.tistory.com
Date Published: 4/30/2022
View: 377
제13장 구조체 – 쉽게 풀어쓴 C언어 Express
struct student { int number; char name[10]; double grade;. }; struct student s1 = { 24, “Kim”, 4.3 };. • 중괄호를 이용하여 초기값을 나열한다. Page 13. © 2012 …
Source: web.yonsei.ac.kr
Date Published: 3/20/2022
View: 1743
쉽게 풀어쓴 C언어 express 13장 구조체 연습문제 시험자료
1번 /* #include #include struct book { int ; char title[100]; char author[20]; }aa; int main() { struct book aa; aa. = 1; …
Source: www.happycampus.com
Date Published: 10/9/2021
View: 352
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
Presentation on theme: “쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.”— Presentation transcript: 1 쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
Source: slidesplayer.org
Date Published: 1/24/2022
View: 6567
C Express 13 2012 All rights reserved ress – SlideToDoc.com
쉽게 풀어쓴 C언어 Express 제 13장 구조체 © 2012 생능출판사 All rights reserved ress p C Ex. 구조체 선언의 예 // x값과 y값으로 이루어지는 화면의 좌표.
Source: slidetodoc.com
Date Published: 1/5/2021
View: 413
주제와 관련된 이미지 쉽게 풀어 쓴 c 언어 express 13 장
주제와 관련된 더 많은 사진을 참조하십시오 C++ struct03 구조체. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 쉽게 풀어 쓴 c 언어 express 13 장
- Author: 1인개발TV
- Views: 조회수 215회
- Likes: 좋아요 4개
- Date Published: 2018. 1. 13.
- Video Url link: https://www.youtube.com/watch?v=-gJMntB4LJw
쉽게 풀어쓴 C언어 express 연습문제 13장/ 17장(일부)
[Exercise]
13-01
struct Customer{
char name[20];
int num;
long mi;
}
struct Customer c1;
13-02
(a) F
(b) F
(c) T
(d) F
(e) T
13-03 (2)
13-04 (1), (3)
13-05 0, 3, 4, 5, 9
13-06 (1), (3), (6), (7), (8)
13-07 공용체에서는 모든 멤버를 한꺼번에 초기화할 수 없기 때문이다.
13-08
(a)
struct book{
char title[30];
int pub_date;
int pages;
int price;
}
(b)
struct friend{
char name[30];
int age;
double height;
}
(c)
struct part{
char name[20];
int num;
int price;
}
13-09
(a) enum primary_color { r, g, b };
(b) enum months { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
13-10
(a)
struct book b;
b.pages=512;
(b)
struct book{
char title[50];
int pages;
};
struct book abook = {“Data Structures”, 577};
(c) typedef enum color { red=1, green, blue };
(d)
struct fration {
int num;
int den;
} s = {3, 5};
struct fration p;
p=&s;
17-01 (3)
17-02
char *p;
p=(char *)malloc(100);
printf(“텍스트를 입력하시오: “);
gets(p);
printf(“입력된 텍스트는 %s입니다.
”, p);
17-03
(a) malloc(), free()
(b) void *
(c) size_t
17-04
(a)
int *pi;
pi = (int *)malloc(sizeof(int)*10);
(b)
char *pi;
pi = (char *)calloc(10, sizeof(char));
(c)
char *pc;
pc = (char *)malloc(10*sizeof(char));
17-05
(a)
double *p;
p=(double *)malloc(sizeof(double));
*p=3.14;
(b)
int *p;
p = (int *)malloc(sizeof(int)*5);
p[0] = 1;
p[1] = 2;
p[2] = 3;
p[3] = 4;
p[4] = 5;
[Programming]
문제 13-1) 책을 나타내는 구조체 book을 선언해서 사용해보자. 책은 id, title, author를 가지고 있다고 가정한다. {1, “바람과 함께 사라지다”, “마가렛 미첼”의 값을 가지는 구조체 변수를 생성했다가 다시 화면에 출력해보자.
#include
#include
typedef struct book {
int id;
char title[100];
char author[20];
}book;
int main() {
book b = { 1,”바람과 함께 사라지다”,”마가렛 미첼” };
printf(“{ %d, %s, %s }”, b.id, b.title, b.author);
}
문제 13-2) 은행계좌를 나타내는 구조체 account를 선언해서 사용해보자. 계좌는 계좌번호, 이름, 잔액 등의 정보를 가지고 있다고 하자. {1, “홍길동”, 100000}의 값을 가지는 구조체 변수를 생성했다가 다시 화면에 출력해보자.
#include
#include
typedef struct account {
int number;
char name[20];
int balance;
}account;
int main() {
account acc = { 1,”홍길동”,100000};
printf(“{ %d, %s, %d }”, acc.number, acc.name, acc.balance);
}
문제 13-3) 구조체를 이용하여 이메일을 표현할 수 있는 구조체를 정의하고, 적당한 초기값을 부여하고 출력하는 프로그램을 작성하라. 구조체의 멤버는 제목, 수신자, 발신자, 내용, 날짜, 우선순위 등으로 구성된다.
#include
#include
typedef struct email {
char title[20];
char receiver[30];
char sender[30];
char content[100];
char date[10];
int pri;
}email;
int main() {
email e = { “안부 메일”,”[email protected]”,”[email protected]”,”안녕하십니까? 별일 없으신지요?”
, “2010/9/1”,1 };
printf(“제목: %s
수신자: %s
발신자: %s
내용: %s
날짜: %s
우선순위: %d
“, e.title, e.receiver, e.sender, e.content, e.date, e.pri);
}
문제 13-4) 구조체를 이용하여 복소수를 다음과 같이 정의하고 복소수의 덧셈을 수행하는 함수를 작성하고 테스트하라.
#include
#include
typedef struct complex {
double real;
double imag;
}complex;
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, c2, c3;
c1.real = 1;
c1.imag = 2;
c2.real = 2;
c2.imag = 3;
c3 = complex_add(c1, c2);
printf(“%lf+%lfi
“, c1.real, c1.imag);
printf(“%lf+%lfi
“, c2.real, c2.imag);
printf(“%lf+%lfi
“, c3.real, c3.imag);
}
문제 13-5) 2차원 평면에서 점은 (x,y) 좌표로 나타낼 수 있다. 따라서 하나의 점은 다음과 같은 point라는 구조체로 정의할 수 있다. 이 point 구조체를 받아서 두 점의 좌표가 일치하면 1을 반환하고 그렇지 않으면 0을 반환하는 함수 int equal(struct point p1, struct point p2)를 작성하고 테스트하라.
#include
#include
typedef struct point {
int x, y;
}point;
int equal(point p1, point p2) {
if (p1.x == p2.x && p1.y == p2.y)
return 1;
else return 0;
}
int main() {
int res;
point p1, p2;
p1.x = 1, p1.y = 2;
p2.x = 3, p2.y = 5;
res = equal(p1, p2);
if (res == 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);
}
문제 13-6) 앞의 문제에서 equal()함수를 다음과 같이 구조체의 포인터를 받도록 변경하여서 작성하고 테스트하라.
#include
#include
typedef struct point {
int x, y;
}point;
int equal(point *p1, point *p2) {
if (p1->x == p2->x && p1->y == p2->y)
return 1;
else return 0;
}
int main() {
int res;
point pp1, pp2;
point *p1 = &pp1;
point *p2 = &pp2;
pp1.x = 1, pp1.y = 2;
pp2.x = 3, pp2.y = 5;
res = equal(p1, p2);
if (res == 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);
}
문제 13-7) 2차원 공간에 있는 점의 좌표를 받아서 이 점이 속하는 사분면의 번호를 반환하는 함수 int quadrant(struct point p)를 작성하고 테스트하라. 앞의 point 구조체를 사용한다.
#include
#include
typedef struct point {
int x, y;
}point;
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 if (p.x > 0 && p.y < 0) return 4; } int main() { int res; point p; p.x = -1, p.y = 2; res = quadrant(p); printf("(%d, %d)의 사분면 = %d", p.x, p.y, res); } 문제 13-8) 원의 중심을 나타내는데 point 구조체를 사용할 수 있다. 원을 나타내는 circle 구조체를 정의하라. 이 circle 구조체를 받아서 다음과 같은 기능을 하는 함수를 작성하고 테스트하라. (a) 원의 면적을 계산하는 함수 double area(struct circle c) (b) 원의 둘레를 계산하는 함수 double perimeter(struct circle c) (c) typedef을 사용하여 struct circle을 CIRCLE로 정의한 후에 (a)와 (b)를 다시 작성해보자. #include
#include
struct point {
int x, y;
};
struct circle {
struct point center;
double radius;
};
double area(struct circle c) {
return c.radius*c.radius*3.14;
}
double perimeter(struct circle c) {
return c.radius*2*3.14;
}
int main() {
struct circle c;
c.center = { 0,0 };
c.radius = 10;
printf(“원의 중심점: %d %d
“, c.center.x, c.center.y);
printf(“원의 반지름: %.0lf
“, c.radius);
printf(“원의 면적=%lf, 원의 둘레=%lf
“,area(c),perimeter(c));
}
#include
#include
struct point {
int x, y;
};
typedef struct circle {
struct point center;
double radius;
}CIRCLE;
double area(CIRCLE c) {
return c.radius*c.radius*3.14;
}
double perimeter(CIRCLE c) {
return c.radius*2*3.14;
}
int main() {
CIRCLE c;
c.center = { 0,0 };
c.radius = 10;
printf(“원의 중심점: %d %d
“, c.center.x, c.center.y);
printf(“원의 반지름: %.0lf
“, c.radius);
printf(“원의 면적=%lf, 원의 둘레=%lf
“,area(c),perimeter(c));
}
문제 13-9) 각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다. 사용자가 하루 동안 먹은 음식들을 입력받아 구조체의 배열에 저장하고 하루 동안 먹은 음식의 칼로리를 계산하는 프로그램을 작성하라.
#include
#include
struct food {
char name[20];
int calories;
};
int main() {
int sum = 0;
struct food food_array[3];
food_array[0] = { “피자”,1000 };
food_array[1] = { “치킨”,500 };
food_array[2] = { “떡볶이”,600 };
for (int i = 0; i < 3; i++) { sum += food_array[i].calories; } printf("총 칼로리=%d", sum); } 문제 13-10) 직원을 나타내는 구조체 employee가 사번, 이름, 전화번호, 나이 등으로 구성된다. 구조체의 배열을 선언하고 10명의 데이터로 초기화하라. 이중에서 나이가 20이상 30이하인 직원을 찾아서 출력하도록 하라. typedef을 사용하여서 구조체 타입을 정의해서 사용하라. #include
#include
typedef struct employee {
int n;
char name[20];
char phone[20];
int age;
}employee;
int main() {
employee e[10];
e[0] = { 1,”홍길동1″,”111″,20 };
e[1] = { 2,”홍길동2″,”112″,21};
e[2] = { 3,”홍길동3″,”113″,32 };
e[3] = { 4,”홍길동4″,”114″,23 };
e[4] = { 5,”홍길동5″,”115″,34 };
e[5] = { 6,”홍길동6″,”116″,25 };
e[6] = { 7,”홍길동7″,”117″,26 };
e[7] = { 8,”홍길동8″,”118″,37 };
e[8] = { 9,”홍길동9″,”119″,28 };
e[9] = { 10,”홍길동10″,”110″,39 };
for (int i = 0; i < 10; i++) { if (e[i].age >= 20 && e[i].age <= 30) { printf("이름=%s 나이=%d ", e[i].name, e[i].age); } } } 문제 13-11) 전화번호부를 구성하기 위하여 이름, 전화번호, 휴대폰 번호로 구성되는 구조체를 정의한 후에 이 구조체의 배열을 선언하여 전화번호부를 구성한다. 3명의 데이터를 사용자로부터 받아서 저장하여 보라. 사용자로부터 이름을 입력받아서 전화번호를 검색하는 프로그램을 작성하라. #include
#include
#include
typedef struct phbook {
char name[20];
char num1[20];
char num2[20];
}phbook;
int main() {
char ch[20];
phbook ph[3];
for (int i = 0; i < 3; i++) { printf("이름을 입력하시오: "); scanf("%s", &ph[i].name); printf("집전화번호를 입력하시오: "); scanf("%s", &ph[i].num1); printf("휴대폰번호를 입력하시오: "); scanf("%s", &ph[i].num2); } printf("검색할 이름을 입력하시오: "); getchar(); gets_s(ch, 20); for (int i = 0; i < 3; i++) { if(strcmp(ch,ph[i].name)==0) printf("집전화번호: %s 휴대폰번호: %s",ph[i].num1,ph[i].num2); } } 문제 13-12) 포커 게임에 사용되는 카드를 구조체 card로 정의하고 52개의 카드를 구조체의 배열로 나타내라. 52개의 카드를 적절한 값으로 초기화하고 값들을 출력하는 프로그램을 작성하라. card 구조체는 다음과 같은 멤버값을 가진다고 가정하라. 먼저 카드의 수는 정수로 표현되며 멤버의 이름은 value라고 하라. value는 1부터 13까지의 값을 가질 수 있다. 카드의 타입은 하나의 문자로 표현되며 멤버의 이름은 suit라고 하라. suit는 ‘c’, ‘d’, ‘h’, ‘s’의 값을 가질 수 있다. #include
#include
#include
typedef struct card {
int value;
char suit;
}card;
int main() {
card c[52];
for (int i = 0; i < 13; i++) { c[i].suit = 'c'; c[i].value = i + 1; } for (int i = 0; i < 13; i++) { c[i+13].suit = 'd'; c[i+13].value = i + 1; } for (int i = 0; i < 13; i++) { c[i + 26].suit = 'h'; c[i + 26].value = i + 1; } for (int i = 0; i < 13; i++) { c[i + 39].suit = 's'; c[i + 39].value = i + 1; } for (int i = 0; i < 52; i++) { printf("%d:%c ", c[i].value, c[i].suit); } } 문제 17-1) 동적 메모리 할당을 이용하여서 사용자로부터 양의 정수들의 합을 구하는 프로그램을 작성하라 사용자로부터 먼저 정수의 개수를 입력받도록 하라. #include
#include
int main() {
int n;
int *k, sum = 0;
printf(“정수의 개수: “);
scanf(“%d”, &n);
k = (int *)malloc(sizeof(int)*n);
for (int i = 0; i < n; i++) { printf("양의 정수를 입력하시오: "); scanf("%d", &k[i]); sum += k[i]; } printf("합은 %d입니다.", sum); } 문제 17-2) 길이가 100인 n개의 문자열을 저장하는데 필요한 동적 메모리를 할당해보자. #include
#include
int main() {
int n;
printf(“문자열의 개수: “);
scanf(“%d”, &n);
char **A = NULL;
printf(“[ “);
if ((A = (char **)malloc(n * sizeof(char *))) != NULL) {
for (int i = 0; i < n; i++) { A[i] = (char *)malloc(100); printf("\"문자열%d\" ", i); } } printf("] "); } 문제 17-3) 동적 메모리 할당을 이용하여서 사용자로부터 받은 주소록을 저장하고 출력하는 프로그램을 작성하라. 사용자로부터 먼저 주소의 개수를 입력받도록 하라. 주소의 많은 정보 중에서 이름과 휴대폰 번호만을 저장하도록 하자. #include
#include
typedef struct Address {
char name[20];
char phone[20];
}Address;
int main() {
int n;
Address *add;
printf(“주소의 개수: “);
scanf(“%d”, &n);
getchar();
add = (Address *)malloc(sizeof(Address)*n);
for (int i = 0; i < n; i++) { printf("이름을 입력하시오: "); gets_s(add[i].name,20); printf("휴대폰 번호를 입력하시오: "); gets_s(add[i].phone, 20); } printf("============================== "); printf("이름 휴대폰 번호 "); printf("============================== "); for (int i = 0; i < n; i++) { printf("%s %s", add[i].name, add[i].phone); } } 문제 17-4) 사용자로부터 단어를 입력받는 공간을 동적 메모리로 할당받아 보자. 단어의 최대 크기는 50이라고 가정한다. 단어의 주소를 반환하는 함수 char *get_word()를 작성하고 테스트한다. #include
#include
char *get_word() {
char *s = (char *)malloc(sizeof(char)*50);
if (s == NULL) {
printf(“메모리 할당 오류
“);
exit(1);
}
printf(“단어를 입력하시오(최대 50글자): “);
scanf(“%s”, s);
return s;
}
int main() {
char *c = get_word();
printf(“동적 메모리에 저장된 단어는 %s 입니다.”, c);
}
쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설
반응형
728×170
쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설
쉽게 풀어 쓴 C언어 Express 13장 프로그래밍 문제 해설
1.
(a)
#include
struct point { int x, y; } ; int equal(struct point p1, struct point p2); int main(void) { struct point p1= { 1, 2 } ; struct point p2= { 3, 5 } ; printf(“일치 여부 = %d “, equal(p1, p2)); return 0; } int equal(struct point p1, struct point p2) { if( p1.x == p2.x && p1.y == p2.y ) return 1; else return 0; }
(b)
#include
struct point { int x, y; } ; int quadrant(struct point p); int main(void) { struct point p= { -1, 2 } ; printf(“사분면 = %d “, quadrant(p)); return 0; } int quadrant(struct 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; } 2. (a) #include
struct point { int x, y; } ; int equal(struct point *p1, struct point *p2); int main(void) { struct point p1= { 1, 2 } ; struct point p2= { 3, 5 } ; printf(“일치 여부 = %d “, equal(&p1, &p2)); return 0; } int equal(struct point *p1, struct point *p2) { if( p1->x == p2->x && p1->y == p2->y ) return 1; else return 0; }
(b)
#include
struct point { int x, y; } ; int quadrant(struct point *p); int main(void) { struct point p= { -1, 2 } ; printf(“사분면 = %d “, quadrant(&p)); return 0; } int quadrant(struct 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; } 3. #include
#include struct point { int x, y; } ; struct rectangle { struct point a, b; // a는 오른쪽 상단, b는 왼쪽 하단을 나타낸다. } ; int area(struct rectangle r); int perimeter(struct rectangle r); int is_square(struct rectangle r); int main(void) { struct point p1= { 1, 1 } ; struct point p2= { 2, 2 } ; struct rectangle r; r.a = p1; r.b = p2; printf(“%d “, area(r)); printf(“%d
“, perimeter(r)); printf(“%d
“, is_square(r)); return 0; } int area(struct rectangle r) { return abs(r.a.x-r.b.x)*abs(r.a.y-r.b.y); } int perimeter(struct rectangle r) { return 2*(abs(r.a.x-r.b.x)+abs(r.a.y-r.b.y)); } int is_square(struct rectangle r) { return abs(r.a.x-r.b.x)==abs(r.a.y-r.b.y); }
4.
#include
struct complex { double real; double imag; } ; struct complex add(struct complex c1, struct complex c2) { struct complex result; result.real = c1.real+c2.real; result.imag = c1.imag+c2.imag; return result; } struct complex sub(struct complex c1, struct complex c2) { struct complex result; result.real = c1.real+c2.real; result.imag = c1.imag+c2.imag; return result; } struct complex mul(struct complex c1, struct complex c2) { struct complex result; result.real = c1.real*c2.real-c1.imag*c2.imag; result.imag = c1.real*c2.imag+c1.imag*c2.real; return result; } void print(struct complex c) { printf(“%f+%fi “, c.real,c.imag); } int main(void) { struct complex c1= { 1.0, 2.0 } ; struct complex c2= { 2.0, 3.0 } ; struct complex c3; c3= add(c1, c2); print(c3); return 1; }
5.
#include
#include struct vector { double x; double y; } ; struct vector vector_add(struct vector v1, struct vector v2) { struct vector r; r.x = v1.x + v2.x; r.y = v1.y + v2.y; return r; } void vector_print(struct vector v) { printf(“(%f, %f) “, v.x, v.y); } int main(void) { struct vector v1= { 1.0, 2.0 } ; struct vector v2= { 2.0, 3.0 } ; struct vector v3; v3 = vector_add(v1, v2); vector_print(v3); return 0; }
6.
#include
#include struct email { char title[100]; char receiver[50]; char sender[50]; char content[1000]; char date[100]; int priority; } ; int main(void) { struct email e; strcpy(e.title, “안부 메일”); strcpy(e.receiver, “[email protected]”); strcpy(e.sender, “[email protected]”); strcpy(e.content, “안녕하십니까? 별일 없으신지요?”); strcpy(e.date, “2010/9/1”); e.priority = 1; return 0; } 7.
#include
#include struct food { char name[100]; int calories; } ; int calc_total_calroies(struct food array[], int size); int main(void) { struct food food_array[3]= { { “hambuger”, 900 } , { “bulgogi”, 500 } , { “sushi”, 700 } } ; int total = calc_total_calroies(food_array, 3); printf(“%d “, total); return 0; } int calc_total_calroies(struct food array[], int size) { int i, total=0; for (i=0;i
#include // 직원 struct employee { int number; // 사번 char name[20]; // 이름 int age; // 나이 char tel[20]; // 전화번호 } ; int main(void) { struct employee e[10] = { { 1, “홍길동1”, 20, “111-1111” } , { 2, “홍길동2”, 25, “111-1112” } , { 3, “홍길동3”, 60, “111-1113” } , { 4, “홍길동4”, 40, “111-1114” } , { 5, “홍길동5”, 50, “111-1115” } , { 6, “홍길동6”, 45, “111-1116” } , { 7, “홍길동7”, 32, “111-1117” } , { 8, “홍길동8”, 23, “111-1118” } , { 9, “홍길동9”, 29, “111-1119” } , { 10, “홍길동10”, 62, “111-1120” } } ; int i; for (i=0;i<10;i++) if( e[i].age >= 20 && e[i].age <= 30 ) printf("%s ", e[i].name); return 0; } 9. #include #include struct contact { char name[100]; char home_phone[100]; char cell_phone[100]; } ; int main(void) { struct contact list[5]; int i; char name[100]; for (i=0;i<5;i++) { printf("이름을 입력하시오:"); scanf("%s", list[i].name); printf("집전화번호를 입력하시오:"); scanf("%s", list[i].home_phone); printf("휴대폰번호를 입력하시오:"); scanf("%s", list[i].cell_phone); } printf("검색할 이름을 입력하시오:"); scanf("%s", name); for (i=0;i<5;i++) { if( strcmp(name, list[i].name)==0 ) { printf("집전화번호: %s ", list[i].home_phone); printf("휴대폰번호: %s ", list[i].cell_phone); return 0; } } printf("검색이 실패하였슴 "); return 0; } 10. #include #include struct card { int value; char suit; } ; int main(void) { struct card cards[52]; int i; for (i=0;i<13;i++) { cards[i].value=i%13+1; cards[i].suit='c'; } for (i=0;i<13;i++) { cards[i+13].value=i%13+1; cards[i+13].suit='d'; } for (i=0;i<13;i++) { cards[i+26].value=i%13+1; cards[i+26].suit='h'; } for (i=0;i<13;i++) { cards[i+39].value=i%13+1; cards[i+39].suit='s'; } for (i=0;i<52;i++) { printf("%d:%c ", cards[i].value, cards[i].suit); } return 0; } 15. #include #include enum shape_type { TRIANGLE, RECTANGLE, CIRCLE } ; struct shape { int type; union { struct { int base, height; } tri; struct { int width, height; } rect; struct { int radius; } circ; } p; } ; int main(void) { struct shape s; enum shpae_type type; printf(“도형의 타입을 입력하시오(0, 1, 2): “); scanf(“%d”, &type); switch(type) { case TRIANGLE: printf(“밑변과 반지름을 입력하시오(예를 들어서 100 200): “); scanf(“%d %d”, &s.p.tri.base, &s.p.tri.height); printf(“면적은 %d “, (int)(0.5*s.p.tri.base*s.p.tri.height)); break; case RECTANGLE: printf(“가로와 세로의 길이를 입력하시오(예를 들어서 100 200):”); scanf(“%d %d”, &s.p.rect.width, &s.p.rect.height); printf(“면적은 %d
“, (int)(s.p.rect.width*s.p.rect.height)); break; case CIRCLE: printf(“반지름을 입력하시오(예를 들어서 100): “); scanf(“%d”, &s.p.circ.radius); printf(“면적은 %d
“, (int)(3.14*s.p.circ.radius*s.p.circ.radius)); break; } return 0; }
18.
#include
#include #define TITLE_SIZE 50 #define NAME_SIZE 50 #define LOCATION_SIZE 50 enum music_type { KPOP, POP, CLASSIC, SCREEN_MUSIC } ; typedef struct music { char title[TITLE_SIZE]; char singer[NAME_SIZE]; char location[LOCATION_SIZE]; enum music_type genre; } MUSIC; void add_record(MUSIC library[], int count); void menu(); int get_input(); void search_record(MUSIC library[], int count); void print_record(MUSIC library[], int count); int main(void) { int num, count = 0; MUSIC library[30] = { ‘\0’ } ; while(1) { menu(); num = get_input(); switch(num) { case 1: add_record(library, count); count++; continue; case 2: print_record(library, count); continue; case 3: search_record(library, count); continue; case 4: return -1; } return 0; } } void add_record(MUSIC library[], int count) { int type; fflush(stdin); printf(“제목:”); gets(library[count].title); printf(“가수:”); gets(library[count].singer); printf(“위치:”); gets(library[count].location); printf(“장르(0: 가요, 1: 팝, 2: 클래식, 3: 영화음악)”); scanf(“%d”,&type); if(type >= KPOP && type <= SCREEN_MUSIC) library[count].genre = type; else library[count].genre = KPOP; } void menu() { printf("==================== "); printf(" 1. 추가 "); printf(" 2. 출력 "); printf(" 3. 검색 "); printf(" 4. 종료 "); printf("==================== "); } int get_input() { int num; printf("정수값을 입력하시오 : "); scanf("%d",&num); return num; } void search_record(MUSIC library[], int count) { int i; char title[TITLE_SIZE]; fflush(stdin); printf("제목: "); gets(title); for (i = 0; i < count; i++) { if(strcmp(title,library[i].title) == 0) { printf("저장된 위치는 %s ",library[i].location); return; } } printf("찾는 음악이 테이블에 없습니다. "); } void print_record(MUSIC library[], int count) { int i; fflush(stdin); for (i = 0; i < count; i++) { printf("제목 : %s ",library[i].title); printf("가수 : %s ",library[i].singer); printf("위치 : %s ",library[i].location); if(library[i].genre == 0) printf("장르 : 가요 "); else if(library[i].genre == 1) printf("장르 : 팝 "); else if(library[i].genre == 2) printf("장르 : 클래식 "); else if(library[i].genre == 3) printf("장르 : 영화음악 "); } } 반응형 그리드형
쉽게 풀어쓴 C언어 express 13장 구조체 연습문제 시험자료
파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우
다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함)
인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우
자료의 설명과 실제 자료의 내용이 일치하지 않는 경우
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
Presentation on theme: “쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.”— Presentation transcript:
1 쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express
2 구조체는 서로 다른 데이터들을 하나로 묶는 중요한 도구입니다.
이번 장에서 학습할 내용 구조체는 서로 다른 데이터들을 하나로 묶는 중요한 도구입니다. 구조체 구조체와 포인터 공용체 열거형 typedef
3 자료형의 분류 기본 자료형: char, int, float, double, … 자료형
파생 자료형: 배열, 구조체, 공용체, …
4 구조체를 사용하면 변수들을 하나로 묶을 수 있습니다.
구조체의 필요성 학생 데이터를 하나로 묶어서 처리하려면? 구조체를 사용하면 변수들을 하나로 묶을 수 있습니다. int number; char name[10]; double grade;
5 구조체와 배열 구조체(structure): 레코드(record) 같은 타입의 집합 다른 타입의 집합
6 구조체 선언 구조체 선언 형식 struct student { int number; char name[10];
태그(tag): 이름 구조체 선언 형식 struct 태그 { 자료형 멤버1; 자료형 멤버2; … }; struct student { int number; char name[10]; double grade; }; 멤버(필드)
7 구조체 선언의 예 // x, y값으로 이루어지는 화면의 좌표 struct point { int x; // x 좌표
int y; // y 좌표 }; // 직사각형 struct rect { int x, y; int width, height; }; // 복소수 struct complex { double real; // 실수부 double imag; // 허수부 }; // 직원 struct employee { char name[20]; // 이름 int age; // 나이 int sex; // 성별 int salary; // 월급 }; // 날짜 struct date { int month; int day; int year; };
8 구조체 변수 선언 구조체 정의(선언)와 구조체 변수 선언은 다름 구조체 정의: 사용자 정의 자료형 선언
9 구조체의 초기화 중괄호를 이용하여 초깃값 나열 struct student { int number; char name[10];
double grade; }; struct student s1 = { 24, “Kim”, 4.3 };
10 구조체 멤버 참조 구조체 멤버 참조 연산자: . struct student { int number; char name[10];
구조체 멤버 참조 연산자: . struct student { int number; char name[10]; double grade; }; struct student s1; s1.number = 24; strcpy(s1.name, “Kim”); s1.grade = 4.3;
11 예제 #include
#include struct student { int number; char name[10]; double grade; }; int main(void) { struct student s; s.number = ; strcpy(s.name, “홍길동”); s.grade = 4.3; printf(“학번: %d
“, s.number); printf(“이름: %s
“, s.name); printf(“학점: %f
“, s.grade); return 0; } 학번: 이름: 홍길동 학점:
12 예제 #include
struct student { int number; char name[10]; double grade; }; int main(void) { struct student s; printf(“학번을 입력하시오: “); scanf(“%d”, &s.number); printf(“이름을 입력하시오: “); scanf(“%s”, s.name); printf(“학점을 입력하시오(실수): “); scanf(“%lf”, &s.grade); printf(“학번: %d
“, s.number); printf(“이름: %s
“, s.name); printf(“학점: %f
“, s.grade); return 0; } 학번을 입력하시오: 이름을 입력하시오: 홍길동 학점을 입력하시오(실수): 4.3 학번: 이름: 홍길동 학점:
13 예제 #include
#include struct point { int x, y; }; int main(void) { struct point p1, p2; int xdiff, ydiff; double dist; printf(“점의 좌표를 입력하시오(x y): “); scanf(“%d %d”, &p1.x, &p1.y); scanf(“%d %d”, &p2.x, &p2.y); xdiff = p1.x – p2.x; ydiff = p1.y – p2.y; dist = sqrt(xdiff * xdiff + ydiff * ydiff); printf(“두 점 사이의 거리는 %f입니다.
“, dist); return 0; } 점의 좌표를 입력하시오(x y): 10 10 점의 좌표를 입력하시오(x y): 20 20 두 점 사이의 거리는 입니다. p2 (x,y) p1 (x,y)
14 구조체 중첩 number name dob grade s1 struct date { int month; int day;
int year; }; number name dob grade month day year s1 struct student { int number; char name[10]; struct date dob; // 구조체 안에 구조체 포함 double grade; }; struct student s1; s1.dob.month = 3; s1.dob.day = 29; s1.dob.year = 1983;
15 예제 x y #include
struct point { int x, y; }; struct rect { struct point p1, p2; }; int main(void) { struct rect r; int w, h, area, peri; printf(“왼쪽 상단의 좌표를 입력하시오: “); scanf(“%d %d”, &r.p1.x, &r.p1.y); printf(“오른쪽 하단의 좌표를 입력하시오: “); scanf(“%d %d”, &r.p2.x, &r.p2.y); w = r.p2.x – r.p1.x; h = r.p2.y – r.p1.y; area = w * h; peri = 2 * (w + h); printf(“면적은 %d이고 둘레는 %d입니다.
“, area, peri); return 0; } 왼쪽 상단의 좌표를 입력하시오: 1 1 오른쪽 하단의 좌표를 입력하시오: 6 6 면적은 25이고 둘레는 20입니다. x y
16 구조체 변수의 대입과 비교 같은 타입의 구조체 변수끼리 대입은 가능하지만 비교는 불가능
struct point { int x, y; }; int main(void) { struct point p1 = { 10, 20 }; struct point p2 = { 30, 40 }; p2 = p1; // 대입 가능 if (p1 == p2) // 비교 불가능 컴파일 오류!! printf(“p1과 p2가 같습니다.”); if (p1.x == p2.x && p1.y == p2.y) // 올바른 비교 return 0; }
17 구조체 배열 구조체 배열의 선언 구조체 배열의 초기화 struct student { int number;
char name[10]; double grade; }; struct student list[3]; list[1].number = 24; strcpy(list[1].name, “Kim”); list[1].grade = 4.3; 구조체 배열의 초기화 struct student list[3] = { { 25, “Mun”, 3.92 }, { 24, “Kim”, 4.3 }, { 23, “Tim”, 2.9 } };
18 예제 #include
#define SIZE 3 struct student { int number; char name[20]; double grade; }; int main(void) { struct student list[SIZE]; int i; for (i = 0; i < SIZE; i++) { printf("학번을 입력하시오: "); scanf("%d", &list[i].number); printf("이름을 입력하시오: "); scanf("%s", list[i].name); printf("학점을 입력하시오(실수): "); scanf("%lf", &list[i].grade); } for (i = 0; i < SIZE; i++) printf("학번: %d, 이름: %s, 학점: %f ", list[i].number, list[i].name, list[i].grade); return 0; 학번을 입력하시오: 이름을 입력하시오: 홍길동 학점을 입력하시오(실수): 4.3 학번을 입력하시오: 이름을 입력하시오: 김유신 학점을 입력하시오(실수): 3.92 학번을 입력하시오: 이름을 입력하시오: 이성계 학점을 입력하시오(실수): 2.87 학번: , 이름: 홍길동, 학점: 학번: , 이름: 김유신, 학점: 학번: , 이름: 이성계, 학점: 19 구조체를 가리키는 포인터 구조체를 가리키는 포인터 n p ptr … struct student { int number; char name[10]; double grade; }; struct student s = { , "홍길동", 4.3 }; struct student *p = &s; printf("학번=%d ,이름=%s, 학점=%f ", s.number, s.name, s.grade); printf("학번=%d, 이름=%s, 학점=%f ", (*p).number, (*p).name, (*p).grade); ptr … 3 4 p n int n = 3; struct s { int *ptr; … } p; p.ptr = &n; *p.ptr = 4; // *(p.ptr) = 4; n = 4; 20 -> 연산자 -> : 포인터로 구조체 멤버를 참조할 때 사용 (*p).member p->member
#include
struct student { int number; char name[20]; double grade; }; int main(void) { struct student s = { , “홍길동”, 4.3 }; struct student *p = &s; printf(“학번=%d, 이름=%s, 학점=%f “, s.number, s.name, s.grade); printf(“학번=%d, 이름=%s, 학점=%f
“, (*p).number, (*p).name, (*p).grade); printf(“학번=%d ,이름=%s, 학점=%f
“, p->number, p->name, p->grade); return 0; } 학번= , 이름=홍길동, 학점=
21 포인터 멤버를 가지는 구조체 number name grade dob s #include
struct date { int month, day, year; }; struct student { int number; char name[20]; double grade; struct date *dob; }; int main(void) { struct date d = { 3, 20, 1980 }; struct student s = { , “Kim”, 4.3, &d }; // s.dob = &d; printf(“학번: %d
“, s.number); printf(“이름: %s
“, s.name); printf(“학점: %f
“, s.grade); printf(“생년월일: %d년 %d월 %d일
“, s.dob->year, s.dob->month, s.dob->day); return 0; } number name grade dob month day year s 학번: 이름: Kim 학점: 생년월일: 1980년 3월 20일
22 구조체와 함수 구조체를 함수의 인자로 전달하는 경우 복사본 전달 구조체가 크면 시간과 메모리 측면에서 비효율적
구조체의 포인터를 함수의 인자로 전달하는 경우 시간과 메모리 절약 가능 원본 훼손 가능 읽기만 하고 변경하지 않는 경우: const 선언 int f(struct student s) { … } int f(struct student *p) { … } int f(const struct student *p) { … } 포인터를 통한 구조체 변경 방지
23 구조체 인자와 구조체 반환 #include
struct vector { float x, y; }; struct vector get_vector_sum(struct vector a, struct vector b); int main(void) { struct vector a = { 2.0F, 3.0F }, b = { 5.0F, 6.0F }, sum; sum = get_vector_sum(a, b); printf(“벡터의 합은 (%f, %f)입니다.
“, sum.x, sum.y); return 0; } struct vector get_vector_sum(struct vector a, struct vector b) { struct vector result; result.x = a.x + b.x; result.y = a.y + b.y; return result; 벡터의 합은 ( , )입니다.
24 구조체 포인터 인자 #include
void vector_input(struct vector *p) { struct vector { float x, y; }; printf(“벡터 입력: “); scanf(“%f %f”, &p->x, &p->y); void vector_input(struct vector *p); void vector_output(const struct vector *p); void vector_output(const struct vector *p) { int main(void) { printf(“(%g, %g)”, p->x, p->y); struct vector v; vector_input(&v); vector_output(&v); return 0; } 벡터 입력: (1.2, 3.4)
25 구조체 포인터 반환 #include
} struct vector { float x, y; }; struct vector *vector_input(struct vector *p) { struct vector *vector_input(struct vector *p); printf(“벡터 입력: “); scanf(“%f %f”, &p->x, &p->y); void vector_output(const struct vector *p); return p; int main(void) { void vector_output(const struct vector *p) { struct vector v; vector_output(vector_input(&v)); printf(“(%g, %g)”, p->x, p->y); return 0; 벡터 입력: (1.2, 3.4)
26 인자 전달: 배열과 구조체 배열 인자: 포인터로 전달(원본 전달) 구조체: 복사본 전달
void f(int ary[ ]) { ++ary[0]; } // void f(int *ary) { ++*(ary + 0); } … int a[3] = { 10, 20, 30 }; f(a); // a[0]: 11 struct s_array { int a[3]; }; void f(struct s_array sa) { ++sa.a[0]; } … struct s_array s = { { 10, 20, 30 } }; f(s); // s.a[0]: 10
27 공용체 공용체(union) 같은 메모리 영역을 멤버들이 공유 공용체 선언 및 사용 방법은 구조체와 유사
union example { char c; // 메모리 공유 int i; // 메모리 공유 }; 공용체는 첫째 멤버로만 초기화 가능 union u_tag { float v; char *s; }; union u_tag u = 3.4F; // O union u_tag u = “name”; // X
28 예제 #include
union example { char c; int i; }; int main(void) { union example v; v.c = ‘A’; printf(“v.c = %c
“, v.c); v.i = 10000; printf(“v.i = %d
“, v.i); return 0; } v c A i 10000 v.c = A v.i = 10000
29 IP 주소 예제 (little endian) (big endian) (little endian) (big endian)
#include
union ip_address { unsigned char saddr[4]; unsigned int iaddr; }; int main(void) { union ip_address addr = { 0x7F, 0x00, 0x00, 0x01 }; printf(“%08X “, addr.iaddr); return 0; } addr saddr 7F 00 01 iaddr F (little endian) addr saddr 7F 00 01 iaddr 7F (big endian) F (little endian) 7F000001 (big endian)
30 공용체 활용 예제 #include
// variable types #define INT 1 #define REAL 2 #define STR 3 struct s_var { // variable structure char *name; int type; union { // value int ival; double rval; char *sval; } u; }; void out_var(const struct s_var *p); int main() { struct s_var v; v.name = “n”; v.type = INT; v.u.ival = 1; out_var(&v); v.name = “r”; v.type = REAL; v.u.rval = 3.4; out_var(&v); v.name = “s”; v.type = STR; v.u.sval = “C Language”; out_var(&v); return 0; } void out_var(const struct s_var *p) { printf(“%s: “, p->name); switch (p->type) { case INT: printf(“INT, %d “, p->u.ival); break; case REAL: printf(“REAL, %g
“, p->u.rval); break; case STR: printf(“STR, %s
“, p->u.sval); break; default: printf(“unknown type
“); break; } } n: INT, 1 r: REAL, 3.4 s: STR, C Language
31 구조체와 공용체의 크기 정렬 제한 조건(alignment constraint) 자료형 short(2B) int(4B)
float(4B) double(8B) 메모리 위치 2의 배수 4의 배수 4/8의 배수 // anonymous structure struct { char c; int n; } s; sizeof s : 8 union { char c; int n; } u; sizeof u : 4 c n c n struct { char a; char b; int n; } s; sizeof s : 8 struct { char a; int n; char b; } s; sizeof s : 12 a b n a n b
32 열거형 열거형(enumeration type): 정수형 상수 심볼 정의
enum days { SUN, MON, TUE, WED, THU, FRI, SAT }; // 0, 1, 2, 3, 4, 5, 6 태그 이름 정수형 상수 심볼 열거형 변수 enum days today; today = SUN; // today = 0; printf(“%d
“, MON); // 1 #define SUN 0 #define MON 1 … #define SAT 6
33 열거형 기호 상수(symbolic constant) 정의 #define보다 편리하고 오류 가능성이 적음
literal을 사용하는 것보다 가독성이 좋고 수정이 용이 #define보다 편리하고 오류 가능성이 적음 자동으로 연속된 값 설정 가능 블록 구조 적용 단점: 정수형 상수만 정의 가능 #define PI // O #define UNIV “SKHU” // O enum { PI = 3.14 }; // X enum { UNIV = “SKHU” }; // X #define INT 1 #define REAL 2 #define STR 3 // anonymous enum enum { INT = 1, REAL, STR }; // , , 3
34 열거형 literal #define 열거형 switch (code) { case 1: printf(“LCD TV
“);
break; case 2: printf(“PDP TV
“); } #define LCD 1 #define PDP 2 case LCD: case PDP: enum { LCD, PDP }; 기억하기 어렵고, 가독성이 나쁘며, 수정이 어려움 실수 가능성이 있고, 블록 구조가 적용되지 않음 #define PDP 1 실수 가능성이 적고, 블록 구조가 적용됨 정수형만 가능
35 열거형 초기화 enum { E0, E1 = 3, E2 }; // E0 = 0, E1 = 3, E2 = 4
enum { C1 = ‘A’, C2, C3 }; // C1 = ‘A’, C2 = ‘B’, C3 = ‘C’ enum Colors { Red = 0xFF << 16, Green = 0xFF << 8, Blue = 0xFF }; enum Boolean { FALSE, TRUE }; enum levels { low = 1, medium, high }; enum CarTypes { sedan, suv, sports_car, van, pickup, convertible }; 36 예제 #include
enum days { SUN, MON, TUE, WED, THU, FRI, SAT }; char *days_name[ ] = { “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday” }; int main(void) { enum days d = WED; printf(“%d번째 요일은 %s입니다
“, d, days_name[d]); return 0; } 3번째 요일은 Wednesday입니다
37 typedef typedef: 기존 자료형에 새로운 타입 이름 부여 typedef old_type new_type;
typedef unsiged char BYTE; BYTE index; // unsigned char index; typedef int INT32; typedef unsigned int UINT32; INT32 i; // int i; UINT32 k; // unsigned int k; struct point { int x, y; }; typedef struct point POINT; POINT a, b; // struct point a, b; typedef struct { int x, y; } POINT; POINT a, b; // struct { int x, y; } a, b;
38 예제 #include
typedef struct { int x, y; } POINT; POINT move(POINT p, POINT delta); int main(void) { POINT p = { 2, 3 }, delta = { 10, 10 }, result; result = move(p, delta); printf(“새로운 점의 좌표는 (%d, %d)입니다.
“, result.x, result.y); return 0; } POINT move(POINT p, POINT delta) { POINT new_p = { p.x + delta.x, p.y + delta.y }; return new_p; 새로운 점의 좌표는 (12, 13)입니다.
39 typedef 이식성(portability) 향상 #define은 블록 구조가 적용되지 않고, 타입 정의 기능이 제한적임
기계 독립적인 코드 작성 가능 typedef unsigned long size_t; #define은 블록 구조가 적용되지 않고, 타입 정의 기능이 제한적임 문서화 기능 별도의 주석 없이도 자체적으로 설명력이 있음 가독성 향상 // int: 2B, long: 4B 인 경우 typedef long INT32; // 4B 정수형 // int: 4B, long: 8B 인 경우 typedef int INT32; // 4B 정수형 #define INT32 int INT32 n; // int n; #define String char * String s1, s2; // char * s1, s2; // s1: char *, s2: char typedef char *String; String s1, s2; // char *s1, *s2; // s1: char *, s2: char * typedef int Height; Height h1, h2; typedef int Weight; Weight w1, w2;
40 예제 #include
typedef struct { int number; char name[20]; double grade; } Student; Student LIST[ ] = { { , “홍길동”, 4.2 }, { , “김철수”, 3.2 }, { , “김영희”, 3.9 } }; int main(void) { Student *best = LIST; Student *p = LIST + 1; Student *end = LIST + (sizeof LIST / sizeof LIST[0]); for ( ; p < end; p++) if (p->grade > best->grade) best = p; printf(“수석: %s, %d, %g
“, best->name, best->number, best->grade); return 0; } 수석: 홍길동, , 4.2
C Express 13 2012 All rights reserved ress
쉽게 풀어쓴 C언어 Express 제 13장 구조체 © 2012 생능출판사 All rights reserved ress p C Ex
구조체 선언의 예 // x값과 y값으로 이루어지는 화면의 좌표 struct point { int x; // x 좌표 int y; // y 좌표 }; // 복소수 struct complex { double real; double imag; }; // 실수부 // 허수부 // 날짜 struct date { int month; int day; int year; }; © 2012 생능출판사 All rights reserved // 사각형 struct rect { int x; int y; int width; int grade; }; // 직원 struct employee { char name[20]; int age; int gender; int salary; }; // 이름 // 나이 // 성별 // 월급
구조체의 초기화 · 중괄호를 이용하여 초기값을 나열한다. struct student { int number; char name[10]; double grade; }; struct student s 1 = { 24, “Kim”, 4. 3 }; © 2012 생능출판사 All rights reserved
예제 #1 … struct student { int number; char name[10]; double grade; }; int main(void) { struct student s; 구조체 선언 구조체 변수 선언 구조체 멤버 참조 s. number = 20070001; strcpy(s. name, “홍길동”); s. grade = 4. 3; printf(“학번: %dn”, s. number); printf(“이름: %sn”, s. name); printf(“학점: %fn”, s. grade); return 0; } 학번: 20070001 : 홍길동 All rights reserved © 이름 2012 생능출판사 학점: 4. 300000
예제 #3 #include
struct point { int x; int y; }; 점의 좌표를 입력하시오(x y): 10 10 점의 좌표를 입력하시오(x y): 20 20 두 점사이의 거리는 14. 142136입니다. p 2 (x, y) int main(void) { struct point p 1, p 2; int xdiff, ydiff; double dist; printf(“점의 좌표를 입력하시오(x y): “); scanf(“%d %d”, &p 1. x, &p 1. y); printf(“점의 좌표를 입력하시오(x y): “); scanf(“%d %d”, &p 2. x, &p 2. y); xdiff = p 1. x – p 2. x; ydiff = p 1. y – p 2. y; dist = sqrt(xdiff * xdiff + ydiff * ydiff); } printf(“두 점사이의 거리는 %f입니다. n”, dist); return 0; © 2012 생능출판사 All rights reserved p 1 (x, y) 구조체를 멤버로 가지는 구조체 struct date { int year; int month; int day; }; // 구조체 선언 struct student { int number; char name[10]; struct date dob; double grade; }; struct student s 1; // 구조체 선언 s 1. dob. year = 1983; s 1. dob. month = 03; s 1. dob. day = 29; © 2012 생능출판사 All rights reserved // 구조체 안에 구조체 포함 // 구조체 변수 선언 // 멤버 참조
예제 #include
struct point { int x; int y; }; struct rect { struct point p 1; struct point p 2; }; int main(void) { struct rect r; int w, h, area, peri; © 2012 생능출판사 All rights reserved 구조체 배열 · 구조체 배열의 선언 struct student { int number; char name[20]; double grade; }; int main(void) { struct student list[100]; // 구조체의 배열 선언 } list[2]. number = 27; strcpy(list[2]. name, “홍길동”); list[2]. grade = 178. 0; © 2012 생능출판사 All rights reserved
구조체 배열의 초기화 · 구조체 배열의 초기화 struct student list[3] = { { 1, “Park”, 172. 8 }, { 2, “Kim”, 179. 2 }, { 3, “Lee”, 180. 3 } }; © 2012 생능출판사 All rights reserved
구조체를 가리키는 포인터 · 구조체를 가리키는 포인터 struct student *p; struct student s = { 20070001, “홍길동”, 4. 3 }; struct student *p; p = &s; printf(“학번=%d 이름=%s 학점=%f n”, s. number, s. name, s. grade); printf(“학번=%d 이름=%s 학점=%f n”, (*p). number, (*p). name, (*p). grade); © 2012 생능출판사 All rights reserved
-> 연산자 · -> 연산자는 구조체 포인터로 구조체 멤버를 참조할 때 사용 struct student *p; struct student s = { 20070001, “홍길동”, 180. 2 }; struct student *p; p = &s; printf(“학번=%d 이름=%s 키=%f n”, s. number, s. name, s. grade); printf(“학번=%d 이름=%s 키=%f n”, (*p). number, (*p). name, (*p). grade); printf(“학번=%d 이름=%s 키=%f n”, p->number, p->name, p->grade); © 2012 생능출판사 All rights reserved
-> 연산자 == © 2012 생능출판사 All rights reserved
예제 // 포인터를 통한 구조체 참조 #include
struct student { int number; char name[20]; double grade; }; 학번=20070001 이름=홍길동 학점=4. 300000 int main(void) { struct student s = { 20070001, “홍길동”, 4. 3}; struct student *p; p = &s; printf(“학번=%d 이름=%s 키=%f n”, s. number, s. name, s. grade); printf(“학번=%d 이름=%s 키=%f n”, (*p). number, (*p). name, (*p). grade); printf(“학번=%d 이름=%s 키=%f n”, p->number, p->name, p->grade); } return 0; © 2012 생능출판사 All rights reserved 포인터를 멤버로 가지는 구조체 struct date { int month; int day; int year; }; struct student { int number; char name[20]; double grade; struct date *dob; }; © 2012 생능출판사 All rights reserved
포인터를 멤버로 가지는 구조체 int main(void) { struct date d = { 3, 20, 1980 }; struct student s = { 20070001, “Kim”, 4. 3 }; 학번: 20070001 이름: Kim 학점: 4. 300000 생년월일: 1980년 3월 20일 s. dob = &d; printf(“학번: %dn”, s. number); printf(“이름: %sn”, s. name); printf(“학점: %fn”, s. grade); printf(“생년월일: %d년 %d월 %d일n”, s. dob->year, s. dob->month, s. dob>day); return 0; } © 2012 생능출판사 All rights reserved
구조체를 반환하는 경우 · 복사본이 반환된다. struct student make_student(void) { struct student s; printf(“나이: “); scanf(“%d”, &s. age); printf(“이름: “); scanf(“%s”, s. name); printf(“키: “); scanf(“%f”, &s. grade); return s; } © 2012 생능출판사 All rights reserved 구조체 s의 복사본 이 반환된다.
예제 #include
struct vector { float x; float y; }; struct vector get_vector_sum(struct vector a, struct vector b); int main(void) { struct vector a = { 2. 0, 3. 0 }; struct vector b = { 5. 0, 6. 0 }; struct vector sum; sum = get_vector_sum(a, b); printf(“벡터의 합은 (%f, %f)입니다. n”, sum. x, sum. y); } return 0; © 2012 생능출판사 All rights reserved 예제 struct vector get_vector_sum(struct vector a, struct vector b) { struct vector result; result. x = a. x + b. x; result. y = a. y + b. y; } return result; 벡터의 합은 (7. 000000, 9. 000000)입니다. © 2012 생능출판사 All rights reserved
예제 #include
union example { int i; char c; }; int main(void) { union example v; 공용체 선언 공용체 변수 선언. char 형으로 참조. v. c = ‘A’; printf(“v. c: %c v. i: %in”, v. c, v. i ); v. i = 10000; printf(“v. c: %c v. i: %in”, v. c, v. i); } v. c: A v. i: 65 v. c: �v. i: 10000 © 2012 생능출판사 All rights reserved int 형으로 참조. ip 주소 예제 #include
union ip_address { unsigned long laddr; unsigned char saddr[4]; }; int main(void) { union ip_address addr; addr. saddr[0] = 1; addr. saddr[1] = 0; addr. saddr[2] = 0; addr. saddr[3] = 127; printf(“%xn”, addr. laddr); } return 0; 7 f 000001 © 2012 생능출판사 All rights reserved 공용체에 타입 필드 사용 #include
#include #define STU_NUMBER 1 #define REG_NUMBER 2 struct student { int type; union { int stu_number; // 학번 char reg_number[15]; // 주민등록번호 } id; char name[20]; }; © 2012 생능출판사 All rights reserved 공용체에 타입 필드 사용 void print(struct student s) { switch(s. type) { case STU_NUMBER: printf(“학번 %dn”, s. id. stu_number); printf(“이름: %sn”, s. name); break; case REG_NUMBER: printf(“주민등록번호: %sn”, s. id. reg_number); printf(“이름: %sn”, s. name); break; default: printf(“타입오류n”); break; } } © 2012 생능출판사 All rights reserved
공용체에 타입 필드 사용 int main(void) { struct student s 1, s 2; s 1. type = STU_NUMBER; s 1. id. stu_number = 20070001; strcpy(s 1. name, “홍길동”); s 2. type = REG_NUMBER; strcpy(s 2. id. reg_number, “860101 -1056076”); strcpy(s 2. name, “김철수”); print(s 1); print(s 2); } © 2012 생능출판사 All rights reserved 학번: 20070001 이름: 홍길동 주민등록번호: 860101 -1056076 이름: 김철수
열거형의 선언 enum days { SUN, MON, TUE, WED, THU, FRI, SAT }; 태그 이름 열거형 변수 선언 enum days today; today = SUN; // OK! © 2012 생능출판사 All rights reserved 값들을 나열
열거형 초기화 enum days { SUN, MON, TUE, WED, THU, FRI, SAT }; // SUN=0, MON=1, . . . enum days { SUN=1, MON, TUE, WED, THU, FRI, SAT }; // SUN=1, MON=2, . . . enum days { SUN=7, MON=1, TUE, WED, THU, FRI, SAT=6 }; // SUN=7, MON=1, . . . • © 2012 생능출판사 All rights reserved 값을 지정하기 않으면 0부터 할당
열거형의 예 enum colors { white, red, blue, green, black }; enum boolean { false, true }; enum levels { low, medium, high }; enum car_types { sedan, suv, sports_car, van, pickup, convertible }; © 2012 생능출판사 All rights reserved
예제 #include
enum days { SUN, MON, TUE, WED, THU, FRI, SAT }; char *days_name[] = { “sunday”, “monday”, “tuesday”, “wednesday”, “thursday”, “friday”, “saturday” }; int main(void) { enum days d; d = WED; printf(“%d번째 요일은 %s입니다n”, d, days_name[d]); return 0; } 3번째 요일은 wednesday입니다 © 2012 생능출판사 All rights reserved 열거형과 다른 방법과의 비교 정수 사용 switch(code) { case 1: printf(“LCD TVn”); break; case 2: printf(“PDP TVn”); break; } 컴퓨터는 알기 쉬우나 사람은 기억하기 어렵다. © 2012 생능출판사 All rights reserved 기호 상수 열거형 #define LCD 1 #define PDP 2 enum tvtype { LCD, PDP }; enum tvtype code; switch(code) { case LCD: printf(“LCD TVn”); break; case PDP: printf(“PDP TVn”); break; } 기호 상수를 작성할 때 오류를 저지를 수 있다. 컴파일러가 중복이 일어나지 않 도록 체크한다.
typedef의 개념 © 2012 생능출판사 All rights reserved
typedef · typedef은 새로운 자료형(type)을 정의(define) · C의 기본 자료형을 확장시키는 역할 typedef old_type © 2012 생능출판사 All rights reserved new_type;
typedef의 예 typedef unsiged char BYTE; BYTE index; // unsigned int index; 와 같다. typedef int INT 32; typedef unsigned int UINT 32; INT 32 i; // int i; 와 같다. UINT 32 k; // unsigned int k; 와 같다. © 2012 생능출판사 All rights reserved
구조체로 새로운 타입 정의 · 구조체로 새로운 타입을 정의할 수 있다. struct point { int x; int y; }; typedef struct point POINT; POINT a, b; © 2012 생능출판사 All rights reserved
예제 #include
typedef struct point { int x; int y; } POINT; POINT translate(POINT p, POINT delta); int main(void) { POINT p = { 2, 3 }; POINT delta = { 10, 10 }; POINT result; result = translate(p, delta); printf(“새로운 점의 좌표는(%d, %d)입니다. n”, result. x, result. y); } return 0; © 2012 생능출판사 All rights reserved 예제 POINT translate(POINT p, POINT delta) { POINT new_p; new_p. x = p. x + delta. x; new_p. y = p. y + delta. y; } return new_p; 새로운 점의 좌표는 (12, 13)입니다. © 2012 생능출판사 All rights reserved
키워드에 대한 정보 쉽게 풀어 쓴 c 언어 express 13 장
다음은 Bing에서 쉽게 풀어 쓴 c 언어 express 13 장 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 C++ struct03 구조체
- c++
C++ #struct03 #구조체
YouTube에서 쉽게 풀어 쓴 c 언어 express 13 장 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 C++ struct03 구조체 | 쉽게 풀어 쓴 c 언어 express 13 장, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.