C语言编程:素数判断代码问题求助
帮你排查素数判断代码的问题
嘿,我帮你找出了代码里的几个关键问题,咱们逐个解决:
1. 输入读取的错误
你用getchar()来获取输入数字,但这个函数读取的是字符的ASCII码值,比如你输入数字5,它实际拿到的是53(ASCII表中'5'对应的编码),这和你想要的整数完全不符。应该换成scanf("%d", &x)来正确读取整数。
2. 素数判断函数的逻辑错误
你的prime函数逻辑有大问题:第一次循环i=2时,如果x%i != 0,就直接return true了。比如测试x=9,9%2=1,函数会立刻返回true,但9明显不是素数。
正确的逻辑应该是:
- 遍历所有从2到
sqrt(x)的数,只要找到能整除x的数,就返回false - 如果整个循环跑完都没找到能整除的数,再返回
true
所以要把return true移到循环外面,去掉多余的else分支。
3. 缺少必要的头文件
你使用了bool类型,但没有包含<stdbool.h>头文件,大部分编译器会因此报错,记得补上这个头文件。
修正后的完整代码
#include <stdio.h> #include <stdbool.h> // 新增:使用bool类型需要的头文件 bool prime(int); int main() { int x; scanf("%d", &x); // 替换getchar(),正确读取整数 if (x < 2) printf("its not prime\n"); else { if (prime(x)) printf("its prime\n"); else printf("its not prime\n"); } return 0; } bool prime(int x) { for (int i = 2; i*i <= x; i++) { if (x%i == 0) { return false; // break在这里没用,因为return已经终止函数了,可以删掉 } } // 循环结束后才返回true,说明所有i都不能整除x return true; }
你可以测试几个边界值:比如输入2(最小素数)、4(合数)、9(奇数合数)、17(素数),看看结果是否正确。
内容的提问来源于stack exchange,提问作者Bartek Wach
相关产品推荐
相关产品推荐

