연습문제와 소스코드는 제가 직접 풀어 작성한 것이므로 오타, 오답 이 존재할 수 있습니다.
참고 부탁드립니다.
Quiz(p.153)
1. 조건식이 참이면 지정된 문장을 수행하는 제어문은?
[답]
① if
2. if else와 비슷한 기능을 제공하는 연산자는?
[답]
④ 조건 연산자
3. 정수식의 값에 따라 여러가지 case 중 하나를 선택하여 문장을 수행하는 제어문은?
[답]
② switch
4. switch에서 일치하는 case가 없을 때는 수행할 문장을 적어주기 위한 키워드는?
[답]
④ default
Quiz(p.168)
1. 특정 횟수만큼 반복해서 수행할 문장이 있을 때 주로 사용되는 제어문은?
[답]
③ for
2. for문에서 반드시 한번은 수행되는 것을 모두 고르시오.
[답]
① 초기식
②조건식
3. 조건식과 반복할 문장으로 구성되며 루프의 시작 부분에서 조건식을 검사하는 제어문은?
[답]
④ while
4. while문으로 무한 루프를 만드는 방법은?
[답]
②while (1) {…}
5. 다음 중 무한 루프를 모두 고르시오.
[답]
①for ( ; ; ) a += 2;
②whule (1) a += 2;
Quiz(p.176)
1. 루프의 시작 부분으로 이동해서 조건문 검사부터 다시 계속하도록 만드는 분기문은?
[답]
① continue
2. 조건이 만족할 때 루프를 탈출하기위한 목적으로 사용되는 분기문은?
[답]
② break
연습문제(p.177~181)
1. if에 대한 설명 중 잘못된 것을 모두 고르시오.
[답]
② if에는 반드시 else가 필요하다.
⑤ if의 조건식을 생략할 수 있다.
⑥ if의 조건식이 참일 때 수행할 문장이 여러 개여도 {}로 묶어줄 필요가 없다.
2. if의 조건식이 거짓일 때 수행할 문장을 기술하기 위해서 필요한 키워드를 쓰시오.
[답]
else
3. 다음 코드에서 조건 연산자를 이용한 문장을 if로 다시 작성하시오.(빨간색 박스 부분)
[답]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void){
int x, y, max;
printf("두 수를 입력하세요: ");
scanf("%d %d", &x, &y);
//max = x > y ? x : y;
//정답
if( x > y)
max = x;
else
max = y;
printf("큰 수: %d\n", max);
}
4. switch에 대한 설명 중 잘못된 것을 모두 고르시오.
[답]
③ case문을 빠져나가기 위한 break는 생략할 수 없다.
④ case 다음에 실수 값이나 문자열을 지정할 수 있다.
⑧ case문에서 수행할 문장이 여러개여고 {}로 묶어줄 필요 없다.
5. 다음의 switch문을 if else로 다시 작성하시오. (빨간색 박스 부분)
[답]
#include <stdio.h>
int main(void){
int month;
int fee;
printf("몇 월? ");
scanf("%d", &month);
/*
switch(month){
case 7:
case 8:
fee = 7000;
break;
case 6:
case 9:
fee = 55000;
break;
default:
fee = 40000;
break;
}
*/
if (month == 7 || month == 8)
fee = 70000;
else if (month == 6 || month == 9)
fee = 55000;
else
fee = 4000;
printf("입장료 : %d\n", fee);
}
6. for에 대한 설명 중 잘못된 것을 모두 고르시오.
[답]
② for의 초기식, 조건식, 증감식은 생략할 수 없다.
③ for의 반복할 문장은 반드시 한번은 수행된다.
⑥ for에서 반복할 문장이 여러 개면 {}로 묶어준다.
⑦ for에서 루프 제어 변수를 여러개 사용할 수 있다.
⑧ for 안에 for를 중첩할 수 없다.
7. 다음의 for문으로 작성된 코드를 while로 다시 작성하시오. (빨간색 박스 부분)
[답]
#include <stdio.h>
int main(void){
int i;
int sum = 0;
int times = 1;
/*
for (i = 1; i <= 10; i++){
sum += i;
times *= i;
}
*/
i =1;
while ( i<= 10){
sum += i;
times *= i;
i++;
}
printf("합:%d, 곱:%d\n", sum, times);
}
8. while과 do while에 대한 설명 중 잘못된 것을 모두 고르시오.
[답]
③ do while문의 조건식은 루프의 시작 부분에서 검사한다.
④ while은 반복할 문장을 반드시 한번은 수행한다.
⑥ while과 do while의 조건식은 생략할 수 없다.
⑦ while은 for에 비해 정형화된 루프를 구현하는 데 적당하다.
9. 분기문과 분기문의 역할을 찾아서 연결하시오.
[답]
(1) break >> ② switch나 반복문을 탈출한다.
(2) continue >> ① 루프의 시작이나 끝부분으로 이동한다.
(3) goto >> ④ 레이블이 지정한 위치로 이동한다.
(4) return >> ③ 함수를 호출한 곳으로 돌아간다.
10. 분기문에 대한 설명 중 잘못된 것을 모두 고르시오.
[답]
① return문에는 반드시 값을 지정해야 한다.
② break는 if문을 탈출한다.
④ for문 안에서 continue를 만나면 루프의 시작 부분으로 제어의 흐름을 이동한다.
⑥ 반복문 안에 switch문이 포함된 경우에 break를 이용해서 switch문과 반복문을 한번에 탈출할 수 있다.
⑧ continue를 이용하면 루프의 시작 부분이나 끝부분이 아닌 위치에서 루프를 탈출할 수 있다.
11. 다음 중 무한 루프를 모두 고르시오.
[답]
① for( ; ; ) {printf("a");}
② for(i=0; i>1; i++) {printf("%d", i);}
④ while (2){printf("a");}
⑥ do{printf("a");} while (1);
12. 다음 프로그램의 실행 결과는?
#include <stdio.h>
int main(void){
int n = 1;
if (n > 0){
n *= 2;
if(n < 5)
n += 5;
else
n -= 5;
}
else
n++;
printf("n = %d\n", n);
}
[답]
n = 7
13. 다음 프로그램의 실행 결과는?
#include <stdio.h>
int main(void){
int i;
int n = 0;
for (i=1; i<10; i+=2){
if (i % 3 == 0)
continue;
n+=i;
}
printf("n = %d\n", n);
}
[답]
n = 13
프로그래밍과제(p.182~183)
1. 절대 평가로 학점을 계산하려고 한다. 시험점수(0~100점)를 입력받아서 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D, 60점 미만은 F로 학점을 계산하는 프로그 램을 작성하시오.
[답]
#include <stdio.h>
int main(void){
int score;
printf("점수? ");
scanf("%d", &score);
printf("학점 : ");
if (score <= 100 && score >= 90)
printf("A");
else if (score < 90 && score >= 80)
printf("B");
else if (score < 80 && score >= 70)
printf("C");
else if (score < 70 && score >= 60)
printf("D");
else
printf("F");
return 0;
}
2. 상대 평가로 학점을 계산하려고 한다. 등수와 전체 인원수를 입력받아서 성적 상위 10% 까지는 A, 상위 30%까지는 B, 상위 60%까지는 C, 상위 90%까지는 D, 하위 10%는 F로 학점을 계산하는 프로그램을 작성하시오.
[답]
#include <stdio.h>
int main(void){
int rank, cnt;
printf("등수? ");
scanf("%d", &rank);
printf("전체 인원 수? ");
scanf("%d", &cnt);
printf("학점 : ");
if (rank > 0 && rank <= cnt * 0.1)
printf("A");
else if (rank > cnt * 0.1 && rank <= cnt * 0.3)
printf("B");
else if (rank > cnt * 0.3 && rank <= cnt * 0.6)
printf("C");
else if (rank > cnt * 0.6 && rank <= cnt * 0.9)
printf("D");
else
printf("F");
return 0;
}
3. 이차원 평면에 있는 점의 좌표 (x,y)를 입력받아 어느 사분면의 점인지 출력하는 프로그 램을 작성하시오.
1) if else 사용
[답]
#include <stdio.h>
int main(void){
int x, y;
printf("점의 좌표 (x,y)? ");
scanf("%d %d", &x, &y);
if(x < 0 && y > 0)
printf("2사분면에 있습니다.");
else if(x > 0 && y > 0)
printf("1사분면에 있습니다.");
else if(x < 0 && y < 0)
printf("3사분면에 있습니다.");
else
printf("4사분면에 있습니다.");
return 0;
}
2) 다중 if 사용
[답]
#include <stdio.h>
int main(void){
int x, y;
printf("점의 좌표 (x,y)? ");
scanf("%d %d", &x, &y);
if (x > 0 && y > 0)
printf("1사분면에 있습니다.");
if (x < 0 && y > 0)
printf("2사분면에 있습니다.");
if (x < 0 && y < 0)
printf("3사분면에 있습니다.");
if (x > 0 && y < 0)
printf("4사분면에 있습니다.");
return 0;
}
4. 연도를 입력받아 윤년인지 검사하는 프로그램을 작성하시오. 윤년이 되는 조건은 다음과 같다.
4로나누어떨어지는해는윤년이다.
4로나누어떨어지는해중에서100으로나누어떨어지는해는윤년이아니다.
100으로 나누어 떨어지는 해 중에서 400으로 나누어 떨어지는 해는 윤년이다.
[답]
#include <stdio.h>
int main(void){
int year;
printf("연도? ");
scanf("%d", &year);
if((year%4==0&&year%100!=0)||year%400==0)
printf("%d년은 윤년입니다.", year);
else
printf("%d년은 윤년이 아닙니다.", year);
return 0;
}
5. 온도를 입력받아 섭씨 온도는 화씨 온도로, 화씨 온도는 섭씨 온도로 변환하는 프로그램 을 작성하시오." 27C " 또는 " 27F" 처럼 섭씨인지 화씨인지 구분할 수 있는 문자를 함께 입력받는다.함께 입력된 문자가 'C'면 섭씨 온도 이므로 화씨 온도를 구해서 출력하고, 입력 된 문자가 'F'면 화씨 온도이므로 섭씨온도를 구해서 출력한다.
섭씨 온도 = (화씨 온도 - 32) * 5/9
화씨 온도= (섭씨 온도* 9/5) + 32
[답]
#include <stdio.h>
int main(void){
double temperature;
char sign;
printf("온도? ");
scanf("%lf %c", &temperature, &sign);
if(sign == 'C')
printf("%.2lf %c == %.2lf F", temperature, sign, (temperature*9/5)+32);
else if(sign == 'F')
printf("%.2lf %c == %.2lf C", temperature, sign, (temperature-32)*5/9);
else
printf("섭씨인지 화씨인지 구분해주시오.");
return 0;
}
6. 전기 요금은 기본 요금과 월 사용량에 의한 요금의 합으로 계산된다. 월 사용량에 따라 누진제가 적용되어 단계별로 적용되는 기본 요금과 월 사용량 요금이 달라진다. 다음의 누 진제 요금표를 참고하여 입력받은 월 사용량으로 전기 요금을 계산하는 프로그램을 작성하시오.
기본 요금 (원/호) | |
300kWh 이하 사용 | 1,000 |
300kWh 초과 사용 | 5,000 |
[답]
#include <stdio.h>
int main(void){
int kwh, basic, ebasic;
printf("월 사용량(kWh)? ");
scanf("%d", &kwh);
if(kwh<=300){
basic = 1000;
ebasic = kwh * 100;}
else{
basic = 5000;
ebasic = 300 * 100 + (kwh-300) * 200;}
printf("전기 요금 합계: %5d원\n", basic + ebasic);
printf(" - 기본요금: %5d원\n", basic);
printf(" - 전력량요금: %5d원", ebasic);
return 0;
}
7. 비트 연산을 수행하는 계산기를 프로그래밍하시오. &는 비트 AND, |는 비트 OR, ^는 비트 XOR 연산을 처리한다."0xAB & 0xCC" 처럼 연산식을 입력받아 연산 결과를 구해서 출력한다.비트 연산이므로 16진수로 입력을 받고, 연산 결과도 16진수로 출력한다.
[답]
#include <stdio.h>
int main(void){
int x, y, result;
char op;
printf("비트 연산식? ");
scanf("%x %c %x", &x, &op, &y);
if(op == '&')
result = x & y;
else if(op == '|')
result = x | y;
else if(op == '^')
result = x ^ y;
else
printf("올바른 연산자를 입력해주십시오.");
printf("%x %c %x = %x", x, op, y, result);
return 0;
}
8. ASCII 코드를 이용해서 문자를 출력하는 프로그램을 작성하시오. ASCII 코드 중 0~31 번, 127번은 제어 문자이므로, 32~126번에 할당된 문자들만 출력하는데, 한 줄에 24개씩 출력하시오.
[답]
#include <stdio.h>
int main(void){
for(char i = 32; i < 127; i++){
printf("%c ", i);
if((i-31)%24 == 0)
printf("\n");
}
return 0;
}
9. 정수의 배수를 출력하는 프로그램을 작성하시오. 양의 정수와 배수의 개수를 입력받아 정 수의 배수를 입력받은 개수만큼 출력하는 프로그램을 작성하시오.
[답]
#include <stdio.h>
int main(void){
int plus, multiple
printf("양의 정수? ");
scanf("%d", &plus);
printf("배수의 개수? ");
scanf("%d", &multiple);
for(int i = 1; i <= multiple; i++)
printf("%d ", plus * i);
return 0;
}
10. 6번의 전기 요금 계산 프로그램을 월 사용량으로 0이 입력될 때까지 반복 수행 하도록 수정하시오.
[답]
#include <stdio.h>
int main(void){
int kwh, basic, ebasic;
while(1){
printf("월 사용량(kWh)? ");
scanf("%d", &kwh);
if(kwh == 0)
break;
if(kwh<=300){
basic = 1000;
ebasic = kwh * 100;}
else{
basic = 5000;
ebasic = 300 * 100 + (kwh-300) * 200;}
printf("전기 요금 합계: %5d원\n", basic + ebasic);
printf(" - 기본요금: %5d원\n", basic);
printf(" - 전력량요금: %5d원\n", ebasic);
}
return 0;
}
11. 소수는 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수이다. 정수를 입력받아 정수가 소수인지 검사하는 프로그램을 작성하시오.
[답]
#include <stdio.h>
int main(void){
int plus, cnt;
int prime = 0;
printf("양의 정수? ");
scanf("%d", &plus);
for(cnt = 2; cnt <= plus; cnt++){
if(plus % cnt == 0)
prime ++;
}
if (prime == 1 )
printf("%d는(은) 소수입니다.", plus);
else
printf("%d는(은) 소수가 아닙니다.", plus);
return 0;
}
12. 정수 N을 입력받아 1~N 사이의 소수를 모두 구해서 출력하는 프로그램을 작성하시오. 소수는 한 줄에 10개씩 출력한다.
[답]
#include <stdio.h>
int main(void) {
int num = 0, cnt = 0;
int i, j;
printf("양의 정수? ");
scanf("%d", &num);
for(i = 2; i < num; i++){
for(j=2; j< i; j++){
if(i%j==0)
break;
}
if(i==j){
printf("%3d", i);
cnt++;}
if(cnt % 10 == 0)
printf("\n");
}
}
'연습 문제' 카테고리의 다른 글
예제 따라가며 쉽게 배우는 오라클 연습 문제 p.61 ~ 62 (0) | 2022.12.30 |
---|---|
예제 따라가며 쉽게 배우는 오라클 연습 문제 계정 설정 (0) | 2022.12.29 |
[연두] Warming-up C Programming Chapter 4 : 연습 문제 풀이 (1) | 2022.12.26 |
[연두] Warming-up C Programming Chapter 3 : 연습 문제 풀이 (1) | 2022.12.24 |
[연두] Warming-up C Programming Chapter 2 : 연습 문제 풀이 (0) | 2022.12.24 |
댓글