본문 바로가기

programming language/C 언어

c언어 구조체 이해

우선 구조체는 객체 지향 프로그래밍 언어에서 말하는 클래스의 모체가 되는 것으로 

여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있는 방법이다.

 

학생정보 구조체 만들기

 

#include <stdio.h>
#include <stdlib.h>

struct student {                   >>하나의 구조체를 만들어줌
int number;
char name[10];
double grade;                          grade>>학점
};

int main(void)
{
struct student s;  
s.number = 20150001; 
strcpy(s.name, "홍길동");  
s.grade = 4.5;     //여기까지 s라는 이름의 student구조체 변수는 이런 식으로 각각의 변수에 대한 값을 가지게 된 것이다

printf("학번: % d\n", s.number);   
printf("이름: % s\n", s.name);
printf("학점: %. 1f\n", s.grade);
return 0;
}

 

struct student s;  : 구조체 student의 변수를 s로 만든 것임. 즉 , 하나의 자료형을 우리가 스스로 만들어냈다고 볼 수 있다. (왜냐 변수 앞에는 자료형이 붙으니까)

s.number = 20150001; : 즉 s라는 구조체의 number변수 안에 201150001을 넣을 수 있는 것임. 즉 이 값이 6행에 들어가는 것이라 볼 수 있다.

strcpy(s.name, "홍길동"); : charg형 배열이기 때문에 이렇게 안정적으로 문자열을 삽입할 수 있다.


 

학생 정보 구조체 활용

#include <stdio.h>   
#include <stdlib.h>

 

struct student {
int number;
char name [10];
double grade;
};

//이제는 사용자로부터 입력받을 수 있게.

int main(void)   
{
struct student s;
printf("학번을 입력해요: ");
scanf("% d", &s.number);
printf("이름을 입력하세요: ");
scanf("% s", s.name); 
printf("학점을 입력하세요: ");
scanf("% lf", &s.grade);

printf("학번: % d\n", s.number);   
printf("이름: % s\n", s.name);
printf("학점: %. lf\n", s.grade);
return 0;
}

 

scanf("% s", s.name); : 왜 s.name?? &를 붙이지 않을까? 배열은 그 자체로 포인터의 의미를 가지고 있기 때문에 해당 배열의 주소 자체를 의미하고 있고, 따로 주소를 가리키는 &를 넣을 필요가 없는 것이다.

 

디버깅 창에서 입력을 넣으면, 해당 구조체가 완성되고,

그 구조체 안에 들어가 있는 각각의 내용들이 차례대로 출력이 된다.


구조체 이용해 두 점 사이의 거리 구하는 프로그램. 

 

#include <stdio.h>
#include <math.h>


struct point {      //point라는 이름의 구조체 선언
int x;
int y;
};

int main(void)
{
struct point p1, p2 ;  
int xDiff,  yDiff;     
//xDiff :  x좌표의 차이점
double distance;    
//distance 우리가 구할 답

printf("1번 점의 좌표를 입력하세요 : ");
scanf("%d %d", &p1.x, &p1.y);
printf("\n");
printf("2번점의 좌표를 입력하세요 : ");
scanf("%d %d", &p2.x, &p2.y);

xDiff = p1.x - p2.x;
yDiff = p1.y - p2.y;

distance = sqrt(xDiff * xDiff + yDiff * yDiff);   
printf("두 점 사이의 거리는 %f입니다.\n", distance);
return 0;
}

struct point : point라는 이름의 구조체 선언.

struct point p1, p2 ; : 구조체 point의 변수를 p1, p2로 2개 할당.

sqrt : sqrt제곱근을 구하는 함수. math헤더 파일에 들어가 있음.  

 

* sqrt 함수에 값을 넣으면 해당 값의 제곱근을 구해준다.

  이때 제곱근은 소수로 나오므로 double형 변수에 저장해줘야 한다.

 

(xDiff * xDiff + yDiff * yDiff) 두 점 사이 거리 구하기 공식. 

우리가 피타고라스 정리를 이용하여 구해 주는 과정이라고 생각해주면 된다.

피타고라스 정리

 

동빈나 유튜브의 도움을 받아 부족한 부분을 채워 나가는 중입니다.