반응형

지금까지 학습한 것을 토대로 하여 영화에 대한 정보를 연결 리스트로 저장하고 출력하는 프로그램을 작성하여 보자.


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
80
81
82
83
84
85
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 40
typedef struct NODE{
    char name[SIZE];
    int year;
    struct NODE *link;
}NODE;
int menu();
void add(NODE **list, NODE **prev);
void printing(NODE **list);
void exit1(NODE **list,NODE **next);
int main(void)
{
    int cho=0;
    NODE *list=NULL;
    NODE *p,*next,*prev;
    while((cho=menu())!=3){
    getchar();
    if(cho==1)
    {
        add(&list,&prev);
    }
    else if(cho==2)
    {
        printing(&list);
    }
    else if(cho==3)
    {
        exit1(&list,&next);
    break;
    }
    }
    return 0;
}
int menu()
{
    int men=0;
    printf("----------------------\n");
    printf("1. 영화 정보 추가\n");
    printf("2. 영화 정보 출력\n");
    printf("3. 종료\n");
    printf("----------------------\n");
    printf("번호를 선택하세요: ");
    scanf("%d",&men);
    return men;
}
void add(NODE **list, NODE **prev)
{
    NODE *p=NULL;
    p=(NODE*)malloc(sizeof(NODE));
        printf("영화의 제목을 입력하세요: ");
        gets(p->name);
        printf("영화의 개봉 연도를 입력하세요: ");
        scanf("%d",&(p->year));
        if(*list==NULL)
        {*list=p;}
        else
        {(*prev)->link=p;}
            p->link=NULL;
            *prev=p;
}
void printing(NODE **list)
{
    NODE *p=NULL;
    p=*list;
    while(p!=NULL)
    {
        printf("제목: %s\n",p->name);
        printf("년도: %d\n",p->year);
        p=p->link;
    }
}
void exit1(NODE **list,NODE **next)
{
    NODE *p=NULL;
    p=*list;
    while(p!=NULL)
    {
        *next=p->link;
        free(p);
        p=*next;
    }
}
cs




반응형

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

전화 번호부 작성  (2) 2017.02.25
양의 정수 저장  (0) 2017.02.22
단어 입력 받기  (0) 2017.02.21
주소록 저장  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
반응형

전화 번호부를 연결 리스트를 이용하여 만들어보자. 사용자가 전화 번호를 입력하면 연결리스트의 끝에 추가한다. 탐색 기능도 추가하라.


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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 30
typedef struct NODE {
    char name[SIZE];
    char num[SIZE];
    struct NODE *link;
}NODE;
int menu();
void initialize(NODE **list, NODE **next);
void add(NODE **list, NODE **prev);
void search(NODE **next, NODE **list);
void exit1(NODE **next, NODE **list);
int main(void)
{
    NODE *list = NULL;
    NODE *prev, *next;
    int men = 0;
    prev = NULL; next = NULL;
    while ((men = menu()) != 4)
    {
        getchar();
        if (men == 1)
        {
            initialize(&list, &next);
        }
        else if (men == 2)
        {
            add(&list, &prev);
        }
        else if (men == 3)
        {
            search(&next, &list);
        }
    }
    exit1(&next, &list);
    return 0;
}
int menu()
{
    int a = 0;
    printf("연결 리스트를 이용한 전화 번호부 메뉴\n");
    printf("-------------------------\n");
    printf("1. 초기화\n");
    printf("2. 전화 번호 추가\n");
    printf("3. 전화 번호 탐색\n");
    printf("4. 종료\n");
    printf("-------------------------\n");
    scanf("%d"&a);
    return a;
}
void initialize(NODE **list, NODE **next)
{
    NODE *p;
    p = *list;
    while (p != NULL)
    {
        *next = p->link;
        free(p);
        p = *next;
    }
    printf("초기화가 완료되었습니다.\n");
}
void add(NODE **list, NODE **prev)
{
    NODE *p;
    p = (NODE*)malloc(sizeof(NODE));
    printf("이름: ");
    gets(p->name);
    printf("번호: ");
    gets(p->num);
    if (*list == NULL)
    {
        *list = p;
    }
    else
    {
        (*prev)->link = p;
    }
    p->link = NULL;
    *prev = p;
}
void search(NODE **next, NODE **list)
{
    NODE *p;
    char nam[SIZE];
    printf("찾을 이름: ");
    gets(nam);
    p = *list;
    while (p != NULL)
    {
        *next = p->link;
        if (strcmp(p->name, nam) == 0)
        {
            printf("전화 번호는 %s입니다.\n", p->num);
            break;
        }
        p = *next;
    }
}
void exit1(NODE **next, NODE **list)
{
    NODE *p;
    p = *list;
    while (p != NULL)
    {
        *next = p->link;
        free(p);
        p = *next;
    }
}
cs




