为何C语言素数判断程序无输出返回值?如何修复?
素数判断程序无输出的原因及修复方案
问题原因
你的代码逻辑上能正确返回素数判断结果,但程序没有任何输出操作:main函数里仅仅调用了isPrime(n),却没有把函数返回的0或1打印到控制台。C语言不会自动输出函数返回值,必须显式调用输出函数才能让结果显示出来。
另外,原isPrime函数的循环效率可以优化——当前循环到n/2,实际上只需要循环到√n就足够了,因为若n存在大于√n的因数,必然对应一个小于√n的因数,这样能大幅减少循环次数。
修复后的代码
#include <stdio.h> // 如果用sqrt函数需要包含这个头文件 #include <math.h> int isPrime(int n) { if (n <= 1) { return 0; } // 优化循环条件到sqrt(n),减少迭代次数 for (int i=2; i <= sqrt(n); i++) { if (n%i == 0) { return 0; } } return 1; } int main() { int n = 2; int result = isPrime(n); // 显式输出判断结果 printf("%d 是素数吗?%s\n", n, result ? "是" : "否"); return 0; }
额外说明
- 如果不想引入
math.h,可以把循环条件改成i*i <= n,避免调用sqrt函数,效果完全一致。 - 你也可以修改
main函数让程序接收用户输入的数字,让程序更实用:int main() { int n; printf("请输入一个整数:"); scanf("%d", &n); int result = isPrime(n); printf("%d 是素数吗?%s\n", n, result ? "是" : "否"); return 0; }
内容的提问来源于stack exchange,提问作者user19159910
相关产品推荐
相关产品推荐

