본문 바로가기

게임프로그래밍 개발 수업/C언어 수업

게임 개발반 프로그래밍 05 C언어 수업 상수와 기본 자료형,

23-03-21 화요일 수업 내용입니다.

Visual Studio 2022 를 사용했습니다.

 

사용한 사진 자료의 출저는 윤성우의 열혈C 프로그래밍 입니다.

====== 오렌지 미디어 ====== (orentec.co.kr)

 

====== 오렌지 미디어 ======

 

www.orentec.co.kr

 

 

 

C언어에 존재하는 자료형들

int = 컴퓨터가 계산하기 가장 적합한 자료형

short = 빈번하게 계산하지 않는 자료들을 short로 보관하기도 한다.

게임엔진에서는 float 이상으로 정밀한 계산을 거의 하지 않는다.

float = 소숫점 6자리 까지 계산

double = 소숫점 15자리 까지 계산

 


자료형의 형태를 알아보는 예제

#include<stdio.h>

int main()

{
	char ch = 9;
	int inum = 1052;
	double dnum = 3.1415;

	printf("변수 ch의 크기: %d \n", sizeof(ch));
	printf("변수 inum의 크기: %d \n", sizeof(inum));
	printf("변수 dnum의 크기: %d \n", sizeof(dnum));


	printf("char의 크기: %d \n", sizeof(char));
	printf("int의 크기: %d \n", sizeof(int));
	printf("long의 크기: %d \n", sizeof(long));
	printf("long long의 크기: %d \n", sizeof(long long));
	printf("float의 크기: %d \n", sizeof(float));
	printf("double의 크기: %d \n", sizeof(double));

	return 0;

}


자료형의 형태를 알아보는 예제2

#include<stdio.h>


int main()

{
	char num1 = 1, num2 = 2, result1 = 0;
	short num3 = 300, num4 = 400, result2 = 0;
	
	printf("size of num1 & num2: %d, %d \n", sizeof(num1), sizeof(num2));
	printf("size of num3 & num4: %d, %d \n", sizeof(num3), sizeof(num4));
	printf("size of char add: %d \n", sizeof(num1 + num2));
	printf("size of short add: %d \n", sizeof(num3 + num4));

	result1 = num1 + num2;
	result2 = num3 + num4;
	printf("size of result1 & result2: %d, %d \n", sizeof(result1), sizeof(result2));

	return 0;

}

char 끼리 계산하고, short 끼리 계산 했음에도 불구하고, 우리가 add라고 이름 붙인 + 연산을 하는 순간

자동으로 int형으로 형이 변환된다는 점을 알 수 있다.

위에서 컴퓨터가 계산하기 가장 적합한 자료형이라고 했는데, 그때문에 CPU가 자동으로 형을 변환하여 계산하는 것이다.

계산하고 난 결과(result1,2변수들)는 다시 기존 자료형으로 돌아가는것을 볼 수 있다.


자료형의 형태를 알아보는 예제3

#include<stdio.h>


int main()

{
	double rad;
	double area;
	printf("원의 반지름 입력: ");
	scanf_s("%lf", &rad);
	area = rad * rad * 3.1415;
	printf("원의 넓이: %f \n", area);

	return 0;

}

원의 넓이를 구하는 계산식을 프로그래밍 해보았다.

%lf는 long 자료형의 서식문자이다.


 

절대값을 사용 할 때는 unsigned 자료형을 사용하면 유용하다. 양수만을 표현한다.

unsigned가 붙으면 MSB도 데이터의 크기를 표현하는데에 사용된다.

MSB는 저번 시간에 배웠다. 가장 왼쪽에 있는 부호를 표현하는 비트이다.

 


아스키코드

아스키 코드에서 우리가 알아야 할 것은 2가지이다.

65는 대문자 A
97은 소문자 a

32차이가 난다.

 

그 외에 기억할 만한것은 32가 스페이스바이다 정도.

 

 

 

아스키 코드를 이해하기 위한 예제

#include<stdio.h>

int main()

{	
    char ch1 = 'A', ch2 = 65;
	int ch3 = 'Z', ch4 = 90;
	
	printf("%c %d \n", ch1, ch2);
	printf("%c %d \n", ch2, ch2);
	printf("%c %d \n", ch3, ch3);
	printf("%c %d \n", ch4, ch4);

	return 0;


}

