티스토리 뷰

구조체


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










댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
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
글 보관함