C언어 ⑩

정혜지·2023년 4월 14일
0

구조체

객체 지향 프로그래밍의 클래스(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

  • TABLE 학생
    • 학번
    • 이름
    • 학점

: 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;
}





profile
오히려 좋아

0개의 댓글