Heinrich. 2024-03-08 08:47 采纳率: 0%
浏览 2

为什么我的程序没有输出结果?(语言-c语言)

代码写完能编译能运行,就是运行没有结果,请问是什么问题 代码在下方

img

#include<stdio.h>

int isPrimeNumber(int m){
    int  i;
    for(i=2;i<m;i++){
            if(m%1==0){
                break;
            }
        }
    //执行了break:i<m 
        if(i==m){
            return 1;
        //    printf("%d是素数\n",m);
        } else{
            return 0;
        //    printf("%d不是素数\n",m);
        }
}


int main(){
    int isPrimeNumber(int m);
    int j;
    for(j=101;j<=200;j++){
        if(isPrimeNumber(j)){
            printf("%d ",j);
        }    
    }
    
    return 0;
}

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-08 08:47
    关注

    引自免费微信小程序:皆我百晓生

    在您的C语言代码中,isPrimeNumber函数用于判断一个整数是否为素数。问题出在该函数的实现上,您在循环条件里使用了错误的判断逻辑。

    原始代码中的问题是:

    if(m%1==0){
        break;
    }
    

    这里判断的是 m 是否能被 1 整除,而实际上任何整数都能被 1 整除,因此这个条件永远为真,导致break语句始终被执行,使得无法正确判断质数。

    正确的做法应该是遍历2到sqrt(m)(取整),判断m是否能被这些数整除。以下是修正后的isPrimeNumber函数:

    #include<stdio.h>
    #include<math.h> // 引入数学库,以便计算平方根
    
    int isPrimeNumber(int m){
        if (m <= 1) {
            return 0;
        }
        
        for(int i = 2; i <= sqrt(m); i++){
            if(m % i == 0){
                return 0;
            }
        }
        
        return 1;
    }
    
    int main(){
        int j;
        for(j=101;j<=200;j++){
            if(isPrimeNumber(j)){
                printf("%d ",j);
            }    
        }
        
        return 0;
    }
    

    现在,这段程序应该能够正常输出101到200之间的所有素数了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析