内容正文:
编写说明:2027版吉林省高职分类(对口招生)考试电子与信息类《考纲百套卷》,依据《吉林省高职分类(对口招生)考试电子与信息类专业综合卷考试科目及纲要(2025版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共115份试卷,其中知识训练卷82份、专题训练卷19份、课程综合卷14份。
本试卷是第13卷,为知识训练卷,按《C语言程序设计》中“函数”范围和要求编写。具体内容为:1.了解常用库函数。2.了解include命令的使用。3.掌握函数的定义与调用。4.掌握函数的返回值及其类型。5.掌握函数调用时参数间的传递。6.了解函数的嵌套调用和递归调用。7.了解变量的作用域和存储类型。
吉林省高职分类(对口招生)考试
电子与信息类《考纲百套卷》
第13卷 C语言程序设计——函数
(考试时间:45分钟 满分:100分)
一、单项选择题(共20题,每题2分,共40分。)
1.一个函数直接或间接地调用自身,这种调用方式称为( )
A.递归调用
B.嵌套调用
C.循环调用
D.迭代调用
2.编写递归函数时,最重要的部分是( )
A.函数名
B.递归终止条件(出口)
C.参数个数
D.返回值类型
3.全局变量的作用范围是( )
A.定义它的函数内
B.main函数内
C.从定义处到文件结束的所有函数
D.整个程序的任意位置
4.函数参数为一维数组时,以下正确的形参写法是( )
A.int a
B.int a(10)
C.int a{}
D.int a[]
5.static int x; 定义在函数内部时,该变量的特点是( )
A.只初始化一次,函数调用结束后值保留
B.每次函数调用都重新初始化
C.只能在定义语句所在行使用
D.作用域为整个文件
6.递归函数fact(4)计算4!,fact(0)=1,fact(n)=n*fact(n-1),fact(4)返回( )
A.4
B.24
C.16
D.120
7.当全局变量和局部变量同名时,在局部变量作用域内( )
A.两者同时生效
B.全局变量优先
C.局部变量屏蔽全局变量
D.编译错误
8.函数通过数组形参修改元素值,调用后实参数组的变化是( )
A.实参数组不变
B.只变第一个元素
C.编译错误
D.实参数组相应元素也被修改
9.extern关键字用于声明( )
A.变量或函数在其他文件中定义
B.变量为静态存储
C.函数不需要返回值
D.变量为寄存器类型
10.以下关于递归的说法,正确的是( )
A.递归一定比迭代快
B.递归代码通常更简洁,但可能消耗更多栈空间
C.递归没有终止条件也能正常运行
D.所有递归都能表示成迭代,反之亦然
11.用static修饰的函数,其作用范围是( )
A.整个程序的所有文件
B.所有包含该头文件的文件
C.仅限定义它的源文件内部
D.main函数中
12.函数形参为int a[]时,函数内部如何知道数组的实际长度?( )
A.通过sizeof(a)自动获取
B.编译器自动计算
C.不用知道长度
D.通常需要额外参数传递长度值
13.未显式初始化的全局int变量,其默认值为( )
A.0
B.随机值
C.1
D.-1
14.递归函数执行过程中,每一次递归调用都会( )
A.覆盖上一次的数据
B.共享同一组局部变量
C.使程序运行更快
D.在栈上创建新一层的数据副本
15.register关键字建议编译器将变量存储在( )
A.内存中
B.CPU寄存器中
C.硬盘中
D.栈中
16.二维数组作为函数形参时,以下正确的声明是( )
A.int a[][]
B.int a[3][]
C.int a[][5]
D.int a[5][]
17.递归层数过深可能导致的问题是( )
A.栈溢出(Stack Overflow)
B.编译错误
C.返回值丢失
D.程序跳过终止条件
18.回调函数通常通过什么方式传递给另一个函数?( )
A.全局变量
B.返回值
C.函数指针作为参数
D.extern声明
19.全局变量存储在内存的哪个区域?( )
A.栈区
B.静态存储区(数据段)
C.堆区
D.代码区
20.以下哪种问题最适合用递归解决?( )
A.两个数的加法
B.简单的循环累加
C.查找数组最大值
D.汉诺塔问题
二、判断题(共10题,每题1分,共10分。)
1.递归函数必须有终止条件,否则会导致无限递归。( )
2.全局变量在任何函数中都可以被任意修改,因此建议大量使用。( )
3.数组名作为函数实参传递时,实际上传递的是数组的首地址。( )
4.static修饰的全局变量可以在其他源文件中使用extern声明后访问。( )
5.递归函数都可以用循环(迭代)方式改写。( )
6.register变量一定存储在CPU寄存器中。( )
7.函数调用时可以传递一个数组的单个元素作为实参。( )
8.C语言中,函数不能作为另一个函数的参数直接传递。( )
9.在递归函数中,每一层递归的局部变量是相互独立的。( )
10.全局变量和静态变量一样,未初始化时值为随机数。( )
三、填空题(共5题,每题2分,共10分。)
1.在多文件程序中,若当前文件需使用另一文件中定义的全局变量,应使用____关键字进行声明。
2.将变量声明为____存储类型时,编译器会尽量将其放入CPU寄存器中以提高访问速度。
3.用____关键字修饰的全局函数,其作用域仅限于定义它的源文件,其他文件无法调用。
4.函数名在C语言中代表该函数代码在内存中的____地址。
5.用____关键字修饰的函数参数,在函数体内不能被修改,起到只读保护作用。
四、读程序写结果题(共4题,每题5分,共20分。)
1.请阅读下列程序,写出运行结果。
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
printf("%d", add(add(1, 2), 3));
return 0;
}
2.请阅读下列程序,写出运行结果。
#include <stdio.h>
int s(int n)
{
if (n == 0) return 0;
return n % 10 + s(n / 10);
}
int main()
{
printf("%d", s(234));
return 0;
}
3.请阅读下列程序,写出运行结果。
#include <stdio.h>
int f(int x)
{
return x * x;
}
int main()
{
int (*p)(int) = f;
printf("%d", p(4));
return 0;
}
4.请阅读下列程序,写出运行结果。
#include <stdio.h>
void prt(int a[][3], int r)
{
printf("%d", a[r - 1][2]);
}
int main()
{
int x[2][3] = {{1,2,3},{4,5,6}};
prt(x, 2);
return 0;
}
五、编程题(共2题,每题10分,共20分。)
1.编写一个函数diagSum(int a[][3], int n),计算n×n二维数组两条对角线元素之和并返回。在main中初始化一个3×3数组并调用。
2.编写一个递归函数sumDigit(int n),计算正整数n各位数字之和。在main中输入一个整数,调用函数并输出结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版吉林省高职分类(对口招生)考试电子与信息类《考纲百套卷》,依据《吉林省高职分类(对口招生)考试电子与信息类专业综合卷考试科目及纲要(2025版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共115份试卷,其中知识训练卷82份、专题训练卷19份、课程综合卷14份。
本试卷是第13卷,为知识训练卷,按《C语言程序设计》中“函数”范围和要求编写。具体内容为:1.了解常用库函数。2.了解include命令的使用。3.掌握函数的定义与调用。4.掌握函数的返回值及其类型。5.掌握函数调用时参数间的传递。6.了解函数的嵌套调用和递归调用。7.了解变量的作用域和存储类型。
吉林省高职分类(对口招生)考试
电子与信息类《考纲百套卷》
第13卷 C语言程序设计——函数
(考试时间:45分钟 满分:100分)
一、单项选择题(共20题,每题2分,共40分。)
1.一个函数直接或间接地调用自身,这种调用方式称为( )
A.递归调用
B.嵌套调用
C.循环调用
D.迭代调用
【答案】A
【解析】递归是函数自己调用自己。分直接递归(函数内调用自身)和间接递归(f1调f2,f2调f1)。
2.编写递归函数时,最重要的部分是( )
A.函数名
B.递归终止条件(出口)
C.参数个数
D.返回值类型
【答案】B
【解析】递归必须有终止条件,否则会无限递归导致栈溢出。递归出口是递归函数正确运行的保障。
3.全局变量的作用范围是( )
A.定义它的函数内
B.main函数内
C.从定义处到文件结束的所有函数
D.整个程序的任意位置
【答案】C
【解析】全局变量定义在函数外,从定义位置到文件末尾均可见。其他文件用extern声明也可访问。
4.函数参数为一维数组时,以下正确的形参写法是( )
A.int a
B.int a(10)
C.int a{}
D.int a[]
【答案】D
【解析】数组作为形参时写为 int a[] 或 int a[10],第一维长度可省略。实际传递的是数组首地址。
5.static int x; 定义在函数内部时,该变量的特点是( )
A.只初始化一次,函数调用结束后值保留
B.每次函数调用都重新初始化
C.只能在定义语句所在行使用
D.作用域为整个文件
【答案】A
【解析】static局部变量在程序加载时初始化一次,函数退出后不销毁,下次调用保留上次的值。
6.递归函数fact(4)计算4!,fact(0)=1,fact(n)=n*fact(n-1),fact(4)返回( )
A.4
B.24
C.16
D.120
【答案】B
【解析】4!=4×3×2×1=24。fact(4)=4×fact(3)=4×6=24。
7.当全局变量和局部变量同名时,在局部变量作用域内( )
A.两者同时生效
B.全局变量优先
C.局部变量屏蔽全局变量
D.编译错误
【答案】C
【解析】同名时局部变量优先,在其作用域内屏蔽全局变量。离开该作用域后全局变量重新可见。
8.函数通过数组形参修改元素值,调用后实参数组的变化是( )
A.实参数组不变
B.只变第一个元素
C.编译错误
D.实参数组相应元素也被修改
【答案】D
【解析】数组名作为实参传递的是地址,函数内通过地址直接操作原数组,因此修改会影响实参。
9.extern关键字用于声明( )
A.变量或函数在其他文件中定义
B.变量为静态存储
C.函数不需要返回值
D.变量为寄存器类型
【答案】A
【解析】extern声明变量或函数定义在其他源文件中,告诉编译器该符号存在,链接时再解析。
10.以下关于递归的说法,正确的是( )
A.递归一定比迭代快
B.递归代码通常更简洁,但可能消耗更多栈空间
C.递归没有终止条件也能正常运行
D.所有递归都能表示成迭代,反之亦然
【答案】B
【解析】递归代码简洁易读,但每次调用都占用栈空间,效率可能低于迭代。必须设终止条件。
11.用static修饰的函数,其作用范围是( )
A.整个程序的所有文件
B.所有包含该头文件的文件
C.仅限定义它的源文件内部
D.main函数中
【答案】C
【解析】static函数的作用域仅限于定义它的源文件,其他文件即使extern声明也无法访问。
12.函数形参为int a[]时,函数内部如何知道数组的实际长度?( )
A.通过sizeof(a)自动获取
B.编译器自动计算
C.不用知道长度
D.通常需要额外参数传递长度值
【答案】D
【解析】数组作为参数退化为指针,sizeof(a)返回指针大小而非数组大小。需额外参数传递长度。
13.未显式初始化的全局int变量,其默认值为( )
A.0
B.随机值
C.1
D.-1
【答案】A
【解析】全局变量和静态变量默认初始化为0。局部auto变量不初始化则为随机值。
14.递归函数执行过程中,每一次递归调用都会( )
A.覆盖上一次的数据
B.共享同一组局部变量
C.使程序运行更快
D.在栈上创建新一层的数据副本
【答案】D
【解析】每次递归调用都在栈上分配新的栈帧,包含独立的局部变量和参数。逐层返回时逐层释放。
15.register关键字建议编译器将变量存储在( )
A.内存中
B.CPU寄存器中
C.硬盘中
D.栈中
【答案】B
【解析】register是建议性关键字,请求编译器将变量放入寄存器以加速访问。现代编译器通常自动优化。
16.二维数组作为函数形参时,以下正确的声明是( )
A.int a[][]
B.int a[3][]
C.int a[][5]
D.int a[5][]
【答案】C
【解析】二维数组作形参必须指定列数(第二维),可省略行数(第一维)。int a[][5]正确,D中a[5][]列数未指定不合法。
17.递归层数过深可能导致的问题是( )
A.栈溢出(Stack Overflow)
B.编译错误
C.返回值丢失
D.程序跳过终止条件
【答案】A
【解析】每层递归占用栈空间,层数过多超出栈容量导致栈溢出。应控制递归深度或改用迭代。
18.回调函数通常通过什么方式传递给另一个函数?( )
A.全局变量
B.返回值
C.函数指针作为参数
D.extern声明
【答案】C
【解析】回调函数通过函数指针作为参数传递,允许一个函数调用另一个尚未确定的函数,实现灵活的编程模式。
19.全局变量存储在内存的哪个区域?( )
A.栈区
B.静态存储区(数据段)
C.堆区
D.代码区
【答案】B
【解析】全局变量和静态变量存储在静态存储区(全局数据段),程序加载时分配,结束时释放。
20.以下哪种问题最适合用递归解决?( )
A.两个数的加法
B.简单的循环累加
C.查找数组最大值
D.汉诺塔问题
【答案】D
【解析】汉诺塔问题具有天然的递归结构:将n个盘子从A移到C,需先移n-1个到B,再移最大的到C。递归解法简洁直观。
二、判断题(共10题,每题1分,共10分。)
1.递归函数必须有终止条件,否则会导致无限递归。( )
【答案】√
【解析】没有终止条件的递归会无限调用自身,最终栈溢出。终止条件是递归函数正确性的关键。
2.全局变量在任何函数中都可以被任意修改,因此建议大量使用。( )
【答案】×
【解析】全局变量虽可被所有函数访问,但过度使用会破坏模块化、增加耦合度,应谨慎使用。
3.数组名作为函数实参传递时,实际上传递的是数组的首地址。( )
【答案】√
【解析】数组名作实参时传递的是数组首元素地址,因此函数内对数组元素的修改会影响原数组。
4.static修饰的全局变量可以在其他源文件中使用extern声明后访问。( )
【答案】×
【解析】static全局变量作用域仅限于定义它的源文件,其他文件无法访问。这是static的封装特性。
5.递归函数都可以用循环(迭代)方式改写。( )
【答案】√
【解析】任何递归算法都可以转换为迭代实现(可能需要显式栈辅助),理论上递归和迭代是等价的。
6.register变量一定存储在CPU寄存器中。( )
【答案】×
【解析】register只是建议而非强制,编译器可能忽略该建议。现代编译器会自动进行寄存器优化。
7.函数调用时可以传递一个数组的单个元素作为实参。( )
【答案】√
【解析】数组元素a[i]可作为普通变量传递给函数形参,此时传递的是元素值(值传递)。
8.C语言中,函数不能作为另一个函数的参数直接传递。( )
【答案】×
【解析】函数名代表函数地址,可通过函数指针作为参数传递,实现回调功能。
9.在递归函数中,每一层递归的局部变量是相互独立的。( )
【答案】√
【解析】每次递归调用创建新的栈帧,各层局部变量独立存储,互不干扰。
10.全局变量和静态变量一样,未初始化时值为随机数。( )
【答案】×
【解析】全局变量和静态变量未初始化时自动为0,只有局部auto变量不初始化才是随机值。
三、填空题(共5题,每题2分,共10分。)
1.在多文件程序中,若当前文件需使用另一文件中定义的全局变量,应使用____关键字进行声明。
【答案】extern
【解析】extern告诉编译器该变量定义在其他源文件中,链接时解析。如extern int x;声明后即可在当前文件使用。
2.将变量声明为____存储类型时,编译器会尽量将其放入CPU寄存器中以提高访问速度。
【答案】register
【解析】register是建议性关键字,请求将变量放寄存器。但现代编译器通常自动优化,且不能取register变量地址。
3.用____关键字修饰的全局函数,其作用域仅限于定义它的源文件,其他文件无法调用。
【答案】static
【解析】static函数是文件级私有函数,外部不可见。用于封装内部实现细节,避免命名冲突。
4.函数名在C语言中代表该函数代码在内存中的____地址。
【答案】入口
【解析】函数名是函数代码的起始地址,因此可以赋值给函数指针变量,实现函数回调等高级功能。
5.用____关键字修饰的函数参数,在函数体内不能被修改,起到只读保护作用。
【答案】const
【解析】const参数声明该参数为只读,函数内尝试修改会导致编译错误。常用于字符串处理函数保护原始数据。
四、读程序写结果题(共4题,每题5分,共20分。)
1.请阅读下列程序,写出运行结果。
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
printf("%d", add(add(1, 2), 3));
return 0;
}
【答案】6
【解析】内层add(1,2)=3,外层add(3,3)=6。考查函数嵌套调用中返回值作为实参的追踪。
2.请阅读下列程序,写出运行结果。
#include <stdio.h>
int s(int n)
{
if (n == 0) return 0;
return n % 10 + s(n / 10);
}
int main()
{
printf("%d", s(234));
return 0;
}
【答案】9
【解析】递归求各位数字和:s(234)=4+s(23)=4+5=9,s(23)=3+s(2)=3+2=5。不同于阶乘递归公式。考查非常见递归追踪。
3.请阅读下列程序,写出运行结果。
#include <stdio.h>
int f(int x)
{
return x * x;
}
int main()
{
int (*p)(int) = f;
printf("%d", p(4));
return 0;
}
【答案】16
【解析】p是函数指针,指向f。p(4)等价于f(4)=4×4=16。考查函数指针的定义与调用。
4.请阅读下列程序,写出运行结果。
#include <stdio.h>
void prt(int a[][3], int r)
{
printf("%d", a[r - 1][2]);
}
int main()
{
int x[2][3] = {{1,2,3},{4,5,6}};
prt(x, 2);
return 0;
}
【答案】6
【解析】prt(x,2)传入二维数组。r-1=1,a[1][2]=6。考查二维数组作函数参数的传递与访问。
五、编程题(共2题,每题10分,共20分。)
1.编写一个函数diagSum(int a[][3], int n),计算n×n二维数组两条对角线元素之和并返回。在main中初始化一个3×3数组并调用。
【答案】
#include <stdio.h>
int diagSum(int a[][3], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i][i];
sum += a[i][n - 1 - i];
}
return sum;
}
int main()
{
int x[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
printf("对角线和=%d
", diagSum(x, 3));
return 0;
}
【解析】diagSum接收二维数组,主对角线a[i][i]:1+5+9=15,副对角线a[i][n-1-i]:3+5+7=15,总和30。考查二维数组作函数参数的实际应用。
2.编写一个递归函数sumDigit(int n),计算正整数n各位数字之和。在main中输入一个整数,调用函数并输出结果。
【答案】
#include <stdio.h>
int sumDigit(int n)
{
if (n == 0)
return 0;
else
return n % 10 + sumDigit(n / 10);
}
int main()
{
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
printf("各位数字之和=%d
", sumDigit(num));
return 0;
}
【解析】递归公式:n%10取最低位,n/10去掉最低位。终止条件n==0。例如sumDigit(852)=2+sumDigit(85)=2+5+8=15。考查非常见递归的设计与实现。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$