c语言的编程问题,会的麻烦看一下

我要编一个求1000以内的素数平均值的程序,程序如下,编好后执行无法得到结果,谁知道问题出在哪,麻烦告诉我。#include"stdio.h"intfun(intn){i... 我要编一个求1000以内的素数平均值的程序,程序如下,编好后执行无法得到结果,谁知道问题出在哪,麻烦告诉我。
#include "stdio.h"
int fun(int n)
{
int i,y=0;
for(i=2;i<n;i++)
if (n%i==0) y=1;
else y=0;
return y;
}

void main()
{
int a=0,k,n=0;
float av;
for (k=2;k<=1000;k++)
if (fun(k))
{
a+=k;
n++;
}
av=a/n;
printf("av=%f\n",av);
}
展开
 我来答
匿名用户
2011-11-28
展开全部
改好了,具体请看注释:
#include "stdio.h"
int fun(int n)
{
int i,y=0;
for(i=2;i<n;i++)
if (n%i==0)
{
y=0; //这里应该返回0,说明这个数不是素数,main函数中if不执行
break;//发现不是素数后需要立刻break,防止再度计算n%i影响返回值
}
else y=1;//这里应该返回1,说明这个数是素数,main函数中if执行
return y;
}

void main()
{
int a=0,k,n=0;
float av;
for (k=2;k<=100;k++)
if (fun(k))
{
a+=k;
n++;
}
av=a/n;
printf("av=%f\n",av);
}
更多追问追答
追问
素数是指除1和它本身外还有的别的数可以被它整除,例如4,1和2和4都可以做它的除数而被整除。你的那个是质数吧。
追答
大哥,你确定?!
百度百科:
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合数。这也说明了前面所提到的质数在数论中有着重要地位。历史上曾将1也包含在质数之内,但后来为了算术基本定理,最终1被数学家排除在质数之外,而从高等代数的角度来看,1是乘法单位元,也不能算在质数之内,并且,所有的合数都可由若干个质数相乘而得到。
淦海瑶s1
2011-11-28 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:762万
展开全部
int fun(int n)
{
int i,y=0;
for(i=2;i<n;i++)
if (n%i==0) y=1;
else y=0;
return y;
}
这个素数的算法有问题
我给你改一下
int fun(int n)
{
int i;
for(i=2;i*i<n;i++)
if (n%i==0)
return 0;
return n;
}

还有这一句 av=a/n;
改为 av=a*1.0/n;
追问
还有这一句  av=a/n;
改为 av=a*1.0/n;
谢谢你指出这里的错误,不过鉴于有人先解决了这个问题最重要的部分,所以我选他为最佳,不好意思。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘风弓手
2011-11-28 · TA获得超过1306个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:215万
展开全部
这一直都是0,开始那个函数应该弄双层循环,
for(i=3;i<1000;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0) break;
}
if(i==j) k=k+i;
}

这是求1000以内素数的和,有了和应该知道怎么做了
追问
怎么会一直是0呢,K的值会变的啊
追答
用了函数返回值不就是0吗?而且还有些小错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2315070c4
2011-11-28 · 超过14用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:21.9万
展开全部
#include <stdio.h>
#include <stdlib.h>
int fun (int n)
{
int i,y=1;
for (i=2;i<n;i++)
if (n%i==0)
{
y=0;
break;
}
else
y=1;
return y;
}
main()
{
int a=0,t,k,n=0;
float av;
for (k=2;k<=1000;k++)
{
t=fun(k);
if (t)
{
printf ("%d ",k);
a+=k;
n++;
}
}
av=a/n;
printf ("\n%f",av);
system ("pause");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友89bf722
2011-11-28 · 超过10用户采纳过TA的回答
知道答主
回答量:165
采纳率:0%
帮助的人:73.5万
展开全部
判断是否是素数的函数语句应该用两个循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式