第36练 第7章 数组名作为函数参数《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
48人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第36练,内容涵盖第7章函数的7.5.2 数组名作为函数参数。
《C语言程序设计》(电子工业出版社)一课一练 第36练
第7章 函数
7.5.2 数组名作为函数参数
1、 单项选择题(本题共4小题)
1、数组名作为函数参数传递时,实际传递的是( )
A. 数组的全部元素值
B. 数组的最后一个元素地址
C. 数组元素的个数
D. 数组第一个元素的地址
2、有如下函数定义和主函数代码:
void modify(int arr[]) { arr[0] = 100; }
int main() { int nums[3] = {1,2,3}; modify(nums); printf("%d", nums[0]); }
程序运行后输出的结果是( )
A. 100
B. 1
C. 2
D. 3
3、下列关于函数形参数组写法的描述,正确的是( )
A. 形参数组必须指定长度,如void func(int arr[5])
B. 形参数组可以省略长度,如void func(int arr[])
C. 形参数组不能用指针形式表示
D. 形参数组的长度必须和实参数组完全一致
4、数组名作为函数参数的传递方式,与 "值传递" 的核心区别是( )
A. 地址传递是双向传递,被调函数修改形参后会影响实参
B. 地址传递只能传递一个数据
C. 值传递可以修改实参的值
D. 两种传递方式没有本质区别
2、 判断题(本题共3题)
1、数组名作为函数参数时,属于 "值传递",被调函数修改形参数组不会影响实参数组。( )
2、函数的形参数组可以省略长度,例如void process(int arr[])的写法是合法的。( )
3、使用数组名作为函数参数时,实参和形参的类型必须完全一致,否则会出现编译错误。( )
3、 填空题(本题共2题)
1、数组名作为函数参数传递时,传递的是数组____。
2、当需要被调函数向主调函数返回一批数据时,适合采用____的方式传递参数,而非值传递。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
void setScore(int arr[]) {
arr[1] = 95;
arr[2] = 88;
}
int main() {
int scores[3] = {70, 80, 85};
setScore(scores);
printf("%d %d %d", scores[0], scores[1], scores[2]);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第7章的第36练,内容涵盖第7章函数的7.5.2 数组名作为函数参数。
《C语言程序设计》(电子工业出版社)一课一练 第36练
第7章 函数
7.5.2 数组名作为函数参数
1、 单项选择题(本题共4小题)
1、数组名作为函数参数传递时,实际传递的是( )
A. 数组的全部元素值
B. 数组的最后一个元素地址
C. 数组元素的个数
D. 数组第一个元素的地址
【答案】D
【解析】数组名本质上代表数组第一个元素的地址;数组名作为函数参数时,传递的是数组首元素地址,并不会传递全部元素值、元素个数或数组末尾元素地址。
2、有如下函数定义和主函数代码:
void modify(int arr[]) { arr[0] = 100; }
int main() { int nums[3] = {1,2,3}; modify(nums); printf("%d", nums[0]); }
程序运行后输出的结果是( )
A. 100
B. 1
C. 2
D. 3
【答案】A
【解析】数组名作为参数传递的是地址,形参数组和实参数组指向同一块内存空间。被调函数修改arr[0],实际是修改实参数组nums的首元素,因此输出 100。
3、下列关于函数形参数组写法的描述,正确的是( )
A. 形参数组必须指定长度,如void func(int arr[5])
B. 形参数组可以省略长度,如void func(int arr[])
C. 形参数组不能用指针形式表示
D. 形参数组的长度必须和实参数组完全一致
【答案】B
【解析】形参数组的长度可以省略,因为传递的是首地址,编译器不依赖形参数组长度判断数组大小;形参数组也可以用指针int *arr表示,长度不需要和实参数组完全一致,因此选项 B 正确。
4、数组名作为函数参数的传递方式,与 "值传递" 的核心区别是( )
A. 地址传递是双向传递,被调函数修改形参后会影响实参
B. 地址传递只能传递一个数据
C. 值传递可以修改实参的值
D. 两种传递方式没有本质区别
【答案】A
【解析】值传递是单向的,形参修改不影响实参;地址传递时形参和实参指向同一块内存,被调函数对形参数组的修改会同步到实参数组,属于双向的数据影响,这是核心区别,选项 A 正确。
2、 判断题(本题共3题)
1、数组名作为函数参数时,属于 "值传递",被调函数修改形参数组不会影响实参数组。( )
【答案】×
【解析】数组名作为参数传递的是地址,属于地址传递,形参和实参指向同一块内存空间,被调函数修改形参数组会同步影响实参数组,因此该表述错误。
2、函数的形参数组可以省略长度,例如void process(int arr[])的写法是合法的。( )
【答案】√
【解析】由于数组名传递的是首地址,编译器不需要形参数组的长度来确定数组范围,因此可以省略形参数组的长度,该写法符合 C 语言语法规则。
3、使用数组名作为函数参数时,实参和形参的类型必须完全一致,否则会出现编译错误。( )
【答案】√
【解析】地址传递要求实参和形参的类型匹配,比如实参是int类型数组,形参必须是int类型的数组或指针,否则无法正确访问内存单元,会导致编译错误。
3、 填空题(本题共2题)
1、数组名作为函数参数传递时,传递的是数组____。
【答案】首元素的地址
【解析】数组名在 C 语言中本质是指向首元素的地址常量,作为参数时传递的就是这个地址值。通过传递首地址,形参和实参可以指向同一块内存空间,实现对数组元素的共享修改。
2、当需要被调函数向主调函数返回一批数据时,适合采用____的方式传递参数,而非值传递。
【答案】数组名(或地址)
【解析】值传递只能通过 return 返回单个数据,无法批量修改实参数据。而数组名作为地址传递时,被调函数可以直接修改实参数组的元素,实现批量数据的返回和修改。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
void setScore(int arr[]) {
arr[1] = 95;
arr[2] = 88;
}
int main() {
int scores[3] = {70, 80, 85};
setScore(scores);
printf("%d %d %d", scores[0], scores[1], scores[2]);
return 0;
}
【答案】
程序运行结果:
70 95 88
【解析】
主函数调用setScore时,将实参数组scores的首地址传递给形参数组arr,两者指向同一块内存。setScore函数修改了arr[1]和arr[2]的值,实际就是修改实参数组的对应元素,因此主函数输出修改后的数组元素值。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$