반응형

int 형 배열과 int 형 포인터를 받아서 포인터가 배열의 가장 큰 값을 가리키게 하는 함수 set_max_ptr()을 구현하고 테스트하여 보자.


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>
#define SIZE 10
void set_max_ptr(int m[], int size, int **pmax);
int main(void)
{
    int a[SIZE]={1,2,3,5,5,6,11,20,9,10};
    int *p=NULL; //가장 큰 수를 가리킬 포인터 p
    int i,max;
    for(i=0;i<SIZE;i++)
    {printf("%d번째 수 : %d\n",i,a[i]);}
    set_max_ptr(a,SIZE,&p);  //p가 포인터니까 p의 주소 &p는 이중포인터
    printf("가장 큰 수 : %d\n",*p);
    return 0;
}
void set_max_ptr(int m[], int size, int **pmax)
{
    int i;
    int max=0;
    for(i=0;i<size;i++)
    {
        if(max<m[i])
            {max=m[i];}
    }
    *pmax=&max; //이제 포인터 *pmax는 max를 가리킨다.
}
cs




반응형

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

학생 성적 평균 구하기  (0) 2017.01.06
내림차순 정렬  (0) 2017.01.06
문자열의 배열 출력  (0) 2017.01.05
2차원 배열 합  (0) 2017.01.04
속담 선택기  (0) 2017.01.04
반응형
문자열의 배열을 인수로 받아서 저장된 문자열을 전부 출력하는 pr_str_array() 함수를 작성하여 테스트하여 보자. pr_str_array()는 다음과 같은 원형을 가진다.
void pr_str_array(char **dp, int n);


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>
#define SIZE 10
void pr_str_array(char **dp, int n);
int main(void)
{
    char *p[SIZE]={"넌 알 필요 없다!",
    "알 필요 없다고?",
    "하이구래! 하이구래!",
    "타즈딩고!",
    "둠 해머를 위하여!",
    "감사합니다!",
    "이게 아닌데..",
    "네 영혼에..",
    "용족들은 예의가 없단 말이야~",
    "바람이여~"};
    pr_str_array(p,SIZE);
    return 0;
}
void pr_str_array(char **dp, int n)
{
    char i;
    for(i=0;i<n;i++)
    {
    printf("%d번째 문자열 : %s\n",i,*(dp+i)); //포인터배열의 이름에서 크기만큼 증가시켜야함
    }
}



char *p[10] 이라고 선언을 했다면 각각의 배열 p[0]부터 p[9]는 포인터겠죠. 그렇기 때문에 배열의 이름 p가 이중포인터가 됩니다.

그래서 그 이중포인터인 배열의 이름 p에서 크기만큼 더해주면 모든 배열 포인터 (문자열의 배열)을 출력할 수가 있을 것입니다.

반응형

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

내림차순 정렬  (0) 2017.01.06
가장 큰 값  (0) 2017.01.05
2차원 배열 합  (0) 2017.01.04
속담 선택기  (0) 2017.01.04
데이터베이스  (0) 2017.01.03
반응형

2차원 배열에 정수가 저장되어 있다고 가정한다. 우리가 가지고 있는 단 하나의 함수는 1차원 배열에 저장된 정수의 합을 구하는 int get_sum(int array[], int size)라고 가정하자. 2차원 배열의 각 행에 대하여 get_sum()을 호출하여서 각 행의 합을 구한 후에 이것들을 모두 합쳐서 전체 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
26
27
28
29
#include <stdio.h>
#define ROW 3
#define COL 6
int get_sum(int array[], int size);
int main(void)
{
    int a[ROW][COL]={{10,10,10,10,10,10},{10,10,10,10,10,10},{10,10,10,10,10,10}};
    int sigma=0;
    int sum[ROW]={0,0,0};
    int i;
    for(i=0;i<ROW;i++)
    {sum[i]=get_sum(a[i],COL);
    sigma+=sum[i];
    printf("%d행의 합 : %d\n", i, sum[i]);}
    printf("전체 합 : %d\n", sigma);
    return 0;
}
int get_sum(int array[], int size)
{
    int *p;
    int *endp;
    int sum=0;
    p=&array[0];
    endp=&array[size-1];
    while(p<=endp)
        {sum+=*p++;}
    return sum;
}
 
