덧셈 프로그램의 구현에 필요한 + 연산자

'덧셈' 하면 흔히 생각하는 것이 +기호이다.  +기호가 프로그램에서 받아들여 지겠는가? 이를 확인해보는 예제를 보자.

SimpleAddOne.c

#include <stdio.h>


int main(void)
{
   3+4; // 3과 4의 합을 명령함
   return 0;
}

위 예제는 문제 없이 컴파일 된다. 이렇듯 C언어를 이용해서 특정연산을 요구할 때 사용하는 약속된 기호를 가리켜  '연산자(operator)'라고 한다.

변수를 이용한 데이터의 저장

수학에서는 정해지지 않은, 그래서 임의의 값을 대입할 수 있는 문자를 가리켜 변수라 한다. 이와 유사하게 C언어의 변수가 의미하는 바도 다음과 같다.

값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리켜 변수라 한다."

<변수의 선언 방법>

int main(void)

      int num; // num이라는 이름의 변수선언
 
}

위 예제에서  int num; 이 문장이 변수의 선언문이다.

이 문장을 구성하는 int와 num이 의미하는 바는 각각 다음과 같다.

  • int    정수의 저장이 가능한 메모리 공간을 할당합니다.
  • num 그리고 그 메모리 공간의 이름을  num이라 합니다.

변수 num을 선언한 다음에는 num이라는 이름을 이용해서 값을 저장하고 참고 할수 있다.

int main(void)
{
   int num;  // num이라는 이름의 변수선언
   num=20; // 변수 num에 20 저장
   printf("%d", num); // 변수 num의 값 참조
  
}

C언어에서 = 기호는 값의 대입을 뜻한다.  이 기호를 가리켜 '대입 연산자'라 하며, 대입 연산자의 오른편에 오는 값을 왼편에 오는 변수에 저장하는 형태로 사용이 된다. 

 

변수의 다양한 선언 및 초기화 방법

선언된 변수에 처음 값을 저장하는 것을 가리켜 '초기화'라 한다. 그리고 초기화 이후에 저장된 값을 변경 할 때에는 그냥 '대입' 또는 '대입연산'을 진행한다고 한다.

int main(void)
{
  int num; //num이라는 변수의 선언
  num=12;  // 변수 num을 12로 초기화
  num=24;  //  변수 num에 24를 대입 
}

그런데 C언어에서는 다음과 같이 변수를  '선언과 동시에 초기화' 하는 것이 가능하다.

int num =12;

위의 문장을 실행하게 되면, 변수  num이 메모리 공간에 할당되자마자 12로 초기화된다. 

int num1, num2 //두개의 변수를 선언

int num3=30, num4=40; // 두개의 변수를 선언 및 초기화

위와 같이 둘이상의 변수를 동시에 선언하는 것도 가능하고, 동시에 선언 및 초기화 하는 것도 가능하다.

VarDeclAndlnit.c

#include <stdio.h>

int main(void)
{
   int num1, num2;    //변수 num1,num2의 선언
   int num3=30, num4=40; //변수 num3, num4의 선언 및 초기화

   printf("num1: %d, num2:%d \n", num1, num2);
   num1=10;  //변수 num1의 초기화
   num2=20;  //변수 num2의 초기화

  printf("num1: %d, num2: %d \n", num1, num2);
  printf("num3: %d, num4: %d \n", num3, num4);
  return 0;
}

실행 결과. 책의 예제 실행결과는 첫번째 num1, num2의 값이 쓰레기 값이 나와야하는데 나의 컴퓨터에서는 0으로 나온다..

위의 예제는 변수의 선언 및 초기화 방법 뿐만 아니라 다음의 사실도 말해준다

변수를 선언만 하고 초기화 하지 않으면 쓰레기 값이 저장된다.

여기서 말하는 쓰레기 값이란 '아무런 의미가 없는 값'을 뜻한다.  가급적 이러한 쓰레기 값이 변수에 저장되지 않도록 하는 것이 좋다. 

