Coding/C

[C언어] 삼항 연산자, bool 자료형 - 코딩도장

GunP4ng 2023. 12. 11. 23:18

[코딩도장] Unit 20 ~ 22


1. 삼항 연산자

삼항 연산자는 ? 와 : 를 사용하여 나타낸다

삼항 연산자

 

? 앞에 조건을 넣고 조건이 참이라면 : 앞의 값을 조건이 거짓이면 : 뒤의 값을 할당한다

예시를 보면 num1 == 10이 참이라면 100거짓이면 200을 할당한다

 

if 문으로 표현하면

if (num1 == 10)
	printf("100");
else
	printf("200");

삼항 연산자로 표현하면

 

num1 == 10 ? 100 : 200

삼항 연산자는 if 문을 짧게 한 줄로 표현할 수 있다는 장점이 있지만

축약된 형식이기 때문에 가독성을 해칠 수 있다

삼항 연산자는 코드가 간결해지면서 가독성을 해치지 않을 때 사용해야 한다

 

변수에 삼항 연산자의 값을 할당하려면

num2 = num1 == 10 ? 100 : 200;

num1 이 10일 경우 num2 에 100을 할당하고 아닐 경우 200을 할당한다

이런 식의 코드는 = 과 == 이 연달아서 나오기 때문에 헷갈릴 수 있다

 

num2 = (num1 == 10) ? 100 : 200;

따라서 이렇게 조건식을 ( ) 로 묶어주면 코드의 의도를 명확히 할 수 있다

 

 

2. 불(boolean) 자료형 사용하기

C언어에서 불(boolean) 자료형을 사용하기 위해서는 stdbool.h 헤더 파일을 사용해야 한다

      ○ bool은 나중에 추가된 자료형이기 때문에 헤더파일을 추가한다

      ○ 헤더 파일 없이 불 자료형을 사용하려면 _Bool 로 선언해야 한다

#include <stdbool.h>

bool b1 = true;
bool b2 = false;

true 는 참이고 false 는 거짓이다

 

불(boolean) 자료형의 크기는

printf("int의 크기: %d\n", sizeof(int));      // int의 크기: 4: int의 크기는 4바이트
printf("bool의 크기: %d\n", sizeof(bool));    // bool의 크기: 1: bool의 크기는 1바이트

이렇게 구할 수 있다

int 의 크기는 4바이트

bool 의 크기는 1바이트인 것을 알 수 있다

 

int 로 참 거짓을 표현하면 4바이트를 사용하지만 불(boolean) 자료형을 사용하면 1바이트로 표현할 수 있다


심사문제

20.8 비교 연산자 사용하기

표준 입력으로 문자가 입력됩니다. 다음 조건대로 입력된 문자를 검사하여 결과를 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다).

  1. 문자가 k와 다르면 "참", 같으면 "거짓"
  2. 문자가 h보다 크면 "참", 작거나 같으면 "거짓"
  3. 문자가 o보다 작거나 같으면 "참", 크면 "거짓"

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.

#include <stdio.h>
 
int main() {
    char c1;
    scanf("%c", &c1);

    if (c1 != 'k')
        printf("참\n");
    else
        printf("거짓\n");
    
    printf("%s", (c1 > 'h') ? "참\n" : "거짓\n");
    printf("%s", (c1 <= 'o') ? "참\n" : "거짓\n");
    
    return 0;
}

if 문으로 c1 이 k 가 아닐 때

참을 출력하고

맞다면 거짓을 출력하도록 했다

 

삼항연산자를 이용해서 c1 이 h 보다 크면 참을 출력하고 아니면 거짓을 출력한다

마찬가지로 c1 이 o 보다 작거나 같으면 참을 출력하고 아니면 거짓을 출력한다


20.9 삼항 연산자 사용하기

표준 입력으로 정수가 입력됩니다. 입력된 정수가 7과 다르면 1을 출력하고 같으면 2를 출력하는 프로그램을 만드세요(printf 함수 안에 코드를 넣으면 됩니다).

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main()
{
    int num1;

    scanf("%d", &num1);

    printf("%d\n", _____________);
 
    return 0;
}

 

정답

num1 == 7 ? 2 : 1

num1 이 7과 같을 때

참이면 2를 할당하고 거짓이면 1을 할당한다


21.9 논리 연산자 사용하기

표준 입력으로 두 정수가 입력됩니다. 다음 조건대로 입력된 두 정수를 검사하여 결과를 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다).

  1. 두 정수를 AND 연산했을 때 참이면 "참", 거짓이면 "거짓"
  2. 두 정수를 OR 연산했을 때 참이면 "참", 거짓이면 "거짓"
  3. 첫번째 정수를 NOT 연산했을 때 참이면"참", 거짓이면 "거짓"

정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.

#include <stdio.h>
 
int main() {
    int a, b;
    scanf("%d %d", &a, &b);

    printf("%s", (a && b ? "참\n" : "거짓\n"));
    printf("%s", (a || b) ? "참\n" : "거짓\n");
    printf("%s", !a ? "참\n" : "거짓\n");
    
    return 0;
}

논리 AND 연산자는 &&

논리 OR 연산자는 ||

논리 NOT 연산자는 !


22.8 불 자료형 사용하기

다음 소스 코드를 완성하여 "참" "거짓"이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
#include <stdbool.h>
 
int main()
{
    _______________
    _______________
 
    if (b1 != true)
        printf("참\n");
    else
        printf("거짓\n");
 
    printf("%s\n", b2 == false ? "참" : "거짓");
 
    return 0;
}

 

정답

bool b1 = false;
bool b2 = true;

bool 자료형에서 true 는 참 false 는 거짓이다