티스토리 뷰


본 강좌는 아래 동영상 강좌와 같이 진행됩니다. 되도록이면 동영상과 같이 보시는 것을 추천합니다.

 

 

유튜브 채널 가기

 

강좌 8편 동영상 보기

 

 


  

 

 이번시간에는 해당 문장 또는 블럭을 반복적으로 처리할 수 있는 반복문에 대해 알아보도록 하겠습니다.

 

 

 

 1. 반복문

 

 반복문은 크게 3가지 정도이며, 해당 조건이 만족되는 동안 단일 문장 또는 여러 문장으로 이루어진 블럭을 반복적으로 처리합니다.

 

 ◆ while 문

 while문은 ()안의 조건이 '참'으로 만족하는 동안 {} 안의 블럭을 반복적으로 처리합니다.

 

while(조건)

{

반복 작업할 코드

}

 

 아래 예를 봅시다.

 

int a = 0;

 

while (a < 3)

{

printf("A");

++a;

}

 

 위의 코드는 int 형 변수 a가 3보다 작을때까지 'A'를 출력하는 코드입니다. printf()문 아래에 증감 연산자로 a를 증가시키므로, 결과적으로 'A'를 3번 출력하여 출력결과물은 'AAA' 가 되게 됩니다. 예를 하나 더 들어보겠습니다.

 

int a = 1;

 

while (a < 5)

a += a;

 

printf("a = %d", a);

 

 변수 a의 값을 할당 연산자 '+=' 으로 자기자신을 계속 더하다가, 5보다 크면 빠져나가 출력하게 됩니다. 위의 코드상으로는 정화깋 3번 반복이 되며, 결과값은 8이 됩니다.

 

 위의 예에서처럼 반복실행할 내용이 한 문장일때는 중괄호를 생략할 수 있습니다. 대부분의 경우 이처럼 생략이 가능하기 때문에 앞으로는 생략할 수 없는 것들만 따로 설명하도록 하겠습니다.

 

 ◆ do while문

 do while문은 while문과 다르게, 조건 체크를 반복하려는 작업 아래에서 하게 됩니다.

 

do

{

반복 작업할 코드

} while (조건);

 

 아래 예를 봅시다.

 

int a = 0;

 

do

{

printf("A");

++a;

} while (a < 3);

 

 while문의 첫번째 예와 같은 코드입니다. 다만 조건을 아래에서 처리하기 때문에 a가 설령 3 이상이라도 printf()문을 한번은 실행하기 때문에 반드시 'A' 하나는 출력이 되게 됩니다. 프로그래밍을 할때 어떤 작업을 하려는지 생각해서 while문을 쓸지, do while문을 쓸지를 잘 판단하여 사용하시기 바랍니다.

 

 또한 do while문은 {}를 생략할 수 없고, while 뒤에 세미콜론 ';' 을 빼먹으면 안된다는점 참고하시기 바랍니다.

 

 ◆ for문

 for문은 while문에 증감연산까지 일괄적으로 가능한 반복문입니다.

 

fot (변수의 초기값; 조건; 변수의 연산)

{

반복 작업할 코드

}

 

 예를 들어봅시다.

 

int a;

 

for (a = 0; a < 3; a++)

printf("A");  

 

 역시 맨 처음 while문의 예와 같은 결과입니다. for문 뒤의 괄호에 a의 초기값을 0으로 해서, a가 3보다 작을때까지 반복하며, a값을 1씩 증가시키라는 내용입니다. 여기서 ++a가 아닌 a++을 사용했습니다만 ++a를 사용해도 상관없습니다.

 

 반복문은 조건을 이런식으로 하여 사용할 수도 있습니다.

 

while (1)

