[C언어] 성적처리 시스템 만들기

    #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));
    	}
    }

    반응형

    댓글

    Designed by JB FACTORY