主题:帮忙看看哪儿错了?
dinghao517 [专家分:20] 发布于 2010-03-05 21:28:00
#include <stdio.h>
#include <stdlib.h>
int main()
{int panduan(int x);
int a;
scanf("%d",&a);
if (panduan(a)==1) printf("这是一个素数\n");
else printf("这不是一个素数\n");
system("pause");
return 0;
}
int panduan(int x)
{int z,i;
for (i=2;i<x;i++);
{if (x%i==0) {z=1;break;}
else z==0;
}
return (z);
}
回复列表 (共6个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-03-05 22:36:00
else z==0;
应该是z=0吧……
而且你的返回值应该是1为合数0才是素数……
板凳
雪光风剑 [专家分:27190] 发布于 2010-03-05 22:38:00
另外一点我就不每个帖子都写了,为了函数能够被更好的调用,声明语句一般写在main函数的前面,除非你有特殊需要
3 楼
dinghao517 [专家分:20] 发布于 2010-03-07 13:33:00
改了也不行,dev c++说
{if (x%i==0) {z=1;break;}
错了
4 楼
雪光风剑 [专家分:27190] 发布于 2010-03-07 14:24:00
是我的疏忽
break只是用于跳出switch和循环的,你这里break是在if里就错了
不用定义break,直接返回数值就可以了
int z,i;
for (i=2;i<x;i++);
{if (x%i==0) {z=1;break;}
else z==0;
}
return (z);
改成
int i;
for (i=2;i<x;i++)
if (x%i==0)
return 0;/*我还是按习惯把非素数写成0,这样在main函数中可以直接写成if(panduan(a))的形式了*/
return 1;
5 楼
强强 [专家分:4740] 发布于 2010-03-07 14:38:00
[quote]
break只是用于跳出switch和循环的,你这里break是在if里就错了
[/quote]
可以用在IF里吧,跳出最近的一层循环.只是楼主这代码风格实在不敢恭维.
6 楼
雪光风剑 [专家分:27190] 发布于 2010-03-07 14:43:00
[quote][quote]
break只是用于跳出switch和循环的,你这里break是在if里就错了
[/quote]
可以用在IF里吧,跳出最近的一层循环.只是楼主这代码风格实在不敢恭维.[/quote]
我自己在dev c++里试了一下,确实通不过
貌似原因在于他的break是在语句块里,因此编译器认为他试图跳出的是一个非循环非switch的语句块
我来回复