2023年湖北省专升本C语言程序设计题真题解析(湖北师范大学)

文章介绍了湖北师范大学专升本考试中一道高难度的C语言程序设计题,要求计算特定数列的和。题目涉及累加求和算法,通过双层for循环实现,并强调了计算机处理浮点数精度问题的影响。解决方案是编写一个求和函数,然后在主函数中调用,最后输出结果。
摘要由CSDN通过智能技术生成

        在今年的湖北师范大学专升本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;
}

 注:在计算机界有一个非常重要的问题,那就是精度问题,不同的操作系统和环境之间计算出来的浮点型精度是不同的,因此我们可能两台型号不同的电脑用同一个编译器同一个编译环境计算出来的数值可能不同,当然这个精度受多方面因素影响,因此我们无法得到唯一标准。

         怎么样,题目确实暗含逻辑,相比之前的一题目确实难了不少,但是只要找准重点也可以解决问题。好了本期内容就结束了,希望可以帮到正在备考的你哟!我们下期见。

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值