第31练 8.5 指针作为函数参数 + 8.6 指向结构体的指针变量 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

2026-06-25
| 2份
| 10页
| 36人阅读
| 0人下载

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第31练,内容是8.5 指针作为函数参数 + 8.6 指向结构体的指针变量。 《编程语言基础——C语言》(第5版)一课一练 第31练 8.5 指针作为函数参数 + 8.6 指向结构体的指针变量 一、单选题 1. 使用指针作为函数参数的主要目的是( ) A. 使函数能够修改调用处变量的值 B. 使函数运行速度变快 C. 减少函数中局部变量的使用 D. 使函数能返回多个值 2. 有以下两个函数:void f1(int x) { x = 100; } 和 void f2(int *x) { *x = 100; }。主函数中 int a = 10; 分别调用f1(a)和f2(&a)后,a的值分别为( ) A. 100, 10 B. 10, 100 C. 100, 100 D. 10, 10 3. 已定义 struct Student { int num; char name[20]; }; 要定义一个指向Student类型的指针p,正确的是( ) A. Student *p; B. struct *p; C. struct Student *p; D. *struct Student p; 4. 已定义 struct Point { int x; int y; } a = {3, 5}, *p = &a; 以下能正确输出a的x成员值的是( ) A. printf("%d", *p.x); B. printf("%d", p.x); C. printf("%d", *p->x); D. printf("%d", p->x); 5. 函数定义 void setScore(struct Student *p, float s) { p->score = s; } 中,调用 setScore(&stu, 90); 后( ) A. stu的score成员被修改为90 B. stu的值没有变化,因为p是形参 C. stu的地址被修改了 D. p指向了新的Student变量 6. 实现交换两个整型变量值的函数,正确定义是( ) A. void swap(int a, int b) { int t=a; a=b; b=t; } B. void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; } C. void swap(int a, int b) { int *t=&a; a=b; b=*t; } D. void swap(int *a, int *b) { int *t=a; a=b; b=t; } 7. 已定义 struct Student { int num; float score; } s[3] = {{1,80},{2,90},{3,70}}; struct Student *p = s; 则 (p+1)->score 的值是( ) A. 80 B. 70 C. 90 D. s[0]的地址 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void swap(int *x, int *y) { int t; t = *x; *x = *y; *y = t; } main() { int a = 5, b = 12; swap(&a, &b); printf("a=%d,b=%d", a, b); } 三、程序填空题 9. 以下程序的功能是:通过结构体指针输入并输出学生信息。请填空。 #include <stdio.h> struct Student { int num; char name[20]; }; void input(struct Student *p) { printf("请输入学号和姓名:"); scanf("%d%s", &p->num, 【1】); } main() { struct Student stu; input(&stu); printf("学号:%d,姓名:%s ", stu.num, stu.name); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是定义一个函数将传入的整数翻倍,并在主函数中输出翻倍后的结果。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 void doubleNum(int x) L3 { L4 x = x * 2; L5 } L6 main() L7 { L8 int a = 5; L9 doubleNum(a); L10 printf("%d ", a); L11 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第31练,内容是8.5 指针作为函数参数 + 8.6 指向结构体的指针变量。 《编程语言基础——C语言》(第5版)一课一练 第31练 8.5 指针作为函数参数 + 8.6 指向结构体的指针变量 一、单选题 1. 使用指针作为函数参数的主要目的是( ) A. 使函数能够修改调用处变量的值 B. 使函数运行速度变快 C. 减少函数中局部变量的使用 D. 使函数能返回多个值 【答案】A 【解析】C语言函数参数默认为值传递,形参是实参的副本,函数内修改形参不影响实参。使用指针作为参数时,函数通过地址间接访问和修改外部变量,实现了双向数据传递。 2. 有以下两个函数:void f1(int x) { x = 100; } 和 void f2(int *x) { *x = 100; }。主函数中 int a = 10; 分别调用f1(a)和f2(&a)后,a的值分别为( ) A. 100, 10 B. 10, 100 C. 100, 100 D. 10, 10 【答案】B 【解析】f1(a)是值传递,x是a的副本,x=100不影响a,a仍为10。f2(&a)传递a的地址,*x等价于a,*x=100修改的是a本身,因此a变为100。这就是指针参数实现双向传递的关键。 3. 已定义 struct Student { int num; char name[20]; }; 要定义一个指向Student类型的指针p,正确的是( ) A. Student *p; B. struct *p; C. struct Student *p; D. *struct Student p; 【答案】C 【解析】定义结构体指针的格式为:struct 结构体名 *指针变量名; C正确。A缺少struct关键字(除非使用了typedef);B缺少结构体名;D语法错误。定义后可以让p指向一个已有的结构体变量:p=&s。 4. 已定义 struct Point { int x; int y; } a = {3, 5}, *p = &a; 以下能正确输出a的x成员值的是( ) A. printf("%d", *p.x); B. printf("%d", p.x); C. printf("%d", *p->x); D. printf("%d", p->x); 【答案】D 【解析】p是指向结构体变量a的指针,通过指针访问结构体成员有两种等价方式:(*p).x 和 p->x。->是专门用于结构体指针访问成员的运算符。A中.优先级高于*;B中p不是结构体变量;C多了一个*。 5. 函数定义 void setScore(struct Student *p, float s) { p->score = s; } 中,调用 setScore(&stu, 90); 后( ) A. stu的score成员被修改为90 B. stu的值没有变化,因为p是形参 C. stu的地址被修改了 D. p指向了新的Student变量 【答案】A 【解析】函数接收结构体指针p(指向stu),p->score=s等价于(*p).score=s,即stu.score=s。通过指针参数,函数直接修改了stu的score成员。这是指针参数在实际编程中的重要应用。 6. 实现交换两个整型变量值的函数,正确定义是( ) A. void swap(int a, int b) { int t=a; a=b; b=t; } B. void swap(int *a, int *b) { int t=*a; *a=*b; *b=t; } C. void swap(int a, int b) { int *t=&a; a=b; b=*t; } D. void swap(int *a, int *b) { int *t=a; a=b; b=t; } 【答案】B 【解析】要交换两个外部变量的值,必须使用指针参数。B中*a和*b访问a和b指向的变量,通过临时变量t完成值交换。A是值传递,形参的改变不返回;C同样值传递无效;D交换的是指针本身而非指向的值。 7. 已定义 struct Student { int num; float score; } s[3] = {{1,80},{2,90},{3,70}}; struct Student *p = s; 则 (p+1)->score 的值是( ) A. 80 B. 70 C. 90 D. s[0]的地址 【答案】C 【解析】p指向s[0],p+1指向s[1]。(p+1)->score等价于s[1].score=90。结构体指针的算术运算同样以结构体类型大小为步长,p+1移动到下一个结构体元素的起始地址。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void swap(int *x, int *y) { int t; t = *x; *x = *y; *y = t; } main() { int a = 5, b = 12; swap(&a, &b); printf("a=%d,b=%d", a, b); } 【答案】a=12,b=5 【解析】swap函数通过指针参数交换两个变量的值。调用swap(&a,&b)时:t=*x即t=5,*x=*y即a=b=12,*y=t即b=5。由于传递的是地址,函数直接修改了main中的a和b,输出a=12,b=5。 三、程序填空题 9. 以下程序的功能是:通过结构体指针输入并输出学生信息。请填空。 #include <stdio.h> struct Student { int num; char name[20]; }; void input(struct Student *p) { printf("请输入学号和姓名:"); scanf("%d%s", &p->num, 【1】); } main() { struct Student stu; input(&stu); printf("学号:%d,姓名:%s ", stu.num, stu.name); } 【答案】【1】p->name 【解析】input函数通过结构体指针p接收学生信息。p->num是int成员,需要&p->num取地址传给scanf;p->name是字符数组名,本身代表首地址,直接传给scanf即可。->是结构体指针访问成员的运算符。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是定义一个函数将传入的整数翻倍,并在主函数中输出翻倍后的结果。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 void doubleNum(int x) L3 { L4 x = x * 2; L5 } L6 main() L7 { L8 int a = 5; L9 doubleNum(a); L10 printf("%d ", a); L11 } 【答案】【1】L2-L4: void doubleNum(int x) { x = x * 2; } → 应改为 void doubleNum(int *x) { *x = *x * 2; };同时 L9改为 doubleNum(&a);(值传递不能修改实参,需改为指针参数实现双向传递) 【解析】L2的函数使用值传递,形参x是实参a的副本,函数内x=x*2不影响a的值。要修改外部变量a,需要改为指针参数:形参为int *x,函数内用*x=*x*2,调用时传&a。这是指针作为函数参数最经典的应用。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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