학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

구조체

학습목표

구조체는 종류가 다른 여러 개의 변수를 하나의 집합체로 취급하는 방식 입니다. 데이터의 관리가 효율적으로 됩니다. 이를 사용하는 방법을 공부 합니다.

학습주제

1.       구조체의 선언

2.       구조체의 데이터 입력

3.       구조체의 연산

4.       구조체의 출력

예습내용

malloc, free

 

실습방법

   

1. 구조체의 선언

struct 태그명{

              데이터형 멤버;

              데이터형 멤버;

} 구조체변수

 

 

 

 

 

아래 예제는 구조체의 사용을 보인 것이다. 이를 실행해 보고 다음에 설명을 읽어보고 이를 사용하는 이점을 생각해 보기 바랍니다.

예제1

국어, 영어 점수를 구조체로 선언하고 합과 평균을 구하는 함수

입력 파일 “input.txt” 아래와 같다.

10 45

34 67

34 56

11 22

45 67

#include "stdafx.h"

#include <stdio.h>

#include <malloc.h>

 

typedef struct list Man;

 

struct list{                            //(1)구조체의 선언

              int kor;

              int eng;

              int sum;

              float ave;

};

 

Man *init; //(2)구조체의 시작 번지를 전역 변수로 저장

 

void main(void)

{

              Man *a;

              int i;

              FILE *fp;

             

              init = (Man *)malloc(sizeof(Man)*10);    //(3) 10 명의 데이타 메모리 할당

             

              //(4) 입력부

              fp=fopen("input.txt","r");

              a = init;

              for(i=0;i<5;i++) {

                             fscanf(fp,"%d %d",&a->kor,&a->eng);

                             a++;

              }

              fclose(fp);

 

              //(5) 연산부

              a = init;

              for(i=0;i<5;i++) {

                             a->sum=a->kor+a->eng;

                             a->ave=(float)a->sum/2.;

                             a++;

              }

             

 

              //(6) 출력부

              a = init;

              for(i=0;i<5;i++) {

                             printf("%d+%d=%d 평균:%f\n",a->kor,a->eng,a->sum,a->ave);

                             a++;

              }

 

              free(init);  //(7) malloc으로 잡은 메모리를 돌려 준다.

}

10+45=55 평균:27.500000

34+67=101 평균:50.500000

34+56=90 평균:45.000000

11+22=33 평균:16.500000

45+67=112 평균:56.000000

 

(1)     (1) 4개의 멤버 변수를 묶어서 구조체로 선언한 것으로 이렇게 하면 데이터를 사람 중심으로 관리 있다. 메모리에는 kor,eng,sum,ave 순서로 반복되어 입력된다.

(2)     원래 “struct list *init” 같이 선언한다. 그러나 위와 같이 “struct list” typedef 에서 “Man”으로 선언하고 “Man *init” 같이 선언하면 variable 정의와 같이 간편하게 사용할 있다.

(3)     5명의 성적을 입력 하려면 Man 배열을 사용하거나 이와 같이 malloc 사용하여 메모리에 할당하고 끝날 때는 (7) 같이 끝날 할당된 메모리를 해제해야 프로그램 실행 중에 메모리가 꽉차서 프로그램 에러가 발생하는 것을 방지 있다.

(4)     Man 포인터 *a 선언 하면 전역 변수로 선언한 init 번지로 찾아가 ++a 같이 메모리 번지를 이동하며 값을 참조할 있다. 이는 C언어의 상당한 장점이다.

처음

   

1.        구조체를 사용했을 때의 장점을 기술하시오.

2.        예제에서 수학점수(math) 추가하고 10명의 국어,영어,수학 성적을 산출 하시오.

중요함수