2010. 7. 8. 18:40
< 8장, 여러형태의 반복문 >



/* 이번장은 좀 생각을 많이 필요해요, 재밌게 해봅시다.(많이 중요해요) */

반복문이란?

- 반복문의 기능
> 특정 영역을 특정 조건이 만족하는 동안에 반복실행하기 위한 문장


반복문의 세가지 형태?
  (이 중에 한개만 이해하면 나머지는 아무것도 아닙니당)

- while문에 의한 반복 : while()

- do ~ while문에 의한 반복 : do while()

- for문에 의한 반복 for( ; ;)



● while문의 기본 원리와 의미

=============================
- while문의 구성 : 반복조건의 만족되는 동안 반복내용을 반복해서 실행하라

while(반복조건)
{

반복내용
}
==============================
// 예제 참고

문장이 2줄이상이면 { } 를 넣어준다.
하지만 콤마 연산자(,)를 사용해서 한줄로 나타낼수 있다
그렇다면{}를 없애도 된다.(한줄은 문장은 {}를 생략가능하다)

// 구구단 프로그램 연습하기
#include <stdio.h>

int main()
{
int i = 1;

printf("구구단 2단 입니다 ");

while(1)  //무한반복하란의미, 즉 ()안의 조건이 '1', 즉 항상 참이기때문
{
printf(" %d × %d = %d ", 2, i, 2*i); 
i++;              // 반복문이 실행이 될때마다 i값을 1씩 증가
if(i>9) break; // 만약에 i가 9보다 크면 break문을 써서 반복문을 빠져나온다
}
system("PAUSE");
return 0;
}

※ while(1)은 어떻게 될까요?
= > 0이 아닌 모든 숫자는 참이다
= > 항상 참이기때문에 무한반복이된다.
- 일반적으로 1을 쓴다 (프로그래머와의 약속) - 0이 아닌 어떤수를 넣어도 된다
    ex) 컴퓨터를 검색할때 쓰인다.

★ while문의 중괄호
: 반복하고자 하는 영역이 둘 이상의 문장으로 구성되는 경우 필수
 - 여러분이 이것저것 숫자 바꿔보고 연습해야함


● while문의 중첨
 > 여러분에게 있어서 고비 일수도 있습니다.

- while문안에 while문을 포함시킨다는 뜻

- 반복 구조내에서 또 하나의 반복 구조 형성

- 연습장 가지고 나름대로 그림그려가면서 공부하면 더 좋다.

- 백문이 불여일견, 백문이 불여일타

while문 안에 while문을 포함시킨다는 뜻
- 반복구조내에서 또하나의 반복구조 형성

예제=====================================
#include <stdio.h>
#include <windows.h>
using namespace std;

int main(void)
{
 int k, j;
 k = j = 0;
 int num=0;

 while(k < 3)
 {
 printf("**** 현재는 k = %d ", k);
 
   while(j < 3)
   {
    printf("현재 j는 %d ", j);
    num++;
    j++;
   }
   k++;
   j=0;
}
 system("PAUSE");
 return 0;
}
=========================================

오늘것만 이해하신거면 완전 성공한거
알쏭달쏭하다면 반 성공
전혀 모르겠다 => 더 잘됐다 이런분들이 더 빠질수 있다

※ do ~ while문과 while문의 차이점
  - do while문은 일단 한번 실행하고 나서 조건 검사를 진행

do{

반복내용

} while(반복의조건);

자 먼저 do내용을 먼저 한번 실행하고
while 반복조건을 검색한다

- while문은 한번도 실행이 안될수 있다   (조건검사를 먼저 하기때문)
- do ~ while문은 한번은 먼저 실행되고 조건을 검색하고 다시 반복된다.
>> 한번 먼저 실행하고 반복검사를 하면 프로그램을 더 좋을때가 많다.
>> 일반적으로 while문이 많이 쓰인다.


