第46练 第8章 用数组名作函数参数《C语言程序设计》(电子工业出版社)一课一练

| 2份
| 7页
| 32人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第46练,内容涵盖第8章指针的8.5 用数组名作函数参数。 《C语言程序设计》(电子工业出版社)一课一练 第46练 第8章 指针 8.5 用数组名作函数参数 1、 单项选择题(本题共4小题) 1、当用数组名作函数实参时,传递给形参的是( ) A. 数组的首地址 B. 数组中第一个元素的值 C. 整个数组的所有元素值 D. 数组元素的个数 【答案】A 【解析】数组名本质是数组的首地址,作为实参传递时,形参接收的是这个地址,因此形参和实参指向同一块内存空间,修改形参指向的元素会影响实参数组,选项A 正确,其他选项不符合数组名传参的本质。 2、下列关于函数实参和形参对应关系的描述中,错误的是( ) A. 实参为数组名,形参为数组名 B. 实参为指针变量,形参为指针变量 C. 实参为数组名,形参为普通变量 D. 实参为指针变量,形参为数组名 【答案】C 【解析】数组名传递的是地址,形参必须是能接收地址的类型(数组名或指针变量),普通变量无法接收地址,因此这种对应关系不合法;其他三种都是符合规则的对应方式。 3、若用指针变量作为函数实参,下列操作正确的是( ) A. 直接将未初始化的指针变量作为实参传递 B. 先让指针变量指向一个已定义的数组,再作为实参传递 C. 将指针变量的值直接赋值为数组元素的值后传递 D. 将指针变量定义为全局变量即可直接传递 【答案】B 【解析】指针变量做实参时,必须指向有效的内存空间(比如已定义的数组),否则函数中访问指针会导致程序错误;选项 A 未初始化的指针指向未知内存,选项 C 赋值元素值而非地址,选项 D 全局指针也需要初始化指向有效空间,只有 B 正确。 4、已知主函数中有数组int arr[5] = {1,2,3,4,5};,调用函数void modify(int *x){*x = 10;}时,实参为arr,则主函数中arr[0]的值变为( ) A. 10 B. 1 C. 2 D. 不确定 【答案】A 【解析】实参arr传递数组首地址给形参指针x,*x指向arr[0],修改*x的值就是修改arr[0]的值,因此arr[0]会变为 10,选项 A 正确。 2、 判断题(本题共3题) 1、用数组名作函数实参时,是将数组的所有元素值复制一份传递给形参,因此函数中修改形参数组不会影响实参数组。( ) 【答案】× 【解析】数组名作实参传递的是数组首地址,形参和实参指向同一块内存,函数中修改形参数组的元素会直接影响实参数组,并非复制元素值,因此该表述错误。 2、函数形参为数组名时,必须指定数组的所有维度大小,否则编译器会报错。( ) 【答案】× 【解析】形参数组可以省略第一维的大小,因为编译器只需要第二维(列数)来计算元素地址,比如void func(int arr[][5])是合法的写法,因此该表述错误。 3、如果用指针变量作为函数实参,必须先让指针变量指向一个已定义的数组或有效的内存空间,否则函数中访问指针会导致程序异常。( ) 【答案】√ 【解析】未指向有效空间的指针是野指针,访问野指针会导致内存访问错误,因此指针做实参前必须初始化指向合法内存,该表述符合指针使用规则。 3、 填空题(本题共2题) 1、当需要在函数中修改实参数组的元素值时,实参与形参的对应关系有 4 种,其中一种是____,形参为指针变量。 【答案】实参为数组名 【解析】数组名本质是地址,传递给指针形参后,形参可以通过指针访问并修改数组元素。这种对应方式是最常用的数组传参形式之一,能实现对实参数组的修改操作。 2、数组名作为函数参数时,编译器会自动将形参数组处理为____类型,因此形参数组和指针变量在函数中是等价的。 【答案】指向数组元素的指针变量 【解析】数组名传递的是首地址,形参数组接收后会被转换为指针变量,因此在函数中使用形参数组名和使用指针变量的效果完全一致,比如arr[i]等价于*(arr+i)。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> void add_one(int *x, int n) { for(int i=0; i<n; i++) { *(x+i) += 1; } } int main() { int nums[3] = {1,2,3}; add_one(nums, 3); for(int i=0; i<3; i++) { printf("%d ", nums[i]); } return 0; } 【答案】 程序运行结果: 2 3 4 【解析】 实参nums传递数组首地址给形参指针x,函数add_one通过*(x+i)遍历数组元素,每个元素加 1。由于形参和实参指向同一块内存,主函数中nums数组的元素值被修改,因此输出加 1 后的结果。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第46练,内容涵盖第8章指针的8.5 用数组名作函数参数。 《C语言程序设计》(电子工业出版社)一课一练 第46练 第8章 指针 8.5 用数组名作函数参数 1、 单项选择题(本题共4小题) 1、当用数组名作函数实参时,传递给形参的是( ) A. 数组的首地址 B. 数组中第一个元素的值 C. 整个数组的所有元素值 D. 数组元素的个数 2、下列关于函数实参和形参对应关系的描述中,错误的是( ) A. 实参为数组名,形参为数组名 B. 实参为指针变量,形参为指针变量 C. 实参为数组名,形参为普通变量 D. 实参为指针变量,形参为数组名 3、若用指针变量作为函数实参,下列操作正确的是( ) A. 直接将未初始化的指针变量作为实参传递 B. 先让指针变量指向一个已定义的数组,再作为实参传递 C. 将指针变量的值直接赋值为数组元素的值后传递 D. 将指针变量定义为全局变量即可直接传递 4、已知主函数中有数组int arr[5] = {1,2,3,4,5};,调用函数void modify(int *x){*x = 10;}时,实参为arr,则主函数中arr[0]的值变为( ) A. 10 B. 1 C. 2 D. 不确定 2、 判断题(本题共3题) 1、用数组名作函数实参时,是将数组的所有元素值复制一份传递给形参,因此函数中修改形参数组不会影响实参数组。( ) 2、函数形参为数组名时,必须指定数组的所有维度大小,否则编译器会报错。( ) 3、如果用指针变量作为函数实参,必须先让指针变量指向一个已定义的数组或有效的内存空间,否则函数中访问指针会导致程序异常。( ) 3、 填空题(本题共2题) 1、当需要在函数中修改实参数组的元素值时,实参与形参的对应关系有 4 种,其中一种是____,形参为指针变量。 2、数组名作为函数参数时,编译器会自动将形参数组处理为____类型,因此形参数组和指针变量在函数中是等价的。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> void add_one(int *x, int n) { for(int i=0; i<n; i++) { *(x+i) += 1; } } int main() { int nums[3] = {1,2,3}; add_one(nums, 3); for(int i=0; i<3; i++) { printf("%d ", nums[i]); } return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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

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