1.1.1 整数求和 1.1.2 实数求和 1.1.3 舍罕王的失算
1.1有规律数据求和 常见的数据求和分为对一组有规律数据的求和与对若干个无规律的离散数据求和两种。 有规律的一组数据通常可以写出它的第i项的通项式f(i),在设置的求和i循环中,使用赋值语句s=s+f(i),把f(i)累加到s中,即可简便实现求和。
1.1.1 整数求和 求:s=1.2.3+3.4.5+...+99.100.101 易知通项f(i)=i*(i+1)*(i+2),i=1,3,...,99。于是可简单地由以下程序实现求和: #include<stdio.h> void main() { int i,s; s=0; for(i=1;i<=99;i+=2) s=s+i*(i+1)*(i+2); printf("1*2*3+3*4*5+...+99*100*101=%d",s); } 程序运行结果: 1*2*3+3*4*5+...+99*100*101=13002450
注:对于这一求和问题,可把通项式改为f(i)=(i-1)*i(i+1), i=2,4,...,100。 于是,求和程序可以改写为: #include<stdio.h> void main() { int i,s; s=0; for(i=2;i<=100;i+=2) s=s+(i-1)*i*(i+1); printf("1*2*3+3*4*5+...+99*100*101=%d",s); } 运行结果与上完全相同。 可见,求解一个问题,程序设计是灵活的,是可以变通的。程序设计的变通比较是提高程序设计能力的一个有效办法。
----------------------------------------------------------
1.1.2 实数求和 求和:
显然,第i项的通项公式为SQR(i+1)/i (i=1,2,...n)。于是在i循环中把该通项表达式累加到和变量s即可完成求和。 程序代码如下: /*---求和s=SQR(2)+SQR(3)/2+...+SQR(n+1)/n---*/ #include<stdio.h> #include<math.h> void main() { int i,n; double s=0; printf("Enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) s=s+sqrt(i+1)/i; printf("s=%f",s); } 程序运行结果如下: Enter n: 100 s=19.673945
-------------------------------------------------
1.1.3 舍罕王的失算 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8X8共64格的象棋盘说:陛下,请您赐给我一些麦子吧。就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一位,依此放完棋盘上64格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。 请问,国王能兑现他的许诺吗?共要多少麦子赏赐他的宰相?合多少立方米?(1立方米麦子约1.42e8粒) 算法分析: 这是一个典型的等比数列求和的问题。 第1格1粒,第2格2粒,第3格4=22粒,...,第i格为2i-1粒,于是总粒数为: s=1+2+22+23+...+263 设置求和i循环,把每一项的通项2i-1(或由t=t*2得到的累乘量t)累加到和变量s中,即可实现该等比数列求和。 程序代码如下: #include<stdio.h> void main() { double t=1,s=1; int i; for(i=;i<=63;i++) { t=t*2; s=s+t; } printf("总麦粒数为:%f\n",s); printf("折合体积为%f立方米\n",s/1.42e8); }
视频教程列表
文章教程搜索
C语言程序设计推荐教程
C语言程序设计热门教程
|