[while문의 활용]
★ 문제 1
- 프로그램 사용자로부터 양의 정수를 하나 입력 받아서, 그 수만큼 "Hello world!"를 출력하는 프로그램을 작성해보자.
// 문제 1
#include <stdio.h>
int main() {
int num;
int i = 0;
printf("양의 정수를 하나 입력하세요\n");
scanf("%d", &num);
while(i < num)
{
printf("Hello world!\n");
i++;
}
return 0;
}

★ 문제 2
- 프로그램 사용자로부터 양의 정수를 하나 입력 받은 다음, 그 수만큼 3의 배수를 출력하는 프로그램을 작성해보자.
- 예를 들어서 5를 입력 받았다면, 3 6 9 12 12 15를 출력해야 한다.
// 문제 2
#include <stdio.h>
int main() {
int num;
int i = 1;
printf("양의 정수 하나를 입력하세요.\n");
scanf("%d", &num);
while(i < num+1)
{
printf("%d\n", 3*i);
i++;
}
return 0;
}

★ 문제 3
- 프로그램 사용자로부터 계속해서 정수를 입력 받는다. 그리고 그 값을 계속해서 더해 나간다.
- 이러한 작업은 프로그램 사용자가 0을 입력할 때까지 계속되어야 하며, 0이 입력되면 입력된 모든 정수의 합을 출력하고 프로그램을 종료시킨다.
// 문제 3
#include <stdio.h>
int main() {
int num = 1;
int sum_ = 0;
while(num != 0) {
printf("입력 : ");
scanf("%d", &num);
sum_ += num;
}
printf("모든 수의 합 = %d\n", sum_);
return 0;
}

★ 문제 4
- 프로그램 사용자로부터 입력 받은 숫자에 해당하는 구구단을 출력하되, 역순으로 출력하는 프로그램을 작성해보자.
// 문제 4
#include <stdio.h>
int main() {
int dan;
int num = 9;
printf("구구단 몇단?");
scanf("%d", &dan);
while(num > 0)
{
printf("%d x %d = %d\n", dan, num, dan*num);
num--;
}
return 0;
}

★ 문제 5
- 프로그램 사용자로부터 입력 받은 정수의 평균을 출력하는 프로그램을 작성하되 다음 두 가지 조건을 만족시켜야 한다.
- "먼저 몇 개의 정수를 입력할 것인지 프로그램 사용자에게 묻는다. 그리고 그 수만큼 정수를 입력 받는다."
- "평균 값은 소수점 이하까지 계산해서 출력한다."
// 문제 5
#include <stdio.h>
int main() {
int num_1, num_2, mean_;
int i = 0;
int sum_ = 0;
printf("몇 개의 정수를 입력하시고 싶으신가요? ");
scanf("%d", &num_1);
while(i<num_1)
{
printf("정수 입력 : ");
scanf("%d", &num_2);
sum_ += num_2;
i++;
}
mean_ = sum_ / num_1;
printf("평균 : %d\n", mean_);
return 0;
}

[while문의 중첩]
★ 문제 1
- 프로그램사용자로부터 총 5개의 정수를 입력 받아서, 그 수의 합을 출력하는 프로그램을 작성해보자.
- 단! 한가지 조건이 있다. 정수는 반드시 1 이상이어야 한다.
- 만약에 1미만의 수가 입력되는 경우에는, 이를 입력으로 인정하지 않고 재 입력을 요구해야 한다.
- 그래서 결국 1이상의 정수 5개를 모두 입력 받을 수 있도록 프로그램을 완성해야 한다.
// 문제 1
#include <stdio.h>
int main() {
int num = 0, cnt = 0, sum_ = 0;
while(cnt < 5)
{
while(num < 1)
{
printf("1 이상의 정수를 입력해주세요.");
scanf("%d", &num);
}
sum_ += num;
num = 0;
cnt++;
}
printf("합 = %d\n", sum_);
return 0;
}

