본문 바로가기
연습 문제

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

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

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

참고 부탁드립니다.

 

Quiz(p.102)

 

1. 연산자와 피연산자로 구성되며 값을 가질 수 있는 요소는?

 

[답]

① 수식

 

2. 연산에 사용되는 기호를 무엇이라고 하는가?

 

[답]

③ 피연산자

 

3. 다음 중 단항 연산자가 아닌 것은?

 

[답]

④ =

 

Quiz(p.127)

 

1. 산술 연산자 중 나머지를 구하는 연산자는?

 

[답]

⑤ %

 

2. 연산 결과가 int형인 것을 모두 고르시오.

 

[답]

① int + int

④ short * short

 

3. 다음 수식 중 증가된 변수의 값이 수식의 값인 것은?

 

[답]

② x++

 

4. 대입 연산자의 좌변에 올 수 있는 것은?

 

[답]

② 변수

 

5. x = x / 2; 와 같은 의미의 복합 대입 연산자는?

 

[답]

③ x /= 2;

 

6. 관계 연산식의 값이 아닌 것은?

 

[답]

③ -1

 

7. 피연산자의 비트가 서로 다른 경우에만 1이 되는 비트 연산자는?

 

[답]

⑦ ^

 

8. 수식1이 참이면 수식2가 연산의 결과가 되고, 거짓이면 수식3이 연산의 결과가 되는 연 산자는?

 

[답]

③ ? :

 

9. 다음 중 형 변환 연산자에 의해서 수행되는 형 변환은?

 

[답]

① 암시적인 형 변환

 

Quiz(p.131)

 

1. 수식에서 여러 연산자가 함께 사용될 때 연산자의 수행 순서를 결정하는 것은?

 

[답]

①연산자의 우선순위

 

2. 같은 우선순위의 연산자에 대해서 어느 방향으로 연산을 수행할지에 대한 규칙은?

 

[답]

②연산자의 결합규칙

 

연습문제(p.132~134)

 

1. 연산자에 대한 설명 중 잘못된 것을 모두 고르시오.

 

[답]

④ 피연산자가 없는 연산자도 있다.

⑤ #을 연산자로 정의해서 사용할 수 있다.

⑥ ^는 단항 연산자이다.

⑧ 연산식을 다른 수식에 일부러 사용할 수 없다.

 

2. 다음 중 단항 연산자를 모두 고르시오.

 

[답]

① +

② -

③ ++

④ !

⑤ sizeof

⑦ &

⑧ ~

 

3. 산술 연산자에 대한 설명 중 잘못된 것을 모두 고르시오.

 

[답]

③ 정수/정수는 몫을 실수로 구한다.

④ 나머지(%) 연산자는 실수에도 사용할 수 있다.

 

4. 다음 연산식의 결과가 어떤 형인지 쓰시오.

 

(1) 1 + 0.5

 

[답]

double형

 

(2) 1.01F + 0.5

 

[답]

double형

 

(3) 0.5F * 2.4

 

[답]

double형

 

(4) 12 + 56

 

[답]

int형

 

(5) char ch = 'a'; ch + 1

 

[답]

int형

 

(6) short a = 10, b = 20; a - b

 

[답]

int형

 

5. 다음과 같이 선언된 변수에 대하여 연산 후 연산식과, x, y, z 변수의 값을 쓰시오. (1)~(12) 각각에 대하여 x, y, z 변수가 다음과 같이 선언된 걸로 간주한다.

 

(1) z % y

 

[답]

z % y = 1

 

(2) ++y;

 

[답]

x = 1, y = 3, z = 3

 

(3) z = x--;

 

[답]

x = 0, y = 2, z = 1

 

(4) z = y = x;

 

[답]

x = 1, y = 1, z = 1

 

(5) z *= x;

 

[답]

x = 1, y = 2, z = 3

 

(6) z * y + 1;

 

[답]

z * y + 1 = 7

 

(7) x > z && y < z

 

[답]

x > z && y < z = 0

 

(8) ! x || y < z

 

[답]

! x || y < z = 1

 

(9) x && y

 

[답]

x && y = 1

 

(10) z << y

 

[답]

z << y = 12

 

(11) x |= z

 

[답]

x |= z = 3

 

(12) y = x + 1 > z ? y : y - 1;

 

[답]

x = 1, y = 1, z = 3

 

