You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:04