首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我是初学者帮帮小弟我

2012-04-05 
我是菜鸟帮帮我怎么这个程序有问题,哪里有问题呢?#include stdio.hint zhishu(int n){int i for (i2i

我是菜鸟帮帮我
怎么这个程序有问题,哪里有问题呢?
#include <stdio.h>
int zhishu(int n)
{
 int i;
for (i=2;i<n;i++)
if(n%i==0)
break;
return i>=n;
}
void main ()
{
int f;
f= zhishu(88);
if(f=1)printf("质数");
else
  printf("不是质数");

}

[解决办法]
for (i=2;i<n;i++)
i是永远不会大于n的
[解决办法]
i=n
[解决办法]
if(f==1) printf("质数");
掉了=
[解决办法]

C/C++ code
#include <stdio.h>int zhishu(int n){ int i;for (i=2;i<n;i++){if(n%i==0)break;}return i==n;}void main (){int f;f= zhishu(88);if(f==1) printf("质数");else  printf("不是质数");}
[解决办法]
for (i=2;i<n;i++)
这是死循环,n要有确切的值
[解决办法]
主函数的判定语句中 if(f=1)...永远是真值,因为给f赋值都会成功。f=1在执行完成后回返回一个布尔类型的值,如果执行成功返回TURE,如果执行错误就返回FALSE。一般来说,f=1这个语句肯定会被成功执行。所以在你的程序中,永远不会执行else之后的那个语句。也就是说,程序判断的任何数都是质数。应该将f=1改为f==1,为了在编译期间能够发现此类错误,建议你将此表达式写成1==f,这样的话,如果你不小心少写了一个等号,在编译时期就会被发现。因为常量是不允许被修改的,就是说1不能被赋予f值。
[解决办法]
请教:如果i<n return的是什么
探讨

个人觉得楼主的那个函数 写的语法上相当简练,但没有看出楼上同学们说的死循环的问题。
而且返回值的复合语句也不错。
另外10楼同学说的很对,其实只需要判断到根号下n即可,根号下n不好算的话 取一半+1也能省下好多步骤呢。当然如果这样的话最后的return语句需要修改下啦

其实zishu()的思想就是把传进去的参数n从2开始一直除到n,如果中间能整除,那么结果无非是两种,一是还不到n就整除……

[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。

热点排行