| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 405 人关注过本帖
标题:关于素数的问题(问题在第 19 行):
只看楼主 加入收藏
Oscar_tam
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-4-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于素数的问题(问题在第 19 行):
/*1*/    #include<stdio.h>

/*2*/    int main(void)
/*3*/    {
/*4*/    int num;//输入的整数
/*5*/    int isprime;//素数的标志
/*6*/    int div;//可能的约数
/*7*/    printf("please enter a number to analyze:q to quit\n");
   
/*8*/    while(scanf("%d",&num)==1)
/*9*/    {
/*10*/      for(div=2,isprime=1;(div*div)<=num;div++)//for循环开始的时候isprime等于1,观察一下for结束的时候是不是仍然等于1。
      
/*11*/        {
/*12*/          if(num%div==0)//如果输入的数是素数,则不会进入if语句。
         
/*13*/              if(div*div!=num)
/*14*/              printf("%d能被%d和%d整除\n",num,div,num/div);
/*15*/              else
/*16*/              printf("%d能被%d整除\n",num,div);
/*17*/              isprime=0;//在for循环里面设置一个相反的值
         
/*18*/        }     
/*19*/              printf("此时isprime的值是%d\n",isprime);//打印isprime的值。想知道输入的数有没有进入过for循环/n
                                              //结果无论输入素数还是非素数,isprime的值都是for循环里面的值(此处为0)。为什么????????


/*20*/             if(isprime==0)
/*21*/                 printf("你输入的%d不是素数。\n",num);
/*22*/             else
/*23*/              printf("你输入的%d是素数。\n",num);
            
/*24*/       printf("please enter a number to analyze:q to quit\n");
/*25*/   }
/*26*/   printf("\n");
/*27*/   return 0;

/*28*/   }
搜索更多相关主题的帖子: include please number 
2014-06-29 10:16
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:7 
晕啊,你每次循环结束你都把0 赋给了这个变量isprime,打印结果肯定是0啦

我不是砖家,要努力成为砖家。
2014-06-29 10:23
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:13 
注意空白行的注释,为了便于找到,特意留出空行, 空行的注释是对上面一行的注释.

程序代码:
/*1*/    #include<stdio.h>
/*2*/    int main(void)
/*3*/    {
/*4*/    int num;//输入的整数
/*5*/    int isprime;//素数的标志
/*6*/    int div;//可能的约数
/*7*/    printf("please enter a number to analyze:q to quit\n");   
/*8*/    while(scanf("%d",&num)==1)
/*9*/    {
/*10*/      for(div=2,isprime=1;(div*div)<=num;div++)//for循环开始的时候isprime等于1,观察一下for结束的时候是不是仍然等于1。
      
/*11*/        {
/*12*/          if(num%div==0){        //如果输入的数是素数,则不会进入if语句。
                                                                              //这里应该有大括号的,以下语句都基于这条if执行的
          
/*13*/              if(div*div!=num)
/*14*/              printf("%d能被%d和%d整除\n",num,div,num/div);       //1
/*15*/              else
/*16*/              printf("%d能被%d整除\n",num,div);                   //2
/*17*/              isprime=0;}//在for循环里面设置一个相反的值    
                                                         //加的大括号结束在这里,这一句不参与第二个if的执行.这种情况其实在1和2处的两条
                                                         //语句各加一对{}括起来更易读, 不然新手新手很容易看花眼. 除了多敲两下键盘外,一点都不影响程序执行.
          
/*18*/        }                                           
/*19*/              printf("此时isprime的值是%d\n",isprime);//打印isprime的值。想知道输入的数有没有进入过for循环/n
                                              //结果无论输入素数还是非素数,isprime的值都是for循环里面的值(此处为0)。为什么????????
/*20*/             if(isprime==0)
/*21*/                 printf("你输入的%d不是素数。\n",num);
/*22*/             else
/*23*/              printf("你输入的%d是素数。\n",num);            
/*24*/       printf("please enter a number to analyze:q to quit\n");
/*25*/   }
/*26*/   printf("\n");
/*27*/   return 0;
/*28*/   }


[ 本帖最后由 vvvcuu 于 2014-6-29 11:10 编辑 ]

代码测试环境:  WinXP+C-Free5.0.
2014-06-29 11:04
Oscar_tam
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-4-27
收藏
得分:0 
回复 2 楼 砖家的谎言
好像明白了,意思是我把isprime=0;放到for循环里了吗?
2014-06-29 14:34
Oscar_tam
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2014-4-27
收藏
得分:0 
回复 3 楼 vvvcuu
感谢您这么详细的解答!只要在12行至17行加对大括号让isprime=0;基于第一个if语句内执行就好了是吗?
2014-06-29 14:46
快速回复:关于素数的问题(问题在第 19 行):
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026798 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved