본문 바로가기
프로그래밍 언어/C언어

혼자공부하는C언어_도전실전예제_Chapter17

by 엉덩이싸움 2024. 2. 12.

 

구조체를 이용한 성적 처리 프로그램

#include <stdio.h>

typedef struct student Student;

struct student 
{
int id;
char name[10];
int kor;
int eng;
int mat;
int sum;
double avg;
char grade;

};

void cal(Student* ps);
void print(Student* ps);
void align(Student* ps);

int main(void)
{
int i;
Student profile[5];
Student* ps = profile;

for (i = 0; i < 5; i++)   데이터입력
{
printf("학번 : ");
scanf("%d", &(ps[i].id));
printf("이름 : ");
scanf("%s",&ps[i].name);
printf("국어, 영어, 수학 점수 : ");
scanf("%d%d%d", &ps[i].kor, &ps[i].eng, &ps[i].mat);
}
cal(ps);
printf("#정렬 전 데이터...\n");
print(ps);

align(ps);
printf("#정렬 후 데이터...\n");
print(ps);

return 0;
}

void cal(Student* ps)  합산, 평균, 성적 데이터 계산
{
int i;
for (i = 0; i < 5; i++)
{
ps[i].sum = ps[i].kor + ps[i].eng + ps[i].mat;
ps[i].avg = ps[i].sum / 3.0;

if (ps[i].avg >= 90) ps[i].grade = 'A';    //grade
else if (ps[i].avg >= 80) ps[i].grade = 'B';
else if (ps[i].avg >= 70) ps[i].grade = 'C';
else ps[i].grade = 'F';
}
}

void print(Student* ps)   구조체 출력
{
int i;
for (i = 0; i < 5; i++)
{
printf("%5d%10s%5d%5d%5d%5d  %.1lf%5c\n", ps[i].id, ps[i].name, ps[i].kor, ps[i].eng, ps[i].mat, ps[i].sum, ps[i].avg, ps[i].grade);
}
}

void align(Student* ps)  총점 순으로 구조체 순서 변경
{
int i, j;
Student temp;
int max;
for (i = 0; i < 4; i++)
{
max = i;
for (j = 1 + i; j < 5; j++)
{
if (ps[max].sum < ps[j].sum)
{
max = j;
}
}
if (max != i)
{
temp = ps[i];
ps[i] = ps[max];
ps[max] = temp;
}

}

}