반응형

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

영화 목록 만들기  (2) 2017.02.25
양의 정수 저장  (0) 2017.02.22
단어 입력 받기  (0) 2017.02.21
주소록 저장  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
반응형

사용자로부터 양의 정수들을 입력받아서 연결 리스트에 저장하고, 결과를 다음과 같이 출력하는 프로그램을 작성하라.


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>
#include <stdlib.h>
typedef struct NODE{
    int num;
    struct NODE *link;
}NODE;
int main(void)
{
    NODE *list=NULL;
    NODE *prev, *p, *next;
    int a=0;
    while(1)
    {
        printf("양의 정수를 입력하세요(종료는-1): ");
        scanf("%d",&a);
        if(a==-1)
            break;
        p=(NODE*)malloc(sizeof(NODE));
        p->num=a;
        if(list==NULL)
        {list=p;}
        else
        {prev->link=p;}
        p->link=NULL;
        prev=p;
    }
    p=list;
    while(1)
    {
    if(p==NULL)
        {printf("NULL\n");
        break;}
    printf("%d->",p->num);
    p=p->link;
    }
    p=list;
    while(p!=NULL)
    {
        next=p->link;
        free(p);
        p=next;
    }
    return 0;
 
}
cs




반응형

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

영화 목록 만들기  (2) 2017.02.25
전화 번호부 작성  (2) 2017.02.25
단어 입력 받기  (0) 2017.02.21
주소록 저장  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
반응형

동적 메모리 할당을 이용하여서 사용자로부터 받은 주소록을 저장하고 출력하는 프로그램을 작성하라. 사용자로부터 먼저 주소의 개수를 입력받도록 하라. 주소의 많은 정보 중에서 이름과 휴대폰 번호만을 저장하도록 하자.


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
#include <stdio.h>
#include <stdlib.h>
#define SIZE 30
typedef struct BOOK
{
    char name[SIZE];
    char number[SIZE];
}book;
int main(void)
{
    int count=0;
    int i;
    book *p;
    printf("주소의 개수: ");
    scanf("%d",&count);
    getchar();
    p=(book*)malloc(count*sizeof(book));
    if(p==NULL)
    {
        printf("메모리할당오류\n");
        exit(1);
    }
    for(i=0;i<count;i++)
    {
        printf("이름을 입력하세요: ");
        gets(p[i].name);
        printf("휴대폰 번호를 입력하세요: ");
        gets(p[i].number);
    }
    printf("========================================\n");
    printf("이름\t휴대폰 번호\n");
    printf("========================================\n");
    for(i=0;i<count;i++)
    {
        printf("%s\t%s\n",p[i].name,p[i].number);
        printf("========================================\n");
    }
    free(p);
    return 0;
}
cs




반응형

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

양의 정수 저장  (0) 2017.02.22
단어 입력 받기  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
양의 정수들의 합  (0) 2017.02.21
명령어 라인으로 텍스트 파일 합치기  (0) 2017.02.18
반응형

