鱼C论坛

 找回密码
 立即注册
查看: 976|回复: 13

[已解决]利用循环语句求数

[复制链接]
发表于 2020-8-23 18:41:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求100--200之间的素数,我用的方法哪里不对?求好心人指点
#include <stdio.h>
#include <math.h>
void main()
{
   int n,k,i;
   for(n=100;n<=200;n++)
   {
           k=sqrt(n);
       for(i=2;i<=k;i++)
           {
         if(n%i==0)
                 {
                break;
                 }
           }
   }
   if(i>k)
   {
           printf("%d is a prime number",n);
   }
   else
   {
           printf("%d is not a prime number",n);
   }
}
最佳答案
2020-8-23 19:27:27
本帖最后由 baige 于 2020-8-23 19:29 编辑
#include <stdio.h>
#include <math.h>
int main() {
        int n,k,i;
        for(n=100; n<=200; n++) {
                k=sqrt(n);
                for(i=2; i<=k; i++) {
                        if(n%i==0) {
                                break;
                        }
                }
                //要放在循环里
                if(i>k) {
                        printf("%d is a prime number\n",n);
                } else {
                        printf("%d is not a prime number\n",n);
                }
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-23 19:23:49 | 显示全部楼层
本帖最后由 昨非 于 2020-8-23 19:25 编辑

设一个变量flag ,0/1表示是否为素数
for(n=100; n<=200; n++)
    {
        k=sqrt(n);
        for(i=2; i<=k; i++)
            if(m%i==0)
            {
                flag=0;
                break;
            }
        if(flag)
        {
            printf("%-4d",n);
            h++;//循环外初值设为零即可
            if(h%10==0)
                printf("\n");
        }
        flag=1; 
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-23 19:25:44 | 显示全部楼层
昨非 发表于 2020-8-23 19:23
设一个变量flag ,0/1表示是否为素数

请问我的这种方法是哪里出问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:27:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 baige 于 2020-8-23 19:29 编辑
#include <stdio.h>
#include <math.h>
int main() {
        int n,k,i;
        for(n=100; n<=200; n++) {
                k=sqrt(n);
                for(i=2; i<=k; i++) {
                        if(n%i==0) {
                                break;
                        }
                }
                //要放在循环里
                if(i>k) {
                        printf("%d is a prime number\n",n);
                } else {
                        printf("%d is not a prime number\n",n);
                }
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:27:58 | 显示全部楼层
本帖最后由 baige 于 2020-8-23 19:32 编辑

判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:31:11 | 显示全部楼层
本帖最后由 anxiaodai 于 2020-8-23 19:35 编辑

因为你的循环break只跳了一个循环,没有break外循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:32:39 | 显示全部楼层
内层循环判断当前的n是否为素数。设内循环变量为n,程序设计时i从2开始,直到根号n为止。用i依次去除需要判定的整数n,若n能够被i的范围中的任何一个整数所整除,则表示i必然小于或等于根号n,则可以确定当前的整数n不是素数,结束该次循环。如果n不能被中的任何一个整数所整除,则在完成最后一次循环后,i还需要加1之后才终止循环。此时,整数n为素数。

flag初值设为1,在内层循环中判断时,如果n能够被中的任何一个整数所整除,则在内循环中将flag设置为0。否则在内循环中不会修改flag标志的值,退出内循环后它的值仍为1。此时在外循环中对flag的值进行判断,如果flag=0,则不是素数,如果flag=1,是素数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-23 19:35:01 | 显示全部楼层
baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数

老师,我原本写的不是放在循环里吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:36:05 | 显示全部楼层
雨天Zz 发表于 2020-8-23 19:35
老师,我原本写的不是放在循环里吗?

不是,你把判断输出是否是素数的语句放在了外层循环的外面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-8-23 19:37:28 | 显示全部楼层
baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数

我明白了,感激
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:38:34 | 显示全部楼层
这是你的代码:
#include <stdio.h>
#include <math.h>

void main() 
{
        int n,k,i;
        
        for(n=100; n<=200; n++) 
        {
                k=sqrt(n);
                for(i=2; i<=k; i++) 
                {
                        if(n%i==0) 
                        {
                                break;
                        }
                }// 内层循环结束 
                
        }// 外层循环结束 
        
        // 这样写i = 201 k = sqrt(201), 只会对201进行判断然后输出201是素数还是不是素数 
        if(i>k) 
        {
                printf("%d is a prime number",n);
        } 
        else 
        {
                printf("%d is not a prime number",n);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:39:53 | 显示全部楼层
问题解决的话,就结帖吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-23 19:40:38 | 显示全部楼层
楼上那位老师说得对,不过C语言建议把所有语句块的前后大括号设成同一缩进,这样盯着屏幕不好找bug的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-28 20:15:02 | 显示全部楼层
#include<stdio.h>
int main()
{

    int i,j;
    int k=2;
    for(i=100;i<201;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
                break;

        }
        if(i==j)
            printf("%d\n",i);

    }



    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 02:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表