본문 바로가기

勉強/C,C++

사칙연산과 기초예제

C언어를 시작하면 프로그래밍이 무엇인가 라던가 C언어의 기초적인 작동 과정을 설명한다.

여기서는 그런 것들은 생략하고 간단한 예제를 보며 설명하겠다.

 

#include <stdio.h>

int main(void) {

	int x=20, y = 10, sum, diff, mul, div;

	sum = x + y;
	diff = x - y;
	mul = x * y;
	div = x / y;

	printf("두 수의 합: %d", sum); 
	printf("두 수의 차: %d", diff); 
	printf("두 수의 곱: %d", mul);
	printf("두 수의 몫: %d", div); 

	return 0;
}

 

변수와 printf()를 배우고 만들 수 있는 코드이다.

변수는 저렇게 선언시에 값을 할당해 줘도 되고 나중에 할당해 줘도 된다.

값을 할당하지 않아도 되지만 비효율적인 짓을 굳이 할필요는 없다.

 

printf()에 변수값을 출력하려면 형식 지정자를 이용해야 한다.

%d, %f, %c, %s 등이 있지만 여기서는 %d만 이용하겠다.

%s에 대해서는 나중에 따로 설명하겠다.

 

다음은 scanf에 대해 간단히 설명하겠다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	float radius;
	double area;

	printf("반지름을 입력하시오");
	scanf("%f",&radius);
	area = 3.14 * radius * radius;
	printf("원의 면적: %.2f \n", area);
}

 

원의 면적을 계산하는 간단한 프로그램이다.

 

scanf는 안전하지 않은 함수이다. 떄문에 #define _CRT_SECURE_NO_WARNINGS이 없으면 오류를 일으키는데 이는 visual studio에서만 이러니 gcc나 다른 컴파일러를 사용하면 굳이 할필요 없다.

scanf가 어째서 위험한 함수인지는 다음에 OS와 시스템 해킹에 대해 설명하는 글을 작성하겠다.

 

scanf에서도 형식 지정자를 이용해 유저에게 값을 받는데 printf랑은 다른 점이 있다.

바로 변수의 이름으로 움직이는 것이 아니라 주소로 움직인다는 것이다.

&변수명은 변수의 주소를 의미하는데 메모리에 올라간 주소(ex: 0x12345678)의 값을 나타낸다.

 

printf에서 %.2f 를 사용하였는데 이는 소숫점 2자리 까지만 나타내겠다는 것이다.

%.3f를 하면 3자리 까지 나올것이다.

 

변수형을 살펴보면 float과 double을 사용했는데 두 개의 차이는 저장 할수있는 크기다.

float은 4바이트고 double을 8바이트이다. 소숫점은 자릿수가 많이 나올수 있기 떄문에 double을 사용하는 것이 안전하다.

만약 저장 할수 있는 수를 넘어가면 오버플로우가 일어나니 조심하자.

 

이런 현상을 방지하기 위해선 unsigned를 사용면 되는데

기본적으로 C에서는 8바이트가 있으면 4바이트는 음수를 저장하고 나머지 4바이트는 양수를 저장하는데 unsigned를 사용하게 되면 음수를 저장할 때 사용하는 바이트를 모두 가져와서 양수를 저장하는데 사용한다. 때문에 음수를 저장 할 수는 없지만 더 큰 숫자를 저장할 수 있게 된다.

 

여담으로 컴퓨터의 메모리 특성상 소수를 저장할 경우 0.1을 저장한다 하면 0.1이 아니라 0.1과 굉장히 유사한 값을 저장한다.

이 얘기는 다음에 OS에 대해 따로 글을 작성하겠다.

 

다음 글은 연산자에 대해서 작성해 보겠다

 

만약 C언어를 공부 중인데 막히는 것이 있다면 댓글을 달아주세요.

최대한 친절하게 알려드리겠습니다!


undefined