我用C语言写一个程序 但是求不出相应的结果 程序可以运行 但结果不对,请各位高手帮帮忙啊

#include<stdio.h>
#include<math.h>
int main(void)
{int flag;
double epx,s,item,denomination;
printf("Enter a epx:\n");
scanf("%lf",&epx);
item=0;flag=1;denomination=1;
while(fabs(item)<epx){
item=flag*1.0/denomination;
s=s+item;
flag=-flag;
denomination=denomination+3;
}
printf("s=%.2f\n",s);
return 0;
}

没看明白你到底想计算什么,
#include<stdio.h>
#include<math.h>
int main(void)
{int flag;
double epx,s,item,denomination;
printf("Enter a epx:\n");
scanf("%lf",&epx);
item=0;flag=1;denomination=1; //这里都赋初始值了
while(fabs(item)<epx){
item=flag*1.0/denomination; // item=1*1.0/1==1,这是item最大的值了,循环后他变成0,因 为flag=0
s=s+item; // s=0+1==1
flag=-flag; //flag=0
denomination=denomination+3;
}
printf("s=%.2f\n",s);
return 0;
}
很奇怪你这程序能得到结果,应该是死循环才对。。。追问

您好啊 ,这样怎么会是死循环呢,denomination=1 但是循环条件是item啊 item=flag*1.0/denomination;item这时候是最小的 啊 ;程序的循环条件是item小于一个实数epx啊;
所以说这并不是一个死循环。

追答

denomination=denomination+3,这个数每次自加3,item=flag*1.0/denomination;意思就是denomination越来越大,flag只变正负(刚开始把=-看反了,晕),item=1-1/4+1/7-1/10+1/13....

追问

的确是求这个算式的结果,不过为什么会结果不对呢?

追答

这样的结果是item<1,你给epx一个大于1的值会无限循环,所以我奇怪你怎么能得到结果的,循环判断的条件不对。。。
还不如直接在循环内加个次数,比如100次,反正你要求的也不是精确数字。。。

追问

您 好 item的值 我取的是0.000001 因为我是用double来声明item的,所以所 这样是可以作为判断循环的条件的

追答

可以这样改下
#include
#include
int main(void)
{int flag,n;
double epx,s,item,denomination;
printf("Enter a epx:\n");
scanf("%lf",&epx);
item=0;flag=1;denomination=1;n=0;s=0
while(n<epx){
item=flag*1.0/denomination;
s=s+item;
flag=-flag;
n++;
denomination=denomination+3;
}
printf("s=%.2f\n",s);
return 0;
}

然后把EPX输入的值定为100或者1000,这样简便,你那item的值啥时候到0.000001也不知道,为什么不用for做循环,比while不是要方便些。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-13
你的 s 没有初始化,所以在运算时系统随机赋了一个值,所以运算结果也出错。追问

我听你的 把s=0;写上去 但结果 好像永远都是1 这是为什么啊 ··求不出对应的结果

追答

你看到第一次循环进去后是不是item变成1了,你输入的epx应该是小于1的吧,不然会出现死循环,那么循环运行一次后不满足条件退出了,这样结果就是s的值为1 了。

第2个回答  2012-03-19
你写的一时间都看不懂,麻烦以后后面加注释
相似回答