반응형
[ 7 ~ 12번 ]
[ 13 ~ 21번 ]
* 본문은 Microsoft Visual Studio 2022 버전 17.6.4를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주세요.
1. 가끔은 일정한 시간 동안 아무 일도 하지 않으면서 시간을 지연시킬 목적으로 반복문을 사용하기도 한다. 주방 타이머를 작성해보자. 사용자에게서 하나의 수를 입력받아서 변수에 저장한다. 반복문을 사용하여 이 변수의 값을 1초에 1씩 감소시키면서 이 변수의 값이 0이 될 때까지 반복한다. 반복이 끝나면 벨소리를 낸다. (for 루프 / MEDIUM)
카운터의 초기값을 입력하시오(단위: 초): 10
10 9 8 7 6 5 4 3 2 1
문제 의도
for문을 사용하면서 sleep함수를 이용하여 시간을 지연시키고, \a를 이용하여 벨소리를 낼 수 있는가?
#include <stdio.h>
#include <windows.h>
int main(void) {
int sec, i;
printf("카운터의 초기값을 입력하시오(단위: 초): ");
scanf_s("%d", &sec);
for (i = sec; i > 0; i--) {
printf("%d ", i);
Sleep(1000);
}
printf("\a");
return 0;
}
코드 설명
Sleep 함수를 사용하기 위해 windows.h 헤더 파일을 불러오자.
카운터의 초기값을 scanf로 받고, for문으로 10(sec)부터 0까지 for문을 진행하는데,
이 때 i를 출력하게 하고 1000ms인 1초를 대기한다.
마지막으로 \a를 출력하여 벨 소리를 낸다.
2. 1부터 100 사이의 모든 3의 배수의 합을 계산하여 출력하는 프로그램을 반복 구조를 사용하여 작성하라. (for 루프와 선택 구조/ MEDIUM)
1부터 100 사이의 모든 3의 배수의 합은 1683입니다.
문제 의도
%연사자를 이용하여 N의 배수를 판별하고, 그 배수를 for문으로 모두 더할 수 있는가?
#include <stdio.h>
int main(void) {
int sum = 0;
int i;
for (i = 1; i <= 100; i++) {
if (i % 3 == 0) {
sum += i;
}
}
printf("1부터 100 사이의 모든 3의 배수의 합은 %d입니다.", sum);
return 0;
}
코드 설명
i % 3에 대입하면 이 때 0이 나오는 i값은 3의 배수(3으로 나눴는데 나머지가 없으므로)이므로 sum 변수에 더해준다.
sum += i (sum = sum + i) 이것을 for문으로 100번 반복하고 출력한다. for의 i 범위를 통상적이지 않게 적어놨는데, 저것은 직관적이게 보이게 한 것이다.
for (i = 0; i < 100; i++) {
if ((i+1) % 3 == 0) {
sum += i;
}
}
물론 이런 식으로도 진행 가능하다.
3. 사용자가 입력한 정수 3개의 합을 계산하여 출력한다. 다만 사용자가 음수를 입력하면 이것은 합계에서 제외된다. (반복 루프에서 continue 사용/ MEDIUM)
숫자를 입력하시오: 10
숫자를 입력하시오: 20
숫자를 입력하시오: -60
숫자를 입력하시오: 30
합계는 60입니다.
문제의도
음수가 나올 때 continue를 사용하여 for 문의 i의 증감를 회피할 수 있는가?
그렇게 해서 양수만을 반복해 더할 수 있는가?
#include <stdio.h>
int main(void) {
int num;
int i;
int sum = 0;
for (i = 0; i < 3; i++) {
printf("숫자를 입력하시오: ");
scanf_s("%d", &num);
if (num < 0) {
i--;
continue;
}
sum += num;
}
printf("\n합계는 %d입니다.",sum);
return 0;
}
코드 설명
수를 받고 그 수(num)가 0보다 작으면 i--로 i를 1 줄이고 for문 최상단으로 보낸다. 그러면 거기서 i++로 i에 1이 더해지기 때문에 결국 i의 상태는 0으로 중화된다.
while 문으로도 진행해보자!
#include <stdio.h>
int main(void) {
int num;
int i;
int sum = 0;
i = 1;
while (i <= 3) {
printf("숫자를 입력하시오: ");
scanf_s("%d", &num);
if (num >= 0) {
sum += num;
i++;
}
else {
continue;
}
}
printf("\n합계는 %d입니다.", sum);
return 0;
}
이렇게 while 문으로도 작성 가능하다. for문에서는 0보다 작을 때 i--를 해줬지만, while문에서는 0보다 크거나 같을 때 i++을 써줘야 한다. 거기다가 while 문 외부에서 초기값 설정도 따로 필요하다. 어차피 i++나 i--는 필요한데 while 문은 외부에서 초기값 설정을 해야 하고 자동 i 증감이 없으니 실수가 일어나기 쉬워 결국 for문이 대부분의 경우에 적합하다.
4. 사용자가 입력한 정수의 모든 약수를 화면에 출력하는 프로그램을 작성하라. (for 루프와 선택 구조/ MEDIUM)
정수를 입력하시오: 60
약수: 1 2 3 4 5 6 10 12 15 20 30 60
문제 의도
%연산자를 활용해 약수를 구할 수 있는가?
#include <stdio.h>
int main(void) {
int num;
int i;
printf("정수를 입력하시오: ");
scanf_s("%d", &num);
printf("약수: ");
for (i = 1; i <= num; i++) {
if (num % i == 0) {
printf("%d ", i);
}
}
return 0;
}
코드 설명
i가 1부터 num까지 증가한다. (num이라는 정수가 있을 때 num+1 이상의 정수가 num의 약수가 될 수 없으므로)
num%i를 해주면 num%1, num%2... num%num까지 진행되면서 약수를 구할 수 있다.
5. 실수의 거듭 제곱값을 계산하는 프로그램을 작성하여보자. 사용자로부터 하나의 실수 r과 거듭 제곱횟수를 나타내는 정수 n을 입력받아서 r^n을 구하여 화면에 출력한다. (반복 루프/ MEDIUM)
실수의 값을 입력하시오: 2
거듭 제곱 횟수를 입력하시오: 10
결과값은 1024.000000
문제 의도
for 문을 이용해 거듭 제곱 횟수만큼 반복해서 실수를 곱할 수 있는가?
#include <stdio.h>
int main(void) {
double num = 0;
double sum;
int time = 0;
int i;
printf("실수의 값을 입력하시오: ");
scanf_s("%lf", &num);
printf("거듭 제곱 횟수를 입력하시오: ");
scanf_s("%d", &time);
for (i = 1, sum = 1; i <= time; i++) {
sum *= num;
}
printf("결과값은 %lf", sum);
return 0;
}
코드 설명
i와 함께 sum도 1로 정의해준다. 그리고 그 sum에 거듭 제곱 횟수 time만큼 2를 곱해준다.
그러면 거듭제곱이 완성된다. (sum *= 2는 sum = sum*2.)
6. 다음 값을 계산하여 출력해보자.
n의 값을 입력하시오: 10
계산값은 385입니다.
문제 의도
for문에서 i^i를 반복 진행하는 동시에 그 값들을 다 저장할 수 있는가?
#include <stdio.h>
int main(void) {
int i, n;
int sum = 0;
printf("n의 값을 입력하시오: ");
scanf_s("%d", &n);
for (i = 1; i <= n; i++) {
sum += i*i;
}
printf("계산값은 %d입니다", sum);
return 0;
}
코드 설명
sum을 일단 0으로 정의한다. for문을 이용해서 i = 1부터 n까지 i*i를 진행하면서 그 값을 sum에 더한다.
(sum += i*i는 sum = sum + i*i.)
반응형
'C언어 > 쉽게 풀어쓴 C언어 EXPRESS 개정4판' 카테고리의 다른 글
[7下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 7장 PROGRAMMING (13~21번) (2) | 2023.10.01 |
---|---|
[7中] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 7장 PROGRAMMING (7~12번) (0) | 2023.07.04 |
[6下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 6장 PROGRAMMING (7~12번) (2) | 2023.06.19 |
[6上] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 6장 PROGRAMMING (1~6번) (0) | 2023.06.18 |
[5下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 5장 PROGRAMMING (7~12번) (0) | 2023.06.18 |