[2004년 기말 7번] 자료 입력 - 구조체/동적 할당
1. 목적
- 필요한 만큼 자료를 정의 하는 동적 할당에 대해 이해한다.
- 구조체에 따른 자료 구조를 이해한다.
2. 문제 (점수 : 40 점)
- 학생에 대한 정보(이름,성적)을 구조체로 하여 성적을 입력후 평균을 구하는 프로그램을 작성한다.
- 키보드로 학생 정보를 입력받는다.
- 실행화면
학생의 수 : 4
1 번째 학생의 이름과 성적 : 홍길동 67.89
2 번째 학생의 이름과 성적 : 장길산 46.75
3 번째 학생의 이름과 성적 : 너바보 23.79
4 번째 학생의 이름과 성적 : 나잘난 99.84
입력된 학생들에 대한 정보
홍길동 : 67.89
장길산 : 46.75
너바보 : 23.79
나잘난 : 99.84
학생들의 평균 성적 : 59.57
Press any key to continue
3. 이해
- 구조체를 정확히 이해하는가?
- 동적할당을 할수 있는가?
4. 코드
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct stu_data
{
char name[6];
float score;
};
int i,count;
float total;
struct stu_data* stu = NULL;
i = 1;
count = 0;
total = 0.0;
printf("학생의 수 : ");
scanf("%d", &count);
stu = calloc(count, sizeof(stu));
while(i<=count)
{
printf("%d 번째 학생의 이름과 성적 : ", i);
scanf("%s %f", stu[i-1].name, &(stu[i-1].score));
i++;
}
i = 0;
printf("\n입력된 학생들에 대한 정보\n");
while(i<count)
{
printf("%s : %0.2f\n",stu[i].name, stu[i].score);
total += stu[i].score;
i++;
}
printf("\n학생들의 평균 성적 : %0.2f\n", total/count);
stu = NULL;
free(stu);
return 0;
}
5. 해설
- calloc 함수는 C 언어에서 메모리를 할당 받아 변수에게 주는 함수 입니다. malloc 과 유사합니다.
- while 문으로 자료를 입력 받고 출력합니다.
- NULL 로 맞춘후에 free 함수로 비우게 합니다.
6. 참고
- http://www.winapi.co.kr/clec/cpp1/10-3-4.htm : 재할당(malloc, calloc 연관)
- 네이버 지식인
- 유사 문제