雨天Zz 发表于 2020-8-23 18:41:16

利用循环语句求数

求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: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;
    }

雨天Zz 发表于 2020-8-23 19:25:44

昨非 发表于 2020-8-23 19:23
设一个变量flag ,0/1表示是否为素数

请问我的这种方法是哪里出问题了

baige 发表于 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);
                }
        }

}

baige 发表于 2020-8-23 19:27:58

本帖最后由 baige 于 2020-8-23 19:32 编辑

判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数

anxiaodai 发表于 2020-8-23 19:31:11

本帖最后由 anxiaodai 于 2020-8-23 19:35 编辑

因为你的循环break只跳了一个循环,没有break外循环

昨非 发表于 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,是素数。

雨天Zz 发表于 2020-8-23 19:35:01

baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数

老师,我原本写的不是放在循环里吗?

baige 发表于 2020-8-23 19:36:05

雨天Zz 发表于 2020-8-23 19:35
老师,我原本写的不是放在循环里吗?

不是,你把判断输出是否是素数的语句放在了外层循环的外面

雨天Zz 发表于 2020-8-23 19:37:28

baige 发表于 2020-8-23 19:27
判断语句位置写错了,得写在循环里, 你写在外面,只有201会去判断是不是素数

我明白了,感激{:5_109:}

baige 发表于 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);
        }
}

baige 发表于 2020-8-23 19:39:53

问题解决的话,就结帖吧

昨非 发表于 2020-8-23 19:40:38

楼上那位老师说得对,不过C语言建议把所有语句块的前后大括号设成同一缩进,这样盯着屏幕不好找bug的

shejiuman 发表于 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;
}
页: [1]
查看完整版本: 利用循环语句求数