第8章 第46练 指针作为函数参数《编程语言基础-C语言》(高教版第5版)一课一练

2026-05-08
| 2份
| 5页
| 37人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第46练,内容涵盖第8章 指针的8.5指针作为函数参数。 《编程语言基础-C语言》(高教版第5版)第46练 第8章 指针 8.5 指针作为函数参数(解析版) 一、单项选择题(本题共5小题) 1、若需要在被调函数中修改主调函数中普通变量的值,则函数参数应定义为( ) A. 普通变量 B. 指针变量 C. 全局变量 D. 静态变量 【答案】B 【解析】C语言中函数参数默认是值传递,形参的改变不影响实参。若要在函数内修改实参的值,必须传递变量的地址(即指针),函数内通过解引用修改。 2、以下程序段中,能正确实现两个整型变量值交换的函数是( ) A. void swap(int a, int b) { int t=a; a=b; b=t; } B. void swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; } C. void swap(int *a, int *b) { int *t; t=a; a=b; b=t; } D. void swap(int a, int b) { int *t; *t=a; a=b; b=*t; } 【答案】B 【解析】通过指针传递地址,在函数内交换指针指向的值,可改变实参。 3、若有函数定义 void modify(int *p, int n),调用该函数使数组 arr 的第一个元素加10,正确的调用是( ) A. modify(arr[0], 10); B. modify(&arr[0], 10); C. modify(arr, 10); D. B和C都正确 【答案】D 【解析】函数期望第一个参数为指向 int 的指针。&arr[0] 是第一个元素的地址,arr 数组名在表达式中退化为首元素地址,两者均可。因此B和C都正确。A传递的是元素值,不是地址。 4、以下程序运行后的输出结果是( ) #include <stdio.h> void fun(int *x, int *y) { int t = *x; *x = *y; *y = t; } main() { int a = 3, b = 5; fun(&a, &b); printf("%d,%d", a, b); } A. 3,5 B. 5,3 C. 3,3 D. 5,5 【答案】B 【解析】fun 函数通过指针交换了 a 和 b 的值。调用时传入地址,函数内修改指针所指向的内容,实参 a 和 b 的值被交换,输出 5,3。 5、以下关于指针作为函数参数的描述,错误的是( ) A. 指针作为参数可以实现在函数内部修改外部变量的值 B. 指针作为参数时,实参必须是变量的地址 C. 用指针作为参数可以传递数组,因为数组名就是地址 D. 指针作为参数时,形参的改变会直接改变实参指针的值 【答案】D 【解析】指针作为参数时,实参的地址值复制给形参指针变量(值传递),形参指针的改变(如 p++)不会影响实参指针的值。但通过形参可以修改实参指针所指向的内容。 二、判断题(本题共5小题) 1、使用指针作为函数参数可以实现“双向”的数据传递,即主调函数和被调函数之间可以相互传递数据。( ) 【答案】√ 【解析】一般函数参数只能从实参单向传给形参。但若传递指针,被调函数可通过指针修改主调函数中的变量,从而实现“双向”传递——主调传地址,被调传回修改后的值。 2、若有函数原型 void swap(int *p1, int *p2);,则调用 swap(&a, &b); 时,实参和形参的结合方式是值传递,传递的是变量的地址值。( ) 【答案】√ 【解析】C语言中所有参数传递都是值传递。传递指针时,实参把地址值复制给形参,形参得到副本。但通过该地址可访问原变量。因此说法正确。 3、只要函数的参数是指针类型,就一定能修改主调函数中对应变量的值。( ) 【答案】× 【解析】不一定。如果指针参数接收的是地址,但函数内没有对该地址指向的内容进行修改,则不能改变实参变量的值。另外,如果指针指向常量或只读区域,也无法修改。 4、传递指针与传递数组名作为参数的效果完全相同,因为在函数内都可以通过下标或指针运算修改原数组元素。( ) 【答案】√ 【解析】数组名作为实参时,编译器将其转换为首元素地址,函数形参可写为指针或数组形式。通过形参(指针)可修改原数组元素,效果与传递指针一致。因此正确。 5、以下程序段可以正确通过指针参数返回两个整数中的较小值。( ) void getMin(int x, int y, int *min) { if (x < y) min = &x; else min = &y; } main() { int a=5, b=3, result; getMin(a, b, &result); printf("%d", result); } 【答案】× 【解析】程序错误。函数内只改变了形参指针 min 的指向,并未将较小值赋给 result。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第46练,内容涵盖第8章 指针的8.5指针作为函数参数。 《编程语言基础-C语言》(高教版第5版)第46练 第8章 指针 8.5 指针作为函数参数(原卷版) 一、单项选择题(本题共5小题) 1、若需要在被调函数中修改主调函数中普通变量的值,则函数参数应定义为( ) A. 普通变量 B. 指针变量 C. 全局变量 D. 静态变量 2、以下程序段中,能正确实现两个整型变量值交换的函数是( ) A. void swap(int a, int b) { int t=a; a=b; b=t; } B. void swap(int *a, int *b) { int t; t=*a; *a=*b; *b=t; } C. void swap(int *a, int *b) { int *t; t=a; a=b; b=t; } D. void swap(int a, int b) { int *t; *t=a; a=b; b=*t; } 3、若有函数定义 void modify(int *p, int n),调用该函数使数组 arr 的第一个元素加10,正确的调用是( ) A. modify(arr[0], 10); B. modify(&arr[0], 10); C. modify(arr, 10); D. B和C都正确 4、以下程序运行后的输出结果是( ) #include <stdio.h> void fun(int *x, int *y) { int t = *x; *x = *y; *y = t; } main() { int a = 3, b = 5; fun(&a, &b); printf("%d,%d", a, b); } A. 3,5 B. 5,3 C. 3,3 D. 5,5 5、以下关于指针作为函数参数的描述,错误的是( ) A. 指针作为参数可以实现在函数内部修改外部变量的值 B. 指针作为参数时,实参必须是变量的地址 C. 用指针作为参数可以传递数组,因为数组名就是地址 D. 指针作为参数时,形参的改变会直接改变实参指针的值 二、判断题(本题共5小题) 1、使用指针作为函数参数可以实现“双向”的数据传递,即主调函数和被调函数之间可以相互传递数据。( ) 2、若有函数原型 void swap(int *p1, int *p2);,则调用 swap(&a, &b); 时,实参和形参的结合方式是值传递,传递的是变量的地址值。( ) 3、只要函数的参数是指针类型,就一定能修改主调函数中对应变量的值。( ) 4、传递指针与传递数组名作为参数的效果完全相同,因为在函数内都可以通过下标或指针运算修改原数组元素。( ) 5、以下程序段可以正确通过指针参数返回两个整数中的较小值。( ) void getMin(int x, int y, int *min) { if (x < y) min = &x; else min = &y; } main() { int a=5, b=3, result; getMin(a, b, &result); printf("%d", result); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第8章 第46练 指针作为函数参数《编程语言基础-C语言》(高教版第5版)一课一练
1
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。