A+B (1000번 풀기)

1000번 문제: A+B는 두 수를 더하는 문제로 온라인 저지에서 가장 쉬운 문제 중 하나입니다.

Hello World 와 다른 점은

  1. 숫자를 입력 받아야 한다
  2. 숫자를 어디엔가 저장해야 한다
  3. 그 저장한걸 출력해야 한다

입니다.

Hello World 프로그램의 경우에는 "Hello World!"를 따로 어딘가에 저장하지 않고 바로 cout을 이용해서 출력했었는데, 이 문제의 경우에는 입력받는 정수를 저장할 곳이 필요합니다.

수를 입력받으려면 수를 저장할 곳을 먼저 만들어야 합니다. 이렇게 저장할 곳을 변수라고 합니다. 변수는 반드시 타입을 정해줘야 합니다. 타입은 bool, char, int, long, float, double, ... 와 같이 다양한 종류가 있습니다. 각각의 타입에 따라서 저장할 수 있는 자료형이 정해집니다.

정수를 저장할 수 있는 타입은 여러가지가 있지만, 이 튜토리얼에서는 int를 사용하려고 합니다. 대부분의 경우에 정수는 int를 사용해서 저장하고 사용합니다. int에 저장할 수 있는 수는 -2147483648(-2 31)부터 2147483647(231-1) 입니다.

변수를 사용하려면 변수를 선언해야 합니다. 변수는 <타입> <변수명>; 과 같은 형식으로 선언할 수 있습니다. int형 정수 ab를 선언한 프로그램입니다.

먼저, 문제를 풀기 전에 입력을 받지 않고, 값을 미리 변수에 저장한 다음 출력하는 프로그램을 만들어 보겠습니다.

변수에 값을 저장하려면 =을 이용해야 합니다.

프로그래밍 언어에서 =는 대입 연산자(Assignment operator) 이며, 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻입니다. 즉, a = 5는 "a와 5가 같다"가 아니고 "5를 a에 저장한다" 입니다.

자 그럼 a에 5, b에 6을 저장하는 프로그램을 작성해봅시다.

출력하는 코드는 Hello World프로그램과 동일합니다. 문자열 "Hello World!"를 출력하는 프로그램에서 문자열을 a+b로 바꾸면 출력이 됩니다.

생각보다 "Hello World"랑 비슷하지 않나요?

"Hello World" 프로그램을 만들 때, 줄의 구분은 ;로 했었습니다.

,를 이용하면 한 줄에 여러 개의 변수를 선언할 수 있습니다. ,를 이용해서 변수를 선언해 A+B 문제를 풀어봅시다. (입력은 받지 않습니다)

아래 프로그램도 올바른 프로그램입니다.

위와 같이 같은 의미를 가지는 프로그램이면 콤마(,)를 이용해 구분할 수 있습니다. 사실 콤마도 역할이 있지만, 지금은 변수를 선언할 때만 사용하는 것으로 합시다.

자 이제 입력을 해봅시다. 입력은 생각만큼 어렵지 않습니다.

cout<<로 구분하지만, cin>>로 구분합니다. 코드를 작성해봅시다.

숫자의 구분은 공백(`), 탭(\t), 엔터(\r또는\n)와 같이 눈에 보이지 않지만, 뭔가 구분이 되는거 같은 문자로 구분합니다. 물론, 콤마(,`)라던가 다른 특수한 구분자(delimeter)로 구분할 수 있지만, 그 내용은 A+B보다 어렵기 때문에 생략합니다.

이게 1000번 문제: A+B 푸는 프로그램입니다.

이 프로그램을 C언어를 이용해서 작성하면 다음과 같습니다.

C언어는 cin, cout을 사용하지 않고, scanf, printf를 사용합니다. 또, 입력 형식과 출력 형식을 정해주어야 합니다. %dint 정수 하나를 나타냅니다.

위와 같은 프로그램은 어떤 결과를 출력할까요?

ab에는 어떤 값도 넣지 않았습니다. 어떤 값도 넣지 않았기 때문에, 무엇이 들어있는지 알 수 없습니다. 따라서, 결과도 알 수 없습니다. 사용하는 환경에 따라서 결과가 출력될 수도, 런타임 에러(프로그램 수행 중에 더 이상 진행할 수 없는 심각한 오류가 발생해 프로그램의 실행을 중단시키는 에러)를 발생시킬 수도 있습니다.

변수의 초기값을 정해주는 것을 초기화(Initialization)라고 합니다. 나중에 다룰 내용이지만, 전역 변수의 경우에는 초기화를 하지 않아도 0으로 초기화가 됩니다. 지금 우리는 main함수안에서 변수를 선언하고 사용하고 있는데, 이러한 변수를 지역 변수라고 합니다. 지역 변수는 초기화를 하지 않을 경우에는 어떤 값이 들어있을지 알 수가 없어 사용할 수가 없습니다.

지금까지는 화면에 a+b 결과만 출력했습니다. 이번에는 출력을 조금 자세하게 "a + b = a+b"로 출력해보겠습니다.

이 프로그램은 Hello World를 출력할 때 사용한 방법과 a+b 문제를 풀 때 사용한 방법을 모두 이용했습니다. Hello World에서는 문자열을 출력했고, a+b에서는 변수를 출력했습니다. cout<<로 구분해 왼쪽부터 순서대로 출력한다고 설명했었습니다. 왼쪽부터 순서대로 변수의 경우에는 변수에 들어있는 값을, 문자열인 경우에는 문자열을 그대로 출력하게 됩니다.

이번에는 덧셈(a+b), 뺄셈(a-b), 곱셈(a*b), 나눗셈(a/b) 결과를 모두 출력하는 프로그램을 작성해보겠습니다. 별다른 추가적인 내용 없이 a+b를 출력하는 부분을 복사 붙여넣기 했습니다.

입력으로 10 5를 넣고 결과를 살펴봅시다.

결과가 생각한대로 나오네요!

이번에는 입력으로 9 5를 넣어봅시다.

이 경우에는 나눗셈이 올바르게 나오지 않습니다. 그 이유는 무엇일까요?

그 이유는 바로 변수 ab의 타입이 int이기 때문입니다.

int는 정수만 저장할 수 있습니다. 9/5는 1.8로 정수가 아닌 실수입니다. 실수는 int에 저장할 수 없기 때문에, 소수점은 버리고 저장하게 됩니다. 따라서, 1이 출력됩니다.

소수점이 필요한 경우에는 실수 자료형으로 형변환을 하고 계산을 해야 합니다.


댓글 댓글 쓰기