변수

수학에서 약속된 기호로 연산을 하듯 C언어에서도 약속된 연산 기호가 있습니다. 또한 연산된 값을 저장하기 위한 수단으로 변수를 제공합니다. 수학에서는 정해지지 않은 임의의 값을 대입할 수 잇는 문자를 가리켜 변수라 합니다. 이와 유사한 의미라 생각하면 됩니다. 따라서 변수을 하나 만들면, 그 변수의 이름을 통해서 값의 저장 및 참조가 가능하고, 또 저장된 값의 변경도 가능합니다.

선언하는 방법을 보면

int main(void)

{

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

num = 20;          // num에 20 저장. 처음으로 변수에 값을 지정하는 걸 변수의 초기화라 한다. 

}


이 문장이 의미하는 바는 다음과 같습니다.

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

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


int num1 = 30;                    // 이처럼 보통 선언과 동시에 초기화

int num2 = 2, num3 = 3;       // 두 개의 변수를 선언 및 초기화도 가능


이처럼 변수 선언 후 초기값을 지정하지않으면 쓰레기값(아무런 의미가 없는 값)이 저장됩니다. 따라서 변수 선언과 동시에 0으로 초기화한 다음, 의미있는 값을 저장하기도 합니다.


변수 선언 시 주의할 사항이 있습니다. 중괄호 내에 변수를 선언할 경우, 변수의 선언문은 중괄호의 앞부분에 위치해야 합니다. 만약 변수 선언 중간에 다른 문장이 들어가면 컴파일 에러가 발생합니다.


int num1;

num1 = 10;    //변수 선언이 아님

int num2;       //컴파일 에러 발생 지점

num2 = 0;


또 다른 주의 사항은 변수의 이름에 관한 것입니다. 다음은 변수의 이름을 지을 때 적용되는 규칙입니다.

  • 변수의 이름은 알파벳, 숫자, 언더바( _ )로 구성합니다.(특수문자 사용불가)
  • C언어는 대소문자를 구분합니다. 따라서 변수 Num과 변수 num은 서로 다른 변수입니다.
  • 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없습니다.
  • 이름 사이에 공백이 삽입될 수 없습니다.

이러한 규칙을 잘 지켜야합니다. 따라서 변수의 이름은 변수의 역할에 어울리는 의미 있는 이름으로 짓는 것이 좋습니다.


지금까지 변수의 선언과 활용에 대해 설명하였는데, 이런 변수는 다음과 같이 두 가지 부류로 나뉩니다.

  • 정수형 변수    정수의 저장을 목적으로 선언된 변수. 크기에 따라 char, short, int, long형 변수로 나눔
  • 실수형 변수    소수점 이하의 값을 지니는 실수의 저장을 목적으로 선언된 변수. 크기에 따라 float형, double형 변수로 나눔

정수냐, 실수냐에 따라서 값이 메모리 공간에 저장 및 참조되는 방식이 다르기 때문에 이렇게 나뉩니다.


-----------


다양한 연산자

  • 대입 연산자(=)와 산술 연산자

 연산자

 기능 

 기능 

 =

 연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입한다.

ex) num = 20; 

 ← 

 +

 두 피연산자의 값을 더한다.

ex) num = 1 + 2; 

 → 

 -

왼쪽의 피연산자 값에 오른쪽의 피연산자 값을 뺀다.

ex) num = 4 - 3;

  → 

*

두 피연산자의 값을 곱한다.

ex) num = 4 * 3; 

  → 

 /

왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다.

ex) num = 7 / 3; //결과 2

  → 

왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환한다.

ex) num = 7 % 3; //결과 1 

  → 

  • 복합 대입 연산자

다른 연산자와 합쳐진 형태의 대입 연산자를 칭합니다.

*=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

이 연산자는 기존의 코드를 줄일 때 사용할 수 있습니다.

ex) a = a + b >> a += b


  • 부호연산의 의미를 갖는 +, - 연산자
+, - 는 이항 연산자로서 덧셈과 뺄셈을 의미하지만, 피연산자가 하나인 단항 연산자로서 부호를 뜻하기도 한다. 이는 +1, -4같이 숫자 앞에 붙는 부호를 뜻하는 것입니다. 참고로, 부호 연산자가 삽입된 문장과 복합 대입 연산자가 삽입된 문장을 혼동하는 경우가 있습니다. 다음과 같이 연산자와 피연산자 사이에 공백을 삽입하지 않는 경우에는 더욱 혼동하기가 쉬우므로 공백을 두는 것이 혼란을 최소화하는 방법입니다.
ex)  num1=-num2;    >>    num1 = -num2;
num1-=num2;    >>    num1 -= num2;

  • 증가, 감소 연산자

연산자

기능

결합방향

++num

값을 1 증가 후, 속한 문장의 나머지를 진행(선 증가, 후 연산)

