JUST GO

[C] 반복문 본문

C/학습내용

[C] 반복문

root_go 2022. 10. 5. 10:22

반복문

- 조건이 만족하는 동안 주어진 문장을 반복해서 수행한다. -> 루프(loop)

- 반복문을 이용하면 사용자가 원하는 만큼 반복적으로 수행하게 만들 수 있다.

  • for
  • while
  • do while
 

for문

 

루프 제어 변수의 선언

 

for문의 루프 제어 변수

- 일반적으로 어떤 문장을 N번 반복 수행하는 용도로 사용된다.

- for문의 반복 회차마다 루프 제어 변수의 값이 변경되어, 특정 시점에 for의 조건식이 참이 되어 루프를 탈출할 수 있으면 된다.

 

for문의 여러 가지 변형

- for문에서 루프 제어 변수를 여러 개 사용할 수도 있다.

- 초기식, 조건식, 증감식과 반복할 문장은 모두 생략할 수 있다.

 

널 문장

- 처리할 내용 없이 세미콜론(;)만으로 이루어진 문장

- for문의 초기식, 조건식, 증감식에서 필요한 기능을 모두 수행해서 반복할 문장을 따로 지정할 필요가 없을 경우에 유용


중첩된 for문

- for문 안에 다시 for문을 사용하는 것

 

while문

 

 

while의 사용

#include <stdio.h>

int main(void)
{
	int i = 0;
	while (i < 10)
		printf("%d ", i++); // i가 10이 되면 루프 탈출
	printf("\n");           // 반복할 문장

	return 0;
}
	
 

입력된 정수들의 합계 구하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num = 0;
	int sum = 0;
	int i = 0;  // for의 초기식

	printf("정수 5개를 입력하세요: ");

	while (i < 5) // 조건식
	{
	//반복할문장
		scanf("%d", &num);
		sum += num;
		i++;
	}
	printf("합계: %d\n", sum);

	return 0;
}
	
 

반복 수행되는 사칙연산 계산기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int a, b;
	char op;
	char yesno = 'Y';

	while (yesno == 'Y' || yesno == 'y')
	{
		printf("수식? ");
		scanf("%d %c %d", &a, &op, &b);

		switch (op) {
		case '+':
			printf("%d + %d = %d\n", a, b, a + b);
			break;
		case '-':
			printf("%d - %d = %d\n", a, b, a - b);
			break;
		case '*':
			printf("%d * %d = %d\n", a, b, a * b);
			break;
		case '/':
			if (b != 0)
				printf("%d / %d = %.2f\n", a, b, (double)a / b);
			else
				printf("0으로 나눌 수 없습니다.\n");
			break;
		default:
			printf("잘못된 수식입니다.\n");
			break;
		}
			printf("계속 하시겠습니까(Y/N)? ");
			scanf(" %c", &yesno);
		}

		return 0;
	}
 

do while문

 

do while을 이용한 사칙 연산 계산기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int a, b;
	char op;
	char yesno;

	do {
		printf("수식? ");
		scanf("%d %c %d", &a, &op, &b);

		switch (op) {
		case '+':
			printf("%d + %d = %d\n", a, b, a + b);
			break;
		case '-':
			printf("%d - %d = %d\n", a, b, a - b);
			break;
		case '*':
			printf("%d * %d = %d\n", a, b, a * b);
			break;
		case '/':
			if (b != 0)
				printf("%d / %d = %.2f\n", a, b, (double)a / b);
			else
				printf("0으로 나눌 수 없습니다.\n");
			break;
		default: // +, -, *, / 가 아닌 경우
			printf("잘못된 수식입니다.\n");
			break;
		}
		printf("계속 하시겠습니까(Y/N)? ");
		scanf(" %c", &yesno);
	} while (yesno == 'Y' || yesno == 'y');

	return 0;
	}
 

루프 탈출 위치


무한 루프

- for에서는 무한 루프를 만들기 위해서 조건식을 생략한다.

- for ( ; ; )

- while에서는 조건식을 생략할 수 없는 대신에 항상 참인 값을 조건식에 써준다.

- while (1)

- 무한 루프를 수행중인 프로그램은 Ctrl+C로 강제 종료해야 한다.

- 무한 루프를 안전하게 탈출하려면 break를 이용한다.

 

정수 5개 입력받고 합을 계산한 뒤 y/n 에 따라 반복하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int num = 0;
	int sum = 0;
	char yesno;

	do {
		printf("정수 5개를 입력하세요: ");
		int i = 0;
		while (i < 5)
		{
			scanf("%d", &num);
			sum += num;
			i++;
		}
		printf("합계: %d\n", sum);
		printf("계속 하시겠습니까? ");
		scanf(" %c", &yesno);
	} 
	while (yesno == 'Y' || yesno == 'y');

	return 0;
}
 

구구단 프로그램 만들기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
	int i = 0;
	char yesno;

	do {
		printf("계산할 구구단 수를 입력하세요: ");
		scanf("%d", &i);
		for (int j = 1; j < 10; j++)
			printf("%d x %d = %2d \n", i, j, i * j);
		printf("\n");
		printf("계속 하시겠습니까(Y/N)? ");
		scanf(" %c", &yesno);
	} while (yesno == 'Y' || yesno == 'y');

	return 0;
}

 

while문 과제

다음과 같은 출력을 보일 수 있도록 프로그램을 작성하시오.

- for문을 이용하여 작성

#include <stdio.h>

int main(void)
{
	for (int i = 1; i <= 5; i++) {
		for (int j = 1; j <= i; j++) {
			if (i == j)
				printf("*");
			else
				printf("0");
		}
		printf("\n");
	}
}

 

- while문을 이용하여 작성

#include <stdio.h>

int main(void) {

    int i = 0;

    while (i < 5) {
        for (int j = 0; j < i; j++) {
            printf("0");
        }
        printf("*");
        printf("\n");
        i++;
    }
    return 0;
}
 

- while문을 이용하여 작성

#include <stdio.h>

int main(void) {
	int i = 0;
	int j = 0;
	while (i < 5) {
		while (j < i) {
			printf("0");
			j++;
		}

		if (i <= j)
			printf("*");
		j = 0; // j변수 초기화
		printf("\n"); // 개행
		i++;
	}

	return 0;
}

'C > 학습내용' 카테고리의 다른 글

[C] 함수  (0) 2022.10.06
[C] 반복문(2)  (1) 2022.10.05
[C] 제어문(switch문)  (0) 2022.10.05
[C] 제어문(if문)  (0) 2022.10.05
[C] 연산자(3)  (1) 2022.10.05