상세 컨텐츠

본문 제목

C 언어 예제. 각 학생들의 성적 입력 받기, 평균에 따른 줄세우기(포인터 이용)

컴퓨터 관련/C 언어 예제

by 열정과 함께 2013. 12. 22. 03:57

본문

목표는 이렇게 만드는 것이다.



단, 평균이 같은 학생이 나오면 어찌될지 장담 못함.

소수점은 버림


#include <stdio.h>


int defineRANK(int (*KEM)[6]);

int main()

{

int KEM[5][6]; 

int i, j, k, l, m;

for(i=0;i<5;i++)

{

printf("학생 %d 의 국영수 점수를 차례대로 입력해주세요. \n", i+1);

for(j=0;j<3;j++)

{

scanf("%d", &KEM[i][j]);

}

KEM[i][3] = (KEM[i][0]+KEM[i][1]+KEM[i][2])/3;

KEM[i][4] = i+1;

}

m = (KEM[0][3]+KEM[1][3]+KEM[2][3]+KEM[3][3]+KEM[4][3])/5;

defineRANK(KEM);

printf("전체평균 : %d \n", m);

for(k=1;k<6;k++)

{

for(l=0;l<5;l++)

{

if(k == KEM[l][5])

{

if(KEM[l][3] > m)

{

printf("%d 등 : 학생 %d. 평균 : %d, 합격 \n",k,KEM[l][4],KEM[l][3]);

}

else if(KEM[l][3] == m)

{

printf("%d 등 : 학생 %d. 평균 : %d, 합격 \n",k,KEM[l][4],KEM[l][3]);

}

else

{

printf("%d 등 : 학생 %d. 평균 : %d, 불합격 \n",k,KEM[l][4],KEM[l][3]);

}

}

}

}

return 0;

}

int defineRANK(int (*KEM)[6])

{

int a, b, c=5;

for(a=0;a<5;a++)

{

for(b=0;b<5;b++)

{

if(KEM[a][3]>KEM[b][3])

{

c = c-1;

}

}

KEM[a][5] = c;

c=5;

}

return 0;

}


이건 해석 부분

#include <stdio.h>

int defineRANK(int (*KEM)[6]);

등수를 정하는 부분을 포인터를 이용해 따로 빼기로 결정(원한다면 다른 부분을 빼도 무방). 배열 이름을 KEM(국영수 영문)으로 한다. 그리고 KEM 의 포인터를 받게 만들었음. 이 때, *KEM 을 통해 KEM 의 포인터라는 것을 알 수 있게 되고, [6] 부분이 추가되면 KEM 배열의 완전한 모양을 함수 defineRANK 는 전달받게 된다.

int main()

{

int KEM[5][6]; 

배열 설명. 학생은 일단 다섯명. 다섯명의 여섯가지 정보 입력.

국어 점수 / 영어 점수 / 수학 점수 / 학생의 성적 평균 / 학생의 석차 / 학생 번호(일련번호같이) 

int i, j, k, l, m;

for(i=0;i<5;i++)

{

printf("학생 %d 의 국영수 점수를 차례대로 입력해주세요. \n", i+1);

for(j=0;j<3;j++)

{

scanf("%d", &KEM[i][j]);

}

KEM[i][3] = (KEM[i][0]+KEM[i][1]+KEM[i][2])/3;

KEM[i][4] = i+1;

}

m = (KEM[0][3]+KEM[1][3]+KEM[2][3]+KEM[3][3]+KEM[4][3])/5;

그러하다. 특이사항 없음.

defineRANK(KEM);

defineRANK 함수에 KEM 배열 전달. 

printf("전체평균 : %d \n", m);

for(k=1;k<6;k++)

아래 부분에서 석차 뽑을 때 k 값으로 뽑았기 때문에 k 를 1부터 시작하게 하였음.

{

for(l=0;l<5;l++)

{

if(k == KEM[l][5])

{

if(KEM[l][3] > m)

{

printf("%d 등 : 학생 %d. 평균 : %d, 합격 \n",k,KEM[l][4],KEM[l][3]);

}

else if(KEM[l][3] == m)

{

printf("%d 등 : 학생 %d. 평균 : %d, 합격 \n",k,KEM[l][4],KEM[l][3]);

}

else

{

printf("%d 등 : 학생 %d. 평균 : %d, 불합격 \n",k,KEM[l][4],KEM[l][3]);

}

}

}

}

return 0;

}

int defineRANK(int (*KEM)[6])

{

int a, b, c=5;

for(a=0;a<5;a++)

{

for(b=0;b<5;b++)

{

if(KEM[a][3]>KEM[b][3])

{

c = c-1;

}

}

KEM[a][5] = c;

c=5;

}

return 0;

}



만들면서 이차원 배열을 포인터로 전달하는 데 애먹은 문제.


문제의 핵심. 배열을 전달받는 함수가 자신이 무엇을 전달받는지 알 수 있도록 명확하게 정의해주면 풀린다.


그거 정의 안 해주면 자꾸 매개변수가 어쩌니 하는 오류가 뜨게 된다.









관련글 더보기

댓글 영역