{

 

do

{

} while (1);

 

for (;;)

{

}

 

 조건이 참일때 블럭안의 내용을 실행하는 것이므로 저렇게 조건에 '1'을 주게 되면, 별도로 빠져나오게 하는 코드를 만나지 않는 이상, 무한히 반복 작업을 하게 됩니다. 이를 '무한 루프' 라고 합니다.  이런 무한루프는 가급적 사용하지 않는 것이 애러방지에 도움이 되며, 사실상 프로그래밍 대부분은 저런 무한루프 없이 구현이 가능하니 되도록이면 조건을 잘 줘서 자연스럽게 반복문을 빠져나갈 수 있게 만드는 것이 좋습니다.

 


 

 2. 적절한 반복문의 선택 방법

 

 지금까지 세가지 반복문인 while문, do while문, for문에 대해 알아보았습니다. 이것들을 작업에 맞게 골라 쓸 수 있는데, 다음과 같은 특성에 맞게 선택하여 사용하면 됩니다.

 

while문

특정 조건이 맞을때만 반복 작업이 필요할때

 

do while문

처음 한번은 조건에 상관없이 반드시 실행되어야 할때

 

for문

정해진 일정 횟수만큼 반복 작업이 필요할때

 

 대강 위의 기준에 제일 맞는 것을 선택하면 됩니다. 물론 절대적인건 아닌게, 조건문을 조합하면 while문으로 가능한 작업이 for문으로도 가능하고 그 반대도 되기 때문입니다. 많이 해보시면서 제일 편한 것을 선택하면 되겠습니다. 앞으로 강좌를 이어나가며 반복문은 많이 사용할 것이므로 그때마다 어떤 경우에 어떤 반복문을 사용하는지 주의깊게 보시면 되겠습니다.

 

 

 

 2. 반복문의 적용

 

 반복문에 대해서도 알아보았으니 이제 'Grade Manager'를 반복문을 사용해 여러번 입력받아 계산하여 출력할 수 있게 업그레이드 해 봅시다. 다음과 같이 변경하여 줍니다.

 

#include <stdio.h> 

 

void main()

{

char name[20] = "홍길동";   // 이름

char grade = 'B';                 // 등급

int scoreKOR = 80;              // 국어점수

int scoreMAT = 75;              // 수학점수

int scoreENG = 86;              // 영어점수

int scoreSCI = 92;               // 과학점수

char comment[200];        // 평가

 

int scoreTotal = 0;            // 총점

float scoreAverage = 0.0F;       // 평균

 

char endLoop = ' ';            // Q : 작업종료

 

do

{

// 사용자 입력
printf("이름을 입력하세요 : ");

scanf_s("%s", name, sizeof(name));

printf("국어점수를 입력하세요 : ");

scanf_s("%d", &scoreKOR);

printf("수학점수를 입력하세요 : ");

scanf_s("%d", &scoreMAT);

printf("영어점수를 입력하세요 : ");

scanf_s("%d", &scoreENG);

printf("과학점수를 입력하세요 : ");

scanf_s("%d", &scoreSCI);

 

getchar();

printf("평가를 입력하세요 : ");

gets_s(comment, sizeof(comment));

 

// 총점 계산

scoreTotal = scoreKOR + scoreMAT + scoreENG + scoreSCI;

// 평균 계산

scoreAverage = (float) scoreTotal / 4;

 

// 평균값에 대응하는 등급 구하기

if (scoreAverage >= 90)

grade = 'A';

else if (scoreAverage >= 80)

grade = 'B';

else if (scoreAverage >= 70)

grade = 'C';

else if (scoreAverage >= 60)

grade = 'D';

else

grade = 'F';

 

// 화면 출력

printf("%s의 성적\n", name);

printf("등급 : %c\n", grade);

printf("국어 점수 : %d\n", scoreKOR);

printf("수학 점수 : %d\n", scoreMAT);

printf("영어 점수 : %d\n", scoreENG);

printf("과학 점수 : %d\n", scoreSCI);

printf("총점 : %d\n평균 : %.1f\n", scoreTotal, scoreAverage);

printf("평가 : %s\n", comment);

 

printf("\n계속하려면 Enter, 끝내려면 Q키를 눌러주세요\n");

endLoop = getchar();

} while (endLoop != 'Q' && endLoop != 'q');

}

 

 선언부에 char형 endLoop 변수를 선언하여 주었고, 성적을 입력 받아 계산하여 출력한 다음 사용자의 입력을 받아 프로그램을 종료하거나 다시 입력 할 수 있도록 수정하였씁니다. 반복문은 처음 한번은 반드시 입력할 것이므로 do while문을 사용하였습니다. 아래 do while문 조건을 살펴봅시다.

 

} while (endLoop != 'Q' && endLoop != 'q') 

 

 위에서 getchar()로 사용자의 입력을 받아, 만약 Q라면 반복문을 빠져나가 프로그램이 종료가 되게 됩니다. 위의 조건은 대소문자 가리지 않고 모두 빠져나갈 수 있도록 2개의 조건을 논리 연산자 '&&'로 논리연산 하여 처리해 주었습니다.

 

 실행을 하여 결과를 한번 봅시다.

 


 Enter키를 입력해 보았습니다. 바로 처음으로 돌아가 다시 입력을 받게 됩니다.

 


 q키를 입력하고 엔터키를 누르면 다음과 같이 프로그램이 종료가 되게 됩니다.

 

 이번시간에는 반복문에 대해 살펴보았습니다. 다음시간에는 프로그램의 흐름을 제어하는 제어문에 대해 알아보도록 하겠습니다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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