티스토리 뷰

반응형

3-1 덧셈 프로그램 구현을 위해 필요한 + 연산자

 

연산자 - 연산을 요구할 때 사용되는 기호

 

C 언어는 데이터의 저장을 위해서 '변수'라는 것을 제공한다.

 

 

3-2 C 언어는 데이터 저장을 위해 변수를 제공한다.

 

변수 - 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름(혹은 메모리 공간 자체)을 의미

 

변수는 크게 정수형 변수와 실수형 변수 두 가지로 나뉜다.

정수형 변수(int형, char형, long형)

실수형 변수(float형, double형)

 

선언하는 변수의 특징을 나타내는 char, int, double 등을 가리켜 '자료형' 혹은 '데이터 타입(Data Type)'이라고 한다.

 

int val; //int형 변수 val의 선언

 

(정수를 저장할 수 있는 메모리 공간을 할당하고, 그 메모리 공간에 val이라는 이름을 부여한다.)

 

단! 정수를 저장하기 위한 메모리 공간이므로 정수를 저장해야 한다.

 

int val;

val = 20;

 

만일 선언하고자 하는 변수의 종류가 같다면 동시에 선언하는 것이 가능하다. 또한 선언과 동시에 값을 초기화하는 것도 가능하다.

 

int a, b;

int c=30, d=40;

 

a=10;

b=20;

 

만일 변수를 선언만 하고 초기화하지 않을 경우 변수에는 의미 없는 값이 들어가게 되는데, 이를 '쓰레기 값'이라고 표현하고, 물론 얼마인지 예측할 수 없다.

 

변수 선언 시 주의사항

1. 변수를 함수 내에 선언 할 경우, 제일 먼저 등장해야 한다.

 

int a;

int b;

 

a=10;

b=20;

 

은 문제가 없다. 하지만

 

int a;

a=10;

 

int b;

b=20;

 

이런 식으로 중간에 변수선언이 나오게 되면 문제가 발생한다.

 

2. 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.

3. C 언어는 대 소문자를 구분한다. 따라서 변수 Val과 변수 val은 서로 다른 변수이다.

4. 공백이 포함될 수 없다.(스페이스 바, 엔터, 탭)

 

변수의 이름을 정할 때 반드시 의미를 지니는 이름을 주려고 노력해야 한다. (만일 나이를 저장할 수 있는 변수를 한다면 age로 변수 이름을 주는 것이 좋다. 이런식으로 의미를 지니는 이름을 주면 프로그램이 이해하기가 쉽다.)

 

변수와 마찬가지로 상수도 값을 저장할 수 있는 메모리 공간을 지닌다. 그러나 상수이므로 데이터 변경은 불가능하다.

 

 

3-3 C 언어에는 다양한 연산자가 존재한다

 

●대입 연산자(=)와 산술 연산자(+, -, *, /, %)

 

이항연산자 - 두 개의 피연산자를 요구하는 연산자

 

연산자

연산자의 의미

결합성

=

오른 쪽에 있는 값을 왼쪽에 대입한다.

Ex) a=20

+

왼쪽과 오른쪽에 있는 값을 더한다.

Ex) a=4+3

-

왼쪽에 있는 값에서 오른쪽에 있는 값을 뺀다.

Ex) a=4-3

*

왼쪽과 오른쪽에 있는 값을 곱한다.

Ex) a=4*3

/

왼쪽에 있는 값을 오른쪽에 있는 값으로 나눈다.

Ex) a=4/3

%

왼쪽에 있는 값을 오른쪽에 있는 값으로 나눠서 나머지를 반환한다.

Ex) a=4%3

 

●기타 대입 연산자(+=, -=,*=, /=, %=)

 

a = a + b

같은 의미

a+=b

a = a – b

같은 의미

a-=b

a = a * b

같은 의미

a*=b

a = a / b

같은 의미

a/=b

a = a % b

같은 의미

a%=b

 

부호 연산으로서의 + 와 - 연산자

+와 -연산자는 이항 연산자로서의 기능뿐 아니라, 단항 연산자로서의 기능도 지니고 있다.

ex) -1(음수 표현), +4(양수 표현)

 

부호 연산자와 기타 대입 연산자를 혼동하는 경우가 있는데, 자세히 살펴보기 바란다. a+=b와 a=+b는 엄연히 다른 의미를 지닌다.

 

●증가, 감소 연산자

 

연산자는 값을 하나 증가, 혹은 감소 시키는 경우에 사용되는 단항 연산자들이다. 활용빈도가 높으면서도 혼동하기 쉬운 것들이므로 확실히 이해하고 넘어가기 바란다.

 

연산자

연산자의 의미

결합성

++a

