1. 정수형과 실수형 자료형의 크기를 확인한다.

아래의 코드는 sizeof 연산자를 이용하여 정수형, 실수형 자료형의 size를 출력한다. 

 

1.1 코드를 분석하여 변수의 size와 자료형의 size의 출력을 비교하시오. 

#include <stdio.h>
 
int main(void)
{
    char ch = 9;
    int inum = 1052;
    double dnum = 3.1415;
 
    printf("변수 ch의 크기:%zu \n", sizeof(ch));
    printf("변수 inum의 크기:%zu \n", sizeof(inum));
    printf("변수 dnum의 크기:%zu \n", sizeof(dnum));
 
    printf("char의 크기:%zu \n", sizeof(char));
    printf("short의 크기:%zu \n", sizeof(short));
    printf("int의 크기:%zu \n", sizeof(int));
    printf("long의 크기:%zu \n", sizeof(long));
    printf("long long의 크기:%zu \n", sizeof(long long));
    
    printf("float의 크기:%zu \n", sizeof(float));
    printf("double의 크기:%zu \n", sizeof(double));
    printf("long double의 크기:%zu \n", sizeof(long double));
    
    return 0;
}

 

1.2 sizeof 연산자를 통해 알게 된 size의 의미는 무엇인지 확인하시오. 

더보기
더보기

sizeof 연산자는 해당 자료형 또는 변수, 값 자체가 메모리에서 차지하는 바이트(byte) 크기이다. 예를 들어 sizeof(int) 이면 4를 리턴하고 이는 int 형 변수를 저장하면 4byte를 메모리에서 할당 받음을 의미한다. 

 

1.3.  정수형 (signed, unsighned ), 실수형 데이타를 변수 선언하고 출력하는 코드이다. 코드를 읽으며 자료형과 변수 선언을 익히시오. 

#include <stdio.h>

int main(void)
{
    /* 정수형 */
    char c = 'A';
    signed char sc = -10;
    unsigned char uc = 250;

    short s = -1000;
    unsigned short us = 1000;

    int i = -20000;
    unsigned int ui = 20000;

    long l = -300000;
    unsigned long ul = 300000;

    long long ll = -4000000000;
    unsigned long long ull = 4000000000ULL;

    /* 실수형 */
    float f = 3.14f;
    double d = 3.141592;
    long double ld = 3.141592653589793L;


    printf("char: %c\n", c);
    printf("signed char: %d\n", sc);
    printf("unsigned char: %u\n", uc);

    printf("short: %d\n", s);
    printf("unsigned short: %u\n", us);

    printf("int: %d\n", i);
    printf("unsigned int: %u\n", ui);

    printf("long: %ld\n", l);
    printf("unsigned long: %lu\n", ul);

    printf("long long: %lld\n", ll);
    printf("unsigned long long: %llu\n", ull);

    printf("float: %f\n", f);
    printf("double: %lf\n", d);
    printf("long double: %Lf\n", ld);

    return 0;
}

 

 

2. 문자형 자료형과 데이타를 이해한다.

2.1 아래 코드를 분석하여 출력값을 예상하고, 실행하여 예상값과 비교하시오. 

#include <stdio.h>

int main(void)
{
    char ch1 = 'A', ch2 = 65;
    int ch3 = 'a', ch4 = 97;

    printf("%c %d \n", ch1, ch1);
    printf("%c %d \n", ch2, ch2);
    printf("%c %d \n", ch3, ch3);
    printf("%c %d \n", ch4, ch4);

    return 0;
}

 

2.2. 2.1 코드를 수정하여 'A' to 'E', 'a' to 'e' 의 문자값과 ascii code값을 출력하는 코드를 작성하시오. 

예상 출력

***********************
A to Z
***********************
A 65
B 66
C 67
D 68
E 69

***********************
a to z
***********************
a 97
b 98
c 99
d 100
e 101

 

 

예상 코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    printf("***********************\n");
    printf("A to Z\n");
    printf("***********************\n");
    
    printf("%c %d\n", 'A', 'A');
    printf("%c %d\n", 'B', 'B');
    printf("%c %d\n", 'C', 'C');
    printf("%c %d\n", 'D', 'D');
    printf("%c %d\n", 'E', 'E');

    printf("\n***********************\n");
    printf("a to z\n");
    printf("***********************\n");
    
    printf("%c %d\n", 'a', 'a');
    printf("%c %d\n", 'b', 'b');
    printf("%c %d\n", 'c', 'c');
    printf("%c %d\n", 'd', 'd');
    printf("%c %d\n", 'e', 'e');

    return 0;
}

 

3. 리터럴 상수와 const 상수를 이해한다.

3.1 아래 코드를 이해하고, 정수, 실수, 문자 리터럴의 size값을 예상하여 실제 출력값과 비교하시오. 

#include <stdio.h>

