본문 바로가기
Drill/프로그래밍언어

[프로그래밍언어]쉽게 풀어쓴 C언어 Express 4장 변수와 자료형 Exercise

by wintercamo3482 2024. 11. 18.

01 다음의 식별자 중에서 잘못된 것은?

③ 1st_number

 

첫글자는 반드시 문자(A ~ Z 혹은 a ~ z)나 언더바(_)로 시작해야한다.

숫자는 허용되지 않는다.

02 다음 자료형을 최대값이 작은 것부터 나열하라.

  1. char : -128 ~ 127
  2. unsigned char : 0 ~ 255
  3. short : -32768 ~ 32767
  4. unsigned (int) : 0 ~ 4294967295
  5. int : -2147483648 ~ 2147483647
  6. long : -2147483648 ~ 2147483647
  7. float : ± (1.17549 × 10^38) ~ ± (3.40282 × 10^38)
  8. double : ± (2.22507 × 10^308) ~ ± (1.79769 × 10^308)

long의 경우엔 시스템의 비트에 따라 int와 같거나 더 넓은 범위를 표현할 수 있다.

03 다음 중 C에서 지원하는 자료형의 이름이 아니 것은?

③ byte

C에서는 바이트를 다룰 때 1바이트 크기의 char를 사용한다.

04 다음 중 정수 상수의 표기가 잘못된 것을 모두 골라보자.

② 0a2

0으로 시작되는 정수 상수는 8진수로 간주되긴하지만, a라는 문자가 들어갔기 때문에 잘못되었다.

 

⑤ 10,000

정수를 정의할 때 쉼표를 사용하지 않는다.

05 다음 중 실수 상수의 표기가 잘못된 것을 모두 골라보자.

③ 3exp8

C에선 exp를 사용하지 않고 e나 E를 사용한다.

06 다음 중 문자 상수의 표기가 잘못된 것을 모두 골라보자.

② '\010'
8진수 이스케이프 시퀀스인데, '\010'로 정의해야한다.

 

③ "a"
큰 따옴표로 묶여있기 때문에 문자 상수가 아니라 문자열이다.

 

④ '/Z'
작은 따옴표 안에 두 개의 문자가 들어있다.

07 다음의 정수 상수 중에서 하나의 상수만 값이 다르다. 값이 다른 상수는?

④ 010

나머지는 표현법이 다를 뿐 전부 10인데, ④는 8진수이므로 10진수로 변환하면 혼자 8이다.

08 다음의 상수의 자료형을 적어보자.

(a) int

(b) double

(c) float

(d) int

(e) char

09 다음 변수 이름이 올바른지 아니면 잘못되었는지를 지적하고 그 이유를 써라.

(a) O

(b) X. 특수 문자 #가 사용.

(c) X. 특수 문자 %가 사용.

(d) X. 변수명은 숫자로 시작할 수 없음.

10 다음의 상수를 지수표기법으로 변환하라.

(a) 3.141592 * 10^0

(b) 7.16532 * 10^2

11 부동 소수점형에 대한 설명 중 잘못된 것을 모두 골라보자.

① 일반적으로 정수 계산보다 빠르다.

복잡한 연산을 수행하기 때문에 더 느리다.

 

③ 정수 연산과는 달리 오버플로우는 발생하지 않는다.

너무 큰 값이 나오게 되면 INF(infintiy: 무한)으로 표현되며 오버플로우 발생.

 

⑤ float는 48비트로 실수를 표현한다.

32비트이다.

12 다음의 변수를 선언하는 문장 중에서 틀린 것을 모두 골라보자.

② int x = 10, short y = 6;

한 라인이 종료(세미콜론) 되기 전에 서로 다른 자료형을 혼합하여 선언하는 것은 허용되지 않는다.

int는 int끼리, short는 short끼리 선언해야한다.

 

⑥ unsigned short double x;

unsigned는 정수형에서 유효한 키워드이다.

정수형이면 double을 제거, 실수형이면 unsigned short를 제거하고 선언해야한다.

13 다음의 상수를 printf()를 이용해서 출력하는 경우의 올바른 형식 지정자를 쓰라.

(a) %e (혹은 %E)

지수 부분을 대문자냐 소문자냐 출력하는 차이일 뿐이다.

 

(b) %x (혹은 %X)

16진수에서 10부터 15까지는 a부터 f까지로 나타난다. 이 부분을 대소문자로 출력하는 것 외엔 동일하다.

 

(c) %c

Tab 문자로써, 탭 간격을 출력한다.

 

(d) %f

float을 사용할 때는 실수 뒤에 f나 F를 추가한다.

그렇기 때문에 해당 문자는 float이고, 이를 출력하기 위해선 %f 형식 지정자를 사용한다.

14 float f = 1.234; 문장을 컴파일하면 경고 메시지가 발생하는 이유는 무엇인가?

실수의 맨 뒤에 f나 F 문자가 없으면 double로 인식한다. 즉, float을 선언해놓고 double 값으로 초기화를 시도하기 때문에 경고 메시지가 발생한다.

 

컴파일러가 알아서 float 형태로 변환하여 초기화를 수행해주지만, 프로그래머의 의도가 double인지 float인지 알 수 없기 때문에 경고가 발생한다.

 

그러므로 double로 선언을 하던지, 맨 뒤에 f나 F를 추가해주어야한다.

15 다음의 코드에서 잘못된 부분을 모두 지적하고 올바르게 수정하라.

    int x = 0, y = 0;            // x와 y를 모두 0으로 초기화

 

x도 0으로 초기화하도록 수정.

    char grade = 'A';            // 문자 A의 아스키 코드를 grade에 대입

 

큰따옴표는 문자열을 나타내는데 사용한다. 그래서 작은따옴표로 변경.

    double rate = 1e10;            // rate에 1x1010을 대입

 

C언어의 지수 표기법은 <숫자> + e + <지수> 이다. 그래서 앞에 숫자를 추가.

    double profit = 75.0;        // 실수형 변수 profit에 75.0을 대입

 

실수형엔 short double이라는 자료형이 없기 때문에 수정.

    int salary = 2000000;        // salary에 2,000,000을 대입

 

정수형 값을 대입할 땐 쉼표를 넣지 않는다.

16 다음 프로그램의 출력을 쓰라.

(a)

8진수=12
10진수=10
16진수=a

 

(b)

<Windows의 알람음>
예제    프로그램
100, X, 1.234500