The Fundamental Data Types (5주차)

post-thumbnail

선언 (Declaration)

  • 모든 변수는 사용전에 선언.
  • 목적 : 메모리 공간 확보, 올바른 연산 수행
  • 올바른 연산자의 선택
int a, b, c;
a = b + c; /* 정수 + 연산 */

float d, e, f;
d = e + f; /* 실수 + 연산 */

이 모든것은 System을 제어하기 위한 목적이 크다. Operating system을 만들기 위한 랭귀지이다.

C에서 메모리 공간 확보를 하는 이유 : C는 고급언어를 가장한 저급 언어이다. Assembly를 살짝 포장해 놓은 제법 그럴듯한 모양을 가지고 있지만, 실제로는 저급언어이다.

선언 예제

#include <stdio.h>

int main(void)
{
    int     a, b, c;                 /* declaration */
    float   x, y = 3.3, z = -7.7;    /* declaration with initializations */

    printf("Input two integer: ");   /* function call */
    scanf("%d%d", &b, &c);           /* function call */
    a = b + c;                       /* assignment */
    x = y + z;                       /* assignment */
    ...
}

수식(Expression)

  • 상수, 변수, 연산자, 함수 호출 등의 의미 있는 결합
  • 상수, 변수, 함수 호출은 그 자체가 수식임
a + b /* 변수의 연산 */
sqrt(7.333) /* 함수 호출 */
5.0 * x - tan(9.0/x) /* 함수호출과 변수연산 */

배정 (Assignment)

  • 문장 : 수식 뒤에 세미콜론이 오면, 수식은 문장이 됨
i = 7 /* 배정 수식 */
i = 7; /* 문장 */
3.777; /* 문법은 문제 없으나 용도가 없음 */
a+b; /* 문법은 문제 없으나 용도가 없음 */
  • 배정 수식 vs 수학 등식
x + 2 = 0 /* 틀림 */
x = x + 1; /* 배정 수식 */

기본 자료형

  • 정수형 → char, short, int, long (+ signed/unsigned)
  • 실수형 → float, double, long double
  • Arithmetic → 둘 다 포함
  • 선언 문법 → int a, b, c; 이런 형태 가능

문자 및 char 자료형

문자는 ASCI코드로, 숫자로 표현된다.

int 자료형

  • int 형
    32bit : -2^31 ~ 2^31 -1 (-21억 ~ 21억)
    16bit : -2^15 ~ 2^15-1 (-3만 2천 ~ 3만 2천)
#define BIG 200000000
int main(void)
{
	int a, b = BIG, C = BIG;
    a = b + c;
}
  • a : 부정확한 값 (integer overflow)
    -> 프로그램은 계속 실행되지만, 논리적으로 부정확한 값이 배정됨
    -> 따라서 프로그래머는 변수별로 적절한 범위를 항상 고려해야 함

정수적형(Integral Type) : short, long, unsigned

  • short 형
  • long 형
  • unsigned 형

부동형

부동형 : float, double, long double
|Suffix|Type|Example|
|f or F|float|3.7F|
|l or L|long double|3.7L|

  • 기본적으로 접미사가 없는 부동형은 double형으로 간주
  • float (4 bytes) : 유효숫자 6자리 중요
  • double (8 bytes) : 유효숫자 15자리 중요

typedef의 사용

  • typedef : 식별자를 특정한 형과 연관
    |typedef|char|uppercase;
    |typedef |int |INCHES, FEET;
    |typedef| unsigned long |size_t;
  • 변수, 함수 선언시 사용
  1. 긴 선언문을 축약해 쓸 수 있음
  2. 목적에 따라 형 이름을 사용
  3. 사용하는 컴퓨터에 따라 형의 메모리 할당 byte 수가 달라질 경우 이식하기 쉽게 만듦

sizeof 연산자 (Not function)

  • sizeof : 객체 저장시 메모리 할당 byte 수 알기 위해 사용
  • sizeof(char) = 1
  • sizeof(short) <= sizeof(int) <= sizeof(long)
  • sizeof(signed) = sizeof(unsigned) = sizeof(int)
  • sizeof(float) <= sizeof(double) <= sizeof(long double)

시험문제

#include <stdio.h>

int main(void)
{
    int c;
    while ((c = getchar()) != EOF)
        if (c >= 'a' && c <= 'z')
            putchar(c + 'A' - 'a'); /*숫자 뭐에서 뭘 빼면 어떻게 된다 시험문제에 나옴 */
        else
            putchar(c);

    return 0;
}

이 코드는 입력받은 문자들 중 소문자만 대문자로 바꿔서 출력하는 프로그램이다.

수학 함수

  • C에는 내장 수학함수가 없다.
  • 수학 Library에서 제공 <math.h>
  • sqrt(), pow(), exp(), log(), sin(), cos(), tan()
  • 절댓값 함수:
    abs(), fabs()
#include <math.h>
#include <stdio.h>

int main(void)
{
    double x;
    printf("/n%s",
           "The following will be computed:\n"
           "\n"
           "    The square root of x\n"
           "    x raised to the power x\n"
           "\n");

변환과 캐스트

  • 정수적 승격 (the integral promotions)
    1) signed 혹은 unsigne의 char, short, 또는 열거형을 Int나 unsigned int형이 사용될 수 있는 수식에서 대신 사용 가능

2) 이 경우, 이들 형들 중 모든 값을 int로 표현하라 수 있으면 int로 변환되고, 그렇지 않으면 unsigned int로 변환됨

3) char c = 'A';
printf("%d\n", c); / c는 승격이 일어나 int형이 됨 (65출력) /

  • 일반적 자동 변환 (the usual arithmetic conversions)
  1. 수식에서 제일 큰 형으로 변환한다.
  2. Long double, double, float
  3. unsigned long, long, unsigned, int의 순서
  4. long과 unsigned의 경우, 모든 값을 long으로 표현할 수 있으면 long으로 변환되고, 그렇지 않으면 unsigned long으로 변환됨

캐스트 - 명시적 변환

  • (double) i
  • (long) 'A' + 1.0
  • f = (float)
  • d = (double) i/3
  • (double) (x = 77)

Homework

7번, 8번, 10번, 17번

0개의 댓글