반응형

데이터베이스의 기능을 하는 간단한 프로그램을 작성하여 보자. 이 프로그램은 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
반응형

간단한 "찾아 바꾸기" 기능을 구현하여 보자. 첫 번째로 사용자에게 최대 80 문자의 문자열을 입력하도록 한다. 두 번째로 찾을 문자열을 입력받는다. 세 번째로 바꿀 문자열을 입력받는다. 문자열을 찾아서 바꾼 후에 결과 문자열을 화면에 출력한다.

//개인적으로 최고로 어려웠던 문제네요.. 오래걸렸습니다. 



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 <string.h>
#define SIZE 80
int main(void)
{
char a[SIZE]="";
char find[15]="";
char change[15]="";
char seps[]=" ";
char b[10][20];
char *token;
int j,count;
count=0;
printf("문자열을 입력하세요: ");
gets(a);
printf("찾을 문자열: ");
gets(find);
printf("바꿀 문자열: ");
gets(change);
token=strtok(a,seps);
while(token!=NULL)
{
    strcpy(b[count],token);
    count++;
token=strtok(NULL,seps);
}
for(j=0;j<count;j++)
{
if(strcmp(b[j],find)==0)
    {strcpy(b[j],change);
break;}
}
printf("결과: ");
for(j=0;j<count;j++)
{
printf("%s ",b[j]);
}
printf("\n");
return 0;
}
cs




참고로 제 코드 말고도 인터넷에 찾아보니 좋은 코드가 있어서 공유하고자 합니다.

http://blog.naver.com/misoo12/100147994737


반응형

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

포인터 평면 위의 점  (0) 2016.12.27
좌표 일치 확인  (0) 2016.12.27
전광판 만들기  (0) 2016.08.22
문자열로 연산하기  (0) 2016.08.22
구두점 개수 세기  (0) 2016.08.21
반응형

요즘 길거리에서는 글자들이 흘러가는 LED 전광판을 볼 수 있다. 이것을 프로그램으로 구현하여 보자.

나는 스크린샷을 찍으려고 count 변수를 이용하여 100번만 반복되게 하였지만, count 관련 줄들을 지우면 무한 반복하게 할 수 있다.

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
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    char temp;
    int i,j,count;
    j=0; count=0;
    printf("광고하고 싶은 텍스트를 입력하세요: ");
    gets(a);
    strcat(a," ");
    while(count<=100)
    {
        for(i=0;i<strlen(a);i++)
        {printf("%c", a[i]);}
        printf("\n");
        for(i=0;i<strlen(a);i++)
        {
            if(i==0)
                {temp = a[strlen(a)];
                a[strlen(a)]=a[i];
                a[i]=a[i+1];}
            else if(i==strlen(a)-1)
                a[i]=temp;
        a[i]=a[i+1];
        }
    count++;
    }
return 0;
}
cs



반응형

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

좌표 일치 확인  (0) 2016.12.27
찾아 바꾸기  (0) 2016.08.22
문자열로 연산하기  (0) 2016.08.22
구두점 개수 세기  (0) 2016.08.21
영어 이름 입력  (0) 2016.08.21
반응형

다음과 같이 연산의 이름을 문자열로 받아서 해당 연산을 실행하는 프로그램을 작성하라. 연산을 나타내는 문자열은 "add", "sub", "mul", "div"으로 하라.

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>
#include <string.h>
#include <stdlib.h>
#define SIZE 80
int compare(char *a);
int main(void)
{
    char a[SIZE]="";
    char seps[]=" ";
    char *ope, *x, *y;
    int i,j,k;
    printf("연산을 입력하세요: ");
    gets(a);
    ope=strtok(a,seps);
    x=strtok(NULL,seps);
    y=strtok(NULL,seps);
    i=compare(ope);
    j=atoi(x);
    k=atoi(y);
    printf("연산의 결과: ");
    if(i==0)
    printf("%d\n", j+k);
    else if(i==1)
    printf("%d\n", j-k);
    else if(i==2)
    printf("%d\n", j*k);
    else if(i==3)
    printf("%d\n", j/k);
    return 0;    
}
int compare(char *a)
{
if(strncmp(a,"add",3)==0)
    return 0;
else if(strncmp(a,"sub",3)==0)
    return 1;
else if(strncmp(a,"mul",3)==0)
    return 2;
else if(strncmp(a,"div",3)==0)
    return 3;
}
cs




반응형

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

찾아 바꾸기  (0) 2016.08.22
전광판 만들기  (0) 2016.08.22
구두점 개수 세기  (0) 2016.08.21
영어 이름 입력  (0) 2016.08.21
문자열 역순 출력  (0) 2016.08.21
반응형

사용자로부터 문자열을 받아서 문자열에 포함된 구두점의 개수를 세는 프로그램을 작성하라. 여기서 구두점에는 마침표와 쉼표만이 포함된다고 가정하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    int count=0;
    int i;
    printf("텍스트를 입력하세요: ");
    gets(a);
    for(i=0;a[i]!=NULL;i++)
        {if(a[i]=='.'||a[i]==',')
            count++;}
    printf("구두점의 개수는 %d입니다.\n", count);
    return 0;
}
cs




