哪位大虾帮帮忙,我的这个C++编程为什么不能输出啊?谢谢

编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。
例如:n为1000时,函数值应为s=96.979379。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:

#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
double fun(int n)
{
double s=0.0;
int m=1;
while (0<m&&m<n)
{
if ((m%5==0)&&(m%11==0))
{
s+=m;
m++;
}
}
s=sqrt(s);
return s;
}

void main()
{
FILE *wf;
system("CLS");
printf("s=%f\n", fun(1000));
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%f",fun(1000));
fclose(wf);
/*****************************/
}

最后应该输出s=96.979379
但是我的没有输出任何东西,谢谢各位大虾了!

int m=1;
while (0<m&&m<n)
{
if ((m%5==0)&&(m%11==0))
{
s+=m;
m++;
}
}
这一段的程序逻辑有问题,因为m=1所以if条件不满足,因此m++就不能执行,导致m的值不能改变,所以这是一个死循环。

正确的做法应该是将m++移出if的执行块,修正后的程序如下,在BCB2007中测试正常:

//---------------------------------------------------------------------------

#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
double fun(int n)
{
double s=0.0;
int m=1;
while (0<m&&m<n)
{
if ((m%5==0)&&(m%11==0))

s+=m;
m++; /*注意这里*/

}
s=sqrt(s);
return s;
}

void main()
{
FILE *wf;
system("CLS");
printf("s=%f\n", fun(1000));
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%f",fun(1000));
fclose(wf);
/*****************************/
}
//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-07-27
m++; 必须写if语句外面就行了...不然如果不满足if条件,便不执行m++,m的值永远是1.就成了死循环

double fun(int n)
{
double s=0.0;
int m=1;
while(m<n)
{
if ((m%5==0)&&(m%11==0))
{
s+=m;
}
m++;
}
s=sqrt(s);
return s;
}本回答被提问者采纳
第2个回答  2008-07-27
double fun(int n)
{
double s=0.0;
int m=1;
while (0<m&&m<n)
{
if ((m%5==0)&&(m%11==0))
{
s+=m;
m++;
}
m++;
}
s=sqrt(s);
return s;
}
相似回答
大家正在搜