C·C++
[C언어] 구조체 배열을 사용한 성적 입출력 프로그램
삶과계란사이
2021. 2. 15. 15:17
[C언어] 구조체 배열을 사용한 성적 입출력 프로그램
1. 프로그램 설명
학생의 학번, 이름, 과목별 점수를 입력받아 각각의 구조체 배열에 저장한 후 최고점자, 최하점자와 함께 출력하는 프로그램이다.
2. 소스코드
// 구조체 배열을 사용한 성적 입출력 프로그램
#include <stdio.h>
struct score //구조체 score 정의
{
char id[10]; //학번
char name[10]; //이름
int c, html, java, tot; //C 언어,HTML,Java,총점
float avg; //평균
};
int main(void)
{
int max = 0, min = 300; //최고점,최하점
int maxIndex = 0, minIndex = 0; //최고점,최하점을 저장한 배열의 인덱스
int count = 0; //입력한 학생 수
char key; //key
struct score s[100]; //구조체 score 선언
for (int i = 0;; i++) //무한반복
{
printf("학번을 입력하세요.: ");
scanf_s("%s", s[i].id, 9); //학번 입력 (9 의미: 저장 가능한 문자 수)
while (getchar() != '\n'); //버퍼 비우기
printf("이름을 입력하세요.: ");
scanf_s("%s", s[i].name, 9); //이름 입력
while (getchar() != '\n'); //버퍼 비우기
printf("C 언어 점수를 입력하세요.: ");
scanf_s("%d", &s[i].c); //C 언어 점수 입력
printf("HTML 점수를 입력하세요.: ");
scanf_s("%d", &s[i].html); //HTML 점수 입력
printf("Java 점수를 입력하세요.: ");
scanf_s("%d", &s[i].java); //Java 점수 입력
s[i].tot = s[i].c + s[i].html + s[i].java; //총점 저장
s[i].avg = (s[i].c + s[i].html + s[i].java) / 3; //평균 저장
if (s[i].tot > max)
{
max = s[i].tot; //최고점 저장
maxIndex = i; //최고점이 저장된 i값을 maxIndex에 저장
}
if (s[i].tot < min)
{
min = s[i].tot; //최하점 저장
minIndex = i; //최하점이 저장된 i값을 minIndex에 저장
}
count++; //입력이 끝날 때마다 count값 증가
printf("계속하려면 아무 키나 입력하세요.: ");
scanf_s(" %c", &key); //아무 키나 입력
printf("---------------------------------------\n");
while (getchar() != '\n'); //버퍼 비우기
if (key == 'F' || key == 'f')
break; //key에 F나 f를 입력 받으면 for문 탈출
}
printf("\n==================================================================\n");
printf("학번 이름 C언어 HTML Java 총점 평균\n");
printf("------------------------------------------------------------------\n");
for (int i = 0; i < count; i++) //입력한 성적을 입력한 학생 수만큼 출력
printf("%s %s %d %d %d %d %.1f\n", s[i].id, s[i].name, s[i].c, s[i].html, s[i].java, s[i].tot, s[i].avg);
printf("==================================================================\n");
printf("<최고점자> 학번 이름 C언어 HTML Java 총점 평균\n");
printf("------------------------------------------------------------------\n");
printf(" %s %s %d %d %d %d %.1f\n", s[maxIndex].id, s[maxIndex].name, s[maxIndex].c, s[maxIndex].html, s[maxIndex].java, s[maxIndex].tot, s[maxIndex].avg); //최고점자의 정보가 들어있는 인덱스 출력
printf("==================================================================\n");
printf("<최하점자> 학번 이름 C언어 HTML Java 총점 평균\n");
printf("------------------------------------------------------------------\n");
printf(" %s %s %d %d %d %d %.1f\n", s[minIndex].id, s[minIndex].name, s[minIndex].c, s[minIndex].html, s[minIndex].java, s[minIndex].tot, s[minIndex].avg); //최하점자의 정보가 들어있는 인덱스 출력
return 0;
}
3. 실행결과