C·C++

[C언어] 2차원 배열을 사용한 성적 입출력 프로그램 1

삶과계란사이 2021. 2. 15. 14:57

[C언어] 2차원 배열을 사용한 성적 입출력 프로그램 1

 

1. 프로그램 설명

학생의 학번, 이름, 과목별 점수를 입력받아 각각의 2차원 배열에 저장한 후 최고점자, 최하점자와 함께 출력하는 프로그램이다.

 

2. 소스코드

// 2차원 배열을 사용한 성적 입출력 프로그램

#include <stdio.h>

int main(void)
{
	char id[100][10], name[100][10], key;   //학번,이름,key
	int sub[100][4], max = 0, min = 300;   //과목(HTML,C 언어,Java,총점),최고점,최하점
	double aver[100];   //평균
	int maxIndex = 0, minIndex = 0;   //최고점,최하점을 저장한 배열의 인덱스
	int count = 0;   // 입력한 학생 수

	for (int i = 0;; i++)   //무한반복
	{
		printf("학번을 입력하세요.: ");
		scanf_s("%s", id[i], 9);   //학번 입력 (9 의미: 저장 가능한 문자수) 

		while (getchar() != '\n');   //버퍼 비우기

		printf("이름을 입력하세요.: ");
		scanf_s("%s", name[i], 9);   //이름 입력

		while (getchar() != '\n');   //버퍼 비우기

		printf("HTML 점수를 입력하세요.: ");
		scanf_s("%d", &sub[i][0]);   //HTML 점수 입력

		printf("C 언어 점수를 입력하세요.: ");
		scanf_s("%d", &sub[i][1]);   //C 언어 점수 입력

		printf("Java 점수를 입력하세요.: ");
		scanf_s("%d", &sub[i][2]);   //Java 점수 입력

		sub[i][3] = sub[i][0] + sub[i][1] + sub[i][2];   //총점 저장
		aver[i] = (sub[i][0] + sub[i][1] + sub[i][2]) / 3;   //평균 저장

		if (sub[i][3] > max) {
			max = sub[i][3];   //최고점 저장
			maxIndex = i;   //최고점이 저장된 i값을 maxIndex에 저장
		}

		if (sub[i][3] < min) {
			min = sub[i][3];   //최하점 저장
			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("학번      이름      HTML   C언어   Java   총점   평균\n");
	printf("------------------------------------------------------------------\n");

	for (int i = 0; i < count; i++)   //입력된 성적을 입력된 학생 수만큼 출력
		printf("%s   %s     %d     %d      %d     %d    %.1f\n", id[i], name[i], sub[i][0], sub[i][1], sub[i][2], sub[i][3], aver[i]);

	printf("==================================================================\n");

	printf("<최고점자> 학번      이름      HTML   C언어   Java   총점   평균\n");
	printf("------------------------------------------------------------------\n");
	printf("           %s   %s     %d     %d      %d     %d    %.1f\n", id[maxIndex], name[maxIndex], sub[maxIndex][0], sub[maxIndex][1], sub[maxIndex][2], sub[maxIndex][3], aver[maxIndex]);   //최고점자의 정보가 들어있는 인덱스 출력

	printf("==================================================================\n");

	printf("<최하점자> 학번      이름      HTML   C언어   Java   총점   평균\n");
	printf("------------------------------------------------------------------\n");
	printf("           %s   %s     %d     %d      %d     %d    %.1f\n", id[minIndex], name[minIndex], sub[minIndex][0], sub[minIndex][1], sub[minIndex][2], sub[minIndex][3], aver[minIndex]);   //최하점자의 정보가 들어있는 인덱스 출력

	return 0;
}

 

3. 실행결과