6. 관계 연산자와 논리 연산자에 대한 설명 중 잘못된 것을 모두 고르시오.

 

[답]

② =은 두 수가 같은지 비교하는 연산자이다.

⑤ ~은 논리 NOT 연산자이다.

⑥ 논리 연산자의 피 연산자의 값이 1일 때만 참으로 간주한다.

 

7. 비트 논리 연산에서 이용되어 특정 비트값을 조작하기 위한 목적의 데이터를 무엇이라고 하는가?

 

[답]

비트마스크( bitmask ) 또는 마스크( mask )

 

8. 다음 연산식에 대하여 연산이 수행되는 순서대로 ()로 묶어서 표시하시오.

 

[답]

(1) x -(y / 3)

(2)(x < 0)||(x > 100)

(3) x == 0 ||(y == 0 && z == 1)

(4)(x = a)> b

(5) !x(&&)!y

(6)(x += y)* 2

(7) ~x(&)y

(8) x < 0 ||(y && z)

(9) x =(x > 0)? y + 1 : z + 2

(10) z = (double)(x / y)

 

9. 다음은 입장료를 계산하는 코드이다. 입장료가 성수기(6~8월)에는 70,000원이고, 성수 기가 아닌 경우에는 35,000원이 되도록 조건 연산자를 이용해서 코드의 빈칸을 채우시오.

 

[답]

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
    int month;
    int fee;
    
    printf("what month?" );
    scanf("%d", &month);
    
    fee = month >=6 && month <= 8 ? 70000 : 35000; //정답
    
    printf("entrance fee = %d\n", fee);
}

 

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

 

#include <stdio.h>

int main(void){
    unsigned char a = 0xcd;
    unsigned char b = 0xf0;
    unsigned c;
    
    c = a ^ b;
    printf("z = %02x\n", c);
    
    c = ~a | b << 2;
    printf("z = %02x\n", c);
}

[답]

z = 3d

z = fffffffd

 

프로그래밍과제(p.135~137)

 

1. 질량과 부피를 실수로 입력받아 밀도를 구하는 프로그램을 작성하시오. 질량은 g 단위로 입력받고, 부피는 cm³단위로 입력받는다.

밀도(g/cm³) = 질량(g) / 부피(cm³)

 

[답]

#include <stdio.h>

int main(void){
    double mass, volume;
    
    printf("질량(g)? ");
    scanf("%lf", &mass);
    printf("부피(세제곱센티미터)? ");
    scanf("%lf", &volume);
    printf("밀도: %f", mass / volume);
    
    return 0;
}

 

2. 월 사용량(kWh)을 입력받아 전기 요금을 계산하는 프로그램을 작성하시오. 사용량에 따 른 요금은 190원/hWh이다.

전기요금 = 월사용량(kWh) * 190원/kWh

 

[답]

#include <stdio.h>

int main(void){

    int amountUsed;
    
    printf("월 사용량(kWh)? ");
    scanf("%d", &amountUsed);
    printf("전기요금 : %d원", amountUsed * 190);

    return 0;
}

 

3. 기본 요금과 월 사용량(kWh)을 입력받아 전기 요금을 계산하는 프로그램을 작성하시오. 사용량에 따른 요금은 190원/hWh이다.

전기요금 = 기본요금 + 월사용량(kWh) * 190원/kWh

 

[답]

#include <stdio.h>

int main(void){
    int baseRate, amountUsed;

    printf("기본 요금? ");
    scanf("%d", &baseRate);
    printf("월 사용량(kWh)? ");
    scanf("%d", &amountUsed);
    printf("전기요금 : %d원", baseRate + amountUsed * 190);

    return 0;
}

 

4. 날짜 중 월을 입력받아서 1~12 사이의 값이 입력되면 올바른 값이라고 출력하고, 아니 면 잘못된 값이라고 출력하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>
int main(void){
    int month;
    
    printf("몇 월? ");
    scanf("%d", &month);
    
    (month > 0 && month < 13) ? printf("올바른 값입니다.") : printf("잘못된 값 입니다.");
    
    return 0;
}

 

5. 화씨 온도를(°F)를 실수로 입력받아 섭씨 온도(°C)로 변환해서 출력하는 프로그램을 작 성하시오. 화씨 온도를 섭씨 온도로 변환하는 공식은 다음과 같다.

