[c언어] 반복문

yunssup·2023년 4월 20일

C언어

목록 보기
5/13
post-thumbnail

반복문 : 지정한 작업을 반복해서 수행하는 문법

반복문의 3가지 요소 : (1) 시작 조건 (2) 조건 변화 수식 (3) 종결 조건
3가지 요소 중 하나라도 충족하지 않으면 반복하지 않거나 무한 반복함.

1. for 반복문

(1) 기본 구조 :

for(시작 조건; 종결조건 ; 조건 변화 수식) 명령문;

예를 들면

for(int num=1; num<=5;num++) sum=sum+num;

int num=1 : 시작 숫자는 1 (시작 조건)
num<=5 : 5가 될 때 까지 (종결 조건)
num++ : 숫자는 1씩 증가 (조건 변화 수식)
sum=sum+num; (명령문)

for문 예제
for 반복문을 사용하여 1부터 5까지 더하기

#include<stdio.h>

int main(void)

{
	int num;
	int sum=0;

	for (num = 1; num <= 5; num++) /*1에서 5까지 1씩 증가하며 반복*/
	{
		printf("num(%d)+sum(%d)= ", num, sum); /*합산 전 sum값 이용하여 'num+sum='으로 출력*/
		sum = sum + num;
		printf("%d\n", sum); /*더한 후의 sum*/
	}

	printf("결과 : num = %d sum = %d", num, sum);

	return 0;
}

(2) for 반복문으로 무한 루프 만들기
무한 반복문 : 종결 조건이 없거나 항상 참(1)인 경우

for문 예제
무한 루프 형식의 for 반복문을 사용하여 1부터 5까지 더하기

#include<stdio.h>

int main(void)

{
	int num = 1;
	int sum = 0; /*시작 조건*/

	for (;;) /*무한 루프를 만드는 for반복문*/
	{
		printf("num(%d)+sum(%d)= ", num, sum); /*합산 전 sum값 이용하여 'num+sum='으로 출력*/
		sum = sum + num;
		printf("%d\n", sum); /*더한 후의 sum*/
		num++;/*조건 변화 수식*/
		if (num > 5) break;
	}

	printf("결과 : num = %d sum = %d", num, sum);
}

2. While 반복문

While문은 '종결 조건'만 형식으로 지님
(1) 단일 문장 명령문

while(종결 조건) 명령문;

(2) 복합 문장 명령문

while(종결 조건) {
	명령문1;
    명령문2;
}

While문 예제
While 반복문을 사용하여 1부터 5까지 더하기

#include<stdio.h>

int main(void)

{
	int sum = 0;
	int num = 1;/*시작 조건*/

	while (num <= 5) {
		printf("num(%d) + sum(%d)= ", num, sum);
		sum = sum + num;
		printf("%d\n", sum);
		num++;
	}
	printf("결과 : num=%d sum=%d", num, sum);
}

3. 반복문 구성 방법

  1. 변수가 몇개나 필요한지 파악
  2. 중복된 변수 제거하기
  3. 반복문 구성하기

for반복문 사용하여 구구단 2단 출력하기

#include <stdio.h>

int main(void)

{
	int num; /*곱하는 수*/

	for (num = 1; num <= 9; num++) {
		printf("2 * %d = %d\n",num,num*2);
	}
}

4. 중첩 반복문

반복문 안에 또 다른 반복문이 포함된 형태

중첩 반복문 이용하여 구구단 2~5단 만들기

#include <stdio.h>

int main(void)

{
	int num; /*곱하는 수*/
	int step; /*단 수*/

	for (step = 2; step <= 5; step++) {
		for (num = 1; num <= 9; num++) {
			printf("%d * %d = %d\n", step, num, num * step);
		}
	}
}

5. break 제어문

break문은 자신이 포함된 반복문을 종료시키는 기능.
반복 작업을 하다 예외상황이 발생하여 종료시켜야 할 때 사용.

6. continue 제어문

break문은 반복문을 종료시키지만 continue문은 1회성 취소
반복문이 continue문을 만나면 '조건 변화 수식'으로 갔다가 종결조건 확인 후 다시 반복 진행

! 예제를 통해 반복문 복습하기 !

Q) 중첩 for문을 사용하여 다음과 같은 패턴을 출력하는 프로그램을 작성하라

#include <stdio.h>

