반응형

삼각형, 사각형, 원을 동시에 표현할 수 있는 공용체를 설계하라. 삼각형은 밑변과 높이, 사각형은 가로와 세로, 원은 반지름만을 저장하도록 하라. 현재의 공용체가 표현하고 있는 도형의 종류는 열거형 변수를 사용하여 나타낸다. 사용자로부터 도형의 종류와 도형의 데이터를 받아서 저장하여 보자.


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
#include <stdio.h>
enum figure {TRI, RECT, CIRC};
struct shape{
    enum figure type;
    union{
        struct{int base; int height;} tri;
        struct{int width; int height;} rect;
        struct{int radius;} circ;
    } data;};
int main(void)
{
    struct shape a;
    a.type=TRI;
    while(1){
    printf("도형의 종류를 입력하세요(0:삼각형 1:직사각형 2:원 3:종료) : ");
    scanf("%d"&a.type);
    getchar();
    if(a.type==TRI)
    {printf("밑변을 입력하세요: ");
    scanf("%d"&a.data.tri.base);
    printf("높이를 입력하세요: ");
    scanf("%d"&a.data.tri.height);
    printf("밑변 : %d 높이 :%d\n", a.data.tri.base, a.data.tri.height);}
    else if(a.type==RECT)
    {printf("가로를 입력하세요: ");
    scanf("%d"&a.data.rect.width);
    printf("높이를 입력하세요: ");
    scanf("%d"&a.data.rect.height);
    printf("가로 : %d 높이 : %d\n", a.data.rect.width, a.data.rect.height);}
    else if(a.type==CIRC)
    {printf("지름을 입력하세요: ");
    scanf("%d"&a.data.circ.radius);
    printf("지름 :%d\n", a.data.circ.radius);}
    else if(a.type==3)
        break;
    else 
    {printf("잘못된 입력입니다.\n");}};
}
cs


주의할 점은 우리가 enum으로 열거형 변수를 설정했다 하더라도 scanf로 받을 때는 그에 해당하는 실제 정수 값

(TRI=0, RECT=1, CIRC=2라던가..) 을 입력해 주어야 한다는 것이다. 만약 실제로 TRI, RECT, CIRC 를 입력해서

프로그램이 작동하게 하려면, strcmp를 이용하여 정수값 0, 1, 2를 출력하는 function을 따로 만들어야 할 것이다.

그리고 enum으로는 0,1,2, 밖에 없지만 추가적으로 3이나 4를 입력해도 이상이 없다는 점을 발견했다.




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

속담 선택기  (0) 2017.01.04
데이터베이스  (0) 2017.01.03
포커 카드 배열  (0) 2016.12.28
전화번호부  (0) 2016.12.28
직원 나이별 분류  (0) 2016.12.27
반응형

2차원 공간에서 사각형은 2개의 점으로 이루어진다. 앞의 문제에서 정의한 point 구조체를 2개 사용하여 구조체 rectangle을 정의하라. 이 rectangle 구조체를 받아서 다음과 같은 기능을 하는 함수를 작성하고 테스트하라.

(a) 사각형의 넓이를 계산하는 함수 int area(struct rectangle r)

(b) 사각형의 둘레를 계산하는 함수 int perimeter(struct rectangle r)

(c) 정사각형인지를 검사하는 함수 int is_square(struct rectangle r)


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
#include <stdio.h>
struct point{
    int x;
    int y;};
struct rectangle{
    struct point a;
    struct point b;};
int area(struct rectangle r);
int perimeter(struct rectangle r);
int is_square(struct rectangle r);
int amplitude(int a, int b);
int main(void)
{
    struct rectangle one={{0,0},{0,0}};
 printf("첫번째 점을 입력하세요\n");
 scanf("%d %d"&one.a.x, &one.a.y);
 printf("두번째 점을 입력하세요\n");
 scanf("%d %d"&one.b.x, &one.b.y);
 printf("넓이는 %d입니다.\n", area(one));
 printf("둘레는 %d입니다.\n", perimeter(one));
 if(is_square(one)==1)
     printf("정사각형입니다.\n");
 else
     printf("정사각형이아닙니다.\n");
 return 0;
}
int area(struct rectangle r)
{
 int garo, sero, area;
 garo=amplitude(r.a.x,r.b.x);
 sero=amplitude(r.a.y,r.b.y);
 area=garo*sero;
 return area;
}
int perimeter(struct rectangle r)
{
    int garo, sero, peri;
    garo=amplitude(r.a.x,r.b.x);
    sero=amplitude(r.a.y,r.b.y);
    peri=2*(garo+sero);
    return peri;
}
int is_square(struct rectangle r)
{
    int garo, sero;
    garo=amplitude(r.a.x,r.b.x);
    sero=amplitude(r.a.y,r.b.y);
    if(garo==sero)
        return 1;
    else
        return 0;
}
int amplitude(int a, int b)
{
    int result;
if(a>=b)
    result=a-b;
else
    result=-(a-b);
return result;
}
cs





반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

벡터 합  (0) 2016.12.27
복소수 합  (0) 2016.12.27
포인터 평면 위의 점  (0) 2016.12.27
좌표 일치 확인  (0) 2016.12.27
찾아 바꾸기  (0) 2016.08.22

+ Recent posts