输入正整数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;
} 展开
为什么得出是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;
} 展开
展开全部
错误主要有三处:
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的奇数时)。
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的奇数时)。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询