C/기초

구조체

appmaster 2019. 7. 30. 15:56

C언어는 기본적으로 Java나 C++과 같은 다양한 프로그래밍 언어에 비해서 개발이 까다로운 편이다. 무엇보다 객체 지향에서의 모듈들을 C에서 바르게 적용하기 어렵다는 점에 있다. 다만 C가 익숙하다면 다른 객체 지향 프로그래밍 언어로 작성한 프로그램을 그대로 C에서도 개발할 수 있을 만큼 개발자의 능력에 따라 구현된 프로그램의 기능이 전차만별일 수 있다.

 

신기하게도 C언어에는 객체 지향 프로그래밍에서 클래스(class)와 흡사한 개념으로 사용되는 구조체(Structure)가 있다. 

 

 

  • 구조체란 : 객체 지향 프로그래밍에서 말하는 클래스의 모체가 되는 것으로 여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있는 방법이다.

 

구조체는 여러 개의 데이터를 하나로 묶어서 사용할 수 있도록 하기 위해 만들어진 C언어 문법이다. 후에 이러한 구조체의 개념은 객체 지향 프로그래밍에서는 클래스라는 개념으로 확장되어 사용된다. 배열에 여러 개의 같은 자료형들을 하나로 묶는 것이었다면 구조체는 서로 다른 자료형들을 하나로 묶어서 한꺼번에 다루는 것이다. 즉 틀을 만들고 그안에 들어갈수 있는 내부적인 변수들을 모두 집어넣는것을 말한다.

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

//학생정보 구조체

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

int main(void)
{
	struct student s;
	s.number = 20150001;
	strcpy(s.name, "홍길동");
	s.grade = 4.5;
	printf("학번 : %d\n", s.number);
	printf("이름 : %s\n", s.name);
	printf("학점 : %1f\n", s.grade);

	return 0;
}

 

 

이렇게 구조체를 통해서 간결하게 학생정보를 만들었다.

 

 

또한 활용도 할 수 있는데

#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); //double은 lf 이고 float은 f만 사용하면 된다.

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

스캐너에 입력을 받아서 하는 방법이다.

 

 

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


struct point {
	int x;
	int y;
};

int main(void) {
	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 = p2.x - p2.y;

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

	return 0;
}

x좌표와 y좌표의 거리를 구해보자. 

'C > 기초' 카테고리의 다른 글

파일 입출력  (0) 2019.08.01
구조체 활용  (0) 2019.07.30
문자열  (0) 2019.07.30
포인터  (0) 2019.07.26
다차원 배열  (0) 2019.07.26