Do ~ While
일단 Do 안에 있는 명령문을 실행하고 나중에 while문의 조건식 비교
적어도 한번은 명령문을 처리함
마지막에 세미콜론(;)을 반드시 추가해야 함
- 조건식을 검사하는 while(조건식)은 C 문장으로 여기기 때문
기본형식
Problem 1
#include <stdio.h>
int main() {
int sum = 0;
int number = 0;
printf("1에서 10까지 합을 구합니다.\n");
do
{
number++;
sum += number;
}
while(number<10);
printf("합은 %d입니다.\n", sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 1에서 10까지 합을 구합니다.
합은 55입니다.
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
int sum = 0, index = 0;
do
{
++index;
sum = sum + index;
}
while(sum<1000);
printf("합이 1000보다 작은 최대합은 = %d\n", sum - index);
printf("마지막으로 더해지는 자연수는 %d다.\n", index - 1);
return 0;
}
// 프로세스가 시작되었습니다..
> 합이 1000보다 작은 최대합은 = 990
마지막으로 더해지는 자연수는 44다.
// 프로세스가 종료되었습니다.
Problem 3
#include <stdio.h>
int main() {
int count, sum;
do {
count = count + 7;
sum += count;
printf("%d %d\n", sum, count);
}
while (sum <= 100);
printf("누적합 : %d 배수 : %d",sum, count);
return 0;
}
// 프로세스가 시작되었습니다..
7 7
21 14
42 21
70 28
105 35
누적합 : 105 배수 : 35
// 프로세스가 종료되었습니다.
Problem 4
#include <stdio.h>
int main() {
int input, sum, i , j;
do
{
printf("양의 정수 또는 0(종료)을 입력: ");
scanf("%d", &input);
for(i = 1; i <= input; i++)
{
for (j = 1, sum = 0; j <= i; j++)
{
printf("%d", j);
j == i ? printf(" = "):printf(" + ");
sum += j;
}
printf("%d\n", sum);
}
}while (input >0);
printf("종료합니다.");
return 0;
}
// 프로세스가 시작되었습니다..
양의 정수 또는 0(종료)을 입력: 8
1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15
1 + 2 + 3 + 4 + 5 + 6 = 21
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
양의 정수 또는 0(종료)을 입력: 0
종료합니다.
// 프로세스가 종료되었습니다.
Goto
- 실행순서를 사용자가 지정한 라벨로 이동시킴
- 명령문의 실행 순서를 프로그래머가 임의로 변경하고자 할 때 사용함
- goto문은 실행 순서를 지정된 라벨로 옮겨 프로그램을 계속 수행함
기본형식
goto 라벨(Label);
- 라벨은 프로그램의 다른 명령문 앞에 선언함
Problem 1
#include <stdio.h>
int main() {
int sum = 0;
int number = 0;
while(1)
{
sum += number;
number++;
if (number > 10) goto ex1;
}
ex1:
printf("1부터 10까지 합을 구합니다.\n");
printf("합은 %d입니다.\n",sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 1부터 10까지 합을 구합니다.
합은 55입니다.
// 프로세스가 종료되었습니다.
- 콜론 조심!!
- 다른 제어문을 사용하는 것이 보다 좋다.
Break
- 반복문을 빠져나가거나 switch~case문에서 정상적인 흐름을 변경시킴
Problem 1
#include <stdio.h>
int main() {
int i;
for(i = 1; i<100; i++)
{
printf("%d ", i);
if (i >= 5)
break;
}
printf("\n for 문을 빠져나왔습니다.\n");
return 0;
}
// 프로세스가 시작되었습니다..
> 1 2 3 4 5
for 문을 빠져나왔습니다.
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
for (int i = 1, sum = 0; i<=10; i++)
{
sum += i;
printf("%d %d\n", i, sum);
if (sum > 20)
break;
}
return 0;
}
// 프로세스가 시작되었습니다..
1 1
2 3
3 6
4 10
5 15
6 21
// 프로세스가 종료되었습니다.
continue
- 반복문을 빠져나오지 않고, 해당 반복문의 처음으로 흐름을 옮김
사용예
- 1~ 10 중 홀수만 더하는 예
int sum = 0, i;
for(i = 1; i <= 10; i += 2) // 초기값 1
sum += i;
- 1~10 중 짝수만 더하는 예
int sum = 0, i;
for(i = 2; i <= 10; i += 2) // 초기값 2
sum += i;
- 두 코드의 차이점은 초기값에 달려있음. 초기값을 같게 하고 싶을 때, 이 불편함을 continue로 해결할 수 있다.
- 1~ 10 중 홀수만 더하는 예 (수정)
int sum = 0, i;
for(i = 1; i <= 10; i += 2) // 초기값 1
if (i % 2 == 0) continue // 짝수면 아래 문장을 진행하지 않고 처음(증감식)으로 이동한다.
sum += i;
- 1~ 10 중 짝수만 더하는 예 (수정)
int sum = 0, i;
for(i = 1; i <= 10; i += 2) // 초기값 1
if (i % 2 != 0) continue // 홀수면 아래 문장을 진행하지 않고 처음(증감식)으로 이동한다.
sum += i;
Contunue문을 만났을 때 각 제어문의 흐름
Problem 1
#include <stdio.h>
int main() {
int i, sum = 0;
for (i =1; i<=10;i++)
{
if(i % 2 == 0) continue;
sum += i;
}
printf("1부터 10까지 홀수의 합은 %d다.\n", sum);
return 0;
}
// 프로세스가 시작되었습니다..
> 1부터 10까지 홀수의 합은 25다.
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
for (int i = 1; i<=20; i++)
{
if ((i % 3) && (i % 4))
printf("%d ", i);
else
continue;
}
printf("\n");
return 0;
}
// 프로세스가 시작되었습니다..
> 1 2 5 7 10 11 13 14 17 19
// 프로세스가 종료되었습니다.
실습
Problem 1
#include <stdio.h>
int main() {
int input = 0, count = 0;
printf("1~100사이의 정수를 입력하시오 :");
scanf("%d", &input);
do
{
printf("%3d", input);
input--;
++count % 10?printf(" "):printf("\n");
}while(input>0);
return 0;
}
// 프로세스가 시작되었습니다..
> 1~100사이의 정수를 입력하시오 :17
17 16 15 14 13 12 11 10 9 8
7 6 5 4 3 2 1
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
int input, i, count = 0;
printf("1~9사이의 정수를 입력하시오 : ");
scanf("%d", &input);
do
{
for(i = input; i > count; i--)
{
printf("%d", i);
}
printf("\n\n");
count++;
}while(count<input);
return 0;
}
// 프로세스가 시작되었습니다..
> 1~9사이의 정수를 입력하시오 : 9
987654321
98765432
9876543
987654
98765
9876
987
98
9
// 프로세스가 종료되었습니다.
Problem 3
#include <stdio.h>
int main() {
int input, mid;
printf("반대로 출력할 정수를 입력 : ");
scanf("%d", &input);
printf("입력한 정수를 반대로 출력 : ");
do
{
mid = input%10;
if (mid<10)
{
printf("%d",mid);
if (input/10==0)
{
break;
}
input = input/10;
continue;
}
else
{
continue;
}
}
while(mid%10<10);
return 0;
}
// 프로세스가 시작되었습니다..
> 반대로 출력할 정수를 입력 : 12345
입력한 정수를 반대로 출력 : 54321
프로세스가 종료되었습니다.
// 프로세스가 종료되었습니다.
Problem 4
#include <stdio.h>
int main() {
for(int i = 1; i <= 7; i++){
for(int j = 0; j < i; j++){
printf(" %d ",(i-1)*7+1+j );
}
printf("\n\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
> 1
8 9
15 16 17
22 23 24 25
29 30 31 32 33
36 37 38 39 40 41
43 44 45 46 47 48 49
// 프로세스가 종료되었습니다.