C问题。给我提意见吧。
/* 题:2/1 + 3/2 + 5/3 + 8/5 + 13/8 +21/13………… * TC2编译器通过。/
/*规律:第三个数的分母等于前两个分母之和,第四个数的分母等于第二分母+第三分母…………
分子也是如此,等于前两个分子之和。*/
main()
{
float frac1=1, frac2=2, sum=0, i;/* frac 分数 */
for (i=0; i <10; i++)
{
sum += frac2/frac1;
frac1 = frac1+frac2;
sum += frac1/frac2;
frac2 = frac1+frac2;
}
printf("sum=%f",sum);
}
/* 为了测试能否输出 2/1,3/2,5/3,8/5,13/8,21/13………………,写了以下的程序。请先运行下面的程序。 */
/*
main()
{
float frac1=1, frac2=2, i;
for (i=0; i <10; i++)
{
printf("%4.0f\\%-4.0f\n",frac2,frac1);
frac1 = frac1+frac2;
printf("%4.0f\\%-4.0f\n",frac1,frac2);
frac2 = frac1+frac2;
}
}
*/
问题点数:20、回复次数:10Top
1 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-11 20:06:20 得分 0
对了。i本来应该是int型。Top
2 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-11 20:08:50 得分 0
这是谭浩强先生的C程序设计第二版第六章第八个题。我正在学C。
题,求出前20项之和。
上面我忘记说了。sorryTop
3 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-11 20:17:32 得分 0
upTop
4 楼spark_li(晕忽忽(恶人谷:通讯连长))回复于 2002-05-11 20:41:12 得分 20
#include <stdio.h>
void main()
{
int i,j,tmp,cnt;
float sum=0.00;
i=1;
j=2;
for (cnt=0;cnt<20;cnt++)
{
printf("%d/%d=%f\n",j,i,(double)j/i);
sum=sum+(double)j/i;
tmp=j;
j=j+i;
i=tmp;
}
printf("sum= %f\n",sum);
}
Top
5 楼fly_1108(V客)回复于 2002-05-11 20:45:41 得分 0
你的程序功能是实现了,但不简洁,有些地方可以更简明, 删去两个步骤。可以吗?
Top
6 楼eduhf_123(经历)回复于 2002-05-11 22:38:02 得分 0
void main(void)
{
int i;
float s=0;
int shulie(int tmp);
for(i=1;i<=20;++i)
{
s+=(shulie(i+1)/shulie(i));
}
printf("The sum is %f",s);
}
int shulie(int tmp)
{
int i, t1=1,t2=0,t3=0;
for(i=1;i<=tmp;++i)
{
t3=t1+t2;
t1=t2;
t2=t3;
}
return(t3);
}Top
7 楼spark_li(晕忽忽(恶人谷:通讯连长))回复于 2002-05-11 22:50:53 得分 0
谁还有更简洁的么?Top
8 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-12 13:22:24 得分 0
好像下面那几位的更复杂。而且更难读。
Top
9 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-12 13:24:18 得分 0
我写的只有十二行。而且计算部分只有四行。
sum += frac2/frac1;
frac1 = frac1+frac2;
sum += frac1/frac2;
frac2 = frac1+frac2;
Top
10 楼Bigstorns(图们江计算机程序编制小组)回复于 2002-05-12 13:25:47 得分 0
下面两个好像不能删除。Top




