第25练 6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数 《C语言》 (第五版) 一课一练 (山东省)

2026-06-24
| 2份
| 10页
| 4人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 作业-同步练
知识点 C语言概述
使用场景 同步教学
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 108 KB
发布时间 2026-06-24
更新时间 2026-06-24
作者 xkw_068401954
品牌系列 上好课·一课一练
审核时间 2026-06-24
下载链接 https://m.zxxk.com/soft/58480027.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第25练,内容是6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数。 《C语言》(第五版)一课一练 第25练 6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数 一、单选题 1. 关于C语言函数的嵌套调用,下列说法正确的是( ) A. 函数嵌套调用是指一个函数调用另一个函数 B. 函数嵌套调用是指在函数内部定义另一个函数 C. C语言不允许函数嵌套调用 D. main函数不能调用其他函数,所以不存在嵌套调用 2. 关于C语言的递归调用,以下描述正确的是( ) A. 递归调用是指一个函数调用其他函数的过程 B. 任何函数都可以安全地调用自身,不需要特殊处理 C. 递归调用是指函数直接调用自身的过程 D. C语言不支持递归调用 3. 以下递归函数中,缺少的关键要素是 int fact(int n) { return n * fact(n-1); }( ) A. 缺少参数类型声明 B. 缺少返回值语句 C. 缺少函数原型声明 D. 缺少递归终止条件 4. 已知函数定义 void printNum(int x) { printf("%d ", x); } 在main中有 int a[5]={10,20,30,40,50}; 调用 printNum(a[2]); 输出( ) A. 20 B. 数组a的全部内容 C. 30 D. a[2]的地址值 5. 已知函数 void change(int b[]) { b[0]=100; } 在main中 int a[3]={1,2,3}; change(a); 后a[0]的值是( ) A. 100(数组名作参数传递的是地址) B. 1(数组的值传递不会改变实参) C. 编译错误(数组不能作参数) D. 0(被初始化为默认值) 6. int fib(int n) { if (n==1 || n==2) return 1; else return fib(n-1)+fib(n-2); } 调用 fib(4) 的返回值是( ) A. 2 B. 5 C. 4 D. 3 7. 已知以下程序段: void f(int x[]) { x[0]=2; x=x+1; x[0]=3; } main() { int a[3]={1,1,1}; f(a); } 执行后a[0]的值是( ) A. 3 B. 2 C. 1 D. 编译错误(数组名不能参与算术运算) 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int sum(int n) { if (n == 1) return 1; else return n + sum(n - 1); } main() { printf("%d ", sum(5)); } 三、案例分析题 9. 以下程序的功能是定义函数求数组的平均值,在main中调用并输出。请填空。 #include <stdio.h> float average(int 【1】, int n) { int i, sum = 0; for (i = 0; i < n; i++) sum += arr[i]; return (【2】)sum / n; } main() { int a[6] = {78, 85, 92, 65, 88, 96}; printf("平均分=%.2f ", average(【3】, 6)); } 四、综合应用题 10. 编写一个C程序:使用递归方法求两个正整数的最大公约数(辗转相除法)。 要求: (1) 定义递归函数 int gcd(int m, int n),返回m和n的最大公约数 (2) 递归公式:若n==0返回m,否则返回gcd(n, m%n) (3) 在main函数中输入两个正整数,调用gcd函数并输出结果 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第25练,内容是6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数。 《C语言》(第五版)一课一练 第25练 6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数 一、单选题 1. 关于C语言函数的嵌套调用,下列说法正确的是( ) A. 函数嵌套调用是指一个函数调用另一个函数 B. 函数嵌套调用是指在函数内部定义另一个函数 C. C语言不允许函数嵌套调用 D. main函数不能调用其他函数,所以不存在嵌套调用 【答案】A 【解析】嵌套调用是指在一个函数体内调用另一个函数(被调用函数又可以调用其他函数),调用关系层层展开。这与嵌套定义(在函数内部定义函数)是完全不同的概念。C语言支持嵌套调用(函数之间互相调用),但不支持嵌套定义(不能在函数体内再定义函数)。 2. 关于C语言的递归调用,以下描述正确的是( ) A. 递归调用是指一个函数调用其他函数的过程 B. 任何函数都可以安全地调用自身,不需要特殊处理 C. 递归调用是指函数直接调用自身的过程 D. C语言不支持递归调用 【答案】C 【解析】递归调用是指函数在运行过程中直接调用自身。递归必须包含终止条件(递归基),避免无限递归导致栈溢出。在课本中,求阶乘、斐波那契数列等经典问题常使用递归方式解决,递归可以使程序逻辑更加简洁清晰。 3. 以下递归函数中,缺少的关键要素是 int fact(int n) { return n * fact(n-1); }( ) A. 缺少参数类型声明 B. 缺少返回值语句 C. 缺少函数原型声明 D. 缺少递归终止条件 【答案】D 【解析】递归函数必须包含终止条件(递归基),否则会无限递归下去。上述fact函数没有判断n何时停止,每次调用fact都会继续调用fact(n-1),最终导致栈溢出。正确的写法应该加上if(n==0||n==1) return 1;作为终止条件,其余情况才执行return n*fact(n-1)。 4. 已知函数定义 void printNum(int x) { printf("%d ", x); } 在main中有 int a[5]={10,20,30,40,50}; 调用 printNum(a[2]); 输出( ) A. 20 B. 数组a的全部内容 C. 30 D. a[2]的地址值 【答案】C 【解析】a[2]是数组的单个元素,值为30。调用printNum(a[2])时将30作为实参传给形参x(值传递),函数内输出30。数组元素作实参时与普通变量用法相同,传递的是元素的值。如果要传递整个数组,需要使用数组名作为参数。 5. 已知函数 void change(int b[]) { b[0]=100; } 在main中 int a[3]={1,2,3}; change(a); 后a[0]的值是( ) A. 100(数组名作参数传递的是地址) B. 1(数组的值传递不会改变实参) C. 编译错误(数组不能作参数) D. 0(被初始化为默认值) 【答案】A 【解析】数组名作为函数参数时,传递的是数组首元素的地址(传地址),不是值的复制。函数体内通过形参数组名访问的就是实参数组本身,因此修改b[0]实际修改的是a[0]。这不同于普通变量的值传递方式。二维数组名作参数也有类似的传地址特性。 6. int fib(int n) { if (n==1 || n==2) return 1; else return fib(n-1)+fib(n-2); } 调用 fib(4) 的返回值是( ) A. 2 B. 5 C. 4 D. 3 【答案】D 【解析】fib(4)=fib(3)+fib(2)。fib(3)=fib(2)+fib(1)=1+1=2,fib(2)=1。因此fib(4)=2+1=3。这是计算斐波那契数列的递归实现。递归过程从fib(4)逐步分解到fib(1)和fib(2)的终止条件,然后逐层向上返回结果完成计算。 7. 已知以下程序段: void f(int x[]) { x[0]=2; x=x+1; x[0]=3; } main() { int a[3]={1,1,1}; f(a); } 执行后a[0]的值是( ) A. 3 B. 2 C. 1 D. 编译错误(数组名不能参与算术运算) 【答案】B 【解析】形参x是局部变量(指针),初始指向数组a的首地址。x[0]=2修改了a[0]为2。x=x+1使x指向a[1],x[0]=3修改了a[1]为3。注意形参x作为指针变量可以修改指向,而实参数组名a始终指向首地址。最终a[0]=2,a[1]=3,a[2]保持1。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> int sum(int n) { if (n == 1) return 1; else return n + sum(n - 1); } main() { printf("%d ", sum(5)); } 【答案】15 【解析】sum函数用递归计算1到n的累加和。sum(5)=5+sum(4)=5+10=15。递推展开:sum(5)=5+sum(4)=5+4+sum(3)=5+4+3+sum(2)=5+4+3+2+sum(1)=5+4+3+2+1=15。终止条件n==1返回1,此后逐层向上返回。该递归函数简洁实现了等差数列求和的功能。 三、案例分析题 9. 以下程序的功能是定义函数求数组的平均值,在main中调用并输出。请填空。 #include <stdio.h> float average(int 【1】, int n) { int i, sum = 0; for (i = 0; i < n; i++) sum += arr[i]; return (【2】)sum / n; } main() { int a[6] = {78, 85, 92, 65, 88, 96}; printf("平均分=%.2f ", average(【3】, 6)); } 【答案】【1】arr[] 【2】float 【3】a 【解析】第一空形参写成int arr[]接收一个整型数组。第二空用(float)sum将整型sum强制转为浮点型再进行除法运算,确保得出正确的小数平均值而非整数截断。第三空average(a,6)将数组名a(地址)和元素个数6作为实参传入函数。 四、综合应用题 10. 编写一个C程序:使用递归方法求两个正整数的最大公约数(辗转相除法)。 要求: (1) 定义递归函数 int gcd(int m, int n),返回m和n的最大公约数 (2) 递归公式:若n==0返回m,否则返回gcd(n, m%n) (3) 在main函数中输入两个正整数,调用gcd函数并输出结果 【答案】#include <stdio.h> int gcd(int m, int n) { if (n == 0) return m; else return gcd(n, m % n); } main() { int a, b; printf("请输入两个正整数:"); scanf("%d%d", &a, &b); printf("%d和%d的最大公约数=%d ", a, b, gcd(a, b)); } 【解析】gcd函数实现辗转相除的递归版本:递归终止条件为n==0时返回m作为结果。递归步是gcd(n,m%n),每次将除数变为被除数,余数变为除数,不断缩小问题规模。例如gcd(24,18):gcd(18,24%18=6)→gcd(6,18%6=0)→返回6。递归方式使代码简洁直观。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第25练 6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数 《C语言》 (第五版) 一课一练 (山东省)
1
第25练 6.2-6.3 函数的嵌套调用、递归调用、数组作函数参数 《C语言》 (第五版) 一课一练 (山东省)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。