鱼C论坛

 找回密码
 立即注册
查看: 1564|回复: 6

[已解决]换行问题

[复制链接]
发表于 2018-10-4 20:04:43 | 显示全部楼层 |阅读模式

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

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

x
/******************************************************************************************
1)关键问题:你函数中没有对a,b赋初值,但程序在申请变量空间时,其内部是有一个不可预料的值的,
而且这个值一般不会是0。如果你传过来的是素数,执行for循环后,b得不到值,将会是最开始声明变量
时程序自动给你的那个不可预料的值,只要那个值不是0,就能执行if(b)的内容,所以能正常返回输出2、
3。但是3之后,主函数传递给函数的4不是素数,那么通过for()循环,b将得到一个0,因为你没有人为对
它初始化,它将一直保持为0,这样if(b)永远不能执行,a也永远无法变成1,自然后面的就无法再输出。
2)解决办法:在声明变量a或b时,先给它们赋值b=1或a=1,养成好习惯。另外,b其实没有存在的必要,
只通过a来判断是否为素数就可以了。默认a=1,即默认是传递过来的是素数,如果遇到被整除的情况,再
将a=0,最后返回a即可。********************************************************************
******************************************************************************************/
#include <stdio.h>

int fun(int y)
{
        int i;
        
        for(i = 2;i <= (y/2); i++)
        {
                if(y % i == 0)   
                {     
                return 0;
                }
        }
        return 1;
}


int main()
{
        int x = 300, s,count = 0 ;
        //        printf("????????:");
        //        scanf("%d",&x);
        for(s = 2; s <= x; s++)
        {
                if(fun(s) == 1)   
                {
                         printf("%d  ",s);
                     count ++;
                }
                       
                if(count % 10 ==0)
                {
                        printf("\n");
                        //count = 1;    //没有这句话为什么会出现下面的情况,不理解
                }
        }
        return 0;
}

Cutter_2018-10-04 08_03_38.715.png
最佳答案
2018-10-4 20:19:53
本帖最后由 claws0n 于 2018-10-4 20:21 编辑
  1. #include <stdio.h>

  2. int fun(int y)
  3. {
  4.         int i;
  5.         
  6.         for(i = 2;i <= (y/2); i++)
  7.         {
  8.                 if(y % i == 0)   
  9.                 {     
  10.                 return 0;
  11.                 }
  12.         }
  13.         return 1;
  14. }


  15. int main()
  16. {
  17.         int x = 300, s, count = 0 ;
  18.        
  19.         for(s = 2; s <= x; s++)
  20.         {
  21.                 if(fun(s))   
  22.                 {
  23.                         printf("%3d  ",s);
  24.                         count++;
  25.                         if(count % 10 == 0)
  26.                         {
  27.                                 printf("\n");
  28.                         }
  29.                 }
  30.         }
  31.         return 0;
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-4 20:19:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 claws0n 于 2018-10-4 20:21 编辑
  1. #include <stdio.h>

  2. int fun(int y)
  3. {
  4.         int i;
  5.         
  6.         for(i = 2;i <= (y/2); i++)
  7.         {
  8.                 if(y % i == 0)   
  9.                 {     
  10.                 return 0;
  11.                 }
  12.         }
  13.         return 1;
  14. }


  15. int main()
  16. {
  17.         int x = 300, s, count = 0 ;
  18.        
  19.         for(s = 2; s <= x; s++)
  20.         {
  21.                 if(fun(s))   
  22.                 {
  23.                         printf("%3d  ",s);
  24.                         count++;
  25.                         if(count % 10 == 0)
  26.                         {
  27.                                 printf("\n");
  28.                         }
  29.                 }
  30.         }
  31.         return 0;
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 20:37:33 | 显示全部楼层
你这个"count"作用就是使其输出每行十个,如果你这里不重新设定"count"为1的话它就会一直加1,就是说你第一次换行时你第一行的数为10个("count"为10),你第二次换行时"count"为20,一行就会有20个数,你第三次换行时"count"为30,一行就会有30个数,……以此类推,C一行是接受不了这么多数据的吧。{专业术语我讲不来,但应该是这么一个原因。。}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 21:05:43 | 显示全部楼层
ten$1 发表于 2018-10-4 20:37
你这个"count"作用就是使其输出每行十个,如果你这里不重新设定"count"为1的话它就会一直加1,就是说你第一 ...

不需要重设,会比较麻烦,也不是那个原因。因为素数一开始是比较密集的,所以没有问题,后面的时候 if(判断素数) if(count...) 那个时候素数比较疏散,而前面 count = 10,又没有count++ ,所以遇到不是素数的时候,就拼命打印空行,直到再次遇到素数,count++ 才能打破这空行的诅咒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 21:14:42 | 显示全部楼层
claws0n 发表于 2018-10-4 21:05
不需要重设,会比较麻烦,也不是那个原因。因为素数一开始是比较密集的,所以没有问题,后面的时候 if(判 ...

哦~搜嘎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 16:00:25 | 显示全部楼层
claws0n 发表于 2018-10-4 21:05
不需要重设,会比较麻烦,也不是那个原因。因为素数一开始是比较密集的,所以没有问题,后面的时候 if(判 ...

可是即使后面的比较疏散,但是一旦不为素数,他就不会进入第一层if循环,也不会打印换行啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 16:07:58 | 显示全部楼层
流泪的小鳄鱼 发表于 2018-10-7 16:00
可是即使后面的比较疏散,但是一旦不为素数,他就不会进入第一层if循环,也不会打印换行啊?

int main()
{
        int x = 300, s,count = 0 ;
        for(s = 2; s <= x; s++)
        {
                if(fun(s) == 1)   //3. 不是素数,不会执行这里,就没有 count++,此时 count %10 == 0
                {
                     printf("%d  ",s);
                     count ++;
                }

                if(count % 10 == 0)  //1. 执行完上面的代码就一定会执行这一块不是吗?
                {
                        printf("\n");
                }
        }  //2.  你的循环体是到这里
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 00:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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