int main(void) {
    int star, line, blank;
    for (star = 0; star < 7; star++) {
        for (blank = 6 - star; blank >= 0; blank--)
            printf(" ");
        for (line = 0; line <= star; line++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

Q) 계좌개설, 입금, 출금, 계좌정보 전체 출력, 프로그램 종료의 기능을 갖는 프로그램을 작성하라. 단, 계좌는 최대 3개까지 개설 가능하다.
• 계좌개설: 계좌ID, 입금액을 입력 받는다. 기존 계좌ID로는 개설할 수 없다. 입금액은 0원 이상으로 한다.
• 입금: 존재하는 계좌ID에 입금한다. 입력한 ID가 존재하지 않는다면 입금에 실패한다.
• 출금: 존재하는 계좌ID에서 출금한다. 입력한 ID가 존재하지 않는다면 출금에 실패한다. 출금 시 잔액이 0원 미만이 되는 경우 출금에 실패한다.
• 계좌정보 전체 출력: 계좌ID, 잔액을 출력한다.
• 프로그램 종료: “프로그램을 종료합니다"라는 문구를 띄운다.
• 프로그램 종료 기능을 제외하고, 기능이 성공적으로 동작하면 다시 메뉴를 선택할 수 있다.
• 오류 발생시, 오류 메시지를 띄우고, 올바른 입력을 받을 때까지 다시 입력을 받는다.

#include <stdio.h>

int main() {
    int menu, n_User = 0,
        accId1 = -1, balance1 = -1,
        accId2 = -1, balance2 = -1,
        accId3 = -1, balance3 = -1,
        inputId, inputMoney;

    while (1) {
        printf("----Menu-----\n");
        printf("1. 계좌개설\n");
        printf("2. 입금\n");
        printf("3. 출금\n");
        printf("4. 계좌정보 전체 출력\n");
        printf("5. 프로그램 종료\n");
        printf("선택: ");
        scanf_s("%d", &menu);

        if (menu == 1) {
            while (1) {
                if (n_User == 3) {
                    printf("**계좌 개설 실패**\n");
                    printf("이미 3개의 계좌가 존재합니다.\n");
                    break;
                }

                printf("[계좌개설]\n");
                printf("계좌ID: ");
                scanf_s("%d", &inputId);
                printf("입금액: ");
                scanf_s("%d", &inputMoney);

                if (inputId == accId1 || inputId == accId2 || inputId == accId3) {
                    printf("**계좌 개설 실패**\n");
                    printf("이미 존재하는 아이디입니다.\n");
                }
                else {
                    if (inputMoney < 0) {
                        printf("**계좌 개설 실패**\n");
                        printf("0원 미만을 입력하셨습니다..\n");
                    }
                    else {
                        printf("**계좌 개설 성공!**\n");
                        if (n_User == 0) {
                            accId1 = inputId;
                            balance1 = inputMoney;

                            printf("계좌ID: %d\n", accId1);
                            printf("잔액: %d\n", balance1);

                            n_User++;
                            break;
                        }
                        else if (n_User == 1) {
                            accId2 = inputId;
                            balance2 = inputMoney;

                            printf("계좌ID: %d\n", accId2);
                            printf("잔액: %d\n", balance2);

                            n_User++;
                            break;
                        }
                        else if (n_User == 2) {
                            accId3 = inputId;
                            balance3 = inputMoney;

                            printf("계좌ID: %d\n", accId3);
                            printf("잔액: %d\n", balance3);

                            n_User++;
                            break;
                        }
                    }
                }
            }
        }
        else if (menu == 2) {
            while (1) {
                printf("[입 금]\n");
                printf("계좌ID: ");
                scanf_s("%d", &inputId);
                printf("입금액: ");
                scanf_s("%d", &inputMoney);

                if (inputId != accId1 && inputId != accId2 && inputId != accId3) {
                    printf("**입금 실패**\n");
                    printf("계좌ID가 존재하지 않습니다.\n");
                }
                else {
                    if (n_User == 1) {
                        balance1 += inputMoney;

                        printf("**입금 성공!**\n");
                        printf("계좌ID: %d\n", accId1);
                        printf("잔액: %d\n", balance1);
                        break;
                    }
                    else if (n_User == 2) {
                        balance2 += inputMoney;

                        printf("**입금 성공!**\n");
                        printf("계좌ID: %d\n", accId2);
                        printf("잔액: %d\n", balance2);
                        break;
                    }
                    else if (n_User == 3) {
                        balance3 += inputMoney;

                        printf("**입금 성공!**\n");
                        printf("계좌ID: %d\n", accId3);
                        printf("잔액: %d\n", balance3);
                        break;
                    }
                }
            }
        }
        else if (menu == 3) {
            while (1) {
                printf("[출 금]\n");
                printf("계좌ID: ");
                scanf_s("%d", &inputId);
                printf("출금액: ");
                scanf_s("%d", &inputMoney);

                if (inputId != accId1 && inputId != accId2 && inputId != accId3) {
                    printf("**출금 실패**\n");
                    printf("계좌ID가 존재하지 않습니다.\n");
                }
                else {
                    if (n_User == 1) {
                        if (balance1 - inputMoney < 0) {
                            printf("**출금 실패**\n");
                            printf("잔액이 부족합니다.\n");
                        }
                        else {
                            balance1 -= inputMoney;

                            printf("**출금 성공!**\n");
                            printf("계좌ID: %d\n", accId1);
                            printf("잔액: %d\n", balance1);
                            break;
                        }
                    }
                    else if (n_User == 2) {
                        if (balance2 - inputMoney < 0) {
                            printf("**출금 실패**\n");
                            printf("잔액이 부족합니다.\n");
                        }
                        else {
                            balance2 -= inputMoney;

                            printf("**출금 성공!**\n");
                            printf("계좌ID: %d\n", accId2);
                            printf("잔액: %d\n", balance2);
                            break;
                        }
                    }
                    else if (n_User == 3) {
                        if (balance3 - inputMoney < 0) {
                            printf("**출금 실패**\n");
                            printf("잔액이 부족합니다.\n");
                        }
                        else {
                            balance3 -= inputMoney;

                            printf("**출금 성공!**\n");
                            printf("계좌ID: %d\n", accId3);
                            printf("잔액: %d\n", balance3);
                            break;
                        }
                    }
                }
            }
        }
        else if (menu == 4) {
            if (n_User >= 1) {
                printf("계좌ID: %d\n", accId1);
                printf("잔액: %d\n\n", balance1);
            }

            if (n_User >= 2) {
                printf("계좌ID: %d\n", accId2);
                printf("잔액: %d\n\n", balance2);
            }

            if (n_User == 3) {
                printf("계좌ID: %d\n", accId3);
                printf("잔액: %d\n", balance3);
            }
        }
        else if (menu == 5) {
            printf("프로그램을 종료합니다\n");
            break;
        }
    }

    return 0;
}

0개의 댓글