본문 바로가기

공부/C언어

C언어 - (2) : 변수 / 연산자

변수

변수란, 값을 저장할 수 있는 메모리 공간에 붙여진 이름으로, 변수를 선언하게 되면 각 변수에 대해 메모리 공간이 할당되고 메모리 공간에 변수의 이름이 붙는다.

#include <stdio.h>

int main(void)
{
	int num;
    num = 20;
    printf("%d", num);
}
  • int : 정수 형태의 데이터를 위한 메모리 할당
  • num : 할당된 메모리 공간의 이름
  • num=20 : num의 메모리 공간에 20을 저장
  • printf("%d", num); : num의 메모리 공간에 저장된 값을 참조 후, 출력

변수를 선언하고 값을 할당(초기화)하는 방법은 두가지 방법이 존재한다.

  • 변수만 선언 후, 초기화
  • 변수 선언과 동시에 초기화
#include <stdio.h>

int main(void)
{
    int num1, num2; // 변수 선언
    int num3=30, num4=40; // 변수 선언과 동시에 값 할당
    printf("num1: %d, num2: %d \n", num1, num2);
    // 초기화 하지 않아, 의미없는 값이 출력됨 -> num1: 259005392, num2: 32759 
    num1=10;
    num2=20;

    printf("num1: %d, num2: %d", num1, num2);
    //num1: 10, num2: 20
    printf("num3: %d, num4: %d", num3, num4);
    //num3: 30, num4: 40
    return 0;
}

변수 선언 시 주의사항

변수 선언이 맨앞에 오도록 하는 것이 좋다 (과거 버전의 컴파일러에는 변수의 선언이 맨 앞에 와야하는 경우가 있음)

// 변수 선언이 맨 앞에 오는 경우
int main(void)
{
    int num1, num2;
    num1=10, num2=20;
    
    return 0;
}

// 변수 선언이 맨 앞에 오지 않는 경우
int main2(void)
{
    int num1;
    num1=10;
    
    int num2;
    num2=20
    
    return 0;
}

변수의 이름을 설정할 때의 규칙이 존재한다.

  • 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성된다.
  • C언어는 대소문자를 구분한다.
    • Num $\neq$ num
  • 변수의 이름은 숫자로 시작할수 없고, 키워드도 변수의 이름으로 사용할 수 없다.
    • int 7thval; (x)
  • 이름 사이에 공백이 없어야 한다.
    • int your name; (x)

변수의 자료형(Data Type)

정수형 변수

  • char, short, int, long

실수형 변수

  • float, double

문자형 변수

  • str

연산자

// 연산자
#include <stdio.h>

int main(void)
{
    int num1=9, num2=2;
    printf("%d+%d=%d \n", num1, num2, num1+num2);
    // 9+2=11 
    printf("%d-%d=%d \n", num1, num2, num1-num2);
    // 9-2=7 
    printf("%dx%d=%d \n", num1, num2, num1*num2);
    // 9x2=18 
    printf("%d/%d의 몫=%d \n", num1, num2, num1/num2);
    // 9/2의 몫=4 
    printf("%d/%d의 나머지=%d \n", num1, num2, num1%num2);
    // 9/2의 나머지=1 
    
    return 0;
}

복합 대입 연산자

표현을 간단히 하기 위한 복합 대입 연산자는 다음과 같다.

// 복합 대입 연산자
#include <stdio.h>

int main(void)
{
    int num1=2, num2=4, num3=6;
    num1 += 3; // num1 = num1 + 3
    num2 *= 4; // num2 = num2 * 4
    num3 %= 5; // num3 = num3 % 5
    printf("Result : %d, %d, %d \n", num1, num2, num3);
    // Result : 5, 16, 1 

    return 0;
}

증가, 감소 연산자

증가, 감소 연산자는 변수의 앞뒤에 `++`, `--`를 붙여 1씩 증가시키거나 감소시키는 연산자이다.

다만 이를 사용할 때 연산자를 붙이는 위치에 따라 연산 결과가 달라질 수 있기 때문에 사용에 주의하여야 한다.

