首页 > 其他 > 详细

【c】质数判断

时间:2015-11-19 00:20:46      阅读:354      评论:0      收藏:0      [点我收藏+]

 

这是我写的质数判断程序,数数有多少个错误吧……

都是年轻时候犯下的错啊……

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int N;
 5     int i;
 6     int f;
 7     scanf("%d",&N);
 8         for(i=1;i<N;i++)
 9         {
10             f=N%i;
11             if(f==0)
12             printf("NO");
15         }
16 printf("YES");
17 return 0;
18 }

 

 

技术分享

 

 

错误一:

8      for(i=1;i<N;i++)
9        {
10           f=N%i;

for先给i赋值1,然后再执行 i++

但是万万没想到,++后缀是使用i后再改变i的值

所以

10           f=N%i;    

等价于

1             f=N%1;
2             i=i+1;

f永远等于0

程序在第一步永远会输出NO

除了N=1的情况,这时会跳过for循环

 

错误二:

没有设置终止条件,

程序在输出第一个NO之后,for循环没有中断,会对i不断地+1,+1,+1业内俗称续命,并进行if(f==0)的判断

判断为真,就会继续输出一个NO,直到for循环结束,输出一个yes

输入4,得到的结果会是NONOYES

输入1000,得到的是很长的NONONONONONONONONONONONONONONOYES

15个no,我数过了……

另外,N应该改成n,按照规范只有常量才可以使用大写

 

解决:

按照图中的这个思路,应该在

12                 printf("NO");

后加入一个终止命令才可以终止这样不停地输出,break肯定不行,经过高人百度指点,应该加入return 0;

12               printf("NO");
13               return 0;

这一下虽然只会输出一个NO,但是没有解决永远只输出yes的问题,同时还引入了一个新问题。

因为没有加花括号,所以在进行判断之后,不管是否为真,会执行return 0;的操作,程序结束

也就是说不输出NO的话就会什么也不做,永远不会告诉你YES。

 

 

大概几天后

#include "stdio.h"
#include "math.h"
int main()
{
    int M, i,f,a;
    scanf("%d",&M);
        for(i= 2; i< M; i++,a=0 )
  {
            f= M % i;
            if(f == 0)
        {          a=1;
                   printf("NO");
        
                   return 0;
        }

    }
        if(a == 0)
        printf("YES");
}

完全改正版出来了,虽然十分拖沓,但还是艰难的完成了判断质数的任务

i初始值应该等于2 √

//经过测验,如果把i++改为++i,取模运算的时候i的值依然等于1,这点弄不明白……不是使用前对i加1吗?

if后面要接复合语句的话需要加花括号 √

只输出YES或NO √

完成要求的任务 √

技术分享

 

【c】质数判断

原文:http://www.cnblogs.com/xiayezhige/p/4976288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!