回 帖 发 新 帖 刷新版面

主题:帮忙看看哪儿错了?

#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个回复)

沙发

else z==0;
应该是z=0吧……
而且你的返回值应该是1为合数0才是素数……

板凳

另外一点我就不每个帖子都写了,为了函数能够被更好的调用,声明语句一般写在main函数的前面,除非你有特殊需要

3 楼

改了也不行,dev c++说
{if (x%i==0) {z=1;break;}
错了

4 楼

是我的疏忽
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 楼

[quote]
break只是用于跳出switch和循环的,你这里break是在if里就错了
[/quote]
可以用在IF里吧,跳出最近的一层循环.只是楼主这代码风格实在不敢恭维.

6 楼

[quote][quote]
break只是用于跳出switch和循环的,你这里break是在if里就错了
[/quote]
可以用在IF里吧,跳出最近的一层循环.只是楼主这代码风格实在不敢恭维.[/quote]
我自己在dev c++里试了一下,确实通不过
貌似原因在于他的break是在语句块里,因此编译器认为他试图跳出的是一个非循环非switch的语句块

我来回复

您尚未登录,请登录后再回复。点此登录或注册