카테고리 없음2017. 12. 22. 00:40

구조체의 정의                                                         

구조체란 ?  구조체는 다른 타입을 가지는 변수들을 하나의 이름으로 묶어둔 것이다.

배열이 타입이 같은 변수들의 집합인 것에 비해 구조체는 다른 타입을 가지는 변수들을 하나의 이름으로 묶어둔 것이다.

정수나 실수 또는 문자열 등의 단순한 형태로 나타낼 수 없는 복잡한 데이터를 표현할 때 주로 사용한다.


char Name[10];

int Age;

double Height;

각 변수들의 타입 서로 다르기 때문에 배열로 이 변수들을 묶을 수는 없다 ---- 구조체 사용

구조체 멤버의 타입에는 제한이 없다. 심지어는 구조체 안에 구조체 타입을 선언해도 된다. 

※ 멤버: 구조체에 포함되는 변수들

구조체는 단지 "구조체로 묶었으니 앞으로 이렇게 쓸거야" 라는 걸 컴파일러에게 일러준다.

변수가 아니므로 static, register같은 기억 부류를 지정한다든가 초기값을 줄 수 없다

 

struct {

     char Name[10];

     int Age;

     double Height;

} People; // 구조체 변수의 이름(임의로)

 

struct { } 블록안에 구조체에 포함되는 변수들의 목록(=멤버)을 순서대로 선언하고 구조체 변수의 이름을 끝에 적는다.



※(참고) 무조건 다른 타입이어야 구조체로 묶을 수 있는 건 아니다.

같은 타입이어도 묶을 수 있으며 이것이 용이할 때가 있다.

struct

{

     int x,y;

} Point;

gotoxy(Point.x, Point.y);

구조체를 쓰면 이렇게 직관적으로 다가오는데 반해,

gotoxy(Point[0], Point[1]);

배열을 쓰면 x좌표가 뭔지 y좌표가 뭔지 헷갈린다.

Posted by 넓스
카테고리 없음2017. 12. 5. 01:04

#include <stdio.h>
#include <math.h> // 제곱근 반환함수인 sqrt 사용

struct Point  // 구조체 point의 정의
{
 int xpos;
 int ypos;
};

int main(void)
{
 struct Point pos1, pos2;
 double distance;

 fputs("Point1 pos : ",stdout);
 scanf("%d %d", &pos1.xpos, &pos1.ypos);
 
 fputs("Point2 pos : ",stdout);
 scanf("%d %d", &pos2.xpos, &pos2.ypos);

 // 두 점간의 거리 계산 공식
 distance = sqrt((double)((pos1.xpos - pos2.xpos) * (pos1.xpos - pos2.xpos) + (pos1.ypos - pos2.ypos) * (pos1.ypos - pos2.ypos)));

 printf("두 점의 거리는 %f 입니다. \n", distance);

}

 

 

 

 

 

Posted by 넓스
카테고리 없음2017. 11. 27. 13:11

[C언어 中 배열]

 

● 사용목적                                                                                            

배열을 사용하는 이유는 한번의 선언으로 다수의 변수를 선언할 수 있기 때문이다.

 

● 사용방법                                                                                            

선언방법은 아래와 같다.

Ex) int Arrayname [3];

데이터타입(데이터자료형) 배열이름 배열의크기

 

데이터타입이란 배열안에 형성될 '변수'의 데이터타입을 이야기한다.

변수의 데이터타입은 알다시피 변수내에 뭘 담을지에 따라 결정한다.

(int는 정수 float는 실수를 담는다)

 

배열이름은 말그대로 임의의 배열이름을 하면되나, 직관적으로 다가오는 이름을 하면 코딩할 때 편하다.

 

배열의 크기는 변수를 몇개 선언할지를 말한다.

크기에서 헷갈리기 쉬운데, 만약 크기를 [3]으로 선언했다면

내가 실제로 해당변수를 사용하고 싶을때 인덱스는 0~2 가 된다는 것이다.

다시말해, Arrayname[0], Arrayname[1], Arrayname[2] 이렇게 3개가 만들어진다는 말이다.

인덱스 안에 무조건 숫자만 와야되는게 아니고 변수가 와도된다.

> 이덕에 반복문을 사용해도 되고 여러모로 편해진다

 

int arr1[5] = { 1, 2, 3, 4, 5 };

int arr2[] = [1,2,3} // 이라고하면 자동으로 3이 들어간것과 같음

printf("배열 arr1의 크기: %d \n", sizeof(arr1));

ar1Len = sizeof(arr1) / sizeof(int); // 배열 arr1의 길이 계산

for (i = 0; i < ar1Len; i++)

printf("%d ", arr1[i]);

printf("\n");

 

 

int main(void)

{

char str[] = "Good morning!"; //char 타입이니까 각 변수에 문자형타입

printf("배열 str의 크기: %d \n", sizeof(str));

printf("널 문자 문자형 출력: %c \n", str[13]);

printf("널 문자 정수형 출력: %d \n", str[13]);

 

str[12] = '?';

printf("문자열 출력: %s \n", str);

}

 

 

Posted by 넓스