[C, C++ 기초 강좌] #2. C언어 완전 초보를 위한 - 자료형과 형식 지정자 그리고 간단한 계산기 만들기
오늘 날씨가 정말 덥네요. 미래의 여러분들 거기 날씨는 어떤가요.. 살만한가요~
여튼! 이번에는 간다한 계산을 하는 프로그램을 만들어보겠습니다~
오늘의 목표
1. 간단한 계산하는 프로그램을 만들 줄 안다.
자료형이란?
변수가 저장할 데이터가 어떤 형식인지 지정하는 거예요.
표준 자료형의 종류에는
정수형(short, int, long)
실수형(floar, double, long double)
문자형(char)
등이 있습니다.
정수형을 또 크게 나누자면
부호 있음과 부호 없음으로 나눌 수 있죠
short, int, long 앞에 unsigened만 붙이면 됩니다.
바이트수, 범위를 나타내면 아래 표가 됩니다.
short | 2 | -32768~32767 |
int | 4 | -2174783648~2147483647 |
long | 4 | -2147483648~2147483647 |
unsigned short | 2 | 0~65535 |
unsigned long | 4 | 0~4294967295 |
unsigned long | 4 | 0~4294967295 |
이렇게 범위를 나누는 이유는 메모리 낭비를 하지 않기 위해 라고 말하면 간단하게 이해가 될 겁니다.
그런데 요즘은 메모리 용량도 훨씬 많아졌으니 컴퓨터용 프로그램에선 굳이 신경 쓰지 않아도 좋아요.
게다가 float는 계산하다 보면 이상한 숫자가 나올 때가 있습니다. 이것도 다음에 다뤄보겠습니다.
자료형에 대해서는 위 사이트가 자세히 설명되어있네요 :)
만약 범위를 초과하는 값을 넣었다면 어떻게 될까요?
양동이에 물을 가득 넣었는데 더 넣는다면 물이 넘치겠죠?
맞습니다. 여기서는 오버플로우라는 단어를 쓰죠
오버플로우가 발생하면 초과한 만큼 최솟값부터 저장됩니다.
말이 어렵죠?
예를 들어 short의 최댓값은 32767이라고 위에 말했죠?
short형의 변수를 32767로 저장 후 1을 더하면 -32768이 됩니다.
또 값이 너무 작아서 언더플로우라는 말도 있는데 다음에 설명하는 시간을 가져보겠습니다.
변수란?
데이터 값이 일시적으로 저장되는 공간이라고 말할 수 있습니다.
변수는 메인 메모리의 고유 주소에 저장되며 언제든 값이 변경될 수 있는 공간입니다.
변수의 이름은 마음대로 정할 수 있지만
정할 수 없는 이름이 있습니다.
그런 이름들을 바로 키워드 또는 예약어라고 합니다.
c언어에는 auto, double, int, break 등등 과 같은 키워드들이 있습니다.
또한 함수의 이름 맨 앞에 숫자가 들어간다거나 #과 같은 기호는 사용할 수 없습니다.
형식 지정자란?
앞서 우리는 printf("Hello World!");를 통해서 화면에 문자열을 출력했습니다.
변수값을 출력하기 위해선 어떻게 해야 할까요?
바로 형식 지정자를 적어서 출력하는 겁니다.
printf("두수의 합: %d", sum);
여기서 %d는 출력 그대로 출력되지 않고 sum값을 10진 정수 형태로 출력하라는 의미를 가졌습니다.
%d | 10진 정수로 출력 | printf("%d", 10); | 10 |
%f | 실수로 출력 | printf("%f", 3.14); | 3.14 |
%c | 문자로 출력 | printf("%c", 'a'); | a |
%s | 문자열로 출력 | printf("%s", "Hello"); | Hello |
이 말고도
%x나 %u등 종류가 많습니다.
입력하여 간단한 계산기 만들기
자료형과 형식 지정자 그리고 변수를 알아보았으니 이제 계산기를 만들어봅시다.
GUI가 있는 계산기가 아니라 문자와 숫자를 입력하여 계산을 해주는 아주 아주 간단한 계산기를 만들 겁니다.
아래 코드는 나중에 배울 스위치 케이스 문이 들어 있습니다.
미리 배우는 것도 좋죠~
#include<stdio.h>
int main(void)
{
double a = 0, b = 0, value = 0;
char op;
printf("연산하고자 하는 수식을 입력하세요. \n");
printf("예) 1 + 1 \n");
printf("띄어쓰기를 하셔야 옳바른 값이 나옵니다. \n");
scanf("%lf %c %lf", &a, &op, &b);
switch (op)
{
default:
printf("옳바른 기호를 입력하시오.\n");
break;
case '+':
value = a + b;
break;
case '-':
value = a - b;
break;
case '*':
value = a * b;
break;
case '/':
value = a / b;
break;
}
printf("%f %c %f = %f", a, op, b, value);
return 0;
}
그리고 이렇게 입력하고 빌드했더니
_CRT_SECURE_NO_WARNINGS
오류가 뜰 겁니다.
여기를 참고해서 오류를 해결하시면 됩니다.
😁
먼저 3개의 수를 저장할 변수를 만들어 주고 기호를 저장할 변수 또한 만들어줍니다.
여기서 새로운 함수 scanf()가 나왔죠?
이건 키보드에서 입력을 위한 입출력 함수입니다.
scanf를 쓸 때에는 주의사항이 있습니다.
형식 지정자를 적고 입력받은 값을 저장할 변수를 적어야 하는데 변수이름 앞에 &를 반드시 붙여야 합니다.
scanf("%d", &a); 라고 적으면 입력받은 10진 정수를 a변수에 저장한다가 됩니다.
그리고 제가 위에 double 자료형을 썼는데 double을 scanf로 입력받으려면 lf를 써야 합니다.
그리고 swith case입니다. if문도 있지만 저는 스위치 케이스 문을 사용할 겁니다.
swith (op)는 op = 기호에 따라서 다음 문장을 실행한다라고 보면 되겠네요.
그러니 '+'면 value = a + b;를 실행한다가 되죠
그리고 break;를 꼭 적어줘야 합니다.
또한 default는 아래 조건에 해당하지 않을 때 그냥 break; 한다는 의미겠죠!
그리고 c, c++에서는 중요한 게 변수 위치도 중요합니다. 출력이나 입력받을 때
차례대로 위치를 정하지 않으면 오류가 나오겠죠
오늘은 여기까지 하겠습니다!
수고하셨습니다~
'프로그래밍 > C, C++' 카테고리의 다른 글
[C언어] 주사위를 돌려서 가장 많이 나온 수와 가장 적게 나온 수 구하기 (0) | 2019.09.29 |
---|---|
[C언어] stdio.h 만 써서 (양수, 음수) 10진수를 2진수로 변환하는 코드 만들기 (0) | 2019.09.27 |
[C, C++ 기초 강좌] #3. C언어 완전 초보를 위한 - 조건문과 반복문 (0) | 2019.07.31 |
[C, C++ 기초 강좌] #1. C언어 완전 초보를 위한 - Hello World! 화면에 텍스트 출력 및 주석 적는 법 (1) | 2019.07.28 |
[C, C++ 기초 강좌] #0. C언어 완전 초보를 위한 - 비쥬얼스튜디오 설치 방법 및 프로젝트 생성 (0) | 2019.07.28 |