변수선언 시 주의할 사항

중괄호 내에 변수를 선언할 경우, 변수의 선언문은 중괄호의 앞부분에 위치해야 한다. 

C언어에서의 중괄호는 영역이나 내용을 구분하는 목적으로 사용된다.  중괄호의  시작부분에 변수의 선언문이 위치해야 한다. 

다음과 같은 코드는 컴파일 에러를 발생시키지 않는다.

int main(void)
{
   int num1;
   int num2;
   num1=0;  // 변수선언 이후에 등장한 초기화 문장
   num2=0;  // 변수선언 이후에 등장한 초기화 문장
}

변수  num1과 num2의 선언문 앞에 다른 어떠한 문장도 존재하기 않기 때문에 컴파일 에러를 발생시키지 않는다. 

하지만 다음과 같은 코드는 컴파일 에러를 발생시킨다.

int main(void)
{
   int num1;
   num1=0;  //이 문장은 변수의 선언문이 아니다.
   int num2; // 컴파일 에러가 발생하는 지점
   num2=0;
}

위의 경우는 변수 num2의 선언문 앞에 변수의 선언이 아닌 문장이 등장했기 때문에 컴파일 에러가 발생한다. 따라서 중괄호의 앞부분에 변수의 선언문이 오도록 해야 한다. 참고로 1999년도에 발표된 C언어의 표준에서는 변수의 선언위치에 아무런 제한을 두고 않고 있다. 따라서 위의 코드도 컴파일이 되어야 정상이지만 최근에 발표된 컴파일러를 비롯해서, 아직도 상당수의 컴파일러가 변수의 선언문이 중괄호의 앞부분에 일치할 것을 요구하고 있다.

변수 선언시 주의해야 할 두 번째 사항은 변수의 이름에 관한 것이다. 다음은 변수의 이름을 지을 때 적용되는 규칙들이다.

  • 첫째  변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.
  • 둘째  C언어는 대소문자를 구분한다. 따라서 변수 Num과  변수 num은 서로 다른 변수이다.
  • 셋째  변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름을 사용할 수 없다.
  • 넷째  이름 사이에 공백이 삽입될 수 없다.
변수의 이름을 정할 때에는 변수의 역할에 어울리는, 의미 있는 이름을 지어야한다.

예를 들어, 나이를 저장할 목적의 변수를 선언하는 경우, 변수의 이름으로는 age가 num보다 더 잘 어울린다. 

이렇듯 용도를 파악할 수 있는, 의미 있는 이름을 지어주려고 노력해야한다. 그래야 이해하기 쉬운 , 분석이 용이한 프로그램이 되기 때문이다. 

 

변수의 자료형(Data Type)

변수는 다음과 같이 크게 두가지 부류로 나뉜다

  • 정수형 변수 : 정수의 저장을 목적으로 선언된 변수
  • 실수형 변수: 소수점 이하의 값을 지니는 실수의 저장을 목적으로 선언된 변수 

변수의 종류가 크게 두 가지로 나뉘는 이유는 정수냐, 실수냐에 따라서 값이 메모리 공간에 저장 및 참조되는 방식이 다르기 때문이다. 그리고 정수형 변수는 변수의 크기에 따라서 char형, short형, int형, long형 변수로 나뉘고, 실수형 변수도 크기에 따라서 float형 변수와 double형 변수로 나뉜다. 

 

덧셈 프로그램의 완성

예제 SimpleAddOne.c를 덧셈 프로그램으로 변경해보고자한다. 두변수에 저장된 값을 대상으로 덧셈을 진행하고, 그 결과를 변수에 저장해서 다양한 형태로 출력해보겠다.

#include <stdio.h>

int main(void)
{
    int num1=3;
    int num2=4;
    int result=num1+num2;

    printf("덧셈 결과: %d \n", result);
    printf("%d+%d=%d \n", num1, num2, result);
    printf("%d와(과) %d의 합은  %d입니다. \n", num1, num2, result);
    return 0;
}

실행 결과

+ Recent posts