赞
踩
在今年的湖北师范大学专升本C语言程序设计题中有这样一道题,算是含金量比较高的一道程序题,难度对于初学者来说排行SS级。
题目:计算1-1/22+1/333+1/4444......
这是一道数列题目,想必大家在高中的时候都备受这种题目的折磨。学长也不例外,因此学了计算机,现在能用计算机解决高中数学里遇到的大部分难题了。
那么我们来看看怎么编写程序吧:
- //累加求和,1-1/22+1/333+......
- #include<stdio.h>
- //定义函数sum用来实现求数列和的方法
- double sum(int x){
- //定义double类型的变量,并赋初值0,用来记录每次累加的和
- double s = 0;
- //外层for循环用来控制分母增长到哪里
- for(int i=1;i<=x;i++){
- //在外层循环内定义double类型的变量t,用来记录分母的增长,并且在每一次内层循环结束以后清0,保证分母的准确性
- double t = 0;
- //内层for循环用来实现分母的增长,变量j=i是因为分母是从个位数开始增长的,分母有多少位,内层循环就需要循环多少次
- for(int j = i;j>0;j--){
- //t变量用来记录分母的增长,当j=1时t=0*10+1,当j=2时,第一次循环t=0*10+2,第二次循环t=2*10+2,以此类推
- t = t * 10 + i;
- }
- //变量s用来记录数列的和,每次内循环结束以后就将t当作分母累加一次,s在循环中并不会被清0,因为它被定义并初始化在外循环以外
- s = s+1/t;
- }
- //返回值返回s-1是因为题目要求1-1/22+1/333+1/4444....但是我们函数在累加的时候将1作为数列的一部分进行了累加,因此我们在返回时要减1
- return s-1;
- }
-
- int main(){
- //定义变量n,用来接收用户想要求的数列,它代表了该数列最后一个分数的分母有多少位
- int n;
- //从键盘上为n获取一个值
- scanf("%d",&n);
- //打印这个数列的结果,sum(n)是在调用函数sum最终得到的值是从函数返回的s的值,1-sum(n)是因为题目要求1减去后面所有分数的和
- printf("%lf",1 - sum(n));
- return 0;
- }
注:在计算机界有一个非常重要的问题,那就是精度问题,不同的操作系统和环境之间计算出来的浮点型精度是不同的,因此我们可能两台型号不同的电脑用同一个编译器同一个编译环境计算出来的数值可能不同,当然这个精度受多方面因素影响,因此我们无法得到唯一标准。
怎么样,题目确实暗含逻辑,相比之前的一题目确实难了不少,但是只要找准重点也可以解决问题。好了本期内容就结束了,希望可以帮到正在备考的你哟!我们下期见。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。