기말고사 코드는 학생 성적 처리 프로그램이다.
학생 10명의 이름과 C언어 점수를 입력받고,
최고 성적 학생의 이름과 전체 평균을 출력한다.
1. 제출 코드 구성
| 파일 | 역할 |
|---|---|
student_prg_main.c |
전체 실행 흐름 |
student_lib.h |
구조체 정의, 상수, 함수 원형 |
student_lib.c |
입력, 최고점 탐색, 평균 계산 함수 구현 |
기말 코드의 핵심은 구조체 배열과 함수 분리다.
2. 구조체 설계
#define NAME_LEN 16
#define STD_NO 10
typedef struct
{
char sNameZ[NAME_LEN];
double dScore;
} stStudent;
| 멤버 | 의미 |
|---|---|
sNameZ |
학생 이름 문자열 |
dScore |
C언어 점수 |
stStudent oStudent[STD_NO]처럼 선언하면 학생 10명의 이름과 점수를 한 배열에서 함께 관리할 수 있다.
3. 전체 실행 흐름
학생 구조체 배열 선언
학생 정보 입력
최고 성적 학생 인덱스 계산
평균 점수 계산
최고 성적 학생 이름과 평균 출력
main()은 계산을 직접 하지 않고 함수를 호출해 결과만 받는다.
int main(void)
{
stStudent oStudent[STD_NO];
int iFirstStudentIndex;
double dAvgScore;
getStudentInfo(oStudent);
iFirstStudentIndex = getFirstStudentIndex(oStudent);
dAvgScore = getAvgScore(oStudent);
printf("최고 성적의 학생이름 : %s\n평균점수 : %.2lf",
oStudent[iFirstStudentIndex].sNameZ, dAvgScore);
return 0;
}
4. 최고점 탐색
최고점 탐색은 첫 번째 학생을 기준값으로 잡고, 1번 인덱스부터 비교한다.
int getFirstStudentIndex(stStudent oStudent[STD_NO])
{
double dMax;
int iIndex;
int iLoop;
dMax = oStudent[0].dScore;
iIndex = 0;
for (iLoop = 0; iLoop < STD_NO - 1; iLoop++)
{
int iStudentIndex;
iStudentIndex = iLoop + 1;
if (oStudent[iStudentIndex].dScore > dMax)
{
dMax = oStudent[iStudentIndex].dScore;
iIndex = iStudentIndex;
}
}
return iIndex;
}
원본 코드는 for (int i = 1; i < STD_NO; ++i) 형태였는데,
위처럼 쓰면 반복 횟수가 STD_NO - 1번이라는 점이 더 분명하다.
5. 평균 계산
double getAvgScore(stStudent oStudent[STD_NO])
{
double dSum;
double dAvg;
int iLoop;
dSum = 0;
for (iLoop = 0; iLoop < STD_NO; iLoop++)
{
dSum = dSum + oStudent[iLoop].dScore;
}
dAvg = dSum / STD_NO;
return dAvg;
}
합계를 먼저 구하고, 마지막에 학생 수로 나누는 전형적인 평균 계산 구조다.
6. 리뷰 포인트
좋았던 점:
- 구조체로 이름과 점수를 묶었다.
- 입력, 최고점 탐색, 평균 계산을 함수로 분리했다.
.h와.c를 나누어 선언부와 구현부를 구분했다.- 최고점 학생을 이름이 아니라 인덱스로 반환해 원본 배열과 연결했다.
보완하면 좋은 점:
- 입력 함수에서 이름 길이 초과를 막는 입력 폭 제한을 고려할 수 있다.
getFirstStudentIndex는 이름상 "1등 학생 인덱스"라는 의미이므로getTopStudentIndex같은 이름도 직관적이다.- 동점 처리 기준을 명시하면 더 완성도 있다. 현재는 먼저 나온 최고점 학생이 유지된다.
7. 정리
기말고사 코드는 구조체, 배열, 함수 분리, 헤더 파일 사용을 함께 확인하는 문제다. 핵심은 학생 한 명의 정보를 구조체로 묶고, 학생 여러 명을 구조체 배열로 처리한다는 점이다.
'language > c' 카테고리의 다른 글
| [C언어] 과제 Review - 로또 번호 생성기 (0) | 2026.09.28 |
|---|---|
| [C언어] 중간고사 Review - 사칙연산 계산기 (0) | 2026.09.14 |
| [C언어] 10. 구조체와 동적할당 (0) | 2026.09.07 |
| [C언어] 09. 포인터 (Pointer) (0) | 2026.08.31 |
| [C언어] 08. 문자열 (String) (0) | 2026.08.24 |