소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 프로그램을 작성하여 보자. 다음과 같은 메뉴 화면을 가진다.


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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct BOOK {
    char name[SIZE];
    char author[SIZE];
    char company[SIZE];
} book;
int menu(void);
void add(FILE *fp);
void find(FILE *fp);
int main(void)
{
    int num = 0;
    FILE *fp = NULL;
    if ((fp=fopen("booklist.bin","a+"))==NULL)
    {
        printf("파일오픈실패\n");
        exit(1);
    }
    while (1)
    {
        num = menu();
        if (num == 1)
            add(fp);
        else if (num == 2)
            find(fp);
        else
            break;
    }
    fclose(fp);
    return 0;
}
int menu(void)
{
    int i = 0;
    printf("메뉴\n");
    printf("1. 추가\n");
    printf("2. 탐색\n");
    printf("3. 종료\n");
    printf("번호를 입력하세요: ");
    scanf("%d"&i);
    getchar();
    return i;
}
void add(FILE *fp)
    book a;
    printf("도서의 이름: ");
    gets(a.name);
    printf("저자: ");
    gets(a.author);
    printf("출판사명: ");
    gets(a.company);
    fseek(fp, 0, SEEK_END);
    fwrite(&a, sizeof(book), 1, fp);
}
void find(FILE *fp)
{
    char arr[SIZE];
    book find;
    printf("도서의 이름을 입력하세요: ");
    gets(arr);
    fseek(fp, 0, SEEK_SET);
    while (!feof(fp))
    {
        fread(&find, sizeof(book), 1, fp);
        if (strcmp(find.name,arr)==0)
        {
            printf("저자: %s\n",find.author);
            printf("출판사명: %s\n",find.company);
            break;
        }
    }
}
cs




반응형

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

특정 단어 찾기  (0) 2017.02.18
텍스트 파일과 이진 파일  (0) 2017.02.17
줄 번호 붙이기  (0) 2017.02.17
사용자 입력 텍스트 파일 저장  (0) 2017.02.13
인쇄 가능 문자 수 세기  (0) 2017.02.13
반응형

데이터베이스의 기능을 하는 간단한 프로그램을 작성하여 보자. 이 프로그램은 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <string.h>
#define SIZE 50
enum classi {GEN, POP, CLASSIC, MOVIE};
typedef struct music{
    int check;
    char name[30];
    char singer[20];
    char location[30];
    enum classi clas;
} MUSIC;
int menu(void);
void add(MUSIC a[]);
void print(MUSIC a[]);
void search(MUSIC a[]);
void del(MUSIC a[]);
int main(void)
{    MUSIC m[SIZE];
    int i,men;
    for(i=0;i<SIZE;i++)
    {m[i].check=0; }
    while(1){
    men=0;
    men=menu();
    if(men==1)
    {add(m);}
    else if(men==2)
    {print(m);}
    else if(men==3)
    {search(m);}
    else if(men==4)
    {del(m);}
    else if(men==5)
        {break;}
    else
    {printf("잘못된 입력입니다.\n");}};
    return 0;}
int menu(void)
{    int a=0;
    printf("=============\n");
printf("1.추가\n2.출력\n3.검색\n4.삭제\n5.종료\n");
printf("=============\n");
scanf("%d"&a);
return(a);}
void add(MUSIC a[])
{    int i, count;
    count=0;
    for(i=0;i<SIZE;i++)
    {count++;
        if(a[i].check==0)
    {printf("제목을 입력하세요: ");
    scanf("%s"&a[i].name);
    printf("가수를 입력하세요: ");
    scanf("%s"&a[i].singer);
    printf("저장된 위치를 입력하세요: ");
    scanf("%s"&a[i].location);
    printf("장르를 입력하세요(0:가요 1:팝 2:클래식 3:영화음악): ");
    scanf("%d"&a[i].clas);
    a[i].check=1;
    break;}
    if(count==SIZE)
        printf("목록이 꽉 찼습니다.\n");}}
