编写程序,先定义一个函数fac,用递归方法计算整数n的阶乘;然后在主函数中定义并输入要计算阶乘的整数值,最后调用fac函数计算阶乘并将计算结果在屏幕上输出。

题目

编写程序,先定义一个函数fac,用递归方法计算整数n的阶乘;然后在主函数中定义并输入要计算阶乘的整数值,最后调用fac函数计算阶乘并将计算结果在屏幕上输出。


相似考题
参考答案和解析
A
更多“编写程序,先定义一个函数fac,用递归方法计算整数n的阶乘;然后在主函数中定义并输入要计算阶乘的整数值,最后调用fac函数计算阶乘并将计算结果在屏幕上输出。”相关问题
  • 第1题:

    请补充函数fun(),函数fun()的功能是求7的阶乘。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<stdio.h>

    long fun(int n)

    {

    if(【 】)

    return(n*fun(【 】);

    else if(【 】)

    return 1;

    }

    main()

    {

    int k=7;

    printf("%d!=%ld\n", k, fun(k));

    }


    正确答案:n>1 n-1 n==1
    n>1 n-1 n==1 解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。

  • 第2题:

    在函数定义中,存在着调用自身函数的函数调用表达式,则称此函数为递归函数。()

    此题为判断题(对,错)。


    正确答案:√

  • 第3题:

    下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是n!cn*(n-1)*...*2*1)

    unsigned fact(unsigned n)

    {

    if (n<=1)

    return 1;

    return 【 】;

    }


    正确答案:n*fact(n-1)或者fact(n-1)*n或者n*fact(-1+n)或者fact(-1+n)*n
    n*fact(n-1)或者fact(n-1)*n或者n*fact(-1+n)或者fact(-1+n)*n 解析:递归的使用。

  • 第4题:

    设有一个递归算法如下 im fact(int n){ if(n<=0)return 1; else return n * fact(n-1); } 下面正确的叙述是(35)。

    A.计算fact(n)需要执行n次函数调用

    B.计算fact(n)需要执行n+1次函数调用

    C.计算fact(n)需要执行n+2次函数调用

    D.计算fact(n)需要执行n-1次函数调用


    正确答案:B
    解析:连同其他函数调用fact和递归调用次数,计算fact(n)需要执行n+1次函数调用。

  • 第5题:

    请编写函数fun,其功能是:计算并输出

    例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。

    注意:要求n的值大于1但不大于100。

    部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是对题干中给出的多项式的求解。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

  • 第6题:

    编写程序,计算10的阶乘并输出运算结果。


    答案:public class a{public static void main(String[] args){int i,s=1;for(i=1;i<=10;i++){s=s*i;}System.out.println("10的阶乘是"+s);}}

  • 第7题:

    关于下面函数,哪一个是错误描述?n为整数deffactorial(n):ifn<=0:returnifn==1:return1returnn*factorial(n-1)

    A.求整数n的阶乘

    B.factorial(5)是函数调用

    C.是递归函数

    D.求任意两个数值n和n-1的乘积


    正确答案:D

  • 第8题:

    编写PL/SQL块,用for循环计算20的阶乘。


    正确答案:declare   r number; begin   r := 1;
    for i in 1 .. 20 loop     r := r * i;   end loop; 
      dbms_output.put_line(r); end; 

  • 第9题:

    下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是n!=n*(n-1)*...*2*1)

    unsigned fact (unsigned n)

    {

    if(n<=1)

    retum 1;

    return【 】;

    }


    正确答案:n*fact (n-1)
    n*fact (n-1) 解析:本题考核递归函数。一般递归函数由递归出口和递归体两部分组成。递归出口给出了递归终止的条件;递归体给出了递归的方式。题中程序给出了递归出口,但是没有给出递归体,由阶乘的定义可知其递归体应该为n*fact (n-1)。

  • 第10题:

    要求编写一个主函数,计算并输出12+22+...+n2值,其中n值由键盘输入。


  • 第11题:

    自定义函数fact的功能是计算k的阶乘,函数原型可以写作“floatfact(int)”。按照以下各小题的要求写出相应的函数原型。 ⑴自定义函数f1的功能是计算平面上任意两点之间的距离。 ⑵自定义函数swap的功能是交换调用函数中两个float类型实参变量的值。


    正确答案:(1)floatf1(float,float,float,float)
    (2)voidswap(float*,float*)或voidswap(float&,float&)

  • 第12题:

    问答题
    请补充fun函数,该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数在主函数中输入。
      例如:

    正确答案:

    ①int a[][N]
    ②s/(n*n)
    ③sqrt(f)
    解析:
    根据题目中的方差公式,先要计算矩阵元素的平均值,再求矩阵元素与平均值差的平方的平均值,最后调用库函数求方差。
      填空1:根据函数中各变量的使用情况及实参的类型,这里应该是对二维数组a的定义,因为二维数组做形参,可以省略第一维的长度,但不能省略第二维的长度,所以此处应填int a[][N]。
      填空2:这里求矩阵元素的平均值,注意元素的个数应该是n*n。
      填空3:此处应该调用库函数sqrt()求平方根。

  • 第13题:

    在C语言的函数定义过程中,如果函数finA调用了函数funB,函数funB又调用了函数funA,则()。

    A.称为函数的直接递归

    B.称为函数的间接递归

    C.称为函数的递归定义

    D.C语言中不允许这样的递归形式


    正确答案:B

  • 第14题:

    下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include <stdio.h>

    double fun(int n)

    {

    double result=l.0;

    whil (n>l&&n<170)

    /**************found********************/

    result*=--n;

    /**************found********************/

    return;

    main()

    {int. n;

    clrscr();

    printf("Enter an integer: ");

    scanf("%d",&n);

    printf("\n\n%d!=%lg\n\n ",n, fun(n));

    }


    正确答案:(1)错误:result*=--n; 正确:result*=n--; (2)错误:return; 正确:return result;
    (1)错误:result*=--n; 正确:result*=n--; (2)错误:return; 正确:return result; 解析:该题采用循环语句计算n的阶乘。当n大于1且小于170时,令result与n相乘,同时n自动减1,循环至n=2(n=1时无需相乘):注意:o和1的阶乘都等于1,可用条件语句和循环语句实现上述功能。

  • 第15题:

    有如下递归函数:

    int Fun(int n){

    if(n<=1) return 1;

    ______

    }

    请补充完整,使得函数Fun能够正确计算形参n的阶乘。


    正确答案:else return n*Fun(n-1);
    else return n*Fun(n-1); 解析:此题考查的是递归函数。函数Fun中的参数n小于2时,Fun函数返回1,其余返回值为n*Fun(n-1)。

  • 第16题:

    请编写函数fun,其功能是:计算并输出下列多项式的值:

    例如,在主函数中从键盘给n输入50后,输出为:s=1.718282。

    注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。

  • 第17题:

    请补充fun()函数,fun()函数的功能是求n的阶乘。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。 试题程序:


    正确答案:
    【1】n>1或1<n【2】n-1【3】1或11或lL
    【解析】此题应用的是递归算法,因为10!=1091,91=98!,8!=87!…依此类推,而1!=1,2!=21!=2,3!=32!=6…,依此可以推出101,递推算法表示为:n!=1(n=1或n=0)n!=11*(n=1)(n>1)

  • 第18题:

    一个C程序由函数A、B、C和函数P构成,在函数A中分别调用了函数B和函数C,在函数B中调用了函数A,且在函数P中也调用了函数A,则可以说( )

    A.函数B中调用的函数A是函数A的间接递归调用

    B.函数A被函数B调用是函数A间接递归调用

    C.函数P直接递归调用了函数A

    D.函数P中调用的函数A是函数P的嵌套


    正确答案:D

  • 第19题:

    设n的初始值为正整数,设计一个递归算去如下: int fact (int n) { if (n<=0) return l; else return (n*fact (n-l)) ; 以下叙述中正确的是(49) 。

    A.计算fact(n)需要执行n次函数调用

    B.计算fact(n)需要执行n+l次函数调用

    C.计算fact(n)需要执行n+2次函数调用

    D.计算fact(n)需要执行n-l次函娄[调用


    正确答案:B
    本题考查函数递归调用方面的相关知识。递归法是描述算法的一种强有力的方法,其思想是:将N=n时不能直接求解的问题,设法递归(压栈)转化为求n-l,n-2,…的问题一直到N=O或1的初始情况,由于初始情况的解可以给出或方便得到,因此,开始层层退栈得到N=2,3,…,n时的解,直到得到最终结果。本题中,主程序调用fact(n)称为外部调用,其他调用称为内部调用,直到调用fact(0)为止。fact(n)调用fact(n-l),fact(n-l)调用fac(n-2),…,fact(l)调用fact(0),内部调用n次,外部调用一次,共n+l次。

  • 第20题:

    下面是通过建立计算阶乘的自定义函数计算组合C(M,N)一M!/(N!*(M—N))!)的值,其中的M,N通过键盘输入。请在( )处填上正确的语句。


    正确答案:
    I=I+1【解析】I的值应该随选环而进行增1运算。

  • 第21题:

    设n的初值为正整数,设计一个递归算法如下:int fact(int n){if(n<=0)return 1;else return(n*fact(n-1));}以下叙述中,正确的是______。

    A.计算fact(n)需要执行n+2次函数调用
    B.计算fact(n)需要执行n+1次函数调用
    C.计算fact(n)需要执行n次函数调用
    D.计算fact(n)需要执行n-1次函数调用

    答案:B
    解析:
    本题考查函数递归调用方面的相关知识。递归法是描述算法的一种强有力的方法,其思想是:将N=n时不能得出解的问题,设法递归(压栈)转化为求n-1,n-2,…的问题,一直到N=0或1的初始情况,由于初始情况的解可以给出,因此,开始层层退栈得到N=2,3,…,n时的解,得到最终结果。本题中,主程序调用fact(n)称为外部调用,其他调用称为内部调用,直到调用fact(0)为止。fact(n)调用fact(n-1),fact(n-1)调用fact(n-2)……fact(1)调用fact(0),内部调用n次,外部调用一次,共n+1次。

  • 第22题:

    编程:计算6的阶乘


    正确答案: #include "stdio.h"
    main()
    {int i,sum;
    i=1;sum=1;
    while(i++<6)sum*=i;printf("%d",sum);
    printf("/n");
    }

  • 第23题:

    关于递归定义的函数,下列说法正确的是()

    • A、递归定义的函数一定是“递归计算”的
    • B、递归定义的函数一定是“迭代计算”的
    • C、有些递归定义的函数可以“迭代计算”,有些递归定义的函数则必须“递归计算”
    • D、凡是可以“迭代计算”的函数,一定可以“递归计算”,凡是可以“递归计算”的函数,也一定可以“迭代计算”

    正确答案:C

  • 第24题:

    单选题
    关于递归定义的函数,下列说法正确的是()
    A

    递归定义的函数一定是“递归计算”的

    B

    递归定义的函数一定是“迭代计算”的

    C

    有些递归定义的函数可以“迭代计算”,有些递归定义的函数则必须“递归计算”

    D

    凡是可以“迭代计算”的函数,一定可以“递归计算”,凡是可以“递归计算”的函数,也一定可以“迭代计算”


    正确答案: C
    解析: 暂无解析