반응형

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

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

전화번호부를 구성하기 위하여 이름, 집전화번호, 휴대폰 번호로 구성되는 구조체를 정의한 후에 이 구조체의 배열을 선언하여 전화번호부를 구성한다. 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

+ Recent posts