====================================================
/* 구구단출력 프로그램 */
#include <stdio.h>
#include <windows.h>
using namespace std;

int main(void)
{

int i = 2;          // i는 2부터 시작하니,
int j = 0;       

while(i<10)  // i가 10보다 작을때까지, 즉 9까지
{
j = 1;
while(j<10) // j는 10보다 작을때까지, 즉 9까지
{
printf("%d * %d = %d ", i, j , i*j); 
j++;
}
i++;  
}

====================================================
/* 입력한수 계속 더하기 */

#include <stdio.h>

int main()
{
int total = 0;
int val = 0;

do
{
printf("숫자 입력 ( 0 : quit) :");
scanf("%d", &val);
total+=val;
}
while(val!=0);
printf("Total : %d ", total);

system("PAUSE");
return 0;
}
====================================================

/*  원한는 단을 출력하는 구구단프로그램  */

#include <stdio.h>
#include <windows.h>

int main()
{
int val ;
int i = 1;

printf("출력하고자 하는 구구단, 몇 단? :");
scanf("%d", &val);

do
{
printf("%d * %d = %d ", val, i, val*i);
i++;
}
while(i<10);

return 0;
}


● for문의 기본 원리와 의미

 - 초기문 , 조건문, 증감문 모두를 기본적으로 포함
 - 가장 많이 사용되는 반복문

for(초기문; 조건문; 증감문)
{
반복하고자 하는 내용
}

 - 초기문 : 반복을 하고자하는 변수를 초기화 (딱한번만 실행)
 - 조건문 : 반복조건을 확인하는 문장
 - 증감문 : 반복의 조건을 어느시점에서 무너뜨리기 위한 증감

 ※ 대부분 반복문들은 잘 관찰하면 이 세가지가 항상 등장한다.


===========================================================
/* 0부터 입력한수까지의 합 구하는 프로그램 */

#include <stdio.h>
#include <windows.h>

int main(void)
{
int total = 0;
int i, n;

printf("0부터 n까지의 덧셈, n은? ");
scanf("%d", &n);

for(i=0; i<=n; i++) // i는 0부터시작해서 입력한 수 n보다 같거나 작을때까지
{                            // i는 1씩 증가
total += i;
}
printf("0부터 %d까지의 덧셈결과는 : %d", n, total);

system("PAUSE");
return 0;
}
===========================================================

이해하고 익숙해지면 for문이 더 이해하기 쉽다
- 초기문, 조건문, 증감문을 한눈에 볼수 있다

※ while문 do~while, for문으로 서로 막 바꿔가면서 연습을 해보세요

===========================================================
/* 양의정수를 입력을 반복하여 더해 평균을 구하는 프로그램 */
#include <stdio.h>
#include <windows.h>

int main(void)
{
float total = 0.0;
float input = 0.0;
int count = 0;

for(;input >=0.0;) // 이건 초기문, 증감문이 없다.
                       //  단, input값이 0.0보다 클때 라는 조건만 있따.
{
total += input; // 아
printf("양의 실수 입력(minus to quit) :");
scanf("%f", &input);
count++;
}

printf("지금까지의 평균 : %f ", total/count-1); // count는 한번더 +1을 하므로 -1을 해줌
return 0;
}

// for문의 초기문 증감문은 필요에 따라서 다른곳에 적어준다

// for(;;) = while(1) 즉, 무한루프를 의미

===========================================================
/* for문의 중첩반복을 통한 이해를 돕는 */

#include <stdio.h>
#include <windows.h>

int main(void)
{
int i, j;

for(i=0; i<3; i++)
{
printf("현재 i 는 %d *** ", i);

for(j=0; j<2;j++)
{
printf("현재 j는 %d ", j);
}
i++;
}
system("PAUSE");
return 0;
}


숙제 ===========================================================

다음과 같은 프로그램이 동작하도록
코드를 작성하세요


임의적으로 10을 입력


정답은 첨부파일참조

Posted by 토실토실천재