簡體   English   中英

我找不到這個 C 程序有什么問題,使用 function 檢查數字是否為素數

[英]I cannot find what is wrong with this C program to check whether a number is prime or not using function

我知道這可能是一個愚蠢的問題,但我找不到這段代碼有什么問題。 這里我初始化了一個 function 來檢查輸入的數字是否是素數。

#include <stdio.h>
int check_prime(int n)
{
    int i,count=0;
    for(i=2;i<n/2;i++)
     {
         if(n%i==0)
          {
              count++;
          }
     }
     if(count==0)
      {
          printf("the number is prime");
      }
    
}
int main()
{
    int n;
    printf("enter the number,\n");
    scanf("%d",&n);
    int check_prime(int n);
    return 0;
}

output 僅顯示:

enter the number

輸入數字后,它不顯示任何內容。

int check_prime(int n);

不是 function 的調用,而是 function 的聲明。

它應該是

check_prime(n);

致電 function。

上面的答案很完美。 既然你說你是編程世界的新手,我想多解釋一下。

哲學答案:

  • 在 C/C++ 中,當你聲明 function時,你告訴編譯器,“嘿,我創建了一個 function foo(),小心”。
  • 當你調用 function時,你告訴編譯器,“喲,你還記得我告訴你要注意的那件事嗎?我現在需要訪問它”。

技術答案:

  • 在語法上, int check_prime(int n); 是您聲明 function 的方式
  • check_prime(n); //n is an integer check_prime(n); //n is an integer是您如何稱呼 function

似乎有3個問題。

check_prime的返回類型

您聲明int check_prime(int n) ,這意味着 function 應該返回一個int 在這種情況下,您的 function 從不返回任何內容,它只是打印內容,因此返回類型為void更合適。

您在main中再次聲明check_prime而不是調用它

main中,當您說int check_prime(int n); 您實際上是在再次聲明check_prime function,而不是調用它。 您可以將其稱為check_prime(n); .

該算法有一個錯誤

事實上,您的算法認為4是一個素數(它不是)。

在您的for循環中,您檢查n是否可以被從2(n / 2) - 1的整數整除,因為終止條件是i < n/2 ,當i == n / 2時為真。 對於4的示例,這意味着它永遠不會運行for循環。

循環中的終止條件應更改為i <= n / 2 ,如下所示:

for(i = 2; i <= n / 2; i++)

我輸入數字后它不顯示任何內容

除了對check_prime()的非調用之外,還應替換為調用

// int check_prime(int n);  // This is only a function declaration.
check_prime(n);

對於較大的值,素數檢測非常慢,並且可以顯着加快。

//for(i=2;i<n/2;i++) {
//  if(n%i==0) {
//    count++;
//  }
//}

//         vvvv 
for(i=2; i<=n/i; i++) {
  if(n%i==0) {
    count++;
    break; // add
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM