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
예상 코드
'[1] 프로그래밍1 및 실습(C언어) > 3주차. 기본자료형, ...' 카테고리의 다른 글
| [3주차] 6. printf() 와 scanf( )으로 코딩하기 (0) | 2026.03.18 |
|---|