ex) val =++num;           //num = 12일 경우 val 13

num++

속한 문장을 먼저 진행한 후, 값을 1 증가(선 연산, 후 증가)

ex) val = num++;          //num = 12일 경우 val 12

--num

값을 1 감소 후, 속한 문장의 나머지를 진행(선 감소, 후 연산)

ex) val =--num;            //num = 12일 경우 val 11

num--

속한 문장을 먼저 진행한 후, 값을 1 감소(선 연산, 후 감소)

ex) val = num--;           //num = 12일 경우 val 12

  • 관계 연산자(<, >, ==, !=, <=, >=)

연산자 

기능 

결합방향 

 <

ex) n1 < n2

n1이 n2보다 작은가? 

ex) n1 > n2

n1이 n2보다 큰가? 

→ 

==

ex) n1 == n2

n1과 n2가 같은가? 

→ 

!= 

ex) n1 != n2

n1과 n2가 다른가? 

→ 

<= 

ex) n1 <= n2

n1이 n2보다 작거나 같은가? 

→ 

>= 

ex) n1 >= n2

n1이 n2보다 크거나 같은가?


위 관계 연산자들은 조건을 만족하면 1, 만족하지 않으면 0을 반환합니다. 그런데 여기서 말하는 1은 참(true. C언어는 0이 아닌 모든 값을 참으로 간주합니다.)을, 0은 거짓(false)을 의미하는 대표숫자입니다.


  • 논리 연산자(&&, ||, !)
AND(논리곱), OR(논리합), NOT(논리부정)

연산자 

기능 

결합방향 

&& 

ex) A && B

A와 B 모두 '참'이면 연산결과로 '참' 반환(논리AND) 

→ 

|| 

ex) A || B

A와 B 둘 중 하나라도 '참'이면 연산결과로 '참'을 반환(논리 OR) 

→ 

ex) !A

A가 '참'이면 '거짓', A가 '거짓'이면 '참'을 반환(논리 NOT) 

→ 

  • 콤마 연산자( , )
둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행에 삽입하는 경우에 사용되는 연산자입니다. 뿐만 아니라, 둘 이상의 인자를 함수로 전달할 때도 인자의 구분을 목적으로 사용됩니다. 즉, 콤마 연산자는 다른 연산자들과 달리, 연산의 결과가가 아닌 구분을 목적으로 사용됩니다.

  • 연산자의 우선순위와 결합방향

 순위

연산기호

연산자

결합방향

1위

()

함수호출

[]

인덱스

->

간접지정

.

직접지정

++(postifix)

--(postfix)

후위증가 및 감소

 2위

++(prefox)

--(prefix)

전위증가 및 감소

sizeof

바이트 단위 크기 계산

~

비트 단위 NOT

!

논리 NOT

-, +

부호 연산(음수와 양수의 표현)

&

주소 연산

*

간접지정 연산

3위

(casting)

자료형 변환

4위

*, /, %

곱셈, 나눗셈 관련 연산

5위

+, -

덧셈, 뺄셈

6위

 <<, >>

비트이동

7위

<, >, <=, >=

대소비교

8위

==, !=

동등비교

9위

&

비트 AND

10위

^

비트 XOR

11위

|

비트 OR

12위

&&

논리 AND

13위

||

논리 OR

14위

? :

조건연산

15위

=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=

대입연산

16위

,

콤마연산



------


SCANF


scanf 함수를 이용하면 키보드로부터 다양한 형태의 데이터를 입력 받을 수 있는데, 이는 정수 입력에 대해서만입니다. 단, 입력형태를 다양하게 지정하는 것이 가능합니다. 예를 들어 10진수, 16진수 등의 형태로 저장이 가능합니다.

scanf함수의 서식문자의 수를 조절하여 입력 받는 '데이터의 수'를 조절할 수 있을 뿐만 아니라, 서식문자를 변경하여 입력 받는 '데이터의 유형(형태)'도 달리할 수 있습니다.

int main(void)

{

int num1, num2, num3;

scanf("%d %d %d", &num1, &num2, &num3);    //scanf 함수는 공백을 기준으로 데이터를 구분

}


-----


C언어의 표준 키워드


C언어의 문법을 구성하는 단어들을 가리켜 키워드라 합니다. 따라서 변수나 함수의 이름을 선정할 때 이를 피해야합니다. 즉, 프로그래머가 다른 용도로 사용할 수 없도록 제한한 단어들입니다.


auto 

_Bool 

break 

case 

char 

_Complex 

const 

continue 

default 

do 

double 

else 

enum 

extern 

float 

for 

goto 

if 

_Imaginary 

return 

restrict 

short 

signed 

sizeof 

static 

struct 

switch

typedef 

union 

unsigned 

volatile 

while 

 

 

 

 


+ Recent posts