[C언어] 성적처리 시스템 만들기
- 카테고리 없음
- 2020. 11. 30.
#include<stdio.h>
#include<string.h>
void input(char(*name)[10], int(*score)[4], const char(*scoName)[10]);
void oper(int(*score)[4], float* avg);
void disp(char(*name)[10], int(*score)[4], float* avg, const char(*scoName)[10]);
int main()
{
//상수
//static은 함수가 사라져도 사라지지 않기 때문에 함수에서 사용 할 수 있다.
//메인에서는 굳이 사용 안해도 된다.
const static char scoName[6][10] = { "name", "Kor", "Eng", "Mat", "Total", "Avg" };
char name[3][10];
int score[3][4] = { 0, };
float avg[3];
// call by adress, call by value, call by reference는 결합도가 높다.
// 서로 주고 받는 것이 있기 때문이다.
// call by name은 결합도가 낮다. 이름만 맞추면 되기 때문이다.
input(name, score, scoName);
oper(score, avg);
disp(name, score, avg, scoName);
return 0;
}
// 입력 받기
// 배열은 매개변수로 보내지 못 한다.
// 매개변수에 있는 배열은 포인터다.
// 함수 안에서 배열을 선언해야만 배열이 된다.
//void input(char name[][10], int score[][4], char scoName[][10])
//void input(char name[3][10], int score[3][4], char scoName[6][10])
void input(char(*name)[10], int(*score)[4], char (*scoName)[10])
{
int i, j;
for (i = 0; i < 3; i++)
{
printf("%s input :", scoName);
scanf("%s", name + i); //*(name+i)
for (j = 0; j < 3; j++)
{
printf("%s input : ", scoName[j + 1]); //*(score+i)+j
scanf("%d", score[i] + j); //*(score+i)+j
}
}
}
//결과 계산하기
void oper(int(*score)[4], float* avg)
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
*(*(score + i) + 3) += *(*(score + i) + j);
}
*(avg + i) = *(*(score + i) + 3) / 3.f;
}
}
void disp(char(*name)[10], int(*score)[4], float* avg, const char(*scoName)[10])
{
int i, j;
for (i = 0; i < 3; i++)
{
printf("%s : %s\t", scoName, *(name + i));
for (j = 0; j < 4; j++)
{
printf("%s : %d\t", *(scoName + j + 1), *(*(score + i) + j));
}
printf("%s : %f\n", *(scoName + 5), *(avg + i));
}
}
반응형