C语言质数判断算法for结构异常:输入非质数后不再识别质数
问题根因
- 核心错误:统计因数数量的
soma变量仅在程序初始化时赋值为0,第一次检测到非质数后soma的值就会大于0,后续所有数值的判断都会因为soma无法归0,永远不满足soma == 0的质数判定条件,因此不会打印质数结果。 - 额外逻辑缺陷:
- 边界值处理错误:小于2的数值(如1)会被误判为质数
- 无有效非质数提示,输入非质数后无结果反馈
- main函数返回值不符合C语言标准规范
- 内层循环无需遍历所有值,找到因数即可提前退出,可优化执行效率
修复后代码
#include <stdio.h> #include <stdlib.h> int main(){ int num, i, p, soma; //Repeticao para o algoritmo todo for(i=1; i<=100; i++){ printf("\nDigite o %do numero: \n",i); scanf("%i", &num); // 每次判断前重置因数计数器 soma = 0; // 小于2的数均不是质数 if(num < 2) { soma = 1; } //Decobrir se eh primo ou nao for(p = 2; p <= num / 2; p++) { if(num % p==0){ soma++; // 找到因数直接跳出循环,无需继续遍历 break; } } //saida if (soma == 0){ printf("%d eh um numero primo!\n", num); } else { printf("%d nao eh um numero primo!\n", num); } } system("pause"); return 0; }
修改说明
- 每次输入新数值后首先重置
soma为0,解决跨轮次计数错误的核心问题 - 新增小于2的数值边界判断,避免误判
- 找到因数后提前跳出内层循环,降低不必要的性能损耗
- 补充非质数的结果输出,明确每次输入的判定结果
- 修正main函数返回值为int类型,符合C语言标准要求
内容的提问来源于stack exchange,提问作者Davi Costa Ferreira da Luz
相关产品推荐
相关产品推荐

