![article thumbnail image](https://blog.kakaocdn.net/dn/t6Hf2/btqXZIaO4x0/4BJUb91lR6dM9MyeNK7uL0/img.jpg)
3.9 심사문제 : 문자열 출력하기
문제 : 다음 소스 코드를 완성하여 "Hello, world!"두 개가 각 줄에 출력되게 만드세요.
정답 :
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
printf("Hello, world!");
return 0;
}
3.10 심사문제 : 서식 지정자 사용하기
문제 : 다음 소스 코드를 완성하여 "Hello, C Language"가 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
정답 :
#include <stdio.h>
int main()
{
printf("%s, %s %s\n", "Hello", "C", "Language");
return 0;
}
5.6 심사문제 : 변수를 선언하고 값 할당하기
문제 : 다음 소스 코드를 완성하여 10 20 30이 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
정답:
#include <stdio.h>
int main()
{
int num1;
int num2, num3;
num1 = 10, num2 = 20, num3 = 30;
printf("%d %d %d\n", num1, num2, num3);
return 0;
}
3.9 심사문제 : 문자열 출력하기
문제 : 다음 소스 코드를 완성하여 0 0 -128이 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
정답 :
#include <stdio.h>
int main()
{
unsigned char num1;
unsigned int num2;
char num3;
num1 = 65536;
num2 = 4294967296;
num3 = 128;
printf("%u %u %d\n", num1, num2, num3);
return 0;
}
변수 num1, num2, num3에 저장한 값과 실제 출력 결과가 다르다. 그런데 여기서 저장한 숫자를 잘 보면 익숙한 숫자들이다.
- 65536: unsigned short의 최댓값인 65,535보다 1이 큰 숫자
- 4294967296: unsigned int의 최댓값인 4,294,967,295보다 1이 큰 숫자
- 128: char의 최댓값인 127보다 1이 큰 숫자
즉, 이 값들을 출력했을 때 0 0 -128이 나왔다면 정수 오버플로우가 발생한 상황이다.
7.12 심사문제 : 자료형 크기 구하기
문제 : 다음 소스 코드를 완성하여 11이 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
정답 :
#include <stdio.h>
int main()
{
char num1;
short num2;
printf("%d\n", sizeof(num1) + sizeof(num2) + sizeof(long long));
return 0;
}
7.13 심사문제 : 최솟값 표현하기
문제 : 다음 소스 코드를 완성하여 -128 0 -2147483648 0 -9223372036854775808가 출력되게 만드세요. 정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
정답 :
#include <stdio.h>
#include <limits.h>
int main()
{
char num1 = CHAR_MIN;
unsigned short num2 = 0;
int num3 = INT_MIN;
unsigned long num4 = 0;
long long num5 = LLONG_MIN;
printf("%d %u %d %lu %lld\n", num1, num2, num3, num4, num5);
return 0;
}
<limits.h> 헤더 파일에는 정수형 자료형의 최소값, 최대값이 정의되어 있다.
7.14 심사문제 : 크기가 표시된 정수 자료형 사용하기
문제 : 다음 소스 코드를 완성하여 -128 65535 0 9223372036854775807가 출력되게 만드세요.
정답 :
#include <stdio.h>
#include <stdint.h>
int main()
{
int8_t num1 = INT8_MIN;
uint16_t num2 = UINT16_MAX;
uint32_t num3 = 0;
int64_t num4 = INT64_MAX;
printf("%d %u %u %lld\n", num1, num2, num3, num4);
return 0;
}
크기가 표시된 정수 자료형은 stdint.h 헤더 파일에 정의되어 있다.
8.10 심사문제 : 실수형 변수 선언과 자료형 크기 구하기
문제 : 다음 소스 코드를 완성하여 1.800000 2.900000 3.700000과 4 8이 출력되게 만드세요.
정답 :
#include <stdio.h>
int main()
{
float num1 = 1.8f;
double num2 = 2.9;
long double num3 = 3.7l;
printf("%f %f %Lf\n", num1, num2, num3);
printf("%d %d\n", sizeof(num1), sizeof(num2));
return 0;
}
8.11 심사문제 : 최솟값과 최댓값 표현하기
문제 : 다음 소스 코드를 완성하여 각 실수 자료형의 최솟값과 최댓값이 출력되게 만드세요.
정답 :
#include <stdio.h>
#include <float.h>
int main()
{
double doubleMin;
double doubleMax;
long double longDoubleMin;
long double longDoubleMax;
doubleMin = DBL_MIN;
doubleMax = DBL_MAX;
longDoubleMin = LDBL_MIN;
longDoubleMax = LDBL_MAX;
printf("%e %e\n", doubleMin, doubleMax);
printf("%Le %Le\n", longDoubleMin, longDoubleMax);
return 0;
}
float.h 헤더 파일이 포함되어 있으므로 최솟값과 최댓값을 일일이 입력하지 않고 미리 정의된 값을 사용한다.
8.12 심사문제 : 오버플로우
문제 : 다음 소스 코드를 완성하여 -inf가 출력되게 만드세요.
정답 :
#include <stdio.h>
#include <float.h>
int main()
{
float num1 = -FLT_MAX;
num1 = num1 * 1000.0f;
printf("%f\n", num1);
return 0;
}
음의 무한대인 -inf가 되려면 float의 최댓값인 FLT_MAX에 -를 붙여서 음수로 만들어주면 된다.
9.7 심사문제 : 제어문자 사용하기
문제 : 다음 소스 코드를 완성하여 "Hello world"가 각 줄에 두 번 출력되게 만드세요("Hello"와 "world" 사이는 탭으로 띄웁니다).
정답 :
#include <stdio.h>
int main()
{
char c1;
char c2;
char c3;
c1 = '\t';
c2 = '\n';
c3 = '\t';
printf("Hello%cworld%cHello%cworld\n", c1, c2, c3);
return 0;
}
9.8 심사문제 : 알파벳 소문자를 대문자로 변환하기
문제 : 다음 소스 코드를 완성하여 "A"가 출력되게 만드세요.
정답 :
#include <stdio.h>
int main()
{
char c1 = 'a';
printf("%c\n", c1-32);
return 0;
}
소문자 a를 대문자로 바꾸려면 ASCII 코드의 정숫값을 이용하면 된다. ASCII 코드에서 'a'는 97이고, 'A'는 65이므로 되므로 'a'에 32를 빼주면 소문자를 대문자로 바꿀 수 있다.
10.8 심사문제 : 리터럴 사용하기
문제 : 다음 소스 코드를 완성하여 Hello, world! 76 -2147483647 4.528172가 출력되게 만드세요.
정답 :
#include <stdio.h>
int main()
{
printf("%s %o %lld %Lf\n", "Hello, world!", o76, -2147483647LL, 4.528172L);
return 0;
}
여기서는 %s가 문자열이고 리터럴 "Hello, world!", %o는 8진 정수이므로 리터럴 076, %lld는 long long 크기이므로 리터럴 -2147483647LL, %Lf는 long double 크기이므로 리터럴 4.528172L을 차례대로 넣어주면 된다.
10.9 심사문제 : 상수 사용하기
문제 : 다음 소스 코드를 완성하여 -2.225074e-308 0x1285 9223372036854775807가 출력되게 만드세요.
정답 :
#include <stdio.h>
int main()
{
const long double con1 = -2.225074e-308;
const int con2 = 0x1285;
const long long con3 = 9223372036854775807LL;
printf("%Le 0x%x %lld\n", con1, con2, con3);
return 0;
}
%Le: 지수 표기법에 long double 크기다.
11.7 심사문제 : 정수, 실수, 문자 입력받기
문제 : 표준 입력으로 정수, 실수, 문자가 입력됩니다. 입력된 정수, 실수, 문자를 각 줄에 출력하는 프로그램을 만드세요.
정답 :
#include <stdio.h>
int main(void){
int num1;
float num2;
char num3;
scanf("%d %f %c",&num1,&num2,&num3);
printf("%d\n",num1);
printf("%f\n",num2);
printf("%c",num3);
return 0;
}
'Programming Languages > C' 카테고리의 다른 글
[P4C] C 언어 코딩 도장 : 문제 풀이2 (0) | 2021.02.18 |
---|---|
[P4C] C언어 코딩 도장 : UNIT 12 ~ UNIT 16 (0) | 2021.02.17 |
[P4C] C언어 코딩 도장 : UNIT 9 ~ UNIT 11 (0) | 2021.02.17 |
[P4C] C언어 코딩 도장 : UNIT 5 ~ UNIT 8 (0) | 2021.02.15 |
[P4C] C언어 코딩 도장 : UNIT 1 ~ UNIT 4 (0) | 2021.02.15 |