문타쿠, 공부하다.
[독하게 시작하는 C 프로그래밍] 섹션 12. 반복문 본문
조건 기반 반복 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를 사용하지 않고 로직을 짜는게 좋음
'C언어 > 독하게 시작하는 C 프로그래밍' 카테고리의 다른 글
[독하게 시작하는 C 프로그래밍] 섹션 14. 함수에 대한 기본 이론 (0) | 2023.11.12 |
---|---|
[독하게 시작하는 C 프로그래밍] 섹션 13. 배열과 프로그래밍 기법 (Part 3. C언어 수준향상) (0) | 2023.11.09 |
[독하게 시작하는 C 프로그래밍] 섹션 11. 기본 제어문 (0) | 2023.11.01 |
[독하게 시작하는 C 프로그래밍] 섹션 10. 연산자 (0) | 2023.10.29 |
[독하게 시작하는 C 프로그래밍] 섹션 9. 표준 입/출력 (0) | 2023.10.28 |