본문 바로가기
연습 문제

[연두] Warming-up C Programming Chapter 3 : 연습 문제 풀이

by 알기 쉬운 코딩 사전 2022. 12. 24.
반응형

연습문제와 소스코드는 제가 직접 풀어 작성한 것이므로 오타, 오답 이 존재할 수 있습니다.

참고 부탁드립니다.

 

Quiz(p.78)

 

1. 변수의 값을 저장하는데 필요한 메모리의 크기와 2진 표현을 결정하는 것은?

 

[답]

② 데이터형

 

2. 데이터형이나 변수의 바이트 크기를 구할 때 사용되는 것은?

 

[답]

① sizeof

 

3. 컴퓨터 시스템에서 정수를 음수로 표현하는 방식은?

 

[답]

④ 2의 보수

 

4. 정수형의 최대값보다 큰 값을 저장할 때 값이 넘쳐흘러서 유효 범위 내의 값으로 설정되는 것은?

 

[답]

① 오버플로우

 

5. ASCII 코드 중 제어로 목적으로 사용되는 것은?

 

[답]

③이스케이프 시퀀스

 

6. 실수를 지수 부분과 가수 부분으로 표현하는 방식은?

 

[답]

③ 부동소수점 방식

 

Quiz(p.94)

 

1. 값을 저장하기 위해 메모리를 할당하고 이름을 붙여 두는 것은?

 

[답]

① 변수

 

2. 변수가 메모리에 할당될 때 값을 지정하는 것은?

 

[답]

① 초기화

 

3. 이미 만들어진 변수에 값을 저장하는 것은?

 

[답]

② 대입

 

4. 매크로 상수를 정의하는 전처리기 문장은?

 

[답]

④ #define

 

5. 값을 변경할 수 없는 변수를 선언할 때 사용되는 키워드는?

 

[답]

③ #define

 

연습문제(P.95)

 

1. 데이터형에 대한 설명 중 잘못된 것을 모두 고르시오.

 

[답]

① 플랫폼에 관계없이 데이터형의 크기는 정해져 있다.

② 문자형으로는 char형이 있고, 크기는 2바이트이다.

③ 실수형도 부호 있는 실수형과 부호 없는 실수형이 있다.

⑥ 정수형 변수에 데이터형의 최대값보다 큰 값을 저장하면 변수의 크기가 늘어난다.

⑦ 정수형 변수에 데이터형의 최소값보다 작은 값을 저장하면 유효 범위 내의 값으로 설정된다.

⑨ 실수의 정밀도는 지수 부분에 의해서 결정된다.

⑩ 실수는 항상 정확한 값의 표현이 가능하다.

 

2. 이스케이프 시퀀스와 그 의미를 찾아서 연결하시오.

 

[답]

① '\0' = ② 널 문자( null )

② '\a' = ④ 경고음( bell )

③ '\b' = ⑥ 백스페이스( backspace )

④ '\t' = ③ 수평 탭( horizontal tab )

⑤ '\n' = ① 줄바꿈( newline )

⑥ '\\' = ⑤ 역슬래쉬( back slash )

 

3. 변수에 대한 설명이 올바른 것을 모두 고르시오.

 

[답]

② 변수는 값을 읽어올 수 있다.

③ 변수는 메모리에 할당된다.

 

4. 다음 중 올바른 변수 선언문을 모두 고르시오.

 

[답]

③ unsigned short maxCount;

④ int num; double num;

⑤ int x = 100,y, z = 200;

 

5. 상수에 대한 설명 중 잘못된 것을 모두 고르시오.

 

[답]

③ 이름이 있는 상수를 리터럴 상수라고 한다.

④ 리터럴 상수를 이용하면 코드가 알아보기 쉽고 수정하기 쉽다.

⑤ 매크로 상수를 정의할 때는 데이터형이 필요하다.

⑦ const 변수는 값을 변경할 수 없으므로 메모리에 할당되지 않는다.

 

6. 리터럴 상수 대신 기호 상수를 사용할 때의 장점을 두 가지 쓰시오.

 

[답]

프로그램이 수정하기 쉬워진다.

프로그램이 이해하기 쉬워진다.

 

7. 다음 소스 코드에서 컴파일 에러가 발생하는 줄을 모두 찾으시오.

 

[답]

#include <stdio.h>
#define MAX 1000
#define MIN 0;

int main(void){
    int x = 10; 
    const int y = 20;
    MAX = 2000; //ERROR
    
    x = MAX -1;
    y = MAX -2;
    printf("range: %d ~ %d\n", MIN, MAX); //ERROR
}

 

8. 다음 프로그램의 실행 결과는?

 

#include <stdio.h>
#include <limits.h>