void print(MUSIC a[])
{    int i;
printf("0 : 가요 1 : 팝 2: 클래식 3: 영화음악\n");
for(i=0;i<SIZE;i++)
{if(a[i].check!=0)
printf("제목 : %s\n가수 : %s\n저장된 위치 : %s\n분류 : %d\n",a[i].name,a[i].singer,a[i].location,a[i].clas);}
printf("****출력완료****\n");}
void search(MUSIC a[])
{    char cm[30]; int i, count;
    count=0;
    printf("제목을 입력하세요: ");
    scanf("%s", cm);
    for(i=0;i<SIZE;i++)
    {    count++;
        if(strcmp(a[i].name,cm)==0)
    {printf("제목 : %s\n가수 : %s\n저장된 위치 : %s\n분류 : %d\n",a[i].name,a[i].singer,a[i].location,a[i].clas);
    break;}}
    if(count==SIZE)
    {printf("잘못된 입력입니다.\n");}}
void del(MUSIC a[])
{
    char cm[30]; int i, count;
    count=0;
    printf("제목을 입력하세요: ");
    scanf("%s", cm);
    for(i=0;i<SIZE;i++)
    {    count++;
        if(strcmp(a[i].name,cm)==0)
        {    a[i].check=0;
        break;}
        if(count==SIZE)
        {printf("잘못된 입력입니다.\n");}}}
cs


del(삭제) 는 check를 0으로 만들어 출력이 안되는 식으로 구현했다. (실제로 그 안에 데이터는 들어있고, 다음 입력을 받을 때 그 위에 덮어 씌워지는 형식)

다른 방식으로는 그다음 번호의 데이터를 삭제 데이터 기준으로 하나씩 앞으로 당기는 방법이 있는데, 이것은 SIZE-1번째 배열 때문에 귀찮아지고, 

무엇때문인지 count가 0인것을 인식을 못해서 계속 오류가 발생하였다. 그래서 위의 방식으로 구현을 하였다. 

이번 것은 너무 길어서 스크린샷은 안찍었다. 참고로 출력은 전체를 출력하는 것이고 검색은 검색한 것만 출력하는 것이다.

반응형

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

2차원 배열 합  (0) 2017.01.04
속담 선택기  (0) 2017.01.04
삼각형, 사각형, 원  (0) 2017.01.02
포커 카드 배열  (0) 2016.12.28
전화번호부  (0) 2016.12.28
반응형

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


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
반응형

포커 게임에 사용되는 카드를 구조체 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
33
34
#include <stdio.h>
#define SIZE 52
typedef struct card{
    int value;
    char suit;
}CARD;
void initialize (CARD a[], char s[]);
void print(CARD a[]);
int main(void)
{
    CARD all[SIZE];
    char su[4]={'c','d','h','s'};
    initialize(all,su);
    print(all);
    return 0;
}
void initialize (CARD a[], char s[])
{
int i,j,k;
k=0;
for(i=0;i<4;i++)
{
for(j=1;j<=13;j++)
{a[k].suit=s[i];
 a[k].value=j;
 k++;
}
}}
void print(CARD a[])
{
int k=0;
for(k=0;k<SIZE;k++)
printf("%c %d\n", a[k].suit, a[k].value);
}
cs




반응형

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

데이터베이스  (0) 2017.01.03
삼각형, 사각형, 원  (0) 2017.01.02
전화번호부  (0) 2016.12.28
직원 나이별 분류  (0) 2016.12.27
총 칼로리 구하기  (0) 2016.12.27
반응형

전화번호부를 구성하기 위하여 이름, 집전화번호, 휴대폰 번호로 구성되는 구조체를 정의한 후에 이 구조체의 배열을 선언하여 전화번호부를 구성한다. 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
46
47
48
#include <stdio.h>
#include <string.h>
#define SIZE 5
typedef struct phone{
    char name[20];
    char tel[20];
    char cell[20];
} PHONE;
void get_array(PHONE p[]);
void search(PHONE p[]);
int main(void)
{
PHONE p[SIZE];
get_array(p);
search(p);
return 0;
}
void get_array(PHONE p[])
{
int i;
for(i=0;i<SIZE;i++)
{
printf("이름을 입력하세요.");
scanf("%s", p[i].name);
printf("전화번호를 입력하세요.");
scanf("%s", p[i].tel);
printf("핸드폰번호를 입력하세요.");
scanf("%s", p[i].cell);}}
void search(PHONE p[])
{
    PHONE cmp;
    int i;
    while(1){
printf("이름을 입력하세요.(종료는 a)");
scanf("%s", cmp.name);
if(strcmp(cmp.name,"a")==0)
    break;
for(i=0;i<SIZE;i++)
{
    if(strcmp(cmp.name,p[i].name)==0)
    {
    printf("%s의 전화번호는 %s이고 핸드폰번호는 %s입니다.\n", p[i].name,p[i].tel,p[i].cell);
    break;
    }
}
if(i==5)
    printf("이름이 명단에 없습니다. 다시 입력하세요.\n");
}}
cs




