profile image

L o a d i n g . . .

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;
}
복사했습니다!