cs





반응형

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

가장 큰 값  (0) 2017.01.05
문자열의 배열 출력  (0) 2017.01.05
속담 선택기  (0) 2017.01.04
데이터베이스  (0) 2017.01.03
삼각형, 사각형, 원  (0) 2017.01.02
반응형

10개 정도의 속담을 문자열의 형태로 함수 set_proverb() 내부에 저장하고 있다가 사용자가 set_proverb()을 호출하면 인수로 받은 이중 포인터를 이용하여 외부에 있는 char형 포인터 s를 설정하는 set_proverb()을 작성하고 테스트하라.


저는 너무 어렵게 느껴지는 이중포인터네요.. 여러번 읽어보니까 우리가 어떤 변수를 함수를 통해 원본을 바꾸려고 할 때 포인터를 쓰는 것처럼,

포인터를 함수를 통해 바꿔주기 위하여 포인터의 포인터를 사용하는 것이 이중 포인터 같은데.. (제 생각임)

굉장히 헷갈리네요!! 여기서는 포인터가 문자열처럼 쓰였네요 아래 array는 포인터배열이네요

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
#include <stdio.h>
void set_proverb(char **q, int n);
                //포인터 p를 가리킬 이중포인터 q
int main(void)
{    
    char *p;  //포인터 p가 배열처럼 사용될 예정임
    int i=0;
    printf("몇 번째 속담을 선택하시겠습니까?(0~9)");
    scanf("%d"&i);
    set_proverb(&p,i);
    printf("%s \n", p);
    return 0;
}
void set_proverb(char **q, int n)
{
    static char *array[10]=
    {"낮말은 새가 듣고 밤말은 쥐가 듣는다.",
    "베지밀 아몬드와 호두우유",
    "두루마리 휴지",
    "파도무늬를 가진 텁",
    "끼얏-호!",
    "어처구니가 없구만",
    "메이플스토리~메이플스토리~",
    "앗잇읏헥!",
    "소환사의 협곡에 오신 것을 환영해요",
    "어써오쎄요~"};
        *q= array[n]; //*q=p가 된다. 즉 p에 array[n]이 대입된다.(array[n]도 포인터이자 배열)
}
cs



반응형

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

문자열의 배열 출력  (0) 2017.01.05
2차원 배열 합  (0) 2017.01.04
데이터베이스  (0) 2017.01.03
삼각형, 사각형, 원  (0) 2017.01.02
포커 카드 배열  (0) 2016.12.28
반응형

데이터베이스의 기능을 하는 간단한 프로그램을 작성하여 보자. 이 프로그램은 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
반응형
무신사 아우터 페스티벌이 개최되었어요!!!
늦기 전에 빨리 좋은 상품 구매하시길 바라요!! 나도 끼어야지!!






2016 무신사 아우터 페스티벌, 겨울 아우터를 구입하는 최고의 방법!


오늘 서울의 아침 수은주는 영하로 내려갔다. 11월과 겨울이 함께 찾아온 듯하다. 미리 일기예보를 통해 기상의 변화를 전달 받은 에디터는 간밤에 준비해둔 인사일런스(In Silence)의 솔리스트 오버사이즈 코트를 입고 집을 나섰다. 확실히 코트나 파카와 같은 겨울 아우터가 필요한 아침이었다. 이런 날 무신사 회원들에게 다음과 같은 소식을 알릴 수 있어 행복하다. 

무신사가 <2016 무신사 아우터 페스티벌>을 시작한다. 

바로 오늘, 2016년 11월 1일부터 해를 바꾸어 2017년 1월 2일까지 두 달을 꼭꼭 채워 겨울 아우터의 대축제를 진행한다. '대축제'라는 표현에 맞게 총 793개 브랜드의 8천255개 아우터 아이템이 무신사에 총집합 했다. 물론 '혜택'으로 요약되는 다양한 쇼핑 프로그램과 이벤트가 함께 한다. 

