블로그 이미지
송시혁

calendar

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

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive


while문과 for문

다음예제는 while문과 for문을 비교하기 위해 사용한것이다. 출력은 똑같이 1 2 3 4 5로 세로로 나온다. 아래 소스를 for문과 while문의 형태를 보고 비교해보자. (while은 주석문 처리하였다. for문이 실행되는지 확인하기 위해서이다. )


#include <stdio.h>
int main()
{
  int iCnt;
  iCnt = 1;
  
/*  while(5>=iCnt)  
  {  
    printf("%d\n", iCnt);
    ++iCnt;
  }  
*/

  
  for(iCnt =15>=iCnt; ++iCnt)
  {
    printf("%d\n", iCnt);
  }

  
  return 0;

}

for문 형식

for(초기식; 조건식; 증감식)
{
    명령문(내용)
}
마찬가지로 뒤에 명령문이 한 줄일때는 생략이 가능하지만, 알아보기 쉽게 하도록

 while문과 마찬가지로 중괄호를 무조건 삽입하는게 낫다.


p3-23예제

#include <stdio.h>
#include <conio.h>

int main()
{
  char ch;
  int i;
  
  printf("Please enter any character : ");
  for(i=0;(ch=getche()) !='$';i++)
  {
    printf("\nYou typed : %c\n", ch);
    printf("Please enter any character ; ");
  }
  putchar('\n');
  return 0;

}
이 예제에서는 for문 형태를 유심히 보자.

