Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[독하게 시작하는 C 프로그래밍] 섹션 12. 반복문 본문

C언어/독하게 시작하는 C 프로그래밍

[독하게 시작하는 C 프로그래밍] 섹션 12. 반복문

개발새발 문타쿠 2023. 11. 2. 01:45

조건 기반 반복 while과 무한 루프

  • if문과 유사한 구조
  • 조건식이 참일 경우 구간 코드를 계속 반복해서 수행
  • 반복 수행 구간 코드 내부에서 반복을 멈출 수 있는 연산이 반드시 있어야 함
  • 무한루프는 최악의 논리 오류 중 하나 -> CPU 점유율이 100%가 돼버림

[필수 실습 문제] 한 줄에 * 출력

#include <stdio.h>

int main(void)
{
	int input = 0;

	printf("1 ~ 9 중에서 정수를 하나 입력하세요.");
	printf(">> ");
	scanf_s("%d", &input);

	if (input < 1 || input>9)
	{
		printf("입력 가능한 숫자는 1 ~ 9입니다.");
		return 0;
	}

	while (input != 0)
	{
		printf("* ");
		input--;
	}
	printf("\n");

	return 0;
}


계수 기반 반복 for

  • 계수 기반 반복문
  • 반복 회수 조절에 관련된 코드를 한 행에서 볼 수 있어 while문에 비해 상대적으로 실수 가능성이 적음

[권장 실습 문제] 구구단 출력하기

#include <stdio.h>

int main(void)
{
	int input = 0;

	printf(">> 구구단을 외우자 <<\n");
	printf("몇단을 출력할까요?: ");
	scanf_s("%d", &input);

	if (input < 1 || input>9)
	{
		printf("1단부터 9단까지만 가능합니다.\n");
		return 0;
	}

	for (int i = 1; i < 10; i++)
	{
		printf("%d x %d = %d\n", input, i, input * i);
	}

	return 0;
}


[필수 실습 문제] 총합 계산하기

#include <stdio.h>

int main(void)
{
	int whileSum = 0, forSum = 0;
	int num = 1;

	// while
	while (num <= 10)
	{
		whileSum += num;
		num++;
	}
	printf("while을 사용한 1부터 10까지의 총 합: %d\n", whileSum);

	// for
	for (int i = 1; i <= 10; i++)
	{
		forSum += i;
	}
	printf("for  을 사용한 1부터 10까지의 총 합: %d\n", forSum);

	return 0;
}


반복문 중첩

  • 1차원적 반복 출력 코드를 다시 반복문으로 묶어 2차원적 구조를 출력
  • 반복에 대한 반복이 발생해 논리적으로 한 층 더 복잡

[권장 실습 문제] 구구단 전체 출력하기

#include <stdio.h>

int main(void)
{
	for (int i = 2; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			printf("%d x %d = %d\n", i, j, i * j);
		}
		printf("\n");
	}

	return 0;
}

[필수 실습 문제] 국룰 * 출력 놀이

X행 Y열을 *로 출력

#include <stdio.h>

int main(void)
{
	int row = 0, col = 0;

	printf("행>> ");
	scanf_s("%d", &row);
	printf("열>> ");
	scanf_s("%d", &col);
	printf("%d행 %d열을 출력합니다.\n", row, col);

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf("* ");
		}
		printf("\n");
	}

	return 0;
}


*로 삼각형을 n줄 출력 - ver.1

#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

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

	return 0;
}


[필수 실습 문제] * 출력 놀이 응용

*로 삼각형을 n줄 출력 - ver.2

#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

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

	return 0;
}


*로 삼각형을 n줄 출력 - ver.3

#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

	for (int i = 0; i < row; i++)
	{
		for (int j = row - 1; j >= 0; j--)
		{
			if (i == j || i < j)
				printf("* ");
			else
				printf("  ");
		}
		printf("\n");
	}

	return 0;
}


 

*로 삼각형을 n줄 출력 - ver.4

#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

	for (int i = 0; i < row; i++)
	{
		for (int j = row - 1; j >= 0; j--)
		{
			if (i == j || i > j)
				printf("* ");
			else
				printf("  ");
		}
		printf("\n");
	}

	return 0;
}
#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < row; j++)
		{
			if (j >= (row - 1) - i)
				printf("* ");
			else
				printf("  ");
		}
		printf("\n");
	}

	return 0;
}


*로 트리모양 삼각형을 n줄 출력

#include <stdio.h>

int main(void)
{
	int row = 0;

	printf("몇 줄을 출력할까요?: ");
	scanf_s("%d", &row);

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < row + i; j++)
		{
			if (j >= (row - 1) - i)
				printf("* ");
			else
				printf("  ");
		}
		printf("\n");
	}

	return 0;
}


do while문

  • 반복 대상 구간 코드가 조건식의 만족 여부와 관계 없이 무조건 한 번은 실행하는 반복문
  • 기존 while문과 달리 조건식 뒤에 세미콜론이 있음

break와 continue

break

  • 반복문과 switch-case문에 사용되며 수행 시 스코프를 즉시 벗어나 그 다음 구문으로 이동
  • 반복문 내부에서 break 수행 시 조건과 상관 없이 반복문 종료

break와 중첩 Loop

  • 반복문이 중첩됐을 경우 내부 반복문에서 break문이 수행되면 내부 반복만 멈춤
  • 외부 반복문은 계속 수행

continue

  • break문과 달리 반복을 멈추지 않으며, 반복문 내부에서 continue문 이후 코드를 수행하지 않고 그냥 넘어가 반복 시작 조건식 비교
  • 반복은 계속되며 논리적으로 복잡해지는 원인이 될 수 있음
    • continue를 사용하지 않고 로직을 짜는게 좋음