변수
수학에서 약속된 기호로 연산을 하듯 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
- 부호연산의 의미를 갖는 +, - 연산자
- 증가, 감소 연산자
연산자 |
기능 |
결합방향 |
++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)을 의미하는 대표숫자입니다.
- 논리 연산자(&&, ||, !)
연산자 |
기능 |
결합방향 |
&& |
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 |
|
|
|
|
'배울 것들 > 언어' 카테고리의 다른 글
C프로그래밍 6/? 반복문 (0) | 2018.11.19 |
---|---|
C프로그래밍 5/? 자료형 (0) | 2018.11.13 |
C프로그래밍 4/? 자료형 (0) | 2018.11.11 |
C프로그래밍 3/? 데이터 (0) | 2018.11.10 |
C프로그래밍 1/? (C언어 시작. 프로그래밍의 구성) (0) | 2018.11.08 |