下面代码实现的功能描述的是 def fact(n): if n==0: return 1 else: return n*fact(n-1) num =eval(input("请输入一个整数:")) print(fact(abs(int(num))))A.接受用户输入的整数n,判断n是否是水仙花数B.接受用户输入的整数n,输出n的阶乘值C.接受用户输入的整数n,判断n是否是完数并输出结论D.接受用户输入的整数n,判断n是否是素数并输出结论

题目

下面代码实现的功能描述的是 def fact(n): if n==0: return 1 else: return n*fact(n-1) num =eval(input("请输入一个整数:")) print(fact(abs(int(num))))

A.接受用户输入的整数n,判断n是否是水仙花数

B.接受用户输入的整数n,输出n的阶乘值

C.接受用户输入的整数n,判断n是否是完数并输出结论

D.接受用户输入的整数n,判断n是否是素数并输出结论


相似考题
参考答案和解析
1
更多“下面代码实现的功能描述的是 def fact(n): if n==0: return 1 else: return n*fact(n-1) num =eval(input("请输入一个整数:")) print(fact(abs(int(num))))”相关问题
  • 第1题:

    下面算法的时间复杂度为(34)。 int f(unsigned int n){ if(n=0||n==1)return 1; else return n*f(n-1); }

    A.O(1)

    B.O(n)

    C.O(n2)

    D.O(n!)


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

  • 第2题:

    有以下程序includeint f(int n){if(n==1)return 1:else return f(n-1)+1;}void mai

    有以下程序 #include<iostream.h> int f(int n) {if(n==1)return 1: else return f(n-1)+1;} void main() {int i,j=0; for(i=1;i<3;i++):j+=f(i); cout<<j;} 程序运行后的输出结果是( )。

    A.4

    B.3

    C.2

    D.1


    正确答案:B

  • 第3题:

    设有一个递归算法如下int fact(intn){//n 大于等于0 if(n<=0)return 1; else return n* fact(n--); }则计算fact(n)需要调用该函数的次数为(30)次。

    A.n

    B.n+1

    C.n+2

    D.n-1


    正确答案:B
    解析:n--为先使用后自减所以调用n-1次时的值为0终止调用

  • 第4题:

    有以下程序includeint f(int n){if(n==1 )return 1;else return f(n-1 )+ 1;}void

    有以下程序#include<iostream.h>int f(int n){if(n==1 )return 1;else return f(n-1 )+ 1;}void main() {int i,j=0;for(i=1 ;i<3;i++) j+=f(i);cout<<j<<end1;}程序运行后的输出结果是( )。

    A.4

    B.3

    C.2

    D.1


    正确答案:B

  • 第5题:

    下列程序的输出结果为( )。 int fun(int n){ if(n==0)return 1; else return n*fun(n-1): return 0; } void main() { eout<<func(4)<<endl;}

    A.1

    B.10

    C.24

    D.11


    正确答案:C
    解析:递归函数求阶乘,4!=24。

  • 第6题:

    已知递归函数f(n)的功能是计算1+2+…+n,且n≥1,应采用的代码段是______。

    A.if n>1 then return 1 else return n+f(n-1)

    B.if n>1 then return 1 else return n+f(n+1)

    C.if n<1 then return 0 else return n+f(n-1)

    D.if n<1 then return 0 else return n+f(n+1)


    正确答案:C
    解析:递归函数的目的是执行一系列调用,一直到达某一点,序列终止。为了保证递归函数正常执行,应该遵守下面的规则:
      (1)每当一个递归函数被调用时,程序首先应该检查其基本的条件是否满足,例如,某个参数的值等于零,如果是这种情形,函数应停止递归。
      (2)每当函数被递归调用时,传递给函数一个或多个参数,应该以某种方式变得“更简单”。即这些参数应该逐渐靠近上述基本条件。例如,一个正整数在每次递归调用时会逐渐变小,以至最终其值能到达零。
      在本题中,f(n)的功能是解决1+2+…+n的累加问题,可用下面的递归公式表示f(n):
                   f(n)=0      (n=0)
                   f(n)=n+f(n-1)  (n1)
      因此可知,f(n)应采用的代码段为:
      if n1
      then return 0
      else return n+f(n-1)。

  • 第7题:

    下面 ______ 是正确的递归函数,它保证对所有的参数能够结束。

    A.int f(int n){ if(n<1) return 1; else return n*f(n+1); }

    B.int f(int n){ if(n>1) return 1; else return n*f(n-1); }

    C.int f(int n){ if(abs(n)<1) return 1; else return n*f(n/2); }

    D.int f(int n){ if(n>1) return 1; else return n*f(n*2); }


    正确答案:C

  • 第8题:

    有以下程序 include int f(iht n) { if(n==1) return 1; else return f(n-1)+

    有以下程序 #include<iostream.h> int f(iht n) { if(n==1) return 1; else return f(n-1)+1;} void main( ) { iht i,j=0; for(i=1;i<3;i++)j+=f(i); cout < < j;} 程序运行后的输出结果是

    A.4

    B.3

    C.2

    D.1


    正确答案:B
    解析:在main函数中,对f(1)和f(2)的值进行了累加。过程如下:f(1)=1f(2)=f(1)+l=2最后,j的值为1+2=3。注意:函数的递归调用需要有一个结束的条件。

  • 第9题:

    阅读以下代码,回答问题:1至问题3 ,将解答填入答题纸的对应栏内。 【代码1】 include<stdio.h > void swap(int x, int y) { int tmp =x; x= y; y= tmp; } int maim() { int a= 3, b= 7; printf("a1= %d b1=%d\n",a,b); Swap( a, b); Printf("a2 = %d b2=%d\n”,a,b); return 0; } 【代码2】 include<stdio.h> define SPACE " //空格字符 Int main() { char str[128] =" Nothing is impossible! "; int i,num =0,wordMark=0; for(i=0;str[i];i++) If(str[i]==SPACE) WordMark=0; else If(wordMark=0){ wordMark=1; num++; } Printf(“%d/n”,num) return 0; } 【代码3】 include<stdio.h> define SPACE " //空格字符 int countStrs(char *); int main() { char str[128] = " Nothing is impossible! "; Printf("%d/n",(1)(str)) return 0; } int countStrs(char *p) { int num=0, wordMark= 0; for(;(2); p++) { If((3)==SPACE) wordMark= 0; else if( !wordMark ) { wordMark = 1; ++num } } return (4) ; }

    【问题1】(4分) 写出代码1运行后的输出结果。 【问题2】(3分) 写出代码2运行后的输出结果。 【问题3】(8分) 代码3的功能与代码2完全相同,请补充3中的空缺,将解答写入答题纸的对应栏内。


    正确答案:1、a1=3  b1=7    a2=3  b2=7
    2、3
    3、
    1) countStrs
    2) p[i]
    3) p[i]
    4) num

  • 第10题:

    有如下程序:includeusing namespace std;long fib(int n){ if(n>2) return(fib(n-1)+

    有如下程序: #include<iostream> using namespace std; long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(n); } void main() { int i; cout<<"请输入一个整数:"; cin>>i;cout<<endl; cout<<fib(i)<<endl; { 当输入4、2时,该程序的输出结果是( )。

    A.5

    B.4

    C.5

    D.6 1 2 2 2


    正确答案:C
    解析:注意递归调用的过程,当输入2作为函数参数时,调用肋()函数直接返回参数值2;当输入参数大于2时有一个递归调用的过程。

  • 第11题:

    阅读以下说明和C语言函数,将解答填入对应栏内。

    【说明】

    下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。

    下面给出的C程序代码中有五个错误,请指出所有的错误。

    【C程序代码】

    01 include <stdio.h>

    02

    03 int main()

    04 {

    05 long n, num;

    06 int i;

    07

    08 do {

    09 printf("请输入一个正整数:");

    10 scanf("%ld", n);

    11 }while(n <= 0);

    12 k = 1;

    13 for (i = 1; n >= 0; i++) {

    14 if (i % 2 = 1) {

    15 num= num+ (n % 10) * k;

    16 k = k * 10;

    17 }

    18 n = n / 10;

    19 }

    20 printf("新数据为: %d \n",num);

    21 return 0;

    22 }


    正确答案:错误1:变量k没有声明(或定义)。 错误2:变量num没有初始化或者num应初始化为0。 错误3:第10行scanf函数参数错或者“scanf("%1d"n);”中的n应该为“&n”;或者n之前应加取地址符号。 错误4:第13行循环条件错或改为“n>0”。 错误5:第14行if语句条件错将“=”改为“==”;或者将“1%2=1”改为“i% 2==1 ”
    错误1:变量k没有声明(或定义)。 错误2:变量num没有初始化,或者num应初始化为0。 错误3:第10行scanf函数参数错,或者“scanf("%1d",n);”中的n应该为“&n”;或者n之前应加取地址符号。 错误4:第13行循环条件错,或改为“n>0”。 错误5:第14行if语句条件错,将“=”改为“==”;或者将“1%2=1”改为“i% 2==1 ” 解析:本题考查程序检错和排错能力。
    程序错误一般分成语法错误和语义错误两种类型,其中语法错误是形式上的错误,语义错误是含义上的错误,编译程序能够发现程序中的所有语法错误。
    语义错误又可分为静态语义错误和动态语义错误,静态语义错误编译时检查,而动态语义错误在程序运行时表现。
    C程序中,常见的错误有:使用的变量没有定义、变量没有赋值初就直接使用、输入输出的数据类型与所用格式说明符不一致、超出数据范围、输入时数据的组织方式与要求不符、误把“=”作为关系运算符“等于”、语句的分号缺少或放置错误、缺少“{}”、符号引用错误,“(、)、[、]”括号不配对、引用数组元素超界等。
    在本题的程序中,使用变量num的语句为“num=num+(n%10)*k;”。由于变量 num没有赋初值,该语句运行的结果导致num的值是不确定的。
    在本题给出的程序中,出现了如下错误。
    (1)使用的变量k没有定义(语法错误,编译程序报告:k是未定义的标识符)。
    (2)变量num没有赋初始值就直接使用(动态语义错误),应将其初始值设为0。由于num是局部变量,使用变量num的语句为“num=num+(n%10)*k”,系统不保证对其进行初始化,导致程序的运行结果不确定。
    (3)第14行,误把“=”作为关系运算符“等于”(语法错误),
    (4)第10行,输入变量时忘记使用地址符号(动态语义错误),运行时变量n不能正确接收输入的数据。
    (5)第13行,循环条件错误,导致无穷循环。
    考生应多上机调试程序,这样就可以熟悉常见的程序错误,从而提高编程水平和效率。

  • 第12题:

    设有一个递归算法如下: int fact(int n) {  //n大于等于0               if(n<=0) return 1;               else return n*fact(n-1);        }  则计算fact(n)需要调用该函数的次数为()

    • A、 n+1
    • B、 n-1
    • C、 n
    • D、 n+2

    正确答案:A

  • 第13题:

    下面是用来计算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 解析:递归的使用。

  • 第14题:

    下面程序的运行结果为( )。 class A{ static int n; public: A(){n=1;} A(int num){n=num;} void print(){cout<<n;} } A::n=0; void main(){ A a,b(2); a.print(); b.pint(); }

    A.12

    B.11

    C.22

    D.21


    正确答案:C
    解析:n是类的静态数据成员,发生静态数据成员的赋值,则所有对象的静态数据成员的值都发生改变。

  • 第15题:

    设有一个递归算法如下 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次函数调用。

  • 第16题:

    有以下程序 include int f(int n) {if(n==1)return1; else return f(n-1)+1} voidm

    有以下程序 #include<iostream.h> int f(int n) {if(n==1)return1; else return f(n-1)+1} voidmain() {int i,j=0; for(i=l i<3;i++)=i+=f(i); cout<<j;} 程序运行后的输出结果是( )。

    A.4

    B.3

    C.2

    D.1


    正确答案:B

  • 第17题:

    能保证对所有的参数能够结束的递归函数是

    A.int f(int n){if(n<1)return 1;else return n*f(n+1);}

    B.int f(int n){if(n>1)return 1;else return n*f(n-1);}

    C.int f(int n){if(abs(n)<1)return 1;else return n*f(n/2);}

    D.int f(int n){if(n>1)return 1;else return n*f(n*2);)


    正确答案:C
    解析:递归函数的两个重要条件是要有结束和递归表达式。选项A、B、D无法结束。根据这两个条件可以进行判断出答案为C。

  • 第18题:

    设有一个递归算法如下: int 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(n)称为外部调用,其他调用为内部调用,直到调用fact(0)为止,fact(n)调用fact(n-1),fact(n-1)调用fact(n-2),…,fact(1)调用fact(0),内部调用n次,外部调用1次,总共n+1次。

  • 第19题:

    下列函数中,哪项是正确的递归函数( )。

    A int Fun(int n)

    {

    if(n<1) return 1;

    else return n*Fun(n+1);

    }

    B) int Fun(ira n)

    {

    if(abs(n)<1) return 1;

    else return n*Fun(n/2);

    }

    C) int Fun(int n)

    {

    if(n>1) return 1;

    else return n*Fun(n*2)1

    }

    D) int Fun(int n)

    {

    if(n>1) return 1;

    else retun n*Fun(n-1);

    }

    A.A

    B.B

    C.C

    D.D


    正确答案:B
    解析:本题考查递归函数这个知识点。递归函数由递归出口和递归体两部分组成:递归出口给出了递归终止的条件;递归体给出了递归的方式。对于选项A,当参数n>=1时,不满足递归调用的结束条件;对于选项C,当参数n=0时,不满足递归调用的结束条件;对于选项D,当参数n:2时,不满足递归调用的结束条件。

  • 第20题:

    递归函数f(n)的功能是计算1+2+…+n,且n≥1,则f(n)的代码段是(49)。

    A.if n>1 then return 1 else return n+f(n-1)

    B.if n>1 then return 1 else return n+f(n+1)

    C.if n>1 then return 0 else return n+f(n+1)

    D.if n<1 then return 0 else return n+f(n-1)


    正确答案:D
    解析:根据题意,当n1时结束递归,函数返回0,否则返回n+f(n-1)进行递归运算。

  • 第21题:

    设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次。

  • 第22题:

    下面是用来计算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)。

  • 第23题:

    设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次。

  • 第24题:

    单选题
    设有一个递归算法如下: int fact(int n) {  //n大于等于0               if(n<=0) return 1;               else return n*fact(n-1);        }  则计算fact(n)需要调用该函数的次数为()
    A

     n+1

    B

     n-1

    C

     n

    D

     n+2


    正确答案: A
    解析: 特殊值法。设n=0,易知仅调用一次fact(n)函数,故选A。