for( i=0; -> 이부분은 변수를 지정한거
   조건식 -  (ch= getche()) - 이부분이 for문이 실행되는 조건이다.
   i++ 참/거짓이되는 조건.
   

다음은 for문 내부에 if문이 중첩이 되어있는 프로그램 소스이다.

 1부터 100까지의 짝수만을 출력하되 5섯줄 내려쓰는 형태로 출력한다.


#include  <stdio.h> 
int main() 
{
  int i;


  for (i  = 1;  i <= 100;  i++)  // 100번 실행
    if (i % 2  == 0)  
    {  // 짝수임을 판단
      printf ("%5d", i);  // 정수를 출력
      if (i  % 5  == 0) printf  ("\n");  // 다섯 숫자마다 줄

    }
  return 0;
}


for문에
1. 변수 i를 1로선언.
2. 조건식 i<= 100;으로 100보다 크거나 같으면 실행된다는 조건.
3. i++증감식 i를 if문이 다실행되고 다시 실행할 때, 그때 증감된다. (후치문)






for문을 이용한 1~200까지 범위에서 다음 수열을 출력하는 프로그램을 구하시오.

1  2  3  5  8  13   21   ..........    144

일단

1. 1~200까지 범위지정

2. 수의 규칙 파악하기

  1과 2를 더해서 3이된다. 즉, 앞수 + 앞앞수 = 현재값

공식에서 3개의 변수를 선언해야한다고 예상할 수 있다. 

3. 초기값 예외. 초기값은 따로 지정한다.

4.공식을 알고 원리를 알았으면 기본적인 베이스를 다 깔고 for문작성에 집중한다.

#include <stdio.h>
int main()
{  
  int ppnum;
  int pnum;
  int sum;
  ppnum =1;
  pnum =2;
  printf(" %d %d ", ppnum, pnum);
  
  for(sum=0;sum<200;)
  {
    if(sum>200)
    {
      break;
    }
    
    
    sum = ppnum + pnum;
    printf("%3d ", sum);
    ppnum = pnum;
    pnum = sum;
  
  }
  
  return 0;
}



약간 다른 형태의 소스


 

#include <stdio.h>
int main()
{  
  int ppnum;
  int pnum;
  int sum;
  ppnum =1;
  pnum =2;
  printf(" %d %d ", ppnum, pnum);
  
  for(sum=0;sum=ppnum + pnum<=200;)
  {
    
    
    sum = ppnum + pnum;
    printf("%3d ", sum);
    ppnum = pnum;
    pnum = sum;
  
  }
  
  return 0;
}
posted by 송시혁


p3-16 예제

숫자를 입력하면 그숫자와 아래숫자를 더하는 프로그램.

예를 들어 3이라면, 1,2,3을 더한다.

#include <stdio.h>
int main()
{
  int count;
  long sum = 0;
  
  printf("Please enter an integer:");
  scanf("%d"&count);
  while (count >=0)
  {
    sum = sum + count;
    count = count - 1;
  }
  printf("The sum is %d.\n", sum);
  return 0;
}




음수를 입력하면, 실행되지 않는다. while문의 조건의 부합하지 못해서이다.





p3-17예제
1부터 4까지의 합 다음예제를 보고 비교해보자.
#include <stdio.h>
int main()
{
  int number =1;
  int sum = 0;
  
  while(number < 5)
  {
    sum = sum + number ++;
  }
  printf("0The sum of the first 5 integer is %d\n", sum);
  return 0;
}

결과 : 10이나온다. 1,2,3,4,5를 더하면 15가 나온다.(의심가면 계산기 사용!!!)
1부터 4까지 합인데 원래는 15가 나와야하는데 결과가 이상하다!!! 이것은 잘못된 예이다. 다음 소스를 보고
수정한 부분을 찾아내어 생각해보자.


#include <stdio.h>
int main()
{
  int number =1;
  int sum = 0;
  
  while(number <= 5)
  {
    sum = sum + number++;
    
  }
  printf("0The sum of the first 5 integer is %d\n", sum);
  return 0;
}


while의 조건식이 변했다. number <5에서 number<=5로 변했다. 단순히 생각하면된다. number <5일때는 변수 number가 5가 되었을 경우 실행되지 않아 while문밖 프린트문 sum은 그냥 4까지만 더한 10이 출력된다. 그래서 number <=5에 '='만 붙인다면 이것이 해결되어 비로소 15가 출력이된다. 이것을 이해하지 못하고 과정을 눈으로 확인하고 싶다면 다음과 같은 방법이 있다.

* sum = sum + number++;

number가 먼저 sum가 더해지고 sum갑에 대입된다. 그리고 나중에 프린트문에 들어가고 다시 한 번더 실행될때 값이 더해진다. 후치문이다.

이것을 알아보기 쉽게 수정하면 다음과 같다.

sum=sum+number;

number=number+1;

 (개쉑 진짜 욕나온다 ㅅㅂ ㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂ!!!!!!! 이따위로 짜다니 헷갈리게!!!!!!)



에러찾아내는법

1. 일일이 프린트문을 넣어서 변수값을 하나하나 확인한다.

2. 통합개발환경에 디버그(이것은 아직 안배움)

visual studio르 이용한 디버깅 방법이다. 나중에 다룬다.



다음은 에러를 일일이 하나하나 찾는 프로그램 소스. 변수값이 어디로 들어가고 출력이 되는지 알 수 있다.


p3-18예제.

1부터 5까지 합인데 원래는 15가 나와야하는데 결과가 이상하다!!! 그래서 다음프로그램을 실행해보고 각각의 변수를 보고 찾아내는 프로그램이다.


#include<stdio.h>
#include<conio.h> //getch()함수이용

int main()
{
  
  int number = 1;
  int sum = 0;
  
  while(number <5)
  {
    sum = sum+ number;
    printf("number : %d\tsum : %d\n", number, sum);
    number++;
    getch(); //아무키나 누르면 다음 반복이 실행된다.
  }
  printf("The sum of the first 5 integer is %d\n", sum);
}




getch()는 우리가 출력을 하기위해 키보드로부터 아무키나 입력할 때까지 기다리게 하는 역할이다!!

그래서 넘1, 썸1이 출력되고 , 다음 한번더 실행될때 2,3이 나오는 등의 과정을 프린트문으로 확인할 수 있다. 여기서 변수의 값을 확인 할 수 있으며, 4까지만 덧셈이 된다는 사실을 알 수 있다.

그래서 while의 조건변수를 수정해야된다고 인식할 수 있다. 이것이 프린트문을 이용한 첫 번째 방법이다. 


p3-19예제


#include <stdio.h>
int main()
{
  int count;
  long sum = 0;
  
  printf("Please enter an integer: ");
  scanf("%d"&count);
  while(count != 0)
  {
    sum = sum + count;
    
    if(count>=0)
    {

      
      count = count -1;
    
    }
    
    else
    {

      count = count +1;  
    }
  }
  printf("The sum is %d\n", sum);
  return 0;
}




원래예제에는 while문이 이렇게 되어있었다.
while(count != 0)
  {
    sum = sum + count;
    count = count -1;  
   }
이상태에서는 음수는 덧셈이 안되고  프로그램이 잠시 멈추다가 이상한 숫자가 나온다.

이부분을 if와 else를 만들어 음수도 덧셈이 가능하게 만든것이다. 더 간단하게

while (count != 0) {

 

sum += count--;

 

printf ("count : %d\tsum : %ld\n", count, sum);

getch ();       // <엔터 > while 문을 복시.

 

}



  


이거(ㅅㅂ ㅅㅂ ㅅㅂ 또 후치문 골치아픔.........ㅜㅜ)써도되지만, 





posted by 송시혁

1. 임의의 양의 정수(n)을 입력받아 1~100사이에서 n의 배수의 개수를 출력한는 프로그램

#include <stdio.h>
int main()
{
  int number;
  
  int count;
  
  count = 1;
  
  scanf("%d"&number);
  printf("입력 양의 정수  : %d\n", number);
  printf("7의 배수 ");




  while(number*count<=100)
  {  
    
    printf("%d ", count*number);
    count = count +1;  
    
  }
  
  printf("\n7의 배수 개수 : %d\n", count-1);



  return 0;
}
    
      
  



posted by 송시혁