[C언어] 자료형, 형식 지정자, 연산자

woodstock·2024년 2월 12일
post-thumbnail

C에서는 정수나 문자열 외에도 다양한 데이터 타입이 정의되어 있다.

또한 각 타입에 맞는 형식 지정자를 통해 적절한 포맷으로 출력하고, 다양한 연산자를 통해 조건문을 설정하거나 데이터 값을 계산할 수 있다.

데이터 타입

아래 목록은 변수의 데이터 타입으로 사용할 수 있는 것들이다.

bool : 불리언 표현, (예) True, False, 1, 0, yes, no
char : 문자 하나 (예) 'a', 'Z', '?'
string : 문자열
int : 특정 크기 또는 특정 비트까지의 정수 (예) 5, 28, -3, 0
long : 더 큰 크기의 정수
float : 부동소수점을 갖는 실수 (예) 3.14, 0.0, -28.56
double : 부동소수점을 포함한 더 큰 실수

  • int는 대략 40억까지 셀 수 있기 때문에 40억 이상의 데이터를 가진 일부 거대 기업과 같은 상황이 아닌 일반 사용자들은 대부분 정수에 int를 사용한다.

형식 지정자

printf 함수에서는 각 데이터 타입을 위한 형식 지정자를 사용할 수 있다.

%c : char
%f : float, double
%i : int
%li : long
%s : string


기타 연산자 및 주석

이 외에도 아래 목록과 같이 다양한 수학 연산자, 논리 연산자, 주석 등이 기호로 정의되어 있다.

+ : 더하기
- : 빼기
* : 곱하기
/ : 나누기
% : 나머지
&& : 그리고
|| : 또는
// : 주석


정수와 실수를 받아서 출력해보기

정수

#include <cs50.h>
#include <stdio.h>

int main(void) 
{
  int age = get_int("What's your age?\n");
  int days = age * 365;
  printf("You are at least %i days old.\n", days);
}

get_int라는 정수 값을 받아오는 CS50 라이브러리에 있는 함수를 사용한다.

사용자의 나이는 오른쪽에서 왼쪽으로 복사되어 age라는 변수에 저장되며, 그 변수의 종류는 int 정수이다.

days라는 정수 변수에 age에 365를 곱한 수를 저장하고 printf 함수에 %idays의 인자를 받아주고 출력해준다.

코드를 좀 더 간단하게 작성하면 아래와 같다.

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    int age = get_int("what's your age?\n");
    printf("Your are at least %i days old.\n", age * 365);
}

아래와 같이 age라는 변수를 없애버리고 age*365 대신에 get_int 함수를 넣어 365를 곱할 수도 있다.

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    printf("Your are at least %i days old.\n", get_int("what's your age?\n") * 365);
}

이렇게 극단적으로 줄여버린 코드가 옳은 것일까? 마지막 코드는 좌우로 너무 길어서 가독성이 떨어진다.

이러한 코드보다는 읽기 편하고 이해하기 쉬운 코드가 더 선호되어진다.

실수

# include <cs50.h>
# include <stdio.h>

int main(void)
{
    float price = get_float("What's the price?\n");
    printf("Your total is %f\n", price*1.1);
}

get_float 함수를 사용하여 물건의 가격을 물어보고 가격을 받아 price에 저장한 다음, 세금을 포함한 값을 계산해서 출력해보자. (한국 기준 부가세는 10%이다.)

총액은 실수(float)이므로 %f를 사용해준다.

결과 값이 11000.000000으로 소수점 6번째 자리까지 나와 보기에 좋지 않다.

printf("Your total is %.2f \n", price*1.1);

이때는 %f에서 f앞에 '.원하는 자리수'를 넣어 %.2f로 소수점 2번째 자리까지 나오게 할 수 있다.


짝수인지 홀수인지 알려주는 코드짜기

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int n = get_int("n: ");

    if (n % 2 == 0)
    {
        printf("even\n");
    }
    else
    {
        printf("odd\n")
    }
}

get_int로 사용자들에게 정수인 숫자를 받아서 n에 저장한다.

n을 2로 나누어 나머지가 0이면 짝수, 1이면 홀수일 것이다.

주석

C에서는 //로 주석을 달 수 있다.

// 주석입니다.

주석은 이 코드가 무슨 일을 하는지 설명하는 것이다.

우리가 작성한 코드를 처음보는 사람들에게는 코드에 대한 설명이 필요하다.

만약 코드가 수 백, 수 천줄이 되는데 주석이 없다면 부분 부분마다 어떤 일을 하는지 찾기 힘들 것이다.

이는 타인이 아닌 자기 자신에게도 해당한다.

스스로 작성한 코드라고 해도 한달 뒤, 일년 뒤에 보면 새롭기 때문이다.

따라서, 주석으로 잘 설명하는 습관이 중요하다.

생각해보기

짝수인지 홀수인지 알려주는 코드짜기에 자신의 스타일 대로 주석을 달아보자.

#include <cs50.h>
#include <stdio.h>

// 홀짝 구별하기
int main(void) {
  // 정수 n 입력받기
  int n = get_int("n: ");
  
  // n이 홀수면 "odd" 출력
  if (n % 2 == 0) {
    printf("even\n");
  } else {
    // n이 짝수면 "even" 출력
    printf("odd\n");
  }
}

profile
해내는 사람

0개의 댓글