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 연관)
  - 네이버 지식인
  - 유사 문제

Posted by 카켈