鱼C论坛

 找回密码
 立即注册
查看: 1135|回复: 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的情况
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> 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");
                         }

       }
        }请问我这个代码哪里有错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


for循环的上一行,m=o?为什么不是零而是o?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧,我没注意,打错了,多谢指点
想知道小甲鱼最近在做啥?请访问 -> 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 03:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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