객체 지향 프로그래밍의 클래스(Class)와 흡사한 개념으로 여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있다.
#include <stdio.h>
#include <stdlib.h>
// 학생 구조체(struct)
struct student
{
int num;
char name[10];
double grade;
};
// main 함수
int main()
{
struct student s;
s.num = 20230414;
strcpy(s.name, "홍길동");
s.grade = 4.5;
printf("학번 : %d\n", s.num);
printf("이름 : %s\n", s.name);
printf("학점 %.1f\n", s.grade);
retunr 0;
}
// 학번 : 20230414
// 이름 : 홍길동
// 학점 4.5
학생 정보 구조체 활용
#include <stdio.h>
#include <stdlib.h>
struct
{
int num;
char name[10];
double grade;
}
{
struct student s;
printf("학번을 입력하세요 : ");
scanf("%d", &s.num);
printf("이름을 입력하세요 : ");
scanf("%s", s.num);
// 배열은 그자체로 포인터의 의미를 가지기때문에 &기호 필요X
printf("학점을 입력하세요 : ");
scanf("%lf", &s.grade);
//double형은 입력받을 때 형식지정자 %lf를 사용해야한다.
//float형은 %f
printf("학번 : %d\n", s.num);
printf("이름 : %s\n", s.name);
printf("학점 %.1f\n", s.grade);
retunr 0;
}
두 점 사이의 거리 구하기
#include <stdio.h>
#include <math.h>
struct point
{
int x;
int y;
}
int main()
{
struct point p1, p2;
int xDiff, yDiff;
double distance;
printf("1번 점의 좌표를 입력하세요 : ");
scanf("%d %d", &p1.x, &p1.y);
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);
// sqrt() 제곱근을 구하는 함수
printf("두 점 사이의 거리는 %f입니다.\n", distance);
return 0;
}
학생 정보 시스템을 만든다고 가정해보자~!
학생 정보 시스템
struct student
{
int num;
char name[10];
double GPA;
}
student, 실제 세계에서 존재하는 객체 자체를 프로그래밍 안에서 이렇게 묶어서 한번에 구현한다는 점에서 관리가 쉽고 편리하다.
실제로 데이터베이스에 접근하고 어떠한 데이터를 관리하는 측면에서도 훨씬 효율적
Server DB
: DB 테이블의 속성과 프로그래밍 구조체와 그대로 매칭이 된다~!
즉, 실질적으로 프로그래밍 상에서 서버에 접근해서 DB에서 학번, 이름, 학점 등 그대로 1:1로 매칭해서 가져올 수 있다
=> 효율적 관리
=> 데이터 모델링 전박적 측면에서 이득
사격형의 넓이와 둘레 구하기
#include <stdio.h>
#include <math.h>
// 좌표 구조체
struct point
{
int x;
int y;
}
// 사각형 구조체
struct rect
{
struct point p1;
struct point p2;
}
// main 함수
int main()
{
struct rect r;
int w, h, area, peri;
printf("왼쪽 상단의 좌표를 입력하세요 : ");
scanf("%d %d", &r.p1.x, &r.p1.y);
printf("오른쪽 하단의 좌표를 입력하세요 : ");
scanf("%d %d", &r.p2.x, &r.p2.y);
w = abs(r.p2.x - r.p1.x);
h = abs(r.p2.y - r.p1.y);
area = w * h;
peri = 2 * w + 2 * y;
printf("사각형의 너비는 %d이고, 둘레는 %d입니다.", area, peri);
return 0;
}