内容正文:
编写说明:山东省春季高考《软件与应用技术类考纲百套卷》,依据山东省《软件与应用技术类专业知识考试标准》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第12卷,按《C语言程序设计》范围和要求编写。具体内容为:
掌握函数的调用。
山东省《软件与应用技术类考纲百套卷》 第12卷
《C语言程序设计》
函数的调用 考点训练卷
考试时间60分钟 满分100分
班级 姓名 学号 成绩
一、选择题(本大题共20小题,每题3分,共60分)
1.以下函数调用语句中,正确的是( )
A. fun ();
B. fun;
C. int a=fun;
D. fun (1,2,3);
2.以下关于函数原型的描述中,正确的是( )
A. 函数原型必须包含参数名
B. 函数原型用于告诉编译器函数的返回值类型和参数类型
C. 函数原型必须在函数定义之后
D. 函数原型可以省略返回值类型
3.数组作为函数参数时,传递的是( )
A. 数组的全部元素值
B. 数组第一个元素的值
C. 数组的首地址
D. 数组的长度
4.以下关于递归调用的描述中,正确的是( )
A. 递归调用就是函数直接调用自身
B. 递归调用不需要终止条件
C. 递归调用的执行效率比循环高
D. 递归调用必须有明确的终止条件
5.以下关于函数嵌套调用的描述中,正确的是( )
A. 函数可以嵌套定义
B. 函数可以嵌套调用
C. 嵌套调用最多只能有两层
D. main 函数可以被其他函数嵌套调用
6.以下函数原型声明中,正确的是( )
A. int fun (int a, b);
B. int fun (int, int);
C. fun (int a, int b);
D. int fun (a, b);
7.若有函数定义void fun(int a[]),则以下调用语句中正确的是( )
A. int arr [5]; fun (arr);
B. int arr [5]; fun (arr [5]);
C. int arr [5]; fun (&arr);
D. int arr [5]; fun (arr [0]);
8.以下递归函数的功能是计算( )
int fun(int n) {
if(n==0) return 1;
else return n*fun(n-1);
}
A. n 的累加和
B. n 的阶乘
C. n 的平方
D. 2 的 n 次方
9.执行以下程序段后,输出结果是( )
void fun(int a) { a++; }
int main() {
int x=5;
fun(x);
printf("%d", x);
return 0;
}
A. 5
B. 6
C. 7
D. 不确定
10.以下关于函数原型作用的描述中,错误的是( )
A. 告诉编译器函数的返回值类型
B. 告诉编译器函数的参数个数和类型
C. 告诉编译器函数的功能
D. 帮助编译器进行类型检查
11.执行以下程序段后,输出结果是( )
void fun(int a[]) { a[0]=10; }
int main() {
int arr[3]={1,2,3};
fun(arr);
printf("%d", arr[0]);
return 0;
}
A. 1
B. 2
C. 10
D. 不确定
12.执行以下递归函数调用fun(3)的输出结果是( )
void fun(int n) {
if(n>0) {
fun(n-1);
printf("%d ", n);
}
}
A. 1 2 3
B. 3 2 1
C. 1 2
D. 3 2
13.以下函数嵌套调用的执行顺序是( )
void fun2() { printf("2"); }
void fun1() { printf("1"); fun2(); printf("3"); }
int main() { fun1(); return 0; }
A. 1→2→3
B. 1→3→2
C. 2→1→3
D. 3→2→1
14.若有函数定义int fun(int a, int b),则以下函数原型声明中错误的是( )
A. int fun (int, int);
B. int fun (int x, int y);
C. int fun (int a, b);
D. int fun (int, int y);
15.以下关于数组作为函数参数的描述中,正确的是( )
A. 形参数组的长度必须与实参数组相同
B. 形参数组名是一个变量指针
C. 对形参数组的修改不会影响实参数组
D. 数组作为函数参数时是值传递
16.以下递归函数调用fun(4)的返回值是( )
int fun(int n) {
if(n<=1) return 1;
else return fun(n-1)+fun(n-2);
}
A. 3
B. 5
C. 8
D. 13
17.以下函数调用语句中,实参个数正确的是( )
A. int fun (int a, int b); fun (1);
B. int fun (int a, int b); fun (1,2);
C. int fun (int a, int b); fun (1,2,3);
D. int fun (); fun (1);
18.以下关于函数原型与函数定义的区别描述中,正确的是( )
A. 函数原型有函数体,函数定义没有
B. 函数定义有函数体,函数原型没有
C. 函数原型必须指定参数名,函数定义可以省略
D. 函数定义必须指定参数名,函数原型可以省略
19.若有函数定义void fun(int a[10]),则以下说法正确的是( )
A. 实参数组长度必须为 10
B. 形参数组 a 的长度为 10
C. 形参数组 a 本质是一个 int 型指针
D. 函数只能接收长度为 10 的数组
20.执行以下程序段后,输出结果是( )
int fun(int n) {
if(n==1) return 1;
else return n+fun(n-1);
}
int main() {
printf("%d", fun(5));
return 0;
}
A. 5
B. 10
C. 15
D. 20
二、简答题(本大题共2小题,每题10分,共20分)
1.阅读以下 C 语言程序,程序运行后的结果为______
#include <stdio.h>
void fun2(int b) {
b *= 2;
printf("fun2: b=%d
", b);
}
void fun1(int a) {
a++;
fun2(a);
printf("fun1: a=%d
", a);
}
int main() {
int x=3;
fun1(x);
printf("main: x=%d
", x);
return 0;
}
2.阅读以下 C 语言程序,程序运行后的结果为______
#include <stdio.h>
void reverse(int a[], int n) {
int i, temp;
for(i=0;i<n/2;i++) {
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
}
int main() {
int arr[5]={1,2,3,4,5};
reverse(arr, 5);
for(int i=0;i<5;i++)
printf("%d ", arr[i]);
return 0;
}
三、案例分析题(本大题共1小题,每题10分,共10分)
1.以下程序的功能是:定义一个递归函数计算 n 的阶乘,主函数输入 n,调用该函数输出结果。请在程序的下划线处填入正确的内容,使程序完整并能正确运行。
#include <stdio.h>
____1____;
int main() {
int n;
long result;
printf("请输入一个非负整数:");
scanf("%d", &n);
if(n<0) {
printf("输入错误!
");
return 1;
}
result=____2____;
printf("%d! = %ld
", n, result);
return 0;
}
long factorial(int n) {
if(____3____)
return 1;
else
return ____4____;
}
四、综合应用题(本大题共1小题,每题10分,共10分)
1.编写一个 C 语言程序,实现以下功能:定义一个函数arrayMax,接收一个整型数组和数组长度,返回数组中的最大值。在主函数输入 10 个整数存入数组,调用arrayMax函数输出最大值。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:山东省春季高考《软件与应用技术类考纲百套卷》,依据山东省《软件与应用技术类专业知识考试标准》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。
本试卷是第12卷,按《C语言程序设计》范围和要求编写。具体内容为:
掌握函数的调用。
山东省《软件与应用技术类考纲百套卷》 第12卷
《C语言程序设计》
函数的调用 考点训练卷
考试时间60分钟 满分100分
班级 姓名 学号 成绩
一、选择题(本大题共20小题,每题3分,共60分)
1.以下函数调用语句中,正确的是( )
A. fun ();
B. fun;
C. int a=fun;
D. fun (1,2,3);
【答案】A
【解析】无参数函数调用必须加空括号。B 缺少括号;C 错误,函数名是地址不能直接赋值给 int 变量;D 函数未定义三个参数。
2.以下关于函数原型的描述中,正确的是( )
A. 函数原型必须包含参数名
B. 函数原型用于告诉编译器函数的返回值类型和参数类型
C. 函数原型必须在函数定义之后
D. 函数原型可以省略返回值类型
【答案】B
【解析】函数原型的作用是向编译器声明函数的接口信息。A 错误,参数名可以省略;C 错误,原型必须在调用之前;D 错误,返回值类型不能省略。
3.数组作为函数参数时,传递的是( )
A. 数组的全部元素值
B. 数组第一个元素的值
C. 数组的首地址
D. 数组的长度
【答案】C
【解析】C 语言中数组名代表首地址,数组作为函数参数时采用地址传递,形参和实参共享同一块内存空间。
4.以下关于递归调用的描述中,正确的是( )
A. 递归调用就是函数直接调用自身
B. 递归调用不需要终止条件
C. 递归调用的执行效率比循环高
D. 递归调用必须有明确的终止条件
【答案】D
【解析】递归调用必须有终止条件,否则会导致栈溢出。A 错误,也可以间接调用;B 错误,必须有终止条件;C 错误,递归效率通常低于循环。
5.以下关于函数嵌套调用的描述中,正确的是( )
A. 函数可以嵌套定义
B. 函数可以嵌套调用
C. 嵌套调用最多只能有两层
D. main 函数可以被其他函数嵌套调用
【答案】B
【解析】C 语言允许函数嵌套调用,但不允许嵌套定义。A 错误;C 错误,嵌套层数没有限制;D 错误,main 函数不能被调用。
6.以下函数原型声明中,正确的是( )
A. int fun (int a, b);
B. int fun (int, int);
C. fun (int a, int b);
D. int fun (a, b);
【答案】B
【解析】函数原型可以省略参数名,但必须指定每个参数的类型和返回值类型。A、C、D 格式错误。
7.若有函数定义void fun(int a[]),则以下调用语句中正确的是( )
A. int arr [5]; fun (arr);
B. int arr [5]; fun (arr [5]);
C. int arr [5]; fun (&arr);
D. int arr [5]; fun (arr [0]);
【答案】A
【解析】数组作为函数参数时,实参直接写数组名即可。B 传递的是数组元素;C 传递的是数组指针的地址;D 传递的是单个元素。
8.以下递归函数的功能是计算( )
int fun(int n) {
if(n==0) return 1;
else return n*fun(n-1);
}
A. n 的累加和
B. n 的阶乘
C. n 的平方
D. 2 的 n 次方
【答案】B
【解析】阶乘的递归实现:n! = n × (n-1)!,终止条件是 0! = 1。
9.执行以下程序段后,输出结果是( )
void fun(int a) { a++; }
int main() {
int x=5;
fun(x);
printf("%d", x);
return 0;
}
A. 5
B. 6
C. 7
D. 不确定
【答案】A
【解析】普通变量作为函数参数时是值传递,形参的改变不会影响实参,因此 x 的值仍为 5。
10.以下关于函数原型作用的描述中,错误的是( )
A. 告诉编译器函数的返回值类型
B. 告诉编译器函数的参数个数和类型
C. 告诉编译器函数的功能
D. 帮助编译器进行类型检查
【答案】C
【解析】函数原型只声明函数的接口,不包含函数的功能实现。A、B、D 都是函数原型的正确作用。
11.执行以下程序段后,输出结果是( )
void fun(int a[]) { a[0]=10; }
int main() {
int arr[3]={1,2,3};
fun(arr);
printf("%d", arr[0]);
return 0;
}
A. 1
B. 2
C. 10
D. 不确定
【答案】C
【解析】数组作为函数参数时是地址传递,形参数组的修改会直接影响实参数组,因此 arr [0] 变为 10。
12.执行以下递归函数调用fun(3)的输出结果是( )
void fun(int n) {
if(n>0) {
fun(n-1);
printf("%d ", n);
}
}
A. 1 2 3
B. 3 2 1
C. 1 2
D. 3 2
【答案】A
【解析】递归的 "先递后归" 执行过程:先调用 fun (2)→fun (1)→fun (0)(终止),然后依次输出 1、2、3。
13.以下函数嵌套调用的执行顺序是( )
void fun2() { printf("2"); }
void fun1() { printf("1"); fun2(); printf("3"); }
int main() { fun1(); return 0; }
A. 1→2→3
B. 1→3→2
C. 2→1→3
D. 3→2→1
【答案】A
【解析】嵌套调用执行顺序:main 调用 fun1→输出 1→调用 fun2→输出 2→返回 fun1→输出 3。
14.若有函数定义int fun(int a, int b),则以下函数原型声明中错误的是( )
A. int fun (int, int);
B. int fun (int x, int y);
C. int fun (int a, b);
D. int fun (int, int y);
【答案】C
【解析】函数原型中每个参数都必须指定类型,C 选项第二个参数 b 没有指定类型,错误。
15.以下关于数组作为函数参数的描述中,正确的是( )
A. 形参数组的长度必须与实参数组相同
B. 形参数组名是一个变量指针
C. 对形参数组的修改不会影响实参数组
D. 数组作为函数参数时是值传递
【答案】B
【解析】形参数组名本质是一个指针变量,接收实参数组的首地址。A 错误,形参数组长度可以省略;C、D 错误,是地址传递,修改会影响实参。
16.以下递归函数调用fun(4)的返回值是( )
int fun(int n) {
if(n<=1) return 1;
else return fun(n-1)+fun(n-2);
}
A. 3
B. 5
C. 8
D. 13
【答案】B
【解析】斐波那契数列的递归实现:fun (4)=fun (3)+fun (2)=[fun (2)+fun (1)]+[fun (1)+fun (0)]=(2+1)+(1+1)=5。
17.以下函数调用语句中,实参个数正确的是( )
A. int fun (int a, int b); fun (1);
B. int fun (int a, int b); fun (1,2);
C. int fun (int a, int b); fun (1,2,3);
D. int fun (); fun (1);
【答案】B
【解析】函数调用时实参个数必须与形参个数一致。A 少一个参数;C 多一个参数;D 函数无参数,不能传参。
18.以下关于函数原型与函数定义的区别描述中,正确的是( )
A. 函数原型有函数体,函数定义没有
B. 函数定义有函数体,函数原型没有
C. 函数原型必须指定参数名,函数定义可以省略
D. 函数定义必须指定参数名,函数原型可以省略
【答案】B
【解析】函数定义包含函数体,是函数的完整实现;函数原型只有函数头,没有函数体。A 错误;C、D 错误,两者都可以省略参数名。
19.若有函数定义void fun(int a[10]),则以下说法正确的是( )
A. 实参数组长度必须为 10
B. 形参数组 a 的长度为 10
C. 形参数组 a 本质是一个 int 型指针
D. 函数只能接收长度为 10 的数组
【答案】C
【解析】形参数组的长度会被编译器忽略,本质是指针。A、B、D 错误,函数可以接收任意长度的 int 数组。
20.执行以下程序段后,输出结果是( )
int fun(int n) {
if(n==1) return 1;
else return n+fun(n-1);
}
int main() {
printf("%d", fun(5));
return 0;
}
A. 5
B. 10
C. 15
D. 20
【答案】C
【解析】1 到 n 累加和的递归实现:fun (5)=5+4+3+2+1=15。
二、简答题(本大题共2小题,每题10分,共20分)
1.阅读以下 C 语言程序,程序运行后的结果为______
#include <stdio.h>
void fun2(int b) {
b *= 2;
printf("fun2: b=%d
", b);
}
void fun1(int a) {
a++;
fun2(a);
printf("fun1: a=%d
", a);
}
int main() {
int x=3;
fun1(x);
printf("main: x=%d
", x);
return 0;
}
【答案】
fun2: b=8
fun1: a=4
main: x=3
2.阅读以下 C 语言程序,程序运行后的结果为______
#include <stdio.h>
void reverse(int a[], int n) {
int i, temp;
for(i=0;i<n/2;i++) {
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
}
int main() {
int arr[5]={1,2,3,4,5};
reverse(arr, 5);
for(int i=0;i<5;i++)
printf("%d ", arr[i]);
return 0;
}
【答案】5 4 3 2 1
三、案例分析题(本大题共1小题,每题10分,共10分)
1.以下程序的功能是:定义一个递归函数计算 n 的阶乘,主函数输入 n,调用该函数输出结果。请在程序的下划线处填入正确的内容,使程序完整并能正确运行。
#include <stdio.h>
____1____;
int main() {
int n;
long result;
printf("请输入一个非负整数:");
scanf("%d", &n);
if(n<0) {
printf("输入错误!
");
return 1;
}
result=____2____;
printf("%d! = %ld
", n, result);
return 0;
}
long factorial(int n) {
if(____3____)
return 1;
else
return ____4____;
}
【答案】
1.long factorial(int n)(或long factorial(int))
2.factorial(n)
3.n==0 || n==1(或n<=1)
4.n * factorial(n-1)
四、综合应用题(本大题共1小题,每题10分,共10分)
1.编写一个 C 语言程序,实现以下功能:定义一个函数arrayMax,接收一个整型数组和数组长度,返回数组中的最大值。在主函数输入 10 个整数存入数组,调用arrayMax函数输出最大值。
【答案】
#include <stdio.h>
int arrayMax(int a[], int n) {
int max=a[0], i;
for(i=1;i<n;i++) {
if(a[i]>max)
max=a[i];
}
return max;
}
int main() {
int arr[10], i, max;
printf("请输入10个整数:");
for(i=0;i<10;i++) {
scanf("%d", &arr[i]);
}
max=arrayMax(arr, 10);
printf("数组中的最大值为:%d
", max);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$