[英]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。
上面的答案很完美。 既然你說你是編程世界的新手,我想多解釋一下。
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.