c语言题:计算1/2-2/3+3/5-5/8……前20项的和 图片是我的程序,计算结果一直为0,我

c语言题:计算1/2-2/3+3/5-5/8……前20项的和
图片是我的程序,计算结果一直为0,我大概懂问题出在1/2=0,可我已经强制类型转换了,为什么还是错的

c语言中四则运算,如果参与运算的2个数都是整数,那么结果将会是整数(取整),即使你强制转换或者赋值给非整数变量,也是将得到的整数进行转换。所以 (float)1/2相当于 (float)0=0.0
解决这个问题的办法:
对于含有常数整数的,可将其变成浮点数,比如 1/2 变为 1.0/2.0(1.0/2或者1/2.0都可以),1/n变为1.0/n
对于都是变量的,先强制转换或者乘以1.0,然后再参与运算。比如 m/n===>(float)m/n或者m/(float)n或者 1.0*m/n,这里注意 (float)m/n和(float)(m/n)的区别,强制类型转换比四则运算优先级高,所以说先转换在除追问

我晚上试试,答案对就采纳你

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-25
修改:
a = (float)1.0/2;

a = (float)(1.0*m/n)
因为整数除以整数的结果就是整数。
第2个回答  2016-05-25
我觉得问题应该出在最后输出printf中的格式控制符,%d把sum强制转换成了整型。换成%f就行了追问

我晚上去试试,如果是你的答案就采纳

c语言题:计算1\/2-2\/3+3\/5-5\/8……前20项的和 图片是我的程序,计算结果...
c语言中四则运算,如果参与运算的2个数都是整数,那么结果将会是整数(取整),即使你强制转换或者赋值给非整数变量,也是将得到的整数进行转换。所以 (float)1\/2相当于 (float)0=0.0 解决这个问题的办法:对于含有常数整数的,可将其变成浮点数,比如 1\/2 变为 1.0\/2.0(1.0\/2或者1\/2.0都...

c语言程序设计 计算数列1\/2,2\/3,3\/5,5\/8,8\/13,……的前20项和。
include<stdio.h> int main(){ int i;double a=1.0,b=2.0;double s=0;for (i=1;i<=20;i++){ s+=t*a\/b;b=b+a;a=b-a;} printf("%lf\\n",s);return 0;} ———希望答案能帮到你,要是你有疑问可以追问 当然,采纳也是您的美德,谢谢 ...

c语言程序设计 计算数列1\/2,2\/3,3\/5,5\/8,8\/13,??的前20项和。
b=2.0;\\x0d\\x0adouble s=0;\\x0d\\x0afor (i=1;i<=20;i++)\\x0d\\x0a{\\x0d\\x0as+=t*a\/b;\\x0d\\x0ab=b+a;\\x0d\\x0aa=b-a;\\x0d\\x0a}\\x0d\\x0aprintf("%lf\\n",s);\\x0d\\x0areturn 0;\\x0d\\x0a}\\x0d\\x0a———\\x0d\\x0a希望答案...

c语言,求数列1\/2,2\/3,3\/4,4\/5……前20项之和
sum = sum + i\/(float)i+1; } printf("%f", sum); return 1;} 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 3条折叠回答 其他类似问题2017-06-07 c语言2\/1,3\/2,4\/3,5\/4前20项和 2015-06-02 c语言,有一个数列是1\/2,2\/3,3\/4,……,求前n项的... 1 2012-12-23 c语言...

1+1\/2+2\/3+3\/5+5\/8……前20项的和C语言程序
main(){ float numerator = 1, denominator = 2, temp;float total = 0;int num;total += 1;\/\/第一项 for( num=0; num<19; num++ )\/\/后十九项 { total += numerator \/ denominator;temp = denominator;denominator += numerator;numerator = temp;} printf("total = %f\\n",total);...

C语言s=2\/1+3\/2+5\/3+8\/5+...前20项的和
An=An_1+An_2; \/\/数列下一项 分母 S += An_1\/An; \/\/累加 An_2=An_1; An_1=An; \/\/叠代 } return S;} void main(){ int Nx;printf("退出方法: 输入小于0的数 或用CTRL+C\\n");while(1){ printf("\\n请输入累加的前N项数目:");fflush(stdin); \/\/清空键盘输入缓冲区 ...

编写C语言程序:输入一个正整数n,求S=1-1\/2+2\/3-3\/5+5\/8-8\/13+...
include <stdio.h> int main(){ int n,i,a,b;double sum;scanf("%d",&n);for(i=0,a=b=1,sum=0;i<n;++i){ sum+=(double)a\/b*(i%2?-1:1);b=a+b;a=b-a;} printf("%lf",sum);return 0;}

C语言,编写程序,求1+2\/1+3\/2+5\/3+8\/5... 前10项之和
printf("%f",sum);

...序列:2\/1,3\/2,5\/3,8\/5,13\/8,21\/13...求出前20项之和
i=1.0,j=2.0,sum=0.0,temp;int n;for(n=0;n<20;n++){ sum+=j\/i;temp=j; \/\/temp存储前一个分数的分子j j=i+j; \/\/j赋值为此次循环的分子与分母之和,它将作为下次的分子 i=temp; \/\/i赋值为此次循环的分子,它将作为下次的分母 } printf("The SUM is %f\\n",sum);} ...

c语言编程题?
C语言编程题 1.(*)求分数序列:1\/2,2\/3,3\/5,5\/8,8\/13,13\/21... 前20项的和。main(){float i=1,j=2,t=0,s,n,m;for(n=1;n<=20;n++)s=i\/j,m=i,i=j,j=m+j,t=t+s;printf("t=%f",t);} 2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde...

相似回答