티스토리 뷰
구조체
1. 2차원 평면에서 점은 (x, y) 좌표로 나타낼 수 있다. 따라서 하나의 점은 다음과 같은 point라는 구조체로 정의할 수 있다. 이 point 구조체를 받아서 다음과 같은 기능을 하는 함수를 작성하고 테스트하라.
(a) 두 점의 좌표가 일치하면 1을 반환하고 그렇지 않으면 0을 반환하는 함수 int equal(struct point p1, struct point p2)
(b) 점의 좌표를 받아서 이 점이 어떤 사분면에 속하는지를 반환하는 함수, 점이 속하는 사분면의 번호를 반환하는 함수 int quadrant(struct point p)
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 | #include <stdio.h> typedef struct point { // 좌표 입력 int x; int y; } POINT; int quadrant(POINT t) { if (t.x > 0 && t.y > 0){ return 1; } else if (t.x < 0 && t.y > 0) { return 2; } else if (t.x < 0 && t.y < 0) { return 3; } else if (t.x > 0 && t.y < 0) { return 4; } else { return 0; } } int main(void) { POINT p; int i; printf("사분면을 검색할 좌표를 입력하시오: "); scanf("%d %d", &p.x, &p.y); // 좌표입력 i = quadrant(p); if (i) { printf("%d사분면 입니다.", i); } else { printf("축위에 있습니다."); } return 0; } | cs |
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 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 | #include <stdio.h> typedef struct point { // 좌표 입력 int x; int y; } POINT; typedef struct rectangle { POINT a, b; // a는 오른쪽 상단, b는 왼쪽 하단의 좌표를 저장 } RECT; int area(RECT r) { int w, h; w = r.b.x - r.a.x; h = r.b.y - r.a.y; return w*h; } int perimeter(RECT r) { int w, h; w = r.b.x - r.a.x; h = r.b.y - r.a.y; return 2 * (w + h); } int is_square(RECT r) { int w, h; w = r.b.x - r.a.x; h = r.b.y - r.a.y; if (w == h) { return 1; } else { return 0; } } int main(void) { RECT r; printf("우측 상단 좌표를 입력하시오: "); scanf("%d %d", &r.a.x, &r.a.y); printf("우측 상단 좌표를 입력하시오: "); scanf("%d %d", &r.b.x, &r.b.y); printf("r의 넓이는 %d입니다.\n", area(r)); printf("r의 둘레는 %d입니다.\n", perimeter(r)); printf("r의 정사각형 유무는 %d입니다. (1:TRUE, 0:FALSE)\n", is_square(r)); return 0; } | cs |
5.
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 | #include <stdio.h> typedef struct point { // 좌표 입력 double x; double y; } POINT; typedef struct vector { POINT start, end; // a는 시작 위치 , b는 끝 위치 } VECTOR; VECTOR vector_add(VECTOR v1, VECTOR v2) { VECTOR target; target.start.x = v1.start.x + v2.start.x; target.start.y = v1.start.y + v2.start.y; target.end.x = v1.end.x + v2.end.x; target.end.y = v1.end.y + v2.end.y; return target; } int main(void) { VECTOR v[2]; printf("벡터 1의 시작 좌표를 입력하세요 : "); scanf("%lf %lf", &v[0].start.x, &v[0].start.y); printf("벡터 1의 끝 좌표를 입력하세요 : "); scanf("%lf %lf", &v[0].end.x, &v[0].end.y); printf("벡터 2의 시작 좌표를 입력하세요 : "); scanf("%lf %lf", &v[1].start.x, &v[1].start.y); printf("벡터 2의 끝 좌표를 입력하세요 : "); scanf("%lf %lf", &v[1].end.x, &v[1].end.y); VECTOR result = vector_add(v[0], v[1]); printf("두 벡터의 합 벡터의 시작점은 (%.2lf, %.2lf) 끝 점은 (%.2lf, %.2lf)입니다.", result.start.x, result.start.y, result.end.x, result.end.y); return 0; } | cs |
7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> typedef struct food { // 음식 입력 char name[100]; int calories; } FOOD; int main() { FOOD food_array[3] = { {"밥", 300},{ "김치", 50 },{ "돈가스", 500 } }; printf("음식 코스의 전체 칼로리는 %d입니다.\n", food_array[0].calories + food_array[1].calories + food_array[2].calories); return 0; } | cs |
9.
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 | #include <stdio.h> #define MANY 5 #define EMPTY {" ", " ", " "} typedef struct man { // 전화번호부 char name[20]; char home_number[12]; char phone_number[12]; } MAN; int main() { MAN list[MANY]; for (int i = 0; i < MANY; i++) { printf("%d번째 사람의 이름 : ", i + 1); scanf_s("%s", list[i].name, sizeof(list[i].name)); printf("%d번째 사람의 집전화번호 : ", i + 1); scanf_s("%s", list[i].home_number, sizeof(list[i].home_number)); printf("%d번째 사람의 핸드폰번호 : ", i + 1); scanf_s("%s", list[i].phone_number, sizeof(list[i].phone_number)); } char search[20]; printf("이름 검색 : "); scanf_s("%s", search, sizeof(search)); int num = -1; for (int i = 0; i < MANY; i++) { if (!(strcmp(search, list[i].name))) { num = i; break; } } if (num == -1) { printf("검색 결과가 없습니다."); } else { printf("이름 : %s\n", list[num].name); printf("집전화번호 : %s\n", list[num].home_number); printf("핸드폰번호 : %s\n", list[num].phone_number); } return 0; } | cs |
11.
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 | #include <stdio.h> typedef enum shape_type { TRI = 0, RECT, CIR } SHAPE_TYPE; const char type_txt[3][4] = { "TRI", "RECT", "CIR" }; typedef struct shape { // 도형 SHAPE_TYPE type; // 도형의 종류 union { struct { int base, height; } TRI; struct { int width, height; } RECT; struct { int radius; } CIR; } LINE; } SHAPE; int main() { SHAPE one; int input; printf("입력할 도형을 선택하세요(0:삼각형, 1:사각형, 2:원) : "); scanf("%d", &input); one.type = input; switch (one.type) { case TRI : printf("밑변과 높이를 순서대로 입력하시오."); scanf("%d %d", &one.LINE.TRI.base, &one.LINE.TRI.height); printf("입력한 도형은 %d이고 밑변은 %d, 높이는 %d입니다.", one.type, one.LINE.TRI.base, one.LINE.TRI.height); break; case RECT: printf("가로와 세로를 순서대로 입력하시오."); scanf("%d %d", &one.LINE.RECT.width, &one.LINE.RECT.height); printf("입력한 도형은 %d이고 가로는 %d, 세로는 %d입니다.", one.type, one.LINE.RECT.width, one.LINE.RECT.height); break; case CIR : printf("반지름을 입력하시오."); scanf("%d", &one.LINE.CIR.radius); printf("입력한 도형은 %d이고 반지름은 %d입니다.", one.type, one.LINE.CIR.radius); break; default : printf("잘못 선택하셨습니다. 프로그램을 다시 실행해주세요."); } /* const char type_txt[] = { "TRI", "RECT", "CIR" }; printf("입력한 도형은 %s입니다.", *type_txt[input]); // 가변 길이 배열은 visual studio에서 지원하지 않음 */ return 0; } | cs |
'프로그래밍 > C' 카테고리의 다른 글
[창의적it 프로그래밍] 1차 과제 -포인터- (0) | 2018.03.16 |
---|---|
[자료구조] 2일차_과제(180316) - 오목 (0) | 2018.03.16 |
[자료구조] 1일차_생각해 볼 내용(180312) (0) | 2018.03.08 |
[자료구조] 1일차_토론(180312) (0) | 2018.03.07 |
[자료구조] 1일차_과제(180309) (0) | 2018.03.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Gatsby.js
- aws
- Azure
- DevOps
- nuxt.js
- node.js
- Angular
- Cloud
- alpine.js
- oracle
- MySQL
- svelte
- JavaScript
- hoisting
- RDBMS
- vue
- vue.js
- Quasar
- nosql
- PostgreSQL
- REACT
- Remix
- SQLite
- 이진탐색 #중복
- Next.js
- gcp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함