内容正文:
编写说明:吉林省高职分类考试《信息工程类(电子与信息类)考纲百套卷》,依据吉林省高职分类(对口招生)考试各类专业综合卷考试科目及纲要(2021版),种信息工程类(电子与信息类)专业综合卷考试科目及纲要编写。本专辑共150份试卷两部分组成,第一部分是按考纲的考点要求编写的120份知识点训练卷,第二部分是针对6门课程的掌握要求,编写的30份常考题训练卷。
本试卷是吉林省高职分类考试《信息工程类(电子与信息类)考纲百套卷》的第18卷,是知识点训练卷。按“C语言程序设计”考试纲要(六)函数的六点知识点要求编写,其六点要求是:
1.掌握函数的定义和调用方法。2.理解形参和实参之间的关系。3.掌握函数的返回值。4.掌握函数的调用。5.理解函数的原型。6.了解函数的嵌套调用和递归调用。7.理解数组元素作为函数参数。8.了解多维数组作为函数参数。9.了解数组名作为函数参数。10.了解函数变量的作用域。11.了解变量的存储类型。
吉林省《信息工程类(电子与信息类)考纲百套卷》 第18卷
《C语言程序设计》
(六)函数-知识点训练卷
考试时间60分钟 满分100分
班级 姓名 学号 成绩
一、选择题(本大题共10小题,每小题2分,共20分)
1. 以下关于函数定义的说法,正确的是( )
A. 函数定义可以嵌套,即一个函数内部可以定义另一个函数
B. 函数定义时,形参的类型可以省略
C. 函数定义的一般形式为:返回值类型 函数名 (形参列表) {函数体}
D. 函数定义时,函数名可以与变量名相同
答案:C
2. 若有函数定义:
void func() {
printf("Hello");
}
以下关于该函数返回值的说法,正确的是( )
A. 函数返回值为 Hello
B. 函数返回值为 void 类型
C. 函数没有返回值
D. 函数返回值为一个随机值
答案:C
3. 以下函数调用语句中,实参的个数是( )
func(a + b, (c, d), e);
A. 3
B. 4
C. 5
D. 语法错误
答案:A
4. 关于形参和实参的关系,以下说法错误的是( )
A. 形参在函数调用时才分配内存空间
B. 实参和形参可以同名
C. 实参和形参的数据类型必须一致
D. 函数调用结束后,形参的内存空间不会释放
答案:D
5. 已知函数原型为 int func(int a, int b);,以下调用该函数正确的是( )
A. func(3);
B. func(3, 4, 5);
C. func(3, 4);
D. func();
答案:C
6. 有如下函数:
int func1(int a) {
return a + 1;
}
int func2(int b) {
return func1(b) * 2;
}
这属于( )
A. 函数的嵌套调用
B. 函数的递归调用
C. 非法调用
D. 以上都不是
答案:A
7. 当数组名作为函数参数时,以下说法正确的是( )
A. 函数内部对数组元素的修改不会影响原数组
B. 传递的是数组的副本
C. 传递的是数组的首地址
D. 数组名作为参数和普通变量作为参数没有区别
答案:C
8. 有如下代码:
#include <stdio.h>
void func() {
int a = 10;
printf("%d
", a);
}
int main() {
func();
// 此处能否访问变量 a
// printf("%d
", a);
return 0;
}
关于变量 a 的作用域,以下说法正确的是( )
A. a 是全局变量,在 main 函数中可以访问
B. a 是局部变量,仅在 func 函数内部可以访问
C. a 是静态变量,在整个程序中都可以访问
D. a 的作用域是从定义处到文件末尾
答案:B
9. 已知函数 int func(int *arr, int n),以下调用该函数正确的是( )
A. int a[5] = {1, 2, 3, 4, 5}; func(a, 5);
B. int a[5] = {1, 2, 3, 4, 5}; func(&a, 5);
C. int a = 10; func(&a, 1);
D. int a[5] = {1, 2, 3, 4, 5}; func(a[0], 5);
答案:A
10. 若有函数原型 void func(int arr[][3], int rows);,以下二维数组定义和调用正确的是( )
A. int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; func(arr, 2);
B. int arr[2][] = {{1, 2, 3}, {4, 5, 6}}; func(arr, 2);
C. int arr[][3] = {{1, 2}, {4, 5}}; func(arr, 2);
D. int arr[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; func(arr, 2);
答案:A
二、判断题(本大题共10小题,每小题2分,共20分)
1. 函数定义时,返回值类型可以省略,默认返回 int 类型。( )
答案:正确
2. 形参是函数内部的局部变量,函数调用结束后,形参的内存空间会被释放。( )
答案:正确
3. 函数可以有多个返回语句,但每次调用函数只能执行其中一个返回语句。( )
答案:正确
4. 函数调用时,实参和形参之间的数据传递方式只有值传递。( )
答案:错误
5. 函数原型只是为了让编译器知道函数的返回值类型和参数情况,不一定要和函数定义完全一致。( )
答案:错误
6. 当数组元素作为函数参数时,是值传递,函数内部对参数的修改不会影响原数组元素。( )
答案:正确
7. 数组名作为函数参数传递的是数组的首地址,函数内部可以通过该地址修改原数组的元素。( )
答案:正确
8. 静态变量在程序运行期间只初始化一次,之后每次进入函数时,会保留上次的值。( )
答案:正确
9. 函数的嵌套调用和递归调用本质上是一样的。( )
答案:错误
10. 全局变量的作用域是从定义处到文件末尾,可以被文件内的所有函数访问。( )
答案:正确
三、填空题(本大题共5小题,每题2分,共10分)
1. 函数定义的一般形式为:______ 函数名 (形参列表) {函数体}。
答案:返回值类型
2. 若函数返回值类型为 ______,表示该函数没有返回值。
答案:void
3. 函数 ______ 的作用是让编译器在调用函数前进行参数类型检查。
答案:原型
4. 当数组名作为函数参数时,传递的是数组的 ______。
答案:首地址
5. 若要在一个文件中使用另一个文件中定义的全局变量,需要使用 ______ 关键字进行声明。
答案:extern
四、读程序写结果题(本大题共5小题,每题5分,共25分)
1.以下程序的运行结果是______。
#include <stdio.h>
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 2, y = 4;
swap(x, y);
printf("%d %d
", x, y);
return 0;
}
答案:2 4
2.以下程序的运行结果是______。
#include <stdio.h>
void modifyArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
arr[i] *= 2;
}
}
int main() {
int arr[] = {1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
modifyArray(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
答案:2 4 6
3.以下程序的运行结果是______。
#include <stdio.h>
int sum(int arr[], int n) {
if (n == 0) {
return 0;
} else {
return arr[n - 1] + sum(arr, n - 1);
}
}
int main() {
int arr[] = {1, 2, 3, 4};
int size = sizeof(arr) / sizeof(arr[0]);
int result = sum(arr, size);
printf("%d
", result);
return 0;
}
答案:10
4.以下程序的运行结果是______。
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int operate(int x, int y, int (*func)(int, int)) {
return func(x, y);
}
int main() {
int num1 = 10;
int num2 = 5;
int sum = operate(num1, num2, add);
printf("两数之和为: %d
", sum);
int difference = operate(num1, num2, subtract);
printf("两数之差为: %d
", difference);
return 0;
}
答案:
两数之和为: 15
两数之差为: 5
5.以下程序的运行结果是______。
#include <stdio.h>
void func(int a) {
int b = 2;
static int c = 3;
a += b + c;
b++;
c++;
printf("%d %d %d
", a, b, c);
}
int main() {
int x = 1;
func(x);
func(x);
return 0;
}
答案:
6 3 4
7 3 5
五、编程题(本大题共5小题,每题5分,共25分)
1. 编写一个递归函数,用于计算斐波那契数列的第 n 项。斐波那契数列定义为:F(0) = 0, F(1) = 1,F(n)=F(n-1)+F(n-2)(n>1)。要求在 main 函数中接收用户输入的 n 值,调用递归函数计算结果并输出。
答案代码:
#include <stdio.h>
// 递归函数计算斐波那契数列第 n 项
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n;
printf("请输入要计算的斐波那契数列的项数 n: ");
scanf("%d", &n);
int result = fibonacci(n);
printf("斐波那契数列的第 %d 项是: %d
", n, result);
return 0;
}
2.编写一个函数 bubbleSort,使用数组名作为参数,对传入的整数数组进行冒泡排序。在 main 函数中初始化一个数组,调用 bubbleSort 函数进行排序并输出排序后的数组。
答案代码:
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 3, 8, 4, 2};
int size = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, size);
printf("排序后的数组是: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
3.编写一个递归函数 sumArray,用于计算数组元素的和。在 main 函数中初始化一个数组,调用 sumArray 函数计算并输出数组元素的和。
答案代码:
#include <stdio.h>
// 递归计算数组元素的和
int sumArray(int arr[], int size) {
if (size == 0) return 0;
return arr[size - 1] + sumArray(arr, size - 1);
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int result = sumArray(arr, size);
printf("数组元素的和是: %d
", result);
return 0;
}
4.编写一个函数 factorial 用于计算一个数的阶乘,再编写一个函数 combination 调用 factorial 函数计算组合数 。在 main 函数中接收用户输入的 n 和 k 值,调用 combination 函数计算并输出结果。
答案代码:
#include <stdio.h>
// 计算阶乘
int factorial(int num) {
if (num == 0 || num == 1) return 1;
return num * factorial(num - 1);
}
// 计算组合数
int combination(int n, int k) {
return factorial(n) / (factorial(k) * factorial(n - k));
}
int main() {
int n, k;
printf("请输入 n 和 k 的值(n >= k): ");
scanf("%d %d", &n, &k);
int result = combination(n, k);
printf("组合数 C(%d, %d) 是: %d
", n, k, result);
return 0;
}
5.编写一个函数 testScope,在函数内部定义一个普通局部变量 a、一个静态局部变量 b 和一个全局变量 c(在函数外部定义)。每次调用 testScope 函数时,输出这三个变量的值,并对它们进行修改。在 main 函数中多次调用 testScope 函数,观察变量值的变化。
答案代码:
#include <stdio.h>
int c = 10; // 全局变量
// 测试变量作用域和存储类型
void testScope() {
int a = 1; // 普通局部变量
static int b = 2; // 静态局部变量
printf("a = %d, b = %d, c = %d
", a, b, c);
a++;
b++;
c++;
}
int main() {
testScope();
testScope();
testScope();
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$
编写说明:吉林省高职分类考试《信息工程类(电子与信息类)考纲百套卷》,依据吉林省高职分类(对口招生)考试各类专业综合卷考试科目及纲要(2021版),种信息工程类(电子与信息类)专业综合卷考试科目及纲要编写。本专辑共150份试卷两部分组成,第一部分是按考纲的考点要求编写的120份知识点训练卷,第二部分是针对6门课程的掌握要求,编写的30份常考题训练卷。
本试卷是吉林省高职分类考试《信息工程类(电子与信息类)考纲百套卷》的第18卷,是知识点训练卷。按“C语言程序设计”考试纲要(六)函数的六点知识点要求编写,其六点要求是:
1.掌握函数的定义和调用方法。2.理解形参和实参之间的关系。3.掌握函数的返回值。4.掌握函数的调用。5.理解函数的原型。6.了解函数的嵌套调用和递归调用。7.理解数组元素作为函数参数。8.了解多维数组作为函数参数。9.了解数组名作为函数参数。10.了解函数变量的作用域。11.了解变量的存储类型。
吉林省《信息工程类(电子与信息类)考纲百套卷》 第18卷
《C语言程序设计》
(六)函数-知识点训练卷
考试时间60分钟 满分100分
班级 姓名 学号 成绩
一、选择题(本大题共10小题,每小题2分,共20分)
1. 以下关于函数定义的说法,正确的是( )
A. 函数定义可以嵌套,即一个函数内部可以定义另一个函数
B. 函数定义时,形参的类型可以省略
C. 函数定义的一般形式为:返回值类型 函数名 (形参列表) {函数体}
D. 函数定义时,函数名可以与变量名相同
2. 若有函数定义:
void func() {
printf("Hello");
}
以下关于该函数返回值的说法,正确的是( )
A. 函数返回值为 Hello
B. 函数返回值为 void 类型
C. 函数没有返回值
D. 函数返回值为一个随机值
3. 以下函数调用语句中,实参的个数是( )
func(a + b, (c, d), e);
A. 3
B. 4
C. 5
D. 语法错误
4. 关于形参和实参的关系,以下说法错误的是( )
A. 形参在函数调用时才分配内存空间
B. 实参和形参可以同名
C. 实参和形参的数据类型必须一致
D. 函数调用结束后,形参的内存空间不会释放
5. 已知函数原型为 int func(int a, int b);,以下调用该函数正确的是( )
A. func(3);
B. func(3, 4, 5);
C. func(3, 4);
D. func();
6. 有如下函数:
int func1(int a) {
return a + 1;
}
int func2(int b) {
return func1(b) * 2;
}
这属于( )
A. 函数的嵌套调用
B. 函数的递归调用
C. 非法调用
D. 以上都不是
7. 当数组名作为函数参数时,以下说法正确的是( )
A. 函数内部对数组元素的修改不会影响原数组
B. 传递的是数组的副本
C. 传递的是数组的首地址
D. 数组名作为参数和普通变量作为参数没有区别
8. 有如下代码:
#include <stdio.h>
void func() {
int a = 10;
printf("%d
", a);
}
int main() {
func();
// 此处能否访问变量 a
// printf("%d
", a);
return 0;
}
关于变量 a 的作用域,以下说法正确的是( )
A. a 是全局变量,在 main 函数中可以访问
B. a 是局部变量,仅在 func 函数内部可以访问
C. a 是静态变量,在整个程序中都可以访问
D. a 的作用域是从定义处到文件末尾
9. 已知函数 int func(int *arr, int n),以下调用该函数正确的是( )
A. int a[5] = {1, 2, 3, 4, 5}; func(a, 5);
B. int a[5] = {1, 2, 3, 4, 5}; func(&a, 5);
C. int a = 10; func(&a, 1);
D. int a[5] = {1, 2, 3, 4, 5}; func(a[0], 5);
10. 若有函数原型 void func(int arr[][3], int rows);,以下二维数组定义和调用正确的是( )
A. int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; func(arr, 2);
B. int arr[2][] = {{1, 2, 3}, {4, 5, 6}}; func(arr, 2);
C. int arr[][3] = {{1, 2}, {4, 5}}; func(arr, 2);
D. int arr[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}}; func(arr, 2);
二、判断题(本大题共10小题,每小题2分,共20分)
1. 函数定义时,返回值类型可以省略,默认返回 int 类型。( )
2. 形参是函数内部的局部变量,函数调用结束后,形参的内存空间会被释放。( )
3. 函数可以有多个返回语句,但每次调用函数只能执行其中一个返回语句。( )
4. 函数调用时,实参和形参之间的数据传递方式只有值传递。( )
5. 函数原型只是为了让编译器知道函数的返回值类型和参数情况,不一定要和函数定义完全一致。( )
6. 当数组元素作为函数参数时,是值传递,函数内部对参数的修改不会影响原数组元素。( )
7. 数组名作为函数参数传递的是数组的首地址,函数内部可以通过该地址修改原数组的元素。( )
8. 静态变量在程序运行期间只初始化一次,之后每次进入函数时,会保留上次的值。( )
9. 函数的嵌套调用和递归调用本质上是一样的。( )
10. 全局变量的作用域是从定义处到文件末尾,可以被文件内的所有函数访问。( )
三、填空题(本大题共5小题,每题2分,共10分)
1. 函数定义的一般形式为:______ 函数名 (形参列表) {函数体}。
2. 若函数返回值类型为 ______,表示该函数没有返回值。
3. 函数 ______ 的作用是让编译器在调用函数前进行参数类型检查。
4. 当数组名作为函数参数时,传递的是数组的 ______。
5. 若要在一个文件中使用另一个文件中定义的全局变量,需要使用 ______ 关键字进行声明。
四、读程序写结果题(本大题共5小题,每题5分,共25分)
1.以下程序的运行结果是______。
#include <stdio.h>
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 2, y = 4;
swap(x, y);
printf("%d %d
", x, y);
return 0;
}
2.以下程序的运行结果是______。
#include <stdio.h>
void modifyArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
arr[i] *= 2;
}
}
int main() {
int arr[] = {1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
modifyArray(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
3.以下程序的运行结果是______。
#include <stdio.h>
int sum(int arr[], int n) {
if (n == 0) {
return 0;
} else {
return arr[n - 1] + sum(arr, n - 1);
}
}
int main() {
int arr[] = {1, 2, 3, 4};
int size = sizeof(arr) / sizeof(arr[0]);
int result = sum(arr, size);
printf("%d
", result);
return 0;
}
4.以下程序的运行结果是______。
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int operate(int x, int y, int (*func)(int, int)) {
return func(x, y);
}
int main() {
int num1 = 10;
int num2 = 5;
int sum = operate(num1, num2, add);
printf("两数之和为: %d
", sum);
int difference = operate(num1, num2, subtract);
printf("两数之差为: %d
", difference);
return 0;
}
5.以下程序的运行结果是______。
#include <stdio.h>
void func(int a) {
int b = 2;
static int c = 3;
a += b + c;
b++;
c++;
printf("%d %d %d
", a, b, c);
}
int main() {
int x = 1;
func(x);
func(x);
return 0;
}
五、编程题(本大题共5小题,每题5分,共25分)
1. 编写一个递归函数,用于计算斐波那契数列的第 n 项。斐波那契数列定义为:F(0) = 0, F(1) = 1,F(n)=F(n-1)+F(n-2)(n>1)。要求在 main 函数中接收用户输入的 n 值,调用递归函数计算结果并输出。
2.编写一个函数 bubbleSort,使用数组名作为参数,对传入的整数数组进行冒泡排序。在 main 函数中初始化一个数组,调用 bubbleSort 函数进行排序并输出排序后的数组。
3.编写一个递归函数 sumArray,用于计算数组元素的和。在 main 函数中初始化一个数组,调用 sumArray 函数计算并输出数组元素的和。
4.编写一个函数 factorial 用于计算一个数的阶乘,再编写一个函数 combination 调用 factorial 函数计算组合数 。在 main 函数中接收用户输入的 n 和 k 值,调用 combination 函数计算并输出结果。
5.编写一个函数 testScope,在函数内部定义一个普通局部变量 a、一个静态局部变量 b 和一个全局变量 c(在函数外部定义)。每次调用 testScope 函数时,输出这三个变量的值,并对它们进行修改。在 main 函数中多次调用 testScope 函数,观察变量值的变化。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$