섭씨 온도 = (화씨 온도 - 32) * 5 / 9

 

[답]

#include <stdio.h>

int main(void){
    double f;
    
    printf("화씨온도? ");
    scanf("%lf", &f);
    printf("%.lf F = %.2lf C", f, (f-32) * (5.0/9.0));
    
    return 0;
}

 

6. 질량과 속력을 실수로 입력받아 운동 에너지를 구하는 프로그램을 작성하시오.질량은 kg 단위, 속력은 m/s 단위로 입력받는다.

운동 에너지 = (1/2) * 질량 * (속력)²

 

[답]

#include <stdio.h>

int main(void){
    double mass, velocity;
    
    printf("질량(kg)? ");
    scanf("%lf", &mass);
    printf("속력(m/s)? ");
    scanf("%lf", &velocity);
    printf("운동에너지: %.2lf J", 0.5 * mass * velocity * velocity);
    
    return 0;
}

 

7. 용매의 질량과 용질의 질량을 정수로 입력받아 용액의 퍼센트 농도를 구하는 프로그램을 작성하시오.용매의 질량과 용질의 질량은 g단위로 입력받는다.

퍼센트 농도(%) = ( 용질의 질량 / ( 용매의 질량 + 용질의 질량 ) ) * 100

 

[답]

#include <stdio.h>

int main(void){
    int solvent, solute;
    
    printf("용매(g)? ");
    scanf("%d", &solvent);
    printf("용질(g)? ");
    scanf("%d", &solute);
    printf("농도: %.2f &%", ((float)(solute) / (float)(solvent + solute)) * 100.0);
    
    return 0;
}

 

8. 동영상의 재생 시간을 초단위로 입력받아 몇 시간 몇 분 몇 로인지 출력하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    int sec;
    
    printf("재생 시간(초)? ");
    scanf("%d", &sec);
    printf("재생 시간은 %2d시간 %2d분 %2d초 입니다.", sec / 3600, (sec % 3600) /60, (sec % 3600) % 60);
    
    return 0;
}

 

9. 제품의 가격과 할인율(%)을 입력받아서 할인가와 에누리 금액을 출력하는 프로그램을 작성하시오.

 

[답]

#include <stdio.h>

int main(void){
    int price, discountRate;
    
    printf("제품의 가격? ");
    scanf("%d", &price);
    printf("할인율(%%)? ");
    scanf("%d", &discountRate);
    printf("할인가: %d원 (%d원 할인)", price * (100-discountRate)/100, price * discountRate / 100);
    
    return 0;
}

 

10. 부호 없는 정수를 16진수로 입력받아 최하위 바이트부터 순서대로 각 바이트의 값을 16진수로 출력하는 프로그램을 작성하시오.& 연산자를 이용한 비트 마스크를 이용하시오.

 

[답]

#include <stdio.h>

int main(void){
    unsigned int hexa;

    printf("16진수로 데이터를 입력하세요: ");
    scanf("%x", &hexa);
    printf("byte 0 : %02x\n", hexa & 0x000000FF);
    printf("byte 1 : %02x\n", (hexa >> 8) & 0x000000FF);
    printf("byte 2 : %02x\n", (hexa >> 16) & 0x000000FF);
    printf("byte 3 : %02x\n", (hexa >> 24) & 0x000000FF);

    return 0;
}

 

11. 24비트 트루컬러를 나타내는 RGB 표기법은 red, green, blue에 각각 8비트를 사용해서 색상을 표현한다.RGB 색상은 32비트로 저장되는데, 최하위 바이트부터 red, green, blue의 순서로 색상정보를 저장하고, 최상위 바이트는 사용하지 않는다.red, green, blue를 입력받 아서 RGB 색상을 만들어 출력하는 프로그램을 작성하시오.RGB 색상을 출력할 때는, 바이 트 단위로 값을 알아보기 쉽도록 16진수로 출력한다.

 

[답]

#include <stdio.h>

int main(void){
    unsigned char red = 0, green = 0, blue = 0;
    unsigned int result = 0;
    
    printf("red? ");
    scanf("%hhd", &red);
    printf("green? ");
    scanf("%hhd", &green);
    printf("blue? ");
    scanf("%hhd", &blue);
    
    result = blue << 16;
    result = result | (green << 8);
    result = result | red;
    
    printf("RGB색상 : %X", result);
    
    return 0;
}
반응형

댓글