값을 1 증가 후 연산을 진행(선 증가, 후 연산)

Ex) printf(“%d”, ++a)

a++

연산을 진행한 후 값을 1 증가(선 연산, 후 증가)

Ex) printf(“%d”, a++)

--b

값을 1 감소 후 연산을 진행(선 감소, 후 연산)

Ex) printf(“%d”, --b)

b--

연산을 진행한 후 값을 1 감소(선 연산, 후 감소)

Ex) printf(“%d”, b--)

 

참고로 ( ) 연산자는 일반적인 수학의 ( ) 의 의미와 같다. 즉, 먼저 연산 하라는 뜻이다.

 

int val1 = 10;

int val2 = (val1--)+2;

printf("%d \n",val2);

 

실행결과는??

12가 된다.

그 이유는 val1-- 는 모든 연산이 끝난 후에 감소를 하기 때문에, 괄호가 있었지만 먼저 val1 + 2 연산을 수행하고 나서 1감소했기 때문이다.

 

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

 

연산자

연산자의 의미

결합성

<

Ex) a < b

a b보다 작은가?

>

Ex) a > b

a b보다 큰가?

==

Ex) a == b

a b가 같은가?

!=

Ex) a != b

a b가 같지 않은가?

<=

Ex) a <= b

a b보다 작거나 같은가?

>=

Ex) a >= b

a b보다 크거나 같은가?

 

관계 연산자는 조건을 만족하면 true, 만족하지 못하면 false를 반환한다. 여기서 야기하는 true는 1을 의미하고, false는 0을 의미한다.

 

●논리 연산자(&&, ll, !)

 

논리 연산자 - and, or, not을 표현하는 연산자

 

연산자

연산자의 의미

결합성

&&

피연산자가 모두 참이면 true를 반환(and)

Ex) a && b

ll

피연산자 중 하나라도 참이면 true를 반환(or)

Ex) a ll b

!

피연산자가 true false, false true를 반환(not)

Ex) !a

 

관계 연산자가 논리 연산자보다 먼저 진행된다.

 

val1 = 10;

result = (!val1);

printf("%d \n", val1);

 

실행결과는 0이 출력된다.

컴퓨터는 0이 아닌 모든 값을 true로 인식하므로, val1이 지니고 있던 10은 true로 인식되어, not 연산이 되어 false인 0이 출력되는 것이다.

 

●비트 단위 연산자(~, &, ^, |, <<, >>)

 

비트 단위 연산자 - 비트 단위(0 or 1)로 연산을 할 때 사용하는 연산자를 말하는 것

 

●콤마(,) 연산자

 

printf("Hello"), printf("World!");

 

둘 이상의 문장이 콤마(,)연산자에 의해서 한 줄에 걸쳐 선언될 수 있음을 보여준다.

 

우선 순위 - 덧셈, 뺄셈보다는 곱셈, 나눗셈이 먼저 진행 되어야 한다는 것

결합성 - 곱셈과 나눗셈은 먼저 나오는 것을 먼저 계산하면 된다. 그러니깐 왼쪽에 있는 것부터 계산을 해야 하는 것.

             즉, 우선 순위가 같은 연산자가 둘 이상 있을 경우에 무엇을 먼저 연산 하느냐를 결정짓는 것

 

우선순위 표는 교과서를 참조!

 

 

3-4 키보드로부터 데이터를 입력 받고 싶다!

 

int val;

scanf("%d", &val);

 

변수 앞에 &가 붙어 있음을 주의 깊게 보자.

 

scanf 함수는 데이터의 경계를 공백(스페이스바, tab키, enter키)으로 구분한다.

 

 

3-5 C 언어의 키워드들

 

int, return과 같은 것들은 이미 기능적 의미가 정해져 있다. 이런 것들을 키워드라고 한다.

키워드는 변수로 사용할 수 없다.

 

auto

_Bool

break

case

char

_Complex

const

continue

default

restrict

do

double

else

enum

extern

float

for

goto

if

_Imaginary

inline

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

 

 

 

 

연습문제 3-1

문제 1

 

 

문제 2

 

 

문제 3

 

 

문제 4

 

 

문제 5

 

 

 

이번 장에서 공부한 내용 정리

 

1. 변수가 무엇인지에 대해서 살펴보았다. 더불어 상수에 대해서도 간략히 언급하였다.

2. 다양한 종류의 연산자에 대해서 살펴보았다. 특히 증가 및 감소 연산자에 대해서 주의를 기울여야 한다.

3. 키보드로부터 데이터를 입력받는 scanf 함수의 사용 방법에 대해서 살펴보았다. 그러나 입력받을 변수의 이름 앞에 & 연산자를 붙이는 이유에 대해서는 언급하지 않았다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
반응형