반응형

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

삼각형, 사각형, 원  (0) 2017.01.02
포커 카드 배열  (0) 2016.12.28
직원 나이별 분류  (0) 2016.12.27
총 칼로리 구하기  (0) 2016.12.27
이메일 구조체  (0) 2016.12.27
반응형

직원을 나타내는 구조체 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
29
#include <stdio.h>
typedef struct {
    int number;
    char name[30];
    char phone_number[20];
    int age;
} EMP;
int main(void)
{
    EMP emp[]={{1,"체흐","111-1111",27},
    {2,"호날두","222-2222",23},
    {3,"말디니","333-3333",25},
    {4,"카카","444-4444",42},
    {5,"반페르시","555-5555",52},
    {6,"박지성","666-6666",21},
    {7,"파브레가스","777-7777",32},
    {8,"메시","888-8888",21},
    {9,"앙리","999-9999",27},
    {10,"후후란","101-1010",72}};
    int i, size;
    size=sizeof(emp)/sizeof(emp[0]);
    for(i=0;i<size;i++)
    {
    if(emp[i].age>=20&&emp[i].age<=30)
        printf("사번 : %d 이름 : %7s 전화번호 : %s 나이 : %d\n"
        emp[i].number, emp[i].name, emp[i].phone_number, emp[i].age);
    }
    return 0;
}
cs



반응형

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

포커 카드 배열  (0) 2016.12.28
전화번호부  (0) 2016.12.28
총 칼로리 구하기  (0) 2016.12.27
이메일 구조체  (0) 2016.12.27
벡터 합  (0) 2016.12.27
반응형

각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다. 각각의 식사 코스에서 등장하는 ㅇ므식들을 구조체의 배열로 표현하고 각 식사 코스의 전체 칼로리를 계산하는 프로그램을 작성하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
struct food{
    char name[100];
    int calories;
};
int main(void)
{
    struct food food_array[]={{"떡볶이"100},{"감자탕"2000},{"까르보나라"30}};
    int size,i;
    int sum=0;
    size=sizeof(food_array)/sizeof(food_array[0]);
    for(i=0;i<size;i++)
    {
    sum+=food_array[i].calories;
    }
    printf("총 코스의 칼로리는 %d입니다.\n", sum);
    return 0;
}
cs




반응형

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

전화번호부  (0) 2016.12.28
직원 나이별 분류  (0) 2016.12.27
이메일 구조체  (0) 2016.12.27
벡터 합  (0) 2016.12.27
복소수 합  (0) 2016.12.27
반응형

구조체를 이용하여 이메일을 표현할 수 있는 구조체를 정의하고, 적당한 초기값을 부여하고 출력하는 프로그램을 작성하라. 구조체의 멤버는 제목, 수신자, 발신자, 내용, 날짜, 우선순위 등으로 구성된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
struct email{
    char subject[30];
    char receiver[20];
    char sender[20];
    char body[100];
    char date[15];
    int priority;
};
int main(void)
{
    struct email a={"안녕하세요","진구","도라에몽","진구야 혼나고싶니? 내 주머니 가져오렴.""2016-12-27"1};
    printf("제목 : %s\n", a.subject);
    printf("수신자 : %s\n", a.receiver);
    printf("발신자 : %s\n", a.sender);
    printf("내용 : %s\n", a.body);
    printf("날짜 : %s\n", a.date);
    printf("우선순위 : %d\n", a.priority);
    return 0;
}
cs




