2023年湖北省专升本C语言程序设计大题真题解析(武汉东湖学院)

        2023年湖北省的专升本考试已于5月7日举行,有很多小伙伴希望看看自己是否作对,也有很多学弟学妹想要看看题目到底难不难,那么我们今天就来看一道真题。

        题目:

        求5的阶乘。这一题来自湖北省的一所民办院校,一起来做做看吧。

#include<stdio.h>
//使用递归函数,来求阶乘是最简单的一种方法,这里定义的fun函数写在主函数之上就不用再在主函数中声明了
int fun(int x){
    /*递归函数的思想是给它一个数,让它按照某种规律找到最底层的答案,然后再将最底层的答案往上回溯
    每回溯一层就得到一个新答案。直到回溯到最开始的那一层得到我们所需要的答案。*/

    int f;  //定义一个变量f用来作为阶乘的返回值

    if(x < 0){  //当x小于0的时候,x的阶乘是没有结果的
        printf("x is less than zero,it hasn't factorial");
    }else if(x == 0 || x == 1){     //当x=0或者x=1的时候,x的阶乘是1
        f = 1;
    }else{      /*当x>1的时候,我们就是用递归函数,即该函数自己调用自己,因为我们上面说到1的阶乘等于1,那么当它递归到1的时候,
                它就拿到了最底层的阶乘的那个答案,此时它开始往上回溯,回溯到2的时候就等于2*1,回溯到3的时候就等于3*(2*1)回溯
                到4的时候就等于4*(3*(2*1)),回溯到5的时候就等于5*(4*(3*(2*!))),也就是说,要想知道5的阶乘是多少,
                就必须知道4的阶乘是多少,要想知道4的阶乘是多少就必须知道3的阶乘,要想知道3的阶乘就必须知道2的阶乘,要想知道2的
                阶乘就必须知道1的阶乘,因此x=1的这个if条件必不可少,这里写了三种情况,实际上是打算写一个求n的阶乘的模板,
                用该模板来求5的阶乘*/
        f = x*fun(x-1);
    }
    return f;
}

int main(){
    int num;
    printf("请输入你想求的阶乘:");
    scanf("%d",&num);

    printf("\n%d的阶乘是%d",num,fun(num));
    return 0;
}

        此题,在谭浩强C语言程序设计第五版中第七章的函数中有详细讲过。它涉及到我们函数中最经典的用法,递归函数。递归函数的思想可以精炼为四个字,“递归”和“回溯”。 弄懂这四个字,那么递归函数也不是什么难事啦。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【程序1】 题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值