雨天Zz 发表于 2020-8-28 02:47:21

循环结构设计

求100--200之间的素数,并以每行10个数的格式输出,哪位好心人帮忙看一下,我是哪里错了?

#include <stdio.h>
#include <math.h>
void main()
{
   int n,k,i,m;

   for(n=100;n<=200;n++)
   {       m=0;
         k=sqrt(n);
       for(i=2;i<=k;i++)
         {
         if(n%i==0)
               {
                break;
               }
         }
   
   if(i>k)
       {   
         printf("%5d",n);
                   m++;
                   if(m%10==0)
                     {
                           printf("\n");
                       }

       }
        }
}

livcui 发表于 2020-8-28 07:21:34

#include <stdio.h>
#include <math.h>
int main()
{
    int n, k, i, m;

    for (n = 100; n <= 200; n++)
    {
      m = 0;
      k = sqrt(n);
      for (i = 2; i <= k; i++)
      {
            if (n % i == 0)
            {
                break;
            }
      }

      if (i > k)
      {
            printf("%5d", n);
            m++;
            if (m % 10 == 0)
            {
                printf("\n");
            }

      }
    }
    return 0;
}

baige 发表于 2020-8-28 07:51:14

你想利用m去实现换行,但m每次循环都被你定义为0,永远不可能到达10
#include <stdio.h>
#include <math.h>
int main()
{
        int n,k,i,m;
        int cnt = 0;
        for(n=100; n<=200; n++)
        {
                m=0;
                k=sqrt(n);
                for(i=2; i<=k; i++)
                {
                        if(n%i==0)
                        {
                                break;
                        }
                }

                if(i>k)
                {
                        printf("%5d",n);
                        cnt++;// m每次循环都定义为0,不可能等于10
                        if(cnt%10==0)
                        {
                                printf("\n");
                        }

                }
        }
        return 0;
}

sunrise085 发表于 2020-8-28 08:30:33

直接把for循环内的   m = 0拿到循环外就可以了。
在循环内的话,每次循环m都被赋值为0,不可能有m%10==0的情况
#include <stdio.h>
#include <math.h>
int main()
{
    int n, k, i, m;
    m = 0;//就是这一行,从for循环内拿出来就可以了
    for (n = 100; n <= 200; n++)
    {
      
      k = sqrt(n);
      for (i = 2; i <= k; i++)
      {
            if (n % i == 0)
            {
                break;
            }
      }

      if (i > k)
      {
            printf("%5d", n);
            m++;
            if (m % 10 == 0)
            {
                printf("\n");
            }

      }
    }
    return 0;
}

雨天Zz 发表于 2020-8-28 11:49:24

sunrise085 发表于 2020-8-28 08:30
直接把for循环内的   m = 0拿到循环外就可以了。
在循环内的话,每次循环m都被赋值为0,不可能有m%10==0 ...

#include <stdio.h>
#include <math.h>
void main()
{
   int n,k,i,m;
   m=o;
   for(n=100;n<=200;n++)
   {
         k=sqrt(n);
       for(i=2;i<=k;i++)
         {
         if(n%i==0)
               {
                break;
               }
         }
   
   if(i>k)
       {
         printf("%5d",n);
                   m++;
                   if(m%10==0)
                     {
                           printf("\n");
                       }

       }
        }请问我这个代码哪里有错误?

sunrise085 发表于 2020-8-28 12:05:38

雨天Zz 发表于 2020-8-28 11:49
#include
#include
void main()


{:10_285:}{:10_285:}
for循环的上一行,m=o?为什么不是零而是o?

雨天Zz 发表于 2020-8-28 12:11:04

sunrise085 发表于 2020-8-28 12:05
for循环的上一行,m=o?为什么不是零而是o?

好吧,我没注意,打错了,多谢指点

shejiuman 发表于 2020-8-28 20:20:54

#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)//每次循环让i对j取余;只有素数才会让j加到和i相等
                break;//如果不是素数就会跳出循环执行i++,并打印此i

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

    }



    return 0;
}
页: [1]
查看完整版本: 循环结构设计