鱼C论坛

 找回密码
 立即注册
查看: 1360|回复: 7

[已解决]循环结构设计

[复制链接]
发表于 2020-8-28 02:47:21 | 显示全部楼层 |阅读模式

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

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

x
求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");
                         }

       }
        }
}
最佳答案
2020-8-28 08:30:33
直接把for循环内的   m = 0  拿到循环外就可以了。
在循环内的话,每次循环m都被赋值为0,不可能有m%10==0的情况
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     int n, k, i, m;
  6.     m = 0;//就是这一行,从for循环内拿出来就可以了
  7.     for (n = 100; n <= 200; n++)
  8.     {
  9.         
  10.         k = sqrt(n);
  11.         for (i = 2; i <= k; i++)
  12.         {
  13.             if (n % i == 0)
  14.             {
  15.                 break;
  16.             }
  17.         }

  18.         if (i > k)
  19.         {
  20.             printf("%5d", n);
  21.             m++;
  22.             if (m % 10 == 0)
  23.             {
  24.                 printf("\n");
  25.             }

  26.         }
  27.     }
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-28 07:21:34 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     int n, k, i, m;

  6.     for (n = 100; n <= 200; n++)
  7.     {
  8.         m = 0;
  9.         k = sqrt(n);
  10.         for (i = 2; i <= k; i++)
  11.         {
  12.             if (n % i == 0)
  13.             {
  14.                 break;
  15.             }
  16.         }

  17.         if (i > k)
  18.         {
  19.             printf("%5d", n);
  20.             m++;
  21.             if (m % 10 == 0)
  22.             {
  23.                 printf("\n");
  24.             }

  25.         }
  26.     }
  27.     return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 07:51:14 | 显示全部楼层
你想利用m去实现换行,但m每次循环都被你定义为0,永远不可能到达10
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.         int n,k,i,m;
  6.         int cnt = 0;
  7.         for(n=100; n<=200; n++)
  8.         {
  9.                 m=0;
  10.                 k=sqrt(n);
  11.                 for(i=2; i<=k; i++)
  12.                 {
  13.                         if(n%i==0)
  14.                         {
  15.                                 break;
  16.                         }
  17.                 }

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

  26.                 }
  27.         }
  28.         return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 08:30:33 | 显示全部楼层    本楼为最佳答案   
直接把for循环内的   m = 0  拿到循环外就可以了。
在循环内的话,每次循环m都被赋值为0,不可能有m%10==0的情况
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     int n, k, i, m;
  6.     m = 0;//就是这一行,从for循环内拿出来就可以了
  7.     for (n = 100; n <= 200; n++)
  8.     {
  9.         
  10.         k = sqrt(n);
  11.         for (i = 2; i <= k; i++)
  12.         {
  13.             if (n % i == 0)
  14.             {
  15.                 break;
  16.             }
  17.         }

  18.         if (i > k)
  19.         {
  20.             printf("%5d", n);
  21.             m++;
  22.             if (m % 10 == 0)
  23.             {
  24.                 printf("\n");
  25.             }

  26.         }
  27.     }
  28.     return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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");
                         }

       }
        }请问我这个代码哪里有错误?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 12:05:38 | 显示全部楼层
雨天Zz 发表于 2020-8-28 11:49
#include
#include
void main()


for循环的上一行,m=o?为什么不是零而是o?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-28 12:11:04 | 显示全部楼层
sunrise085 发表于 2020-8-28 12:05
for循环的上一行,m=o?为什么不是零而是o?

好吧,我没注意,打错了,多谢指点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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