본문 바로가기

개발공부(C, C++)

따배씨(따라 배우는 C언어_홍정모) Chapter3

CHAPTER 3 데이터와 C언어

"우리는 과거를 알지만 제어할 수는 없다. 우리는 미래를 제어할 수는 있지만 알 수는 없다." _Claude Shannon

3.1 데이터와 자료형 Data and Data Types

3.2 변수와 상수

자료형 변수 리터럴 상수
int angel 1004;

앞에 한정자, 제한자(Qualifier)를 덧붙여 쓸 수 있으며, 변수를 기호적 상수(Symbolic constant) 라고 하기도 한다.

한정자, 제한자 자료형 기호적 상수 리터럴 상수
const int angel 1004;

3.3 scanf()

콘솔로 부터 사용자의 입력을 받아 변수에 저장할 때 사용한다. scanf() 를 통해 받아온 값을 &(ampersand) 를 붙인 변수에 저장한다.

int i = 0;
scanf("%d", &i);

::: warning
Visual Studio 에서 scanf() 를 쓰면 제대로 컴파일 되지 않는다. 어쩔 수 없이 #define _CRT_SECURE_NO_WARNINGS 라는 전처리기를 입력해주거나 VS 설정에 이 전처리 옵션을 따로 지정해 주어야 한다. (옵션 설정시 Release 모드와 Debug 모드 구분 필수) Microsoft 는 scanf() 를 그대로 쓰면 해킹의 위험이 있다고 판단하여 scanf_s() 같은 다른 함수를 쓰길 권장한다.
:::

& 를 붙여야 하는가?

call by reference 개념으로, 요즈음의 프로그래밍 언어와 달리 C 는 함수가 한 번에 하나의 출력 밖에 못하기 때문에, scanf() 가 여러 개의 입력을 받고 출력에 넘겨주는 상황 모두에 대응하기 위해 변수의 메모리에 직접 접근해서 바꿔주는 방식을 취했다.

3.4 간단한 입출력 프로그램 만들기

int i = 0, j = 0;
printf("Input two integers\n");
scanf("%d%d", &i, &j); // 띄어쓰기 없어도 됨에 유의
printf("Your numbers are &d &d\n, i, j);

::: tip TODO
printf()scanf() 에 들어갈 수 있는 모든 형식 지정자 format specifier (예 : %d) 를 찾아보도록 하자.
:::

::: tip
C++ 등 다른 언어에서는 굳이 형식 지정자를 사용하지 않아도 출력할 수 있는 방법이 있다. (iostream)
:::

::: tip
형식지정자(format specififer) 대신 conversion specifier 을 공식명칭으로 쓰기도 한다.
:::

3.5 정수와 실수

정수 (Integers)

  • 음의 정수, 0, 양의 정수
  • 내부적으로 2진수 사용

실수 (Real numbers)

  • 내부적으로 부동소수점 (floating point) 표현법 사용

  • 3.14 = 3.14E0 = 3.14e0 = 0.314E1 = 31.4E-1 (E 는 지수*Exponent* 의 E)

  • 내부적으로 2진수 사용

부호 지수 분수 결과
+ -1 0.3141592 0.03141592
+ 2 0.3141592 31.41592

3.6 정수의 오버플로우

include <limits.h>
signed int i_max = INT_MAX;

와 같이 사용하면 자료형 마다의 최대값 혹은 최소값을 알아낼 수 있다. 각 자료형마다의 범위를 벗어나면 오버플로우가 발생한다.

3.10 문자형

char 의 형식지정자는 %c 인데, %hhi 나 %i 같은 정수형으로 출력하면 해당 char 의 아스키코드를 알 수 있다.

3.11 부동소수점형

significant figure : 유효숫자
exponent : 지수
유효숫자 * 10^지수