第22练 6.6 函数应用实例(递归函数、应用综合) 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

2026-06-25
| 2份
| 9页
| 44人阅读
| 1人下载

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第22练,内容是6.6 函数应用实例(递归函数、应用综合)。 《编程语言基础——C语言》(第5版)一课一练 第22练 6.6 函数应用实例(递归函数、应用综合) 一、单选题 1. 一个函数直接或间接地调用自身,这种调用方式称为( ) A. 递归调用 B. 嵌套调用 C. 循环调用 D. 回调调用 2. 编写递归函数时,以下哪个要素是必须的( ) A. 函数必须返回void类型 B. 必须包含递归终止条件,防止无限递归 C. 递归调用次数不能超过10次 D. 递归函数不能有形参 3. 设有递归函数 int f(int n) { if(n<=1) return 1; return n * f(n-1); },调用 f(4) 的返回值是( ) A. 4 B. 10 C. 24 D. 120 4. 关于递归与循环(递推)的比较,以下说法正确的是( ) A. 递归一定比循环效率高 B. 循环无法实现递归的功能 C. 递归不需要占用额外的栈空间 D. 递归代码简洁但可能占用较多栈空间,循环效率更高但代码可能较复杂 5. 设有函数 int fib(int n) { if(n==1||n==2) return 1; return fib(n-1)+fib(n-2); },调用 fib(5) 的返回值是( ) A. 3 B. 5 C. 8 D. 13 6. 在main()中调用func1(),func1()中又调用func2(),这种调用方式称为( ) A. 递归调用 B. 循环调用 C. 函数的嵌套调用 D. 函数的并行调用 7. 以下关于C语言函数的描述中,不正确的是( ) A. C语言中允许在函数内部再定义另一个函数 B. 一个C程序可以由多个函数组成,其中有且仅有一个main()函数 C. 函数的返回值通过return语句返回给调用者 D. 被调用的函数可以是库函数,也可以是用户自定义函数 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int f(int n) { if (n <= 1) return 1; else return n * f(n - 1); } main() { printf("%d ", f(5)); } 三、程序填空题 9. 以下程序的功能是:使用递归函数计算x的n次方(n≥0)。请填空。 #include <stdio.h> int power(int x, int n) { if (n == 0) return 1; else return 【1】; } main() { printf("%d ", power(2, 5)); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用递归函数计算1+2+...+n的和。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 int sum(int n) L3 { L4 if (n == 1) L5 return 1; L6 else L7 return n + sum(n); L8 } L9 main() L10 { L11 printf("%d ", sum(10)); L12 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第22练,内容是6.6 函数应用实例(递归函数、应用综合)。 《编程语言基础——C语言》(第5版)一课一练 第22练 6.6 函数应用实例(递归函数、应用综合) 一、单选题 1. 一个函数直接或间接地调用自身,这种调用方式称为( ) A. 递归调用 B. 嵌套调用 C. 循环调用 D. 回调调用 【答案】A 【解析】递归调用是指函数在执行过程中直接或间接地调用自身。递归函数通常包含两个部分:递归终止条件(不再递归的情况)和递归表达式(将问题转化为更小的同类问题)。 2. 编写递归函数时,以下哪个要素是必须的( ) A. 函数必须返回void类型 B. 必须包含递归终止条件,防止无限递归 C. 递归调用次数不能超过10次 D. 递归函数不能有形参 【答案】B 【解析】递归函数必须包含终止条件(边界条件),否则会无限递归直到栈溢出。如求n!的递归中,if(n==1||n==0) return 1; 就是终止条件。没有终止条件的递归函数是不可用的。 3. 设有递归函数 int f(int n) { if(n<=1) return 1; return n * f(n-1); },调用 f(4) 的返回值是( ) A. 4 B. 10 C. 24 D. 120 【答案】C 【解析】这是阶乘的递归实现。f(4)=4*f(3)=4*3*f(2)=4*3*2*f(1)=4*3*2*1=24。递归过程:f(4)→f(3)→f(2)→f(1)遇到终止条件返回1,逐层返回相乘。 4. 关于递归与循环(递推)的比较,以下说法正确的是( ) A. 递归一定比循环效率高 B. 循环无法实现递归的功能 C. 递归不需要占用额外的栈空间 D. 递归代码简洁但可能占用较多栈空间,循环效率更高但代码可能较复杂 【答案】D 【解析】递归与循环各有优劣:递归代码简洁清晰,易于理解,但每次递归调用都需要保存现场,占用栈空间较多;循环(递推)效率更高,不产生额外调用开销,但某些问题(如汉诺塔)用循环表达较困难。 5. 设有函数 int fib(int n) { if(n==1||n==2) return 1; return fib(n-1)+fib(n-2); },调用 fib(5) 的返回值是( ) A. 3 B. 5 C. 8 D. 13 【答案】B 【解析】这是斐波那契数列的递归实现。fib(5)=fib(4)+fib(3)=[fib(3)+fib(2)]+[fib(2)+fib(1)]=...按递推计算,F(1)=1,F(2)=1,F(3)=2,F(4)=3,F(5)=5。 6. 在main()中调用func1(),func1()中又调用func2(),这种调用方式称为( ) A. 递归调用 B. 循环调用 C. 函数的嵌套调用 D. 函数的并行调用 【答案】C 【解析】在一个函数中调用另一个函数称为函数的嵌套调用。C语言中函数定义是平行的(不能嵌套定义),但函数调用可以嵌套(一层调一层)。递归调用是嵌套调用的特殊形式(函数调用自身)。 7. 以下关于C语言函数的描述中,不正确的是( ) A. C语言中允许在函数内部再定义另一个函数 B. 一个C程序可以由多个函数组成,其中有且仅有一个main()函数 C. 函数的返回值通过return语句返回给调用者 D. 被调用的函数可以是库函数,也可以是用户自定义函数 【答案】A 【解析】C语言不允许在函数内部定义另一个函数(即函数定义不能嵌套),所有函数的定义都是平行的。但函数调用可以嵌套。一个C程序由若干函数组成,必须有且只有一个main()作为程序入口。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int f(int n) { if (n <= 1) return 1; else return n * f(n - 1); } main() { printf("%d ", f(5)); } 【答案】120 【解析】f(n)是阶乘的递归函数。f(5)=5*f(4)=5*4*f(3)=5*4*3*f(2)=5*4*3*2*f(1)=5*4*3*2*1=120。当n<=1时递归终止返回1,然后逐层返回相乘。 三、程序填空题 9. 以下程序的功能是:使用递归函数计算x的n次方(n≥0)。请填空。 #include <stdio.h> int power(int x, int n) { if (n == 0) return 1; else return 【1】; } main() { printf("%d ", power(2, 5)); } 【答案】【1】x * power(x, n - 1) 【解析】递归计算x^n:当n=0时返回1(任何数的0次方为1),否则返回x * power(x, n-1),即x * x^(n-1) = x^n。如power(2,5)=2*power(2,4)=...2^5=32。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是使用递归函数计算1+2+...+n的和。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 int sum(int n) L3 { L4 if (n == 1) L5 return 1; L6 else L7 return n + sum(n); L8 } L9 main() L10 { L11 printf("%d ", sum(10)); L12 } 【答案】【1】L7: return n + sum(n); → 修改为 return n + sum(n - 1);(递归调用时参数必须递减逼近终止条件,否则造成无限递归) 【解析】递归函数中,递归调用的参数必须向终止条件靠近。原程序sum(n)调用自身时参数n不变,导致无限递归直到栈溢出。修改为sum(n-1)后,每次递归n递减,最终n==1时终止,正确计算1+2+...+n的和。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第22练 6.6 函数应用实例(递归函数、应用综合) 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
1
第22练 6.6 函数应用实例(递归函数、应用综合) 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。