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

C语言质数打印程序优化:无需if语句判定1非质数的方法

无需if语句判定1不是质数的C语言实现方案

你刚接触C语言,写了一段根据输入范围打印质数的代码,觉得check函数里判断number == 1的if语句像“补丁”,想要不用if的替代方案,下面提供两种简洁的实现方式:

原代码回顾

#include <stdio.h>
int check(int number)
{
    if (number == 1)
    {
        return 0;
    }
    int count = 2;
    while (count < number)
    {
        if (number%count == 0)
        {
            return 0;
        }
        count++;
    }
    return 1;
}
void main()
{
    int i,min,max;
    printf("Enter start of range: ");
    scanf("%d",&min);
    printf("Enter end of range: ");
    scanf("%d",&max);
    for (i = min;i < max;i++)
    {
        if (check(i) == 1)
        {
            printf("%d\n",i);
        }
    }
}

方案一:利用逻辑短路与表达式返回值

修改后的check函数完全去掉了开头的if语句:

int check(int number)
{
    int count = 2;
    // 逻辑短路特性:number<=1时,&&右侧不会执行,循环直接跳过
    while (number > 1 && count < number)
    {
        if (number % count == 0)
        {
            return 0;
        }
        count++;
    }
    // 直接返回number>1的结果:number>1时返回1,否则返回0
    return number > 1;
}

原理说明

  • C语言中关系表达式的结果是整数:number > 1在number大于1时返回1,否则返回0,刚好匹配质数判定的结果。
  • while循环的number > 1 && count < number利用逻辑短路:当number <=1时,&&左侧为0,右侧的count < number不会执行,循环直接跳过,最后返回number >1的0,自动判定1不是质数。

方案二:调整循环起始条件与边界

另一种思路是让循环的起始条件自动过滤掉1的情况:

int check(int number)
{
    // 当number<=1时,count初始值等于number,循环条件不成立
    int count = number > 1 ? 2 : number;
    while (count < number)
    {
        if (number % count == 0)
        {
            return 0;
        }
        count++;
    }
    return number > 1;
}

原理说明

  • 用三元运算符(?:)给count赋值:number大于1时count设为2,否则count等于number,此时count < number不成立,循环直接不执行。
  • 最后同样返回number >1的表达式结果,无需额外if判断。

这两种方案都没有使用if语句单独判定1的情况,同时保持了质数判定的正确性,避免了“补丁代码”的感觉。

内容的提问来源于stack exchange,提问作者nkminion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:03:22