반응형

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

전광판 만들기  (0) 2016.08.22
문자열로 연산하기  (0) 2016.08.22
영어 이름 입력  (0) 2016.08.21
문자열 역순 출력  (0) 2016.08.21
회문(palindrome)  (0) 2016.08.20
반응형

사용자에게 영어 이름을 성과 이름으로 나누어서 대문자로 입력하도록 하여서 성과 이름의 위치를 바꾸고 소문자로 변환하여 출력하는 프로그램을 작성하라.

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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void token1(char seps[], char *token);
#define SIZE 80
int main(void)
{
char a[SIZE]="";
char seps[]=" ";
char *family, *token;
int i;
printf("문자열을 입력하시오: ");
gets(a);
for(i=0;a[i]!=NULL;i++)
    a[i]=tolower(a[i]);
token=strtok(a,seps);
family=token;
token1(seps,token);
printf(", %s", family);
return 0;
}
void token1(char seps[], char *token)
{
    token=strtok(NULL,seps);
    if(token!=NULL)
    {printf("%s ", token);
    token1(seps,token);
    }
}
 
cs




반응형

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

문자열로 연산하기  (0) 2016.08.22
구두점 개수 세기  (0) 2016.08.21
문자열 역순 출력  (0) 2016.08.21
회문(palindrome)  (0) 2016.08.20
문장 교정  (0) 2016.08.20
반응형

엔터키가 눌려질 때까지 사용자로부터 문자열을 입력받아서 문자열에 포함된 단어들을 역순으로 배열하여 출력하는 프로그램을 작성하라.

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
#include <stdio.h>
#include <string.h>
#define SIZE 80
void token1(char seps[], char *token);
int main(void)
{
char a[SIZE]="";
char seps[]=" ";
char *token;
char *c;
int i,count;
count=0;
printf("문자열을 입력하세요: ");
gets(a);
printf("출력문자열 : ");
token=strtok(a,seps);
c=token;
token1(seps,token);
printf("%s",c);
printf("\n");
return 0;
}
void token1(char seps[], char *token)
{
    token=strtok(NULL,seps);
    if(token!=NULL)
    {
    token1(seps,token);
    printf("%s ", token);}
}
cs




반응형

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

구두점 개수 세기  (0) 2016.08.21
영어 이름 입력  (0) 2016.08.21
회문(palindrome)  (0) 2016.08.20
문장 교정  (0) 2016.08.20
단어 수 계산  (0) 2016.08.20
반응형

회문(palindrome)이란 바로 읽거나 거꾸로 읽어도 같은 글이 되는 문구이다. 예를 들면 "Able was I ere I saw Elba"와 같은 문자열이 회문이다. 사용자로부터 문자열을 받아서 회문 여부를 판별하여 그 결과를 화면에 출력하는 프로그램을 작성하여 보라. strlen()와 같은 라이브러리 함수는 사용해도 좋다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 80
int main(void)
{
    char a[SIZE]="";
    int i, check;
    check=1;
    printf("문자열을 입력하세요: ");
    gets(a);
    for(i=0;a[i]!=NULL;i++)
        a[i]=tolower(a[i]);
    for(i=0;i<=strlen(a)/2;i++)
        {if(a[i]!=a[strlen(a)-i-1])
    {check=0;break;}}
    if(check==0)
        printf("회문이 아닙니다.\n");
    else if(check==1)
        printf("회문입니다.\n");
    return 0;
}
cs





반응형

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

영어 이름 입력  (0) 2016.08.21
문자열 역순 출력  (0) 2016.08.21
문장 교정  (0) 2016.08.20
단어 수 계산  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
반응형

간단한 철자 교정 프로그램을 작성하여 보자. 문자열을 입력으로 받아서 문자열 안에 마침표가 있으면 문자열의 첫 번째 문자가 대문자인지를 검사한다. 만약 대문자가 아니면 대문자로 변호나한다. 또한 문장의 끝에 마침표가 존재하는지를 검사한다. 역시 마침표가 없으면 넣어준다. 즉 입력된 문자열이 "pointer is easy"라면 

"Pointer is easy."로 변환하여 화면에 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
#define SIZE 80
int main(void)
{
char a[SIZE]="";
printf("텍스트를 입력하세요: ");
gets(a);
if(a[0]>='a'||a[0]<='z')
    a[0]=a[0]-'a'+'A';
if(a[strlen(a)-1]!='.')
    {a[strlen(a)]='.';
a[strlen(a)+1]=NULL;}
printf("결과 텍스트 출력:%s\n", a);
return 0;
}
cs




반응형

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

문자열 역순 출력  (0) 2016.08.21
회문(palindrome)  (0) 2016.08.20
단어 수 계산  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
대소문자 변환기  (0) 2016.08.20

+ Recent posts