반복문 : 지정한 작업을 반복해서 수행하는 문법
반복문의 3가지 요소 : (1) 시작 조건 (2) 조건 변화 수식 (3) 종결 조건
3가지 요소 중 하나라도 충족하지 않으면 반복하지 않거나 무한 반복함.
(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);
}
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);
}
for반복문 사용하여 구구단 2단 출력하기
#include <stdio.h>
int main(void)
{
int num; /*곱하는 수*/
for (num = 1; num <= 9; num++) {
printf("2 * %d = %d\n",num,num*2);
}
}
반복문 안에 또 다른 반복문이 포함된 형태
중첩 반복문 이용하여 구구단 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);
}
}
}
break문은 자신이 포함된 반복문을 종료시키는 기능.
반복 작업을 하다 예외상황이 발생하여 종료시켜야 할 때 사용.
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;
}