任务28:函数的递归调用 《编程语言-C语言》45分钟专题训练

| 2份
| 29页
| 98人阅读
| 1人下载

内容正文:

湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。 《编程语言—C语言》 项目五: 函数 第28卷: 函数的递归调用 时间:45分钟 总分:100分 班级___________ 姓名__________ 学号__________ 成绩________ 一、选择题(共23小题,每小题2分,共46分) 1.下列有关递归函数的叙述中,不正确的一项是( ) A.C语言允许直接递归调用和间接递归调用 B.递归函数通常有出口结束递归 C.递归函数的效率一定比功能等价的非递归函数效率低 D.递归函数通常有书写简单和形式直观的优点 2.下列叙述中,正确的一项是( ) A.简单递归不需要明确结束递归的条件 B.任何情况下都不能用函数名作为实参 C.函数的递归调用不需要额外开销,所有效率极高 D.函数既可以直接调用自己,也可以间接调用自己 3.下列程序的功能是求n!,最适合填入第【1】空的内容是。( ) int fun(int n) {if(n==0||n==1) return 【1】; return【2】;} main() {int n; scanf("%d",&n); printf("%d",fun(n)); getch();} A.1 B.0 C.2 D.-1 4. 列程序的功能是求n!,最适合填入第【2】空的内容是。( ) int fun(int n) {if(【1】) return 1; return【2】;} main() {int n; scanf("%d",&n); printf("%d",fun(n)); getch();} A.B.C.D.n==0||n==1 A.fun(n-1) B.fun(n-1)*n C.fun(n)*n D.fun(n+1)*n 5.下列程序的功能是打印杨辉三角形的前10行,请你为第【1】空,选择合适的内容。( ) int fun(int x,int y) {if(x==0||y==0||x==y) return 1; return 【1】+【2】;} main() {int i,j; for(i=0;i<10;i++,printf(" ")) for(j=0;j<=i;j++) printf("%5d",fun(i,j));getch();} A.fun(x-1,y) B.fun(x--,y) C.fun(x,y) D.fun(x,y-1) 6.下列程序的功能是打印杨辉三角形的前10行,请你为第【2】空,选择合适的内容。( ) int fun(int x,int y) {if(x==0||y==0||x==y) return 1; return 【1】+【2】;} main() {int i,j; for(i=0;i<10;i++,printf(" ")) for(j=0;j<=i;j++) printf("%5d",fun(i,j));getch();} A.fun(x,y) B.fun(x++,y++) C.fun(x-1,y) D.fun(x-1,y-1) 7.以下程序的功能是用递归法计算5位学生的年龄,已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄,请你为第【1】空选择合适的内容。( ) int age(int n) { int c; if(【1】) c=10; else c=【2】; return(c);} main( ) { int n=5; printf("age:%d ",age(n));getch();} A.n==1 B.n==0 C.n!=0 D.n!=1 8.以下程序的功能是用递归法计算5位学生的年龄,已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄,请你为第【2】空选择合适的内容。( ) int age(int n) { int c; if(【1】) c=10; else c=【2】; return(c);} main( ) { int n=5; printf("age:%d ",age(n));getch();} A.age(n-1) B.age(n)+2 C.age(n-2)+2 D.age(n-1)+2 9.执行以下程序段的输出结果是( ) void fun(int a) {if(a%10) fun(a/10); printf("%d",a%10);} main() {int a=10311; fun(a);getch();} A.10311 B.0311 C.1031 D.1311 10.执行以下程序段的输出结果是( ) void fun(int a) {printf("%d",a%10); if(a/10) fun(a/10);} main() {int a=12345; fun(a); getch();} A.12345 B.12453 C.54321 D.54322 11.执行以下程序段的输出结果是( ) int fun(int n) {if(n==1||n==2) return 1; return fun(n-1)+fun(n-2);} main() {int i; for(i=1;i<=6;i++) printf("%d ",fun(i));getch();} A.1 1 2 3 5 8 B.1 2 3 5 8 C.1 1 3 5 8 D.1 1 3 4 7 11 12.执行以下程序段的输出结果是( ) int in(char a[ ]) {if(a[0]=='\0') return 0; in(&a[1]); printf("%c",a[0]);} main() {char s[10]="hello"; in(s);getch();} A.hello B.heoll C.hlloe D.olleh 13.执行以下程序段的输出结果是( ) int fun(int a,int b) {if(b==0) return a; else return(fun(--a,--b));} main() {printf("%d",fun(4,2)); getch();} A.1 B.2 C.3 D.4 14.执行以下程序段的输出结果是( ) int fun(int x) {int p; if(x==0||x==1) return 3; p=x-fun(x-2); return p;} main() {printf("%d",fun(7));getch();} A.0 B.2 C.3 D.7 15.执行以下程序段时输入:1234<回车>,则输出结果是( ) void getput() {char ch; ch=getchar(); if(ch!=' ') getput(); putchar(ch);} main() {getput(); printf(" ");getch();} A.1111 B.1234 C.4321 D.4444 16.执行以下程序段的输出结果是( ) void fun(int n) {int i; if((i=n/10)!=0) fun(i); putchar (n%10+'0');} main() {fun(256);getch();} A.52 B.256 C.652 D.2560 17.执行以下程序段的输出结果是( ) void fun(int x) {if(x/2>1) fun(x/2); printf("%d",x);} main() {fun(7); printf(" ");getch();} A.37 B.36 C.73 D.137 18.若有以下函数定义,执行调用语句:n=fun(3);,则函数fun()总共被调用的次数是( ) int fun(int k) {if(k<1) return 0; else if(k==1) return 1; else return fun(k-1)+1;} A.2 B.3 C.4 D.5 19.执行以下程序段的输出结果是( ) void convert(char ch) {if(ch<'D') convert(ch+1); printf("%c",ch);} main() {convert('A'); printf(" ");getch();} A.ABCDDCBA B.ABCD C.DCBA D.A 20.执行以下程序段的输出结果是( ) void fun(char c) {if(c>'x') fun(c-1); printf("%c",c);} main() {fun('z'); getch();} A.xyz B.zyx C.wxyz D.zyxw 21.执行以下程序段的输出结果是( ) int fun(int n) {if(n) return fun(n-1)+n; else return 0;} main() {printf("%d",fun(3));getch();} A.4 B.5 C.6 D.7 22.执行以下程序段的输出结果是( ) int fun(int n) {if(n==1) return 1; else return (n+fun(n-1));} main() {int x=10; x=fun(x); printf("%d",x); getch();} A.45 B.54 C.55 D.65 23.执行以下程序段的输出结果是( ) long fib(int n) {if(n>2) return(fib(n-1)+fib(n-2)); else return(2);} main() { printf("%ld ",fib(5)); getch();} A.10 B.5 C.0 D.12 二、程序运行结果题(本题共7小题,每题3分,共21分) 24.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int sum(int array[ ],int len) {if(len==0) return array[0]; else return array[0]+sum(array+1,len-1);} main() {int array[5]={1,2,3,4,5}; int res=sum(array,4); printf("%d",res);getch();} 25.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int x) {int y; if(x==0||x==1) return 3; y=x*x-f(x-1); return y;} main() {int z;z=f(4); printf("%d",z);getch();} 26.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int t[ ],int n); main() {int a[4]={1,2,3,4},s; s=f(a,4); printf("%d ",s); getch();} int f(int t[ ],int n) {if(n>0) return t[n-1]+f(t,n-1); else return 0;} 27.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int a[ ],int n) {if(n>1) {int t; t=f(a,n-1); return t>a[n-1]?t:a[n-1];} else return a[0];} main() {int a[ ]={8,2,9,1,3,6,4,7,5,12,13,21}; printf("%d",f(a,11));getch();} 28.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int x[ ],int n) {if(n>1) {f(&x[1],n-1); printf("%d,",x[0]);} else printf("%d,",x[0]);} main() {int z[6]={1,2,3,4,5,6}; f(z,6); printf(" ");getch();} 29.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> main() { printf("%d ",fact(5)); fact(-5);getch();} int fact(int value) { int f; if(value<0) { printf("Arg error "); return(-1);} else if(value==1||value==0) f=1; else f=value*fact(value-1)+1; printf("%d ",f); return f;} 30.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int n) {if(n==1) return 1; else return f(n-1)+1;} main() {int i,j=0; for(i=1;i<3;i++) j+=f(i); printf("%d",j); getch();} 三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分) 31.下列程序的功能是:使用递归函数的方法求以下多项式的值,在住函数中输入x和n的值,并输出结果。程序中一共有3处错误,请改正。 L1 #include <stdio.h> L2 #include<conio.h> L3 float p(int n,int x) L4 {float f; L5 if(n==0) L6 f=1.0; L7 else if(n=1) L8 f=x; L9 else f=((2*n-1)*x*p((n-1),x)-(n)*p((n),x))/n; L10 return f-1;} L11 main() L12 {int n,x; L13 printf("请输入n与x的值:"); L14 scanf("%d%d",&n,&x); L15 printf("结果为:%6.2f ",p(n,x)); L16 getch();} 四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分) 32.以下程序的功能是使用递归法求某数a的平方根,求平方根的迭代公式如下所示。请填空。 #include <math.h> #include <stdio.h> #include<conio.h> double mysqrt( double a,double x0) { double x1,y; x1=【1】; if(【2】>0.00001) y=mysqrt(【3】); else y=x1; return 【4】;} main( ) {double x; printf("Enter x:"); scanf("%lf",&x); printf("The sqrt of %f= %f ",x,mysqrt(x,1.0)); getch();} 33.下列程序的功能是求Fibonacci序列的第n项的值。请填空。 #include <stdio.h> #include<conio.h> int cnt=0; int fib(int n) {【1】; if(n<=2) return【2】; else return (【3】+【4】); } main() {int n,result; printf("输入一个整数:"); scanf("%d",&n); result=fib(n); printf("FIB(%d)=%d ",n,result); printf("递归次数=%d",cnt); getch();} 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$ 湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。 《编程语言—C语言》 项目五: 函数 第28卷: 函数的递归调用 时间:45分钟 总分:100分 班级___________ 姓名__________ 学号__________ 成绩________ 一、选择题(共23小题,每小题2分,共46分) 1.下列有关递归函数的叙述中,不正确的一项是( ) A.C语言允许直接递归调用和间接递归调用 B.递归函数通常有出口结束递归 C.递归函数的效率一定比功能等价的非递归函数效率低 D.递归函数通常有书写简单和形式直观的优点 【答案】C 2.下列叙述中,正确的一项是( ) A.简单递归不需要明确结束递归的条件 B.任何情况下都不能用函数名作为实参 C.函数的递归调用不需要额外开销,所有效率极高 D.函数既可以直接调用自己,也可以间接调用自己 【答案】D 3.下列程序的功能是求n!,最适合填入第【1】空的内容是。( ) int fun(int n) {if(n==0||n==1) return 【1】; return【2】;} main() {int n; scanf("%d",&n); printf("%d",fun(n)); getch();} A.1 B.0 C.2 D.-1 【答案】A 4. 列程序的功能是求n!,最适合填入第【2】空的内容是。( ) int fun(int n) {if(【1】) return 1; return【2】;} main() {int n; scanf("%d",&n); printf("%d",fun(n)); getch();} A.B.C.D.n==0||n==1 A.fun(n-1) B.fun(n-1)*n C.fun(n)*n D.fun(n+1)*n 【答案】B 5.下列程序的功能是打印杨辉三角形的前10行,请你为第【1】空,选择合适的内容。( ) int fun(int x,int y) {if(x==0||y==0||x==y) return 1; return 【1】+【2】;} main() {int i,j; for(i=0;i<10;i++,printf(" ")) for(j=0;j<=i;j++) printf("%5d",fun(i,j));getch();} A.fun(x-1,y) B.fun(x--,y) C.fun(x,y) D.fun(x,y-1) 【答案】A 6.下列程序的功能是打印杨辉三角形的前10行,请你为第【2】空,选择合适的内容。( ) int fun(int x,int y) {if(x==0||y==0||x==y) return 1; return 【1】+【2】;} main() {int i,j; for(i=0;i<10;i++,printf(" ")) for(j=0;j<=i;j++) printf("%5d",fun(i,j));getch();} A.fun(x,y) B.fun(x++,y++) C.fun(x-1,y) D.fun(x-1,y-1) 【答案】D 7.以下程序的功能是用递归法计算5位学生的年龄,已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄,请你为第【1】空选择合适的内容。( ) int age(int n) { int c; if(【1】) c=10; else c=【2】; return(c);} main( ) { int n=5; printf("age:%d ",age(n));getch();} A.n==1 B.n==0 C.n!=0 D.n!=1 【答案】A 8.以下程序的功能是用递归法计算5位学生的年龄,已知第一位学生年龄最小为10岁,其余学生一个比一个大2岁,求第5位学生的年龄,请你为第【2】空选择合适的内容。( ) int age(int n) { int c; if(【1】) c=10; else c=【2】; return(c);} main( ) { int n=5; printf("age:%d ",age(n));getch();} A.age(n-1) B.age(n)+2 C.age(n-2)+2 D.age(n-1)+2 【答案】D 9.执行以下程序段的输出结果是( ) void fun(int a) {if(a%10) fun(a/10); printf("%d",a%10);} main() {int a=10311; fun(a);getch();} A.10311 B.0311 C.1031 D.1311 【答案】B 10.执行以下程序段的输出结果是( ) void fun(int a) {printf("%d",a%10); if(a/10) fun(a/10);} main() {int a=12345; fun(a); getch();} A.12345 B.12453 C.54321 D.54322 【答案】C 11.执行以下程序段的输出结果是( ) int fun(int n) {if(n==1||n==2) return 1; return fun(n-1)+fun(n-2);} main() {int i; for(i=1;i<=6;i++) printf("%d ",fun(i));getch();} A.1 1 2 3 5 8 B.1 2 3 5 8 C.1 1 3 5 8 D.1 1 3 4 7 11 【答案】A 12.执行以下程序段的输出结果是( ) int in(char a[ ]) {if(a[0]=='\0') return 0; in(&a[1]); printf("%c",a[0]);} main() {char s[10]="hello"; in(s);getch();} A.hello B.heoll C.hlloe D.olleh 【答案】D 13.执行以下程序段的输出结果是( ) int fun(int a,int b) {if(b==0) return a; else return(fun(--a,--b));} main() {printf("%d",fun(4,2)); getch();} A.1 B.2 C.3 D.4 【答案】B 14.执行以下程序段的输出结果是( ) int fun(int x) {int p; if(x==0||x==1) return 3; p=x-fun(x-2); return p;} main() {printf("%d",fun(7));getch();} A.0 B.2 C.3 D.7 【答案】B 15.执行以下程序段时输入:1234<回车>,则输出结果是( ) void getput() {char ch; ch=getchar(); if(ch!=' ') getput(); putchar(ch);} main() {getput(); printf(" ");getch();} A.1111 B.1234 C.4321 D.4444 【答案】C 16.执行以下程序段的输出结果是( ) void fun(int n) {int i; if((i=n/10)!=0) fun(i); putchar (n%10+'0');} main() {fun(256);getch();} A.52 B.256 C.652 D.2560 【答案】B 17.执行以下程序段的输出结果是( ) void fun(int x) {if(x/2>1) fun(x/2); printf("%d",x);} main() {fun(7); printf(" ");getch();} A.37 B.36 C.73 D.137 【答案】A 18.若有以下函数定义,执行调用语句:n=fun(3);,则函数fun()总共被调用的次数是( ) int fun(int k) {if(k<1) return 0; else if(k==1) return 1; else return fun(k-1)+1;} A.2 B.3 C.4 D.5 【答案】B 19.执行以下程序段的输出结果是( ) void convert(char ch) {if(ch<'D') convert(ch+1); printf("%c",ch);} main() {convert('A'); printf(" ");getch();} A.ABCDDCBA B.ABCD C.DCBA D.A 【答案】C 20.执行以下程序段的输出结果是( ) void fun(char c) {if(c>'x') fun(c-1); printf("%c",c);} main() {fun('z'); getch();} A.xyz B.zyx C.wxyz D.zyxw 【答案】A 21.执行以下程序段的输出结果是( ) int fun(int n) {if(n) return fun(n-1)+n; else return 0;} main() {printf("%d",fun(3));getch();} A.4 B.5 C.6 D.7 【答案】C 22.执行以下程序段的输出结果是( ) int fun(int n) {if(n==1) return 1; else return (n+fun(n-1));} main() {int x=10; x=fun(x); printf("%d",x); getch();} A.45 B.54 C.55 D.65 【答案】C 23.执行以下程序段的输出结果是( ) long fib(int n) {if(n>2) return(fib(n-1)+fib(n-2)); else return(2);} main() { printf("%ld ",fib(5)); getch();} A.10 B.5 C.0 D.12 【答案】A 二、程序运行结果题(本题共7小题,每题3分,共21分) 24.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int sum(int array[ ],int len) {if(len==0) return array[0]; else return array[0]+sum(array+1,len-1);} main() {int array[5]={1,2,3,4,5}; int res=sum(array,4); printf("%d",res);getch();} 【答案】15 25.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int x) {int y; if(x==0||x==1) return 3; y=x*x-f(x-1); return y;} main() {int z;z=f(4); printf("%d",z);getch();} 【答案】8 26.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int t[ ],int n); main() {int a[4]={1,2,3,4},s; s=f(a,4); printf("%d ",s); getch();} int f(int t[ ],int n) {if(n>0) return t[n-1]+f(t,n-1); else return 0;} 【答案】10 27.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int a[ ],int n) {if(n>1) {int t; t=f(a,n-1); return t>a[n-1]?t:a[n-1];} else return a[0];} main() {int a[ ]={8,2,9,1,3,6,4,7,5,12,13,21}; printf("%d",f(a,11));getch();} 【答案】13 28.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int x[ ],int n) {if(n>1) {f(&x[1],n-1); printf("%d,",x[0]);} else printf("%d,",x[0]);} main() {int z[6]={1,2,3,4,5,6}; f(z,6); printf(" ");getch();} 【答案】6,5,4,3,2,1, 29.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> main() { printf("%d ",fact(5)); fact(-5);getch();} int fact(int value) { int f; if(value<0) { printf("Arg error "); return(-1);} else if(value==1||value==0) f=1; else f=value*fact(value-1)+1; printf("%d ",f); return f;} 【答案】1 3 10 41 206 206 Arg error 30.以下程序的运行结果是( ) #include <stdio.h> #include<conio.h> int f(int n) {if(n==1) return 1; else return f(n-1)+1;} main() {int i,j=0; for(i=1;i<3;i++) j+=f(i); printf("%d",j); getch();} 【答案】3 三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分) 31.下列程序的功能是:使用递归函数的方法求以下多项式的值,在住函数中输入x和n的值,并输出结果。程序中一共有3处错误,请改正。 L1 #include <stdio.h> L2 #include<conio.h> L3 float p(int n,int x) L4 {float f; L5 if(n==0) L6 f=1.0; L7 else if(n=1) L8 f=x; L9 else f=((2*n-1)*x*p((n-1),x)-(n)*p((n),x))/n; L10 return f-1;} L11 main() L12 {int n,x; L13 printf("请输入n与x的值:"); L14 scanf("%d%d",&n,&x); L15 printf("结果为:%6.2f ",p(n,x)); L16 getch();} 答案: L7 else if(n==1) L9 else f=((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n; L10 return f;} 四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分) 32.以下程序的功能是使用递归法求某数a的平方根,求平方根的迭代公式如下所示。请填空。 #include <math.h> #include <stdio.h> #include<conio.h> double mysqrt( double a,double x0) { double x1,y; x1=【1】; if(【2】>0.00001) y=mysqrt(【3】); else y=x1; return 【4】;} main( ) {double x; printf("Enter x:"); scanf("%lf",&x); printf("The sqrt of %f= %f ",x,mysqrt(x,1.0)); getch();} 答案:①(x0+a/x0)/2.0 ②fabs(x1-x0) ③a,x1 ④y 33.下列程序的功能是求Fibonacci序列的第n项的值。请填空。 #include <stdio.h> #include<conio.h> int cnt=0; int fib(int n) {【1】; if(n<=2) return【2】; else return (【3】+【4】); } main() {int n,result; printf("输入一个整数:"); scanf("%d",&n); result=fib(n); printf("FIB(%d)=%d ",n,result); printf("递归次数=%d",cnt); getch();} 答案:①cnt++ ②1 ③fib(n-1) ④fib(n-2) 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

任务28:函数的递归调用  《编程语言-C语言》45分钟专题训练-第1页
1
任务28:函数的递归调用  《编程语言-C语言》45分钟专题训练-第2页
2
任务28:函数的递归调用  《编程语言-C语言》45分钟专题训练-第3页
3

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。