鱼C论坛

 找回密码
 立即注册
查看: 851|回复: 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 编辑
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.         int n,k,i;
  5.         for(n=100; n<=200; n++) {
  6.                 k=sqrt(n);
  7.                 for(i=2; i<=k; i++) {
  8.                         if(n%i==0) {
  9.                                 break;
  10.                         }
  11.                 }
  12.                 //要放在循环里
  13.                 if(i>k) {
  14.                         printf("%d is a prime number\n",n);
  15.                 } else {
  16.                         printf("%d is not a prime number\n",n);
  17.                 }
  18.         }

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

使用道具 举报

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

设一个变量flag ,0/1表示是否为素数

  1. for(n=100; n<=200; n++)
  2.     {
  3.         k=sqrt(n);
  4.         for(i=2; i<=k; i++)
  5.             if(m%i==0)
  6.             {
  7.                 flag=0;
  8.                 break;
  9.             }
  10.         if(flag)
  11.         {
  12.             printf("%-4d",n);
  13.             h++;//循环外初值设为零即可
  14.             if(h%10==0)
  15.                 printf("\n");
  16.         }
  17.         flag=1;
  18.     }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 编辑
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main() {
  4.         int n,k,i;
  5.         for(n=100; n<=200; n++) {
  6.                 k=sqrt(n);
  7.                 for(i=2; i<=k; i++) {
  8.                         if(n%i==0) {
  9.                                 break;
  10.                         }
  11.                 }
  12.                 //要放在循环里
  13.                 if(i>k) {
  14.                         printf("%d is a prime number\n",n);
  15.                 } else {
  16.                         printf("%d is not a prime number\n",n);
  17.                 }
  18.         }

  19. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
这是你的代码:
  1. #include <stdio.h>
  2. #include <math.h>

  3. void main()
  4. {
  5.         int n,k,i;
  6.        
  7.         for(n=100; n<=200; n++)
  8.         {
  9.                 k=sqrt(n);
  10.                 for(i=2; i<=k; i++)
  11.                 {
  12.                         if(n%i==0)
  13.                         {
  14.                                 break;
  15.                         }
  16.                 }// 内层循环结束
  17.                
  18.         }// 外层循环结束
  19.        
  20.         // 这样写i = 201 k = sqrt(201), 只会对201进行判断然后输出201是素数还是不是素数
  21.         if(i>k)
  22.         {
  23.                 printf("%d is a prime number",n);
  24.         }
  25.         else
  26.         {
  27.                 printf("%d is not a prime number",n);
  28.         }
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-6-3 21:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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