결과창


상수

리터럴 상수예제

#include<stdio.h>


int main()

{	
	printf("literal int size: %d \n", sizeof(7));
	printf("literal double size: %d \n", sizeof(7.14));
	printf("literal char size: %d \n", sizeof('A'));

	return 0;


}

 

 

다양한 접미사를 사용한 상수의 표현

 

 

심볼릭 상수  /  const 상수

const 상수란?

이름을 지니는 상수로서 고유한 값을 가지며, 값의 변경이 불가능하다는 특징이 있다.

아래의 코드는 빌드 해보면 맨 마지막 문장 컴파일러에서 에러가 난다.

#include<stdio.h>


int main()

{
	const int MAX = 100; // 상수는 관례대로 대문자로 표시한다.
	int num = 20; // 선언과 동시에 초기화
	printf("%d %d \n", MAX, num);
	num = 20;
	MAX = 30;

}

MAX 는 const 상수인데, 값을 변경하는 명령을 내리자, 에러가 나는 것이다.

밸런스에 치명적인 문제가 있는 부분같은 경우 const 상수를 통해 고정해서 함부로 값을 바꾸지 못하게 하는 로직을 짤 수 있다.

주의사항 : 상수는 선언과 동시에 초기화 해주는 것이 필수이다.

아래 코드도 컴파일러에서 에러가 발생한다.

#include<stdio.h>

int main()

{
	const float PI;
	PI = 3.1415f;
}

 

 


자동 형 변환 반식

#include<stdio.h>


int main()

{
	double num1 = 245;
	int num2 = 3.1415;
	int num3 = 129;
	char ch = num3;

	printf("정수 245를 실수로: %f \n", num1);
	printf("실수 3.1415를 정수로:%d \n", num2);
	printf("큰 정수 129를 작은 정수로: %d \n", ch);

	return 0;

}


명시적 형 변환 / 강제 형 변환 예제

 

#include<stdio.h>


int main()

{

	int num1 = 3, num2 = 4;
	double divResult;
	divResult = num1 / num2;
	printf("나눗셈 결과: %f \n", divResult);

	return 0;

}

위와 같이 코드를 작성하면 결과는 제대로 표시 되지 않는다.

 

명시적 형 변환을 적용하면 코드는 아래와 같다.

#include<stdio.h>


int main()

{
	int num1 = 3, num2 = 4;
	double divResult;
	divResult = (double)num1 / num2;
	printf("나눗셈 결과: %f \n", divResult);

	return 0;

}

HP 계산에 주로 사용한다.

 

 


반복문 중 While 문에 대한 예제

 

#include<stdio.h>


int main()
{
	int i = 0;
	int num = 5;

	while (i < num)
	{
		i++;
		printf("게임 프로그래밍반 \n");
	}
	return 0;
}


#include<stdio.h>


int main()
{
	int i = 0;
	int num = 5;
	while (i++ < 9)
		printf("%d × %d = %d\n", num, i, num * i);

	return 0;
}

for문과의 차이점은 조건만 존재한다는 점입니다.

for문은 선언, 초기화, 조건, 증감이 한문장에 존재했죠.

나중에 for문은 배열에서 사용한다고 하네요

 

이제 문제를 풀어 보죠.

1. while문을 사용해서 2단부터 9단까지 구구단을 출력 해보세요.

 

2. while문을 사용해서 1부터 100까지 홀수의 합과 짝수의 합을 구해보세요.

더보기
#include<stdio.h>


int main()
{		
	int i = 0;
	int holsu = 0;
	int jacksu = 0;

	while (++i <= 100)
	{
		if ((i % 2 == 1))
		{
			printf("%d\n", i);
			holsu += i;
			
		}
		
		
		if ((i % 2 == 0))
		{
			printf("%d\n", i);
			jacksu += i;
		}
	
	}

	printf("짝수의 합: %d	\n", jacksu);
	printf("홀수의 합: %d	\n", holsu);
	
	
	return 0;

}

 

디버깅 하기위해 중간에 printf를 계속 넣어주었습니다.