연산자와 변수

마블현·2024년 3월 9일

C언어

목록 보기
1/17

본 시리즈는 '윤성우 열혈 C 프로그래밍' 책을 기반으로 작성되었습니다.

연산자 (operator)

  • C 언어를 이용해서 특정 연산을 요구할 때 사용하는 약속된 기호

이항 연산자

  • 두 개의 피연산자를 요구하는 연산자
  • = : 연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입
  • +, - , * , / , % : 더하기, 빼기, 곱하기, 나누기, 나머지 반환
  • 함수 호출문의 인자전달 위치에 연산식이 올 수 있다.
#include <stdio.h>

int main(void)
{
	int num1 = 9, num2 = 3
    printf("%d + %d = %d \n", num1, num2, num1+num2);
	return 0;
}

복합 대입 연산자

  • 다른 연산자와 합쳐진 형태의 대입 연산자
  • *=, /=, %=, +=, -=, <<= 등
    a = a + b 의 연산식을 복합 대입 연산자를 이용해 a += b 로 간략하게 작성할 수 있다.

부호연산의 의미를 갖는 +연산자와 -연산자

  • +연산자와 -연산자는 이항 연산자로서 덧셈과 뺄셈을 의미하지만, 피연산자가 하나인 단항 연산자로서 부호를 뜻한다.
  • num1 = -num2
    num3 -= num4
    위 두 식은 헷갈릴 가능성이 있으니 주의하자.

증가, 감소 연산자

  • 변수에 저장된 값을 1 증가 및 감소시키는 경우에 사용되는 연산자
  • ++num: 값을 1 증가 후 연산
  • num++: 연산 후 값이 1 증가
  • --num: 값을 1 감소 후 연산
  • num--: 연산 후 값이 1 감소
  • 후위 증가나 후위 감소의 경우에는 소괄호의 영향을 받지 않고, 다음 문장으로 넘어가야만 비로소 값의 증가 및 감소가 이루어진다.

num1의 후위감소를 소괄호로 묶어 먼저 진행되도록 했지만,

값이 감소되지 않았다.

관계 연산자

  • 대소와 동등의 관계를 따지는 연산자
  • 값을 비교하기 때문에 비교 연산자라고도 불린다.
  • <, >, ==, !=, <=, >=
  • 관계연산자들은 조건을 만족하면 1(True)을, 만족하지 않으면 0(False)을 반환한다.

논리 연산자

  • A && B: A와 B 모두 '참'이면 연산결과로 '참'을 반환 (논리 AND)
  • A || B: A와 B 둘 중 하나라도 '참'이면 연산결과로 '참'을 반환 (논리 OR)
  • !A: A가 '참'이면 '거짓'을 반환, '거짓'이면 '참'을 반환 (논리 NOT)
  • 논리 연산자보다 관계 연산자가 먼저 진행된다. (연산자 우선순위)

9행에서 num1과 10이 같은지 비교하고, num2와 12가 같은지 비교한 후에 둘 다 참을 반환했다. 후에 && 연산자를 통하여 참을 반환하여 result1에 저장했다.

10행에서 num1이 12보다 작은 지와 num2가 12보다 큰 지를 비교하자 1과 0을 반환했고, 후에 ||연산자를 통해 참을 반환하여 result2에 저장했다.

콤마 연산자

  • 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행에 삽입하는 경우에 사용되는 연산자
  • 둘 이상의 인자를 함수로 전달할 때도 인자의 구분을 목적으로 사용

변수 (variable)

  • 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체
  • 변수를 선언하면, 그 변수의 이름을 통해 값의 저장, 참조, 변경이 가능

변수 선언과 초기화

선언된 변수에 처음 값을 저장하는 것을 초기화라고 한다.
초기화 이후에 저장된 값을 변경할 때에는 대입이라고 한다.

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

int > 정수의 저장이 가능한 메모리 공간을 할당하고,
num > 할당된 메모리 공간에 num이라는 이름 부여함으로써 변수 선언 완료

  • C언어에서는 변수를 선언과 동시에 초기화하는 것이 가능하다.
    int num = 12;
  • 또한 둘 이상의 변수를 동시에 선언하고 초기화하는 것도 가능하다.
    int num1, num2;		// 두 개의 변수 선언
    int num3 = 10, num4 = 20;	// 두 개의 변수 선언 및 초기화
  • 변수를 선언한 후에 초기화 하지 않는다면?

    쓰레기 값(아무런 의미가 없는 값)이 나와버린다.

변수 선언 시 주의사항

  • 중괄호 내에 변수를 선언할 경우, 변수의 선언문은 중괄호 앞부분에 위치해야한다.
  • 변수의 이름은 알파벳 숫자, 언더바(_)로 구성된다.
  • C언어는 대소문자를 구분하기 때문에, 변수 Num과 num은 서로 다른 변수이다.
  • 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없다.
  • 이름 사이에 공백이 삽입될 수 없다.

들려오는 개발자들에 말에 의하면, 코딩할 때 제일 어려운 점은 알맞은 변수의 이름을 정하는 것이라고 한다.
그만큼 변수들에게는 알맞은 이름을 지어주는 것은 중요하다.

변수의 자료형

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

두가지 종류로 나뉘는 것은 정수냐, 실수냐에 따라서 값이 메모리 공간에 저장 및 참조되는 방식이 다르기 때문이다.


scanf 함수

scanf 함수를 이용하면 키보드로부터 다양한 형태의 데이터를 입력받을 수 있다.

int main(void)
{
	int num;
    scanf("%d", &num);	// 키보드로 입력된 정수를 변수 num에 저장
}

키보드로부터 데이터를 입력 받으려면, 데이터의 종류에 맞게 메로리 공간이 미리 할당되어 있어야한다. 변수 num을 선언한 이유이다.

이어서 scanf 함수를 호출하면서 10진수 형태의 정수를 입력받아서, 변수 num에 저장한다.

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

  • scanf 함수는 공백을 기준으로 데이터를 구분한다.
#include <stdio.h>

int main(void)
{
	int num1, num2, num3;
    
    printf("세 개의 정수 입력: ");
    scanf("%d %d %d", &num1, &num2, &num3);  // %d 사이에 공백으로 구분

    return 0;
}
profile
고수로 나아가는 중

0개의 댓글