2013-07-02 43 views
1

我是C的初學者,我必須將Eratosthenes算法的篩選轉換爲C代碼。這是給出的算法: * START 初始化數組is_prime,以使 元素的所有值都爲TRUE。 將is_prime [1]的值設置爲FALSE(因爲1不是素數)。 對於I = 2,直到sqrt(N)執行: 將I的所有倍數設置爲FALSE,從I * I 開始,直到N 。 打印保存值爲TRUE的is_prime的所有索引。 END *使用數組的C中Eratosthenes的篩網

這是到目前爲止我的代碼:

#include <stdio.h>   
#include <math.h> 

#define N 300    

void displayPrime (bool checkPrime);   
bool checkPrime (int num); 

main()      
{ 
    bool is_prime[N+1];   

    displayPrime(is_prime); 

    getchar();  
} 

void displayPrime (bool check)   
{ 
    int I; 

    for(I=1; I<N; I++) 
    { 
       checkPrime(is_prime[I]); 
       if(is_prime[I]==TRUE) 
       { 
         printf("%d\n", I); 
       } 
       else if(is_prime[I]==FALSE) 
       { 
         printf(""); 
       } 
    } 
} 

bool checkPrime (int num) 
{ 
    int num; 

    is_prime[1]=FALSE; 
    for(I=2; I<=sqrt(N); I++) 
    { 
       for(num=I; num<=N/num; num=num*I) 
       { 
         is_prime[num]=FALSE;  
       }   
       return(is_prime[I]); 
    } 

} 

程序不編譯,我想知道什麼是錯的程序。謝謝

+2

如果程序不能編譯:什麼是錯誤信息? –

+0

編譯器說什麼?它不是指向特定的行嗎?要求編譯器發出警告,它會給你更多的線索。 – devnull

+0

因爲當你在C中布爾?(不是C++) 一個定義? – Alexis

回答

2

我沒有看着算法。這是(使用Visual Studio)的工作代碼:

#include <stdio.h>   
#include <math.h> 

#define N 300    

void displayPrime (bool checkPrime);   
bool checkPrime (int num); 
bool is_prime[N+1]; 


void displayPrime (bool check)   
{ 
    int I; 

    for(I=1; I<N; I++) 
    { 
       checkPrime(is_prime[I]); 
       if(is_prime[I]==true) 
       { 
         printf("%d\n", I); 
       } 
       else if(is_prime[I]==false) 
       { 
         printf(""); 
       } 
    } 
} 

bool checkPrime (int num) 
{ 
    int I; 
    is_prime[1]=false; 
    for(I=2; I*I<=N; I++) 
    { 
       for(num=I; num<=N/num; num=num*I) 
       { 
         is_prime[num]=false;  
       }   
       return(is_prime[I]); 
    } 

} 

void main()      
{ 

    displayPrime(is_prime); 

    getchar();  
} 

我已經改變了這些東西:

  1. 你不能聲明一個變量兩次。
  2. 每個變量都可以在範圍內使用{}
  3. 調用的函數應在調用之前聲明。
  4. TRUE應該是trueFALSE應該是false
  5. 在主函數中使用返回類型。

無論如何Sieve有很多很好的實施。試試看。

+0

'checkPrime'是什麼類型? (他們哪一個,你問??? *我不知道!*)。 –

+2

'checkPrime'是'boolean'類型的變量,聲明爲'bool' – pcbabu

+0

不,它是一個函數。哦,等等,它*是一個布爾變量。 **沒有**,它是一個功能....等等,它是什麼? *我不知道!! * –