第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]的值,实际就是修改实参数组的对应元素,因此主函数输出修改后的数组元素值。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第36练 第7章 数组名作为函数参数《C语言程序设计》(电子工业出版社)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。