Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1746] 소스가 이해가 안되네요...--;;
snow [] 1271 읽음    2002-12-24 13:06
안녕하세요...
아래에 나오는 두 프로그램에 대한 것인데요...
에러없이 실행은 잘됩니다...
근데, 제가 프로그램에 대한 이해가 딸리네요....

우선, 첫번째는 1부터 100까지 숫자중에서 소수만 더하는 프로그램입니다...

#include <stdio.h>
#define TRUE 1
#define FALSE 0

int IsPrime(int x){   
int i;   

for (i=2; i<=x-1; i++)      
     if ((x%i) == 0)         
         return FALSE;   
return TRUE;
}

void main() { 
int i, Sum=0; 

for(i=2; i<=100; i++) {    
     if (IsPrime(i))       
        Sum+=i; 

printf("Sum of 소수 : %d\n", Sum);
}

위 소스가 전체적으로 어떻게 돌아가는지는 알겠는데...
int IsPrime(int x){   
int i;   

for (i=2; i<=x-1; i++)      
     if ((x%i) == 0)         
         return FALSE;   
return TRUE;
}
위의 부분에서 int x는 main에서 IsPrime(i)로 받은
i값이잖아요...그럼...main에서 i의 초기값이 2이므로
결국 함수 IsPrime의 x변수에는 2가 저장이 됩니다...
2는 소수입니다...
그런데....함수 IsPrime의 for문에서
for (i=2; i<=x-1; i++)의 종료값이 i<=x-1이니까...
즉, 2 <= 2-1 이 되므로 조건이 성립되지 않아서...
실행할수가 없지 않나요...

그리고 숫자 4의 경우
함수 IsPrime는 다시 불리는 것이니까..
i값은 2가 되고 2<= 4-1이니까...
그 다음 문장을 실행해 4%2는 떨어지므로...
false를 return하고 해당 함수를 빠져나갑니다..
이렇게 볼때 한번에 소수여부를 알수 있는데,
for문을 이용하니까 할수 없는 거지만...
사실, 함수 IsPrime의 for문의 i++은 무의미하지않나요?



두번째는 정수값 2개를 입력받아서 첫번째 값에 두번째 수만큼 곱하는 것으로 재귀함수를 이용하였습니다...

#include <stdio.h>

int power(int a, int b)
{
   int y;
   if (b==1)
      return a;
   else {
      y=power(a,b/2);
      printf("%d\n",y);

      if ((b%2)==1)
         return a*y*y;
      else
         return y*y;
        }
}
void main()
{
   int a;
   int b;
   int nCount;
  
   nCount = scanf("%d%d",&a,&b);
  
   while (nCount < 2) {
      printf("%s\n","정수값 2개를 입력하셔야 합니다.");
      nCount = scanf("%d%d",&a,&b);
   }
   printf("%d의 %d제곱은 %d입니다.\n",a,b,power(a,b));
}

위의 소스에서
else {
   y=power(a,b/2);
   printf("%d\n",y);
     if ((b%2)==1)
        return a*y*y;
     else
        return y*y;
}
위 부분이 이해가 안되네요...
정수값이 2와 1이 들어오면 두번째값 b가 곱하나마나한
1이므로 그냥 첫번째 값을 그대로 반환해 줍니다...

그렇지만...다른 경우 예를 들어 정수값이 2 와 2일때..
두번째값 b가 1이 아니므로 else문을 수행하고
다시 y=power(a,b/2); 와 같이 함수를 부르지요
y=power(2,1) 이 넘어가면 b는 1이니까...
정수값 2와 1일경우와 똑같지 않나요

글고 2와 4일경우에는
y=power(2,2)로 두번째값 b가 1이 아니므로
else로 오는데...if문에서 b%2하면 0이 되므로..
짝수인데....짝수면...y*y...
y=power(2,2)인데 도대체 어떻게 곱해야 할지..
제가 프로그램 순서를 잘못 이해하고 있는건지...


내용이 너무 길어서 읽으시다가 화가 날지도...--;;
그래도 아시는 분이 답글 올려주시면 고맙겠습니다.
그럼....안녕히... 


+ -

관련 글 리스트
1746 소스가 이해가 안되네요...--;; snow 1271 2002/12/24
1762     Re:소스가 이해가 안되네요...--;; 김봉춘 1175 2003/01/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.