输入正整数m和n,输出m和n之间的素数的个数以及这些素数的和。要定义并调用函数prime(m)判断是否为素数

我输入35,为什么得出是00;#include<stdio.h>#include<stdlib.h>#include<math.h>intprime(intm);intm... 我输入3 5,
为什么得出是0 0;
#include <stdio.h>

#include <stdlib.h>
#include <math.h>
int prime(int m);

int main(void)
{
int m, n, sum, k;
scanf("d %d", &m, &n);
sum = 0;
k = 0;
while(m<=n)
{
if(prime(m)==1)
sum = sum + m;
m = m + 1;
k = k + 1;
}

printf("%d %d", k, sum);
return 0;
}

int prime(int m)
{
int i, k;
k = sqrt(m);
for(i=2;1<=k;i++)
{
if(m%2==0 || m==1)
return 0;
}
return 1;
}
展开
 我来答
rtos_kernel
2015-11-24 · TA获得超过164个赞
知道小有建树答主
回答量:97
采纳率:100%
帮助的人:66.3万
展开全部
错误主要有三处:
1)主函数中的 scanf() 的格式化字串参数应写成如下形式:
scanf("%d %d", &m, &n); //问题代码漏了个百分号

2) 主函数的循环代码段中,在判得变量 m 为素数时,应将 k 递增,修改后的正确代码应是:
while( m<=n )
{
if( prime( m ) == 1 ) {
sum = sum + m; //写成 sum += m; 更简单
k = k+ 1; //写成 k++; 更简单
}
m = m+1; //其实写成 m++; 更简单

}

3) 函数 prime() 的 for循环代码段中,循环终止条件应改是 i<=k; 当前的错误代码会很容易陷入死循环(例如当参数 m 为 3 之类非1的奇数时)。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式