반응형

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

직원 나이별 분류  (0) 2016.12.27
총 칼로리 구하기  (0) 2016.12.27
벡터 합  (0) 2016.12.27
복소수 합  (0) 2016.12.27
사각형 판별과 둘레와 넓이  (0) 2016.12.27
반응형

2차원 벡터를 구조체로 정의하여 보라. 벡터 사이에는 덧셈 연산들이 정의될 수 있다. 벡터의 덧셈을 함수로 구현하고 테스트해보자.


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 vector{
    double x;
    double y;
};
struct vector vector_add(struct vector c1, struct vector c2);
int main(void)
{
    struct vector a,b,res;
    a.x=0;a.y=0;b.x=0;b.y=0;
    printf("벡터 a의 x성분과 y성분을 차례로 입력하세요.\n");
    scanf("%lf %lf"&a.x, &a.y);
    printf("벡터 b의 x성분과 y성분을 차례로 입력하세요.\n");
    scanf("%lf %lf"&b.x, &b.y);
    res=vector_add(a,b);
    printf("결과는 (%lf,%lf)  입니다.\n",res.x, res.y);
    return 0;
}
struct vector vector_add(struct vector c1, struct vector c2)
{
    struct vector sum;
    sum.x=c1.x+c2.x;
    sum.y=c1.y+c2.y;
    return sum;
}
cs



앞의 복소수 합과 똑같은 문제이다.

반응형

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

총 칼로리 구하기  (0) 2016.12.27
이메일 구조체  (0) 2016.12.27
복소수 합  (0) 2016.12.27
사각형 판별과 둘레와 넓이  (0) 2016.12.27
포인터 평면 위의 점  (0) 2016.12.27
반응형

구조체를 이용하여 복소수를 다음과 같이 정의하고 복소수의 덧셈을 수행하는 함수를 작성하고 테스트하라.


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 complex{
    double real;
    double imag;
};
struct complex complex_add(struct complex c1, struct complex c2);
int main(void)
{
    struct complex a,b,res;
    a.real=0;a.imag=0;b.real=0;b.imag=0;
    printf("복소수 a의 실수부와 허수부를 차례로 입력하세요.\n");
    scanf("%lf %lf"&a.real, &a.imag);
    printf("복소수 b의 실수부와 허수부를 차례로 입력하세요.\n");
    scanf("%lf %lf"&b.real, &b.imag);
    res=complex_add(a,b);
    printf("결과는 %lf+(%lf)j  입니다.\n",res.real, res.imag);
    return 0;
}
struct complex complex_add(struct complex c1, struct complex c2)
{
    struct complex sum;
    sum.real=c1.real+c2.real;
    sum.imag=c1.imag+c2.imag;
    return sum;
}
cs



반응형

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

