内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第20练,内容是6.3 数组作为函数参数。
《编程语言基础——C语言》(第5版)一课一练 第20练
6.3 数组作为函数参数
一、单选题
1. 在C语言中,将数组元素作为函数实参传递给形参时,传递的方式是( )
A. 值传递——将数组元素的值复制给形参
B. 地址传递——形参直接访问原数组元素
C. 引用传递
D. 根据数组元素类型不同而不同
2. 在C语言中,用数组名作为函数参数时,实际传递的是( )
A. 数组中所有元素的值
B. 数组的首地址
C. 数组的第一个元素的值
D. 数组的长度
3. 设有 void func(int b[]) { b[0] = 100; },在main()中定义 int a[5]={1,2,3,4,5}; 调用 func(a); 后,a[0]的值是( )
A. 1
B. 不确定
C. 100
D. 编译错误
4. 以下函数定义中,合法的一维数组形参声明是( )
A. void func(int b[5]) { ... }
B. void func(int b[]) { ... }
C. void func(int *b) { ... }
D. 选项A、B、C都是合法的
5. 定义函数 void display(int b[][4], int n) 时,关于形参的说法正确的是( )
A. 二维数组形参可省略第一维大小,第二维大小不可省略
B. 二维数组形参可省略第二维大小,第一维大小不可省略
C. 第一维和第二维的大小都可以省略
D. 第一维和第二维的大小都不可省略
6. 以下二维数组形参的声明中,合法的是( )
A. void func(int a[3][]) { ... }
B. void func(int a[][4]) { ... }
C. void func(int a[][]) { ... }
D. void func(int a[3][4], int a[][4]) 中第一种写法和第二种同时合法
7. 数组名作为函数参数时,通常会在函数中额外添加一个形参表示( )
A. 数组的类型
B. 数组元素的数据类型
C. 数组的长度(元素个数)
D. 数组的最大值
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
void change(int b[])
{
int i;
for (i = 0; i < 3; i++)
b[i] = b[i] * 2;
}
main()
{
int a[3] = {1, 2, 3}, i;
change(a);
for (i = 0; i < 3; i++)
printf("%d ", a[i]);
}
三、程序填空题
9. 以下程序的功能是:定义函数sumArr计算一个整型数组所有元素的和。请填空。
#include <stdio.h>
int sumArr(int a[], int n)
{
int i, s = 0;
for (i = 0; i < n; i++)
s = 【1】;
return s;
}
main()
{
int arr[5] = {10, 20, 30, 40, 50};
printf("sum=%d
", sumArr(arr, 5));
}
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是定义printArr函数输出一个3x3矩阵。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 void printArr(int a[][], int n)
L3 {
L4 int i, j;
L5 for (i = 0; i < n; i++)
L6 {
L7 for (j = 0; j < n; j++)
L8 printf("%4d", a[i][j]);
L9 printf("
");
L10 }
L11 }
L12 main()
L13 {
L14 int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
L15 printArr(arr, 3);
L16 }
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——C语言》(第5版)《一课一练》第20练,内容是6.3 数组作为函数参数。
《编程语言基础——C语言》(第5版)一课一练 第20练
6.3 数组作为函数参数
一、单选题
1. 在C语言中,将数组元素作为函数实参传递给形参时,传递的方式是( )
A. 值传递——将数组元素的值复制给形参
B. 地址传递——形参直接访问原数组元素
C. 引用传递
D. 根据数组元素类型不同而不同
【答案】A
【解析】数组元素是普通的变量,作为函数实参时采用值传递方式,即将数组元素的值复制一份传递给形参,形参的改变不影响原数组元素的值。这与普通变量作实参一致。
2. 在C语言中,用数组名作为函数参数时,实际传递的是( )
A. 数组中所有元素的值
B. 数组的首地址
C. 数组的第一个元素的值
D. 数组的长度
【答案】B
【解析】数组名作为函数参数时,传递的不是数组中所有元素的值,而是数组在内存中的首地址。因此形参数组和实参数组共享同一段内存单元。
3. 设有 void func(int b[]) { b[0] = 100; },在main()中定义 int a[5]={1,2,3,4,5}; 调用 func(a); 后,a[0]的值是( )
A. 1
B. 不确定
C. 100
D. 编译错误
【答案】C
【解析】数组名传递的是数组首地址,形参数组b和实参数组a指向同一段内存。在func中修改b[0]实际修改的是a[0]所在的内存单元,因此a[0]变为100。
4. 以下函数定义中,合法的一维数组形参声明是( )
A. void func(int b[5]) { ... }
B. void func(int b[]) { ... }
C. void func(int *b) { ... }
D. 选项A、B、C都是合法的
【答案】D
【解析】C语言中一维数组作形参有三种等价的写法:int b[5](指定长度但编译器忽略)、int b[](不指定长度)、int *b(指针形式)。三种写法在函数中都是合法的。
5. 定义函数 void display(int b[][4], int n) 时,关于形参的说法正确的是( )
A. 二维数组形参可省略第一维大小,第二维大小不可省略
B. 二维数组形参可省略第二维大小,第一维大小不可省略
C. 第一维和第二维的大小都可以省略
D. 第一维和第二维的大小都不可省略
【答案】A
【解析】二维数组作形参时,可以省略第一维的大小,编译器不检查第一维大小;但第二维的大小不可省略,否则函数无法确定数组的排列方式(每行多少列)。
6. 以下二维数组形参的声明中,合法的是( )
A. void func(int a[3][]) { ... }
B. void func(int a[][4]) { ... }
C. void func(int a[][]) { ... }
D. void func(int a[3][4], int a[][4]) 中第一种写法和第二种同时合法
【答案】B
【解析】二维数组形参不能省略第二维大小,选项中int a[][4]符合要求。int a[3][]省略了第二维,int a[][]两维都省略,均不合法。形参中指定第一维大小不受限,但第二维大小必须给出。
7. 数组名作为函数参数时,通常会在函数中额外添加一个形参表示( )
A. 数组的类型
B. 数组元素的数据类型
C. 数组的长度(元素个数)
D. 数组的最大值
【答案】C
【解析】数组名传递的是首地址,编译器不关心数组长度。为使函数明确实参数组的长度,通常添加一个int型形参来传递数组的元素个数。如void func(int a[], int n)中的n就表示数组长度。
二、程序运行结果题
8. 以下程序的运行结果是【··】。
#include <stdio.h>
void change(int b[])
{
int i;
for (i = 0; i < 3; i++)
b[i] = b[i] * 2;
}
main()
{
int a[3] = {1, 2, 3}, i;
change(a);
for (i = 0; i < 3; i++)
printf("%d ", a[i]);
}
【答案】2 4 6
【解析】数组名a传递的是数组首地址,形参b和实参a指向同一段内存。change()中将每个元素乘以2:b[0]=2, b[1]=4, b[2]=6,同时a数组的元素也被修改。输出2 4 6。
三、程序填空题
9. 以下程序的功能是:定义函数sumArr计算一个整型数组所有元素的和。请填空。
#include <stdio.h>
int sumArr(int a[], int n)
{
int i, s = 0;
for (i = 0; i < n; i++)
s = 【1】;
return s;
}
main()
{
int arr[5] = {10, 20, 30, 40, 50};
printf("sum=%d
", sumArr(arr, 5));
}
【答案】【1】s + a[i]
【解析】函数sumArr通过循环遍历数组,每次将a[i]累加到s中,因此填s + a[i]。参数n传递了数组长度,使函数知道处理的元素个数。最终输出sum=150(10+20+30+40+50)。
四、阅读程序改错题
10. 阅读以下程序,该程序的功能是定义printArr函数输出一个3x3矩阵。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。
L1 #include <stdio.h>
L2 void printArr(int a[][], int n)
L3 {
L4 int i, j;
L5 for (i = 0; i < n; i++)
L6 {
L7 for (j = 0; j < n; j++)
L8 printf("%4d", a[i][j]);
L9 printf("
");
L10 }
L11 }
L12 main()
L13 {
L14 int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
L15 printArr(arr, 3);
L16 }
【答案】【1】L2: void printArr(int a[][], int n) → 修改为 void printArr(int a[][3], int n)(二维数组形参不能省略第二维大小,须指定列数)
【解析】二维数组作形参时,第一维大小可以省略,但第二维大小不可省略。int a[][]省略了第二维,编译器无法确定每行的列数,从而导致无法正确访问数组元素。修改为int a[][3]即可。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$