★ 문제 2
- 아래의 출력을 보이는 프로그램을 작성해보자.
*
o*
oo*
ooo*
oooo*
- 참고로, 총 5행에 걸쳐서 출력이 이뤄지고, 행이 더해질 때마다 o 문자의 수가 증가한다는 특징을 기반으로 while문의 중첩을 구성하면 된다.
- 이 문제 코드 작성하는데,,,, cnt_2에 0 재대입? 하는거 빼먹어서 계속 실패했었는데 갑자기 생각나서 추가하니까 됐음 ㅠㅠ
// 문제 2
#include <stdio.h>
int main() {
int cnt_1 = 0, cnt_2 = 0;
while(cnt_1 < 5)
{
while(cnt_2 < cnt_1)
{
printf("o");
cnt_2++;
}
printf("*\n");
cnt_2 = 0;
cnt_1++;
}
return 0;
}

[while문과 do~while문에 익숙해지기]
★ 문제 1
- 바로 위에서 보인 예제 UsefulDoWhile.c를 while문 기반으로 재 구현할 경우, 생각해볼 수 있는 구현의 형태는 두 가지이다. 그 두 가지 방법은 다음과 같다.
- 방법 1 : 변수 num의 값을 적절히 초기화해서 첫 번째 반복조건의 검사결과가 '참'이 되게 한다.
- 방법 2 : while문에 진입하기 전에프로그램 사용자로부터 값을 1회 입력 받게 한다.
- 이 두 가지 방법을 각각 적용해서 예제 UsefulDoWhile.c를 while문 기반으로 재 구현해 보자.
- 참고로 어떠한 방법이든 do~while문을 적용했을 때보다는 부자연스럽다는 느낌이 들것이다.
- 방법 1은 num을 초기화 할때, 0이 아닌 다른 정수로 초기화하여 while문의 조건이 참기 되게 하였음.
// 문제 1 - 방법1
#include <stdio.h>
int main() {
int total = 0, num = 1;
while(num != 0)
{
printf("정수 입력(0 to quit) : ");
scanf("%d", &num);
total += num;
}
printf("합계 : %d\n", total);
return 0;
}

- 방법2는 while문에 진행하기 전에 정수 입력 1회를 받게 함.
- 이 문제는 확실히 while문을 사용하기 보다 do~while문을 사용하는게 좋을 것 같음!
// 문제 1 - 방법2
#include <stdio.h>
int main() {
int total = 0, num = 0;
printf("정수 입력(0 to quit) : ");
scanf("%d", &num);
total += num;
while(num != 0)
{
printf("정수 입력(0 to quit) : ");
scanf("%d", &num);
total += num;
}
printf("합계 : %d\n", total);
return 0;
}

★ 문제 2
- 0이상 100이하의 정수 중에서 짝수의 합을 출력하는 프로그램을 구현하되, do~while문 기반으로 구현해보자.
- 참고로 덧셈의 결과는 2550이 되어야 한다.
// 문제 2
#include <stdio.h>
int main() {
int num = 0, sum_ = 0;
do
{
sum_ += num;
num += 2;
} while (num <= 100);
printf("짝수의 합 : %d\n", sum_);
return 0;
}

★ 문제 3
- while문의 중첩관련 예제 TwoToNine.c를 do~while문의 중첩기반으로 재 구현해보자.
- do~while문의 중첩에 대해서는 별도의 언급이 없었지만, while문의 중첩을 이해하였으니, 충분히 응용이 가능하다.
// 문제 3
#include <stdio.h>
int main() {
int dan = 2;
int is = 1;
do
{
do
{
printf("%d x %d = %d\n", dan, is, dan*is);
is++;
} while (is < 10); // 곱하기 1~9
is = 1;
dan++;
} while (dan < 10); // 2단부터 9단
return 0;
}

'C > 예습' 카테고리의 다른 글
[2025.03.09] (예습) 조건에 따른 흐름의 분기 (1) | 2025.03.09 |
---|---|
[2025.03.09] (예습) for문_연습문제 (2) | 2025.03.09 |
[2025.03.08] (예습) 반복실행을 명령하는 반복문 (0) | 2025.03.08 |
[2025.03.08] (예습) scanf 연습문제 풀이 (0) | 2025.03.08 |
[2025.03.08] (예습) 변수와 연산자 (0) | 2025.03.08 |