[c언어] 학생의 시험 평균 구하기 (구조체)

2021. 2. 3. 11:40Computer Science/C

 

학생 수를 입력 받고 학생의 이름, 중간고사, 학기말고사를 입력받아 

학생의 각각 중간고사 평균과 학기말고사 평균을 계산하고,

그룹 전체의 평균을 구하는 프로그램을 작성한다.

 

#include <stdio.h>

struct student {
     char name[20];
     int midterm;
     int final;
     int average;
};
typedef struct student Student;

struct cClass {
     int num;
     Student s[40];
};
typedef struct cClass CClass;

void readClass(CClass *cp)
{
    int i;
    for (i = 0; i < cp->num; i++) {
        printf("Enter student name: ");
        scanf("%s", cp->s[i].name);
        printf("Enter midterm and final score: ");
        scanf("%d %d", &cp->s[i].midterm, &cp->s[i].final);
    }
}

void printClass(CClass *cp)
{
    int i;
    for (i = 0; i < cp->num; i++) {
        printf("%s\t", cp->s[i].name);
        printf("%d\t%d\t%d\n", cp->s[i].midterm, cp->s[i].final, cp->s[i].average);
    }
}

void calculateStudentAverage(CClass *cp)
{
    int i;
    for (i = 0; i < cp->num; i++) {
        cp->s[i].average = (cp->s[i].midterm + cp->s[i].final) / 2;
    }
}

void calculateAll(CClass *cp, Student *pAll)
{
    int i;
    int AllMid = 0, AllFinal = 0, AllAvg = 0;
    
    for (i = 0; i < cp->num; i++) {
        AllMid += cp->s[i].midterm;
        AllFinal += cp->s[i].final;
        AllAvg += cp->s[i].average;
    }
    
    pAll->midterm = AllMid / cp->num;
    pAll->final = AllFinal / cp->num;
    pAll->average = AllAvg / cp->num;
}

void printStudent(Student *pAll) 
{
    printf("%s \t %d \t %d \t %d\n", pAll->name,
           pAll->midterm, pAll->final, pAll->average);
}

int main(void)
{
    CClass cp;
    
    Student all = {"All", 0, 0, 0};
    
    printf("Enter a numver of student: ");
    scanf("%d", &cp.num);
    
    readClass(&cp);
    
    calculateStudentAverage(&cp);
    
    printf("\n이름\t중간\t학기말\t평균\n");
    printClass(&cp);
    
    calculateAll(&cp, &all);
    printf("------------------------------\n");
    printStudent(&all);
}

 

결과는 아래와 같다.