완숙의 블로그

반복문 2 본문

Programing Language/C

반복문 2

완숙 2019. 1. 8. 14:43

Do ~ While

  • 일단 Do 안에 있는 명령문을 실행하고 나중에 while문의 조건식 비교

  • 적어도 한번은 명령문을 처리함

  • 마지막에 세미콜론(;)을 반드시 추가해야 함

    • 조건식을 검사하는 while(조건식)은 C 문장으로 여기기 때문

 

기본형식

2019-01-08 11 57 46

 

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문을 만났을 때 각 제어문의 흐름

2019-01-08 11 38 27

 

 

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


// 프로세스가 종료되었습니다.

 


'Programing Language > C' 카테고리의 다른 글

배열 2(Array)  (0) 2019.01.11
배열 1(Array)  (0) 2019.01.10
반복문 1  (0) 2019.01.07
선택문  (0) 2019.01.03
중간 예제  (0) 2019.01.02
Comments