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. 실행결과