가장 먼저 알리고 싶은 쇼핑 프로그램은 '무신사 단독 특가' 아이템이다. 무엇보다 다른 옷에 비해 가격 부담이 높은 아이템 특성을 고려, 무신사 회원들만큼은 한결 부담을 덜고 새로운 겨울 옷을 준비할 수 있도록 특별한 가격과 혜택을 준비했다. 다른 곳에서는 절대 만나볼 수 없는 프로모션이라는 점이 포인트! 

또한 많은 수많은 브랜드와 아이템을 선보이는 대규모 페스티벌인 까닭에 쇼핑의 편의를 도모하기 위해 다양한 세부 카테고리도 준비했다. 실시간 판매량 집계를 통해 현재의 트렌드를 직관적으로 보여줄 '아우터 랭킹'과 이유가 명확한 'MD 추천' 코너는 당신에게 유용한 쇼핑 정보가 되어줄 것이다. '코트'와 'N-3B', '패딩, 'MA-1', '레더 재킷' 등 직관적인 카테고리 구성은 원하는 아이템을 빠르게 찾아낼 수 있는 가이드라인 역할을 해줄 것이다. 

물론 이것만이 전부가 아니다. 특별한 이벤트가 없다면 애초에 '페스티벌'이라 표현할 무신사가 아니라는 점을 당신도 알고 있지 않은가? 

1 매일 랜덤 쿠폰 이벤트 
100% 당첨된다. 적게는 2천원부터 최대 70% 할인쿠폰을 무신사가 쏜다. '매일 랜덤 쿠폰 이벤트'는 무신사 어플리케이션을 통해, 휴대전화 인증 회원에 한해 하루 한 번 할인쿠폰을 발급하는 프로그램이다. 보다 자세한 내용은 별도의 안내 뉴스를 통해 설명하도록 하겠다. 

2 누적구매 랭킹 이벤트 
한 가지 아우터로 결정지을 수 없다면, 이것 저것 담다 보니 장바구니가 터질 것만 같다면, '누적구매 랭킹 이벤트'에 도전해보자. 페스티벌 기간 중 아우터 구매금액 상위 10명에게 아이폰7을 선물로 증정한다. 이 역시 보다 자세한 세부 사항은 별도의 뉴스를 통해 설명하겠다. 

3 블로그 후기 이벤트 
새로 산 아우터에 대한 자랑도 좋고, 엄정한 비판도 좋다. <2016 무신사 아우터 페스티벌>을 통해 구입한 아우터 아이템의 진솔한 '후기'를 당신의 블로그에 남기고 행운의 주인공이 되어보자. 후기 작성자 100명을 추첨하여 적립금 10만원을 지급할 예정이다. 참고로 중복 응모를 통해 당첨 확률을 높여도 좋겠다. 이 역시 별도의 뉴스를 통해 세부사항을 전달하겠다. 

여기에 다양한 컨텐츠를 통하여 무신사 회원 모두에게 생생한 정보도 함께 전할 예정이다. 무신사 모든 스태프들이 정성껏 준비한 <2016 무신사 아우터 페스티벌>. 회원 모두 편안하고 즐거운 마음으로 즐길 수 있길 바란다. 아래의 링크가 대한민국 최고의 겨울 아우터 세일 축제로 안내해줄 것이다.  


관련링크 : 2016 무신사 아우터 페스티벌 (store.musinsa.com/app/outer_festival)
출처 - 2016 무신사 아우터 페스티벌, 겨울 아우터를 구입하는 최고의 방법! / 패션웹진 무신사


반응형

'etc' 카테고리의 다른 글

헤라서울패션위크  (0) 2017.10.15
EBSlang 일본어 강의!  (0) 2017.08.03
토목달을 소개합니다. 토익은 토목달과 함께!  (0) 2017.07.30
#토익 #토목달 토익 목표 달성!!!  (0) 2017.07.19
배열 수식  (0) 2017.02.03
반응형

간단한 "찾아 바꾸기" 기능을 구현하여 보자. 첫 번째로 사용자에게 최대 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

+ Recent posts