연산자 연산자의 기능 결합 방향
++num 값을 1 증가 후, 속한 문장의 나머지를 진행
(ex: val = ++num;)
$\leftarrow$
num++ 속한 문장의 연산을 먼저 진행 후, 값을 1 증가
(ex: val = num++;)
$\leftarrow$
--num 값을 1 감소 후, 속한 문장의 나머지를 진행
(ex: val = --num;)
$\leftarrow$
num-- 속한 문장의 연산을 먼저 진행 후, 값을 1 감소
(ex: val = num--;)
$\leftarrow$
// 증가, 감소 연산자
#include <stdio.h>

int main(void)
{
    int num1=10;
    int num2=(num1--)+2; // 후위 감소 : 연산 후, 감소(num2 = num1+2 = 12) & (num1 = num-1 = 9)

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

관계 연산자

두 값 간의 관계에 대해 계산하는 연산자이다.

// 관계 연산자
#include <stdio.h>
int main(void){
    int num1=10, num2=12;
    int result1, result2, result3; // 관계 연산자의 return 값은 0,1 이므로 정수 변수 선언
    result1 = (num1==num2);
    result2 = (num1<=num2);
    result3 = (num1>num2);
    printf("result1: %d \n", result1);
    //result1: 0 (False)
    printf("result2: %d \n", result2);
    //result2: 1 (True)
    printf("result3: %d \n", result3);
    //result3: 0 (False)

    return 0;
}

논리 연산자

연산자 연산자의 기능 결합 방향
&& A와 B 모두가 참이면 참을 반환
(A && B)
$\rightarrow$
|| A와 B 둘 중 하나라도  참이면 참을 반환
(A || B)
$\rightarrow$
! A가 참이면 거짓, 거짓이면 참을 반환
(!A)
$\leftarrow$
// 논리 연산자
#include <stdio.h>

int main(void){
    int num1=10, num2=12;
    int result1, result2, result3;
    result1 = (num1==10)&&(num2==12); // True && True = True(1)
    result2 = (num1<12)||(num2>12); // True || False = True(1)
    result3 = (!num1); // !True(0이 아니므로) = False(0)

    printf("result1: %d \n", result1);
    printf("result2: %d \n", result2);
    printf("result3: %d \n", result3);

    return 0;
}

키보드로부터의 데이터 입력과 C언어의 키워드

'scanf' 함수 : 키보드로부터 값을 입력 받음

// 데이터 입력(scanf)
#include <stdio.h>
int main(void){
    int result;
    int num1, num2;

    printf("정수 one: "); // 출력
    scanf("%d", &num1); // 입력 : 변수명 앞에 &을 붙임(Pointer)

    printf("정수 two: "); // 출력
    scanf("%d", &num2); // 입력 : 변수명 앞에 &을 붙임(Pointer)

    result=num1+num2;
    printf("%d+%d = %d \n", num1, num2, result);
    // 3+4 = 7

    return 0;
}

 

한 번의 함수 호출을 통해 둘 이상의 변수에 값을 입력할 수 있다.

// scanf - (2)
#include <stdio.h>

int main(void){
    int result;
    int num1, num2, num3;

    printf("3개의 정수 입력: ");
    scanf("%d,%d,%d", &num1, &num2, &num3); // 다음과 같은 형태일 경우(4,5,6)으로 입력
    scanf("%d %d %d", &num1, &num2, &num3); // 다음과 같은 형태일 경우(4 5 6)으로 입력

    result = num1+num2+num3;
    printf("%d+%d+%d = %d \n", num1, num2, num3, result);

    return 0;
}

키워드

C언어의 문법을 구성하는, 이미 그 의미가 정해져있는 단어들을 '키워드'라고 한다.

`auto, _Bool, break, case, char, _Complex, const, continue, default, do, double, else, enum, extern, float, for, ...`

'공부 > C언어' 카테고리의 다른 글

C언어 - (6) : 반복문  (0) 2024.10.07
C언어 - (5) : printf / scanf  (3) 2024.10.06
C언어 - (4) : 자료형/형 변환  (3) 2024.10.03
C언어 - (3) : 자료형 별 데이터의 표현 방식 / 비트 연산자  (2) 2024.09.11
C언어 - (1)  (0) 2024.09.05