int main(void){
    char a = CHAR_MIN - 1;
    short b = SHRT_MIN - 1;
    char ch = '\t';

    printf("%d, %d, %x\n", a, b, ch);
}

 

[답]

127, 32767, 9

 

프로그래밍과제(p.97~98)

 

1.한 변의 길이를 입력받아 정사각형의 넓이와 둘레를 구하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    int side;
    
    printf("한 변의 길이?");
    scanf("%d", &side);
    printf("정사각형의 넓이: %d\n", side * side);
    printf("정사각형의 둘레: %d\n", 4 * side);
    
    return 0;
}

 

2. 가로의 길이와 세로의 길이를 입력받아 직사각형의 넓이와 둘레를 구하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    int w, h;
    
    printf("가로의 길이?");
    scanf("%d", &w);
    printf("세로의 길이?");
    scanf("%d", &h);
    printf("직사각형의 넓이: %d\n", w * h);
    printf("직사각형의 둘레: %d\n", 2 * (w + h));
    
    return 0;
}

 

3. 질량과 높이를 입력받아 위치 에너지를 구하는 프로그램을 작성하시오. 질량은 kg 단위, 높이는 m 단위로 입력받는다.

위치에너지 = 9.8 * 질량 * 높이

 

[답]

#include <stdio.h>

int main(void){
    double mass, height;
    
    printf("질량(kg)?");
    scanf("%lf", &mass);
    printf("높이(m)?");
    scanf("%lf", &height);
    printf("위치에너지: %.2lf J", 9.8 * mass * height);
    
    return 0;
}

 

4. 밑변과 높이를 입력받아 직각삼각형의 넓이를 구하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    double base, height;
    
    printf("밑변과 높이?");
    scanf("%lf %lf", &base, &height);
    printf("직각삼각형의 면적: %.2lf", (base * height * 0.5));
    
    return 0;
}

 

5. 원/달러 환율과 달러를 입력받아 몇 원인지 출력하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    float er, dollar;
    
    printf("USD?");
    scanf("%f", &dollar);
    printf("USD?");
    scanf("%f", &er);
    printf("USD %.0f = KRW %.2f", dollar, (dollar * er));
    
    return 0;
}

 

6. 원/달러 환율과 원화를 입력받아 몇 달러인지 출력하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    float krw, er;
    
    printf("KRW");
    scanf("%f", &krw);
    printf("원/달러 환율?");
    scanf("%f", &er);
    printf("KRW %f = USD %.2f", krw, krw/er);
    
    return 0;
}

 

7. 길이를 야드(yd)로 입력받아 미터(m)로 변환해서 출력하는 프로그램을 작성하시오. 1yd는 0.9144m에 해당한다.

 

[답]

#include <stdio.h>

int main(void){
    float yd;
    
    printf("길이(yd)?");
    scanf("%f", &yd);
    printf("%.0f yd = %f m", yd, yd * 0.9144);
    
    return 0;
}

 

8. 길이를 인치(in)로 입력받아 센티미터(cm)로 변환하는 프로그램을 작성하시오. 1in는 2.54cm에 해당한다. 프로그램을 작성할 때 매크로 상수를 이용한다.

 

[답]

#include <stdio.h>
#double CM 2.54

int main(void){
    float in;
    
    printf("길이(in)?");
    scanf("%f", &in);
    printf("%.2f in = %.2f cm", in, in * CM);
    
    return 0;
}

 

9. 아파트의 면적을 제곱미터 (m2)로 입력받아 몇 평인지 출력하는 프로그램을 작성하시오. 1m2는 0.3025평에 해당한다. 프로그램을 작성할 때 기호 상수를 이용한다.

 

[답]

#include <stdio.h>
#define CM 2.54

int main(void){
    float area;
    const float pyeong = 0.3025;
    
    printf("아파트의 면적(제곱미터)?");
    scanf("%f", &area);
    printf("%.2f 제곱미터 = %.2f 평", area, area * pyeong);
    
    return 0;
}

 

10. 실수값을 입력받아 그 값의 제곱과 세제곱을 출력하는 프로그램을 작성하시오. 실수값을 입력받을 때는 12.34처럼 소수 표기 방법이나 1.234e2처럼 지수 표기 방법을 둘 다 사용할 수 있게하고 제곱과 세제곱을 출력할 때는 지수 표기방법으로 출력하시오.

 

[답]

#include <stdio.h>
#define CM 2.54

int main(void){
    double n;
    
    printf("실수?");
    scanf("%lf", &n);
    printf("제곱 : %e\n", n * n);
    printf("세제곱 : %e", n * n * n);
    
    return 0;
}
반응형

댓글