int main(void)
{
    printf("Size of literal 7: %zu Byte\n", sizeof(7));
    printf("Size of literal 7.14: %zu Byte\n", sizeof(7.14));
    printf("Size of literal A: %zu Byte\n", sizeof('A'));

    return 0;
}

 

3.1-a 리터럴 정수, 실수, 문자의 size는 각각 몇 byte로 메모리에 할당되는가? 왜 그런가?

더보기
더보기
Size of literal 7: 4 Byte
Size of literal 7.14: 8 Byte
Size of literal A: 4 Byte

 

정수와 문자는 int 형으로 실수는 double 형으로 할당되기 때문이다.  

 

3.2 아래 코드는 에러가 있는 코드이다. 에러를 수정하여 출력형식에 맞게 출력하는 코드로 수정하시오.

#include <stdio.h>

int main(void)
{  
    double radius = 5.0;
    double area;

    area = PI * radius * radius;

    printf("반지름: %f\n", radius);
    printf("원의 넓이: %f\n", area);

    return 0;
}

 

출력형식

반지름: 5.000000
원의 넓이: 78.539750

 

예상코드

더보기
더보기
#include <stdio.h>

int main(void)
{  
    const double PI = 3.14159;  // 추가코드 const 상수 PI 
    double radius = 5.0;
    double area;

    area = PI * radius * radius;

    printf("반지름: %f\n", radius);
    printf("원의 넓이: %f\n", area);

    return 0;
}

 

5. 형변환(Type Casting)의 자동 형변환과 명시적 형변환을 이해한다. 

 

5.1부터 5.3의 각 코드를 이해하여 결과를 예상하고, 실행시켜 결과값과 비교하시오. 

5.1 [자동형변환]  Case 1. 대입 연산자에서 오른편의 자료형이 왼편에 맞지 않을 때 자동 형변환 

오른쪽 값의 자료형이 왼쪽 변수의 자료형과 다를 때,  오른쪽 값이 왼쪽 변수의 자료형으로 자동 변환됩니다.

#include <stdio.h>

int main(void)
{
    double score = 95.8;
    int result;

    result = score;   // double → int 자동 형변환

    printf("score  = %f\n", score);
    printf("result = %d\n", result);

    return 0;
}

 

예상 결과

  • score는 double형이고 result는 int형입니다.
  • result = score; 에서 오른쪽의 double 값이 왼쪽 int형에 맞게 자동 변환됩니다.
  • 이때 소수 부분은 버려져서 95가 저장됩니다.
score  = 95.800000
result = 95

 

5.2 [자동형변환] Case 2. 정수 승격 (Integral Promotion)

char, short 같은 작은 정수형은 연산할 때 int로 자동 변환됩니다.

#include <stdio.h>

int main(void)
{
    char a = 100;
    char b = 30;

    int c = a + b;   // char → int 변환 후 연산

    printf("a + b = %d\n", c);

    return 0;
}

 

예상결과

  • num1과 num2는 둘 다 char형입니다.
  • 하지만 num1 + num2 연산을 할 때는 두 값이 먼저 int로 자동 변환됩니다.
  • 즉 실제 연산은 int + int로 이루어집니다.
  • 이것을 정수의 승격이라고 합니다.
num1 = 100
num2 = 30
sum  = 130

 

5.3 [자동형변환]  Case 3. 피연산자의 자료형 불일치로 발생하는 자동 형변환

연산하는 두 피연산자의 자료형이 다르면, 더 큰 범위의 자료형에 맞추어 자동 형변환이 일어납니다.

#include <stdio.h>

int main(void)
{
    int count = 3;
    double price = 2.5;
    double total;

    total = count * price;   // count가 int → double로 자동 형변환된 뒤 연산됨

    printf("count = %d\n", count);
    printf("price = %f\n", price);
    printf("total = %f\n", total);

    return 0;
}

 

 

예상결과

  • count는 int, price는 double입니다.
  • 자료형이 다르므로 연산 전에 count가 double로 자동 변환됩니다.
  • 따라서 실제 연산은 double * double로 수행됩니다.
  • 결과도 double형 값으로 저장됩니다.
count = 3
price = 2.500000
total = 7.500000

 

 

5.4 명시적 형변환

아래 코드의 결과값은 0.000000 으로 정수형 나눗셈이 실행된다. 명시적 형변환을 코드에 적용하여 실수형 나눗셈이 실행되도록 코드를 수정하시오. 

#include <stdio.h>

int main(void)
{
    int num1 = 3, num2 = 4;
    double divResult;

    divResult = num1 / num2;

    printf("나눗셈 결과: %f\n", divResult);

    return 0;
}

 

수정후 예상 결과 

나눗셈 결과: 0.750000

 

예상 코드

더보기
더보기
#include <stdio.h>

int main(void)
{
    int num1 = 3, num2 = 4;
    double divResult;

    divResult = (double) num1 / num2;

    printf("나눗셈 결과: %f\n", divResult);

    return 0;
}

+ Recent posts