이메일 구조체  (0) 2016.12.27
벡터 합  (0) 2016.12.27
사각형 판별과 둘레와 넓이  (0) 2016.12.27
포인터 평면 위의 점  (0) 2016.12.27
좌표 일치 확인  (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
반응형

1번 문제에서 equal()과 quadrant()를 다음과 같이 구조체의 포인터를 받도록 변경하여서 작성하고 테스트하라. 기존의 코드는 어떻게 변경하여야 하는가?

int equal(struct point *p1, struct point *p2);


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
#include <stdio.h>
typedef struct point{
    int x;
    int y;
} POINT;
int equal(POINT *p1, POINT *p2);
int main(void)
{
    POINT *a, *b;
    POINT first,second;
    a=&first; b=&second;
    int i;
    printf("두 점이 같으면 1 다르면 0을 반환합니다.\n");
    printf("a점의 좌표를 입력하세요.\n");
    scanf("%d %d"&first.x, &first.y);
    printf("b점의 좌표를 입력하세요.\n");
    scanf("%d %d"&second.x, &second.y);
    i=equal(a,b);
    printf("결과값은 %d입니다.\n", i);
    return 0;
}
int equal(POINT *p1, POINT *p2)
{
    int result=0;
    if((p1->x)==(p2->x)&&(p1->y)==(p2->y)) // p1->x 는 (*p1).x 와 같다.
    {result=1;}
    return result;
}
 
cs

결과 사진은 1번과 같다.

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 *p);
int main(void)
{
    POINT a;
    POINT *k=&a;
    int res;
    while(1){
    printf("점의 좌표를 입력하세요.(종료는 6666 6666)\n");
    scanf("%d %d"&a.x, &a.y);
    res=quadrant(k);
    if(res>=1&&res<=4)
        printf("점은 %d사분면 위에 있습니다.\n", res);
    else if(res==5)
        printf("점은 원점이나 축위에 있습니다.\n");
    else if(res==6)
        break;}
    return 0;
}
int quadrant(POINT *p)
{
    int result=0;
    if(p->x==6666&&p->y==6666)    
        result=6;
    else if(p->x>0&&p->y>0//p->x=(*p).x 와 같다.
        result=1;
    else if(p->x<0&&p->y>0)
        result=2;
    else if(p->x<0&&p->y<0)
        result=3;
    else if(p->x>0&&p->y<0)
        result=4;
    else if(p->x==0||p->y==0)
        result=5;
    return result;
}
 
cs


결과 사진은 1번과 같다.

반응형

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

복소수 합  (0) 2016.12.27
사각형 판별과 둘레와 넓이  (0) 2016.12.27
좌표 일치 확인  (0) 2016.12.27
찾아 바꾸기  (0) 2016.08.22
전광판 만들기  (0) 2016.08.22
반응형

2차원 평면에서 점은 (x,y) 좌표로 나타낼 수 있다. 따라서 하나의 점은 다음과 같은 point라는 구조체로 정의할 수 있다. 이 point 구조체를 받아서 다음과 같은 기능을 하는 함수를 작성하고 테스트하라.

(a)두 점의 좌표가 일치하면 1을 반환하고 그렇지 않으면 0을 반환하는 함수 int equal(struct point p1, struct point p2)


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>
typedef struct point{
    int x;
    int y;
} POINT;
int equal(POINT a, POINT b);
int main(void)
{
    POINT a,b;
    int i;
    printf("두 점이 같으면 1 다르면 0을 반환합니다.\n");
    printf("a점의 좌표를 입력하세요.\n");
    scanf("%d %d"&a.x, &a.y);
    printf("b점의 좌표를 입력하세요.\n");
    scanf("%d %d"&b.x, &b.y);
    i=equal(a,b);
    printf("결과값은 %d입니다.\n", i);
    return 0;
}
int equal(POINT a, POINT b)
{
    int result=0;
    if(a.x==b.x&&a.y==b.y)
    {result=1;}
    return result;
}
cs



(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
#include <stdio.h>
typedef struct point{
    int x;
    int y;
} POINT;
int quadrant(POINT p);
int main(void)
{
    POINT a;
    int res;
    while(1){
    printf("점의 좌표를 입력하세요.(종료는 6666 6666)\n");
    scanf("%d %d"&a.x, &a.y);
    res=quadrant(a);
    if(res>=1&&res<=4)
        printf("점은 %d사분면 위에 있습니다.\n", res);
    else if(res==5)
        printf("점은 원점이나 축위에 있습니다.\n");
    else if(res==6)
        break;}
    return 0;
}
int quadrant(POINT p)
{
    int result=0;
    if(p.x==6666&&p.y==6666)    
        result=6;
    else if(p.x>0&&p.y>0)
        result=1;
    else if(p.x<0&&p.y>0)
        result=2;
    else if(p.x<0&&p.y<0)
        result=3;
    else if(p.x>0&&p.y<0)
        result=4;
    else if(p.x==0||p.y==0)
        result=5;
    return result;
}
cs






반응형

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

사각형 판별과 둘레와 넓이  (0) 2016.12.27
포인터 평면 위의 점  (0) 2016.12.27
찾아 바꾸기  (0) 2016.08.22
전광판 만들기  (0) 2016.08.22
문자열로 연산하기  (0) 2016.08.22

+ Recent posts