我最近用 C 語言撰寫了一個計算器程式。生成一個檢查用戶輸入是否為素數的函式(以及其他函式)。
我基本上使用了這段代碼(不包括所有其他功能):
#include <stdio.h>
#include <math.h>
int testForPrime(int);
int main(void) {
int ioperand1 = 0;
printf("\nEnter the value to check if prime (positive integer): ");
scanf("%d", &ioperand1);
if (testForPrime(ioperand1) != 0)
printf("\nThis number is prime.\n");
else
printf("\nThis number is not prime.\n");
return 0;
}
int testForPrime(int operand1) {
int i = 0;
for (i = 2; i <= sqrt(operand1); i ) {
if (operand1 == 0 || operand1 == 1)
return 0;
else if (operand1 % i == 0)
return 0;
else
return 1;
}
}
^ 上面的代碼會產生錯誤
我不確定為什么代碼會為值 9 產生錯誤(我通過添加條件來修復上面的錯誤:if (operand1 == 9),但我不明白為什么 9 似乎是唯一導致不正確的值解決方案(它會說 9 是素數,但沒有任何其他數字給出不正確的結果)。
我用額外的條件陳述句修復的另一個錯誤是值 2。在主函式中添加額外的條件陳述句之前:如果 (ioperand1 == 2),值 2 將始終作為非素數出現。我最初是在網上找到這個解決方案來檢查素數的,但我仍然不明白為什么 for 回圈從 2 開始。
#include <stdio.h>
#include <math.h>
int testForPrime(int);
int main(void) {
int ioperand1 = 0;
printf("\nEnter the value to check if prime (positive integer): ");
scanf("%d", &ioperand1);
if (testForPrime(ioperand1) != 0 || ioperand1 == 2)
printf("\nThis number is prime.\n");
else
printf("\nThis number is not prime.\n");
return 0;
}
int testForPrime(int operand1) {
int i = 0;
for (i = 2; i <= sqrt(operand1); i ) {
if (operand1 == 0 || operand1 == 1 || operand1 == 9)
return 0;
else if (operand1 % i == 0)
return 0;
else
return 1;
}
}
^上面的這段代碼解決了這個問題,雖然我不明白為什么這個問題首先存在。
TL;DR:我不知道為什么如果沒有額外的條件陳述句,這段代碼就不能作業:函式定義中的 if (operand1 == 9) 和 main 函式中的 if (ioperand1 == 2)。
如果有人可以幫助解決這個問題,我將不勝感激。
uj5u.com熱心網友回復:
這是因為您的主要檢查回圈不會迭代。它總是在第一次迭代時回傳。它必須運行到完成,然后這個數字將是素數。所以
int testForPrime(int operand1) {
if(operand1 < 2) {
return 0;
}
int sr = (int)round(sqrt(operand1));
for(int i = 2; i <= sr; i ) {
if (operand1 % i == 0) {
return 0;
}
}
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512704.html
標籤:C
下一篇:使用scanf()進行輸入驗證
