네트워크 보안 수업 20일차 - 코리아 정보보안 IT학원

2016. 4. 25. 16:55네트워크 보안 수업/C언어

반응형

구조체(struct)


- 사용자 정의 데이터 타입

- 기본 타입외에 사용자가 직접 데이터 타입을 정의할 수 있다.


- 배열의 단점: 같은 타입의 연속

ex)


성적: 정수, 실수, 이름, ...(x)


구조체의 정의


struct 구조체 이름{

int x;

int y;

double d;

member...

};


* 구조체의 멤버는 어떠한 것도 올 수 있다.(함수는 제외)

ex)


일반변수, 포인터 변수, 배열, 구조체, ...


구조체의 선언


<struct 구조체 이름> <변수 이름>;


int a;


성적 처리

- 한 학생의 국어, 영어, 수학, 총점, 평균

- 학생의 이름 


struct student {

int lang;

int eng;

int math;

int total;


float avg;

char name[10];

};


* 구조체의 멤버는 초기화 될 수 없다.


struct student stu1;


- 변수의 크기

- 변수의 주소

- 변수의 값


구조체는 4바이트 단위로 정렬됨 


구조체 변수의 초기화


struct student stu1 = {0,};





#include <stdio.h>


struct student {

        int lang;

        int eng;

        int math;

        int total;


        float avg;

        char name[10];

};


int main(int argc, char *argv[])

{

        struct student stu1={0,};


        printf("stu1 size: %d \n",sizeof(stu1));

        printf("stu1 addr: 0x%08x \n", &stu1);


        printf("input lang: ");

        scanf("%d", &stu1.lang);


        printf("input eng: ");

        scanf("%d", &stu1.eng);


        printf("input math: ");

        scanf("%d",&stu1.math);


        printf("input name: ");

        scanf("%s", stu1.name);


        printf("stu1 lang: %d \n", stu1.lang);

        printf("stu1 eng : %d \n", stu1.eng);

        printf("stu1 math: %d \n", stu1.math);


        printf("stu1 name: %s \n", stu1.name);


        return 0;

}



구조체 배열


- 구조체 타입의 연속된 공간


int arr[10]


struct student stu[10];


구조체 포인터


- 구조체 변수를 인자로 가지는 함수


- 동적 메모리


* 구조체 변수는 일반 변수와 동일하게 사용 가능

#include <stdio.h>


struct student {

        int lang;

        int eng;

        int math;

        int total;


        float avg;

        char name[10];

};


void print_stu(struct student *temp)

{

        printf("lang: %d \n", (*temp).lang);


}


int main(int argc, char *argv[])

{

        struct student stu1={10,20,30,0,0,"jone"};


        print_stu(&stu1);


        return 0;

}


#include <stdio.h>


struct student {

        int lang;

        int eng;

        int math;

        int total;


        float avg;

        char name[10];

};


void print_stu(struct student *temp)

{

        printf("temp[0] lang: %d \n", temp[0].lang);

        printf("temp[0] eng : %d \n", temp->eng);

        printf("temp[1] lang: %d \n", (temp+1)->lang);

        printf("temp[1] lang: %d \n", temp[1].lang);


}


int main(int argc, char *argv[])

{

        struct student stu[10]={0,};


        stu[0].lang=20;

        stu[0].eng=30;


        stu[1].lang=50;


        print_stu(stu);


        return 0;

}


학생 성적 처리 프로그램 작성


- 학생 3명의 국어, 영어, 수학 성적의 총점과 평균을 구하는 프로그램을 작성


#include <stdio.h>


struct student {

        int lang;

        int eng;

        int math;

        int total;


        float avg;

        char name[10];

};


void input_score(struct student *temp)

{

        int i=0;


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

                printf("input name: ");

                scanf("%s",&temp[i].name);


                printf("%d. input lang, eng, math: ",i+1);

                scanf("%d %d %d",&temp[i].lang,&temp[i].eng,&temp[i].math);

                temp[i].total=temp[i].lang+temp[i].eng+temp[i].math;

                temp[i].avg=temp[i].total/3.0;

        }

}


void print_score(struct student *temp)

{

        int i=0;


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

                printf("name: %s \n", temp[i].name);

                printf("lang: %d \n", temp[i].lang);

                printf("eng : %d \n", temp[i].eng);

                printf("math: %d \n", temp[i].math);

                printf("total: %d \n, avg: %0.2f \n", temp[i].total, temp[i].avg);

        }

}


int main(int argc, char *argv[])

{

        struct student stu[3]={0,};


        input_score(stu);

        print_score(stu);


        return 0;

}

반응형