第28练 8.1 指针的概念 + 8.2 指向简单变量的指针 《编程语言基础——C语言》 (第5版) 一课一练 (湖南)

2026-06-25
| 2份
| 9页
| 42人阅读
| 0人下载

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第28练,内容是8.1 指针的概念 + 8.2 指向简单变量的指针。 《编程语言基础——C语言》(第5版)一课一练 第28练 8.1 指针的概念 + 8.2 指向简单变量的指针 一、单选题 1. 关于指针,下列说法正确的是( ) A. 指针就是地址,指针变量是用来存放地址的变量 B. 指针是一种特殊的数据,其值不能改变 C. 指针变量只能存放整型数据的地址 D. 所有类型的指针变量占用相同大小的内存 2. 已定义 int a = 10; int *p; 要将变量a的地址赋给指针p,正确的语句是( ) A. p = a; B. p = &a; C. p = *a; D. *p = &a; 3. 要定义一个指向float类型变量的指针p,正确的定义语句是( ) A. float p; B. pointer float p; C. float *p; D. float &p; 4. 已定义 int a = 5; int *p = &a; 则表达式 *p + 2 的值是( ) A. 5 B. a的地址值加2 C. 2 D. 7 5. 以下指针定义和初始化中,正确的是( ) A. int a = 10; int *p = &a; B. int *p = 10; C. int a = 10; int *p = a; D. int *p = &10; 6. 有以下程序段:int x = 3, y = 8; int *p = &x; *p = y; 执行后x的值是( ) A. 3 B. 8 C. p的地址值 D. 不确定 7. int a = 1, b = 2; int *p = &a, *q = &b; p = q; 执行后,以下说法正确的是( ) A. *p的值变为2,*q变为1 B. a和b的值发生了交换 C. p指向了b,*p的值为2 D. *p和*q都指向b 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> main() { int a = 10, b = 20; int *p = &a, *q = &b; *p = *p + *q; *q = *p - *q; *p = *p - *q; printf("%d,%d", a, b); } 三、程序填空题 9. 以下程序的功能是:通过指针变量将输入的两个整数翻倍后输出。请填空。 #include <stdio.h> main() { int m, n; int *p = &m, *q = &n; printf("请输入两个整数:"); scanf("%d%d", p, q); *p = *p * 2; 【1】; printf("翻倍后:%d,%d ", m, n); } 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是通过指针输入一个整数并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 main() L3 { L4 int *p; L5 scanf("%d", p); L6 printf("%d ", *p); L7 } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《编程语言基础——C语言》(第5版)《一课一练》第28练,内容是8.1 指针的概念 + 8.2 指向简单变量的指针。 《编程语言基础——C语言》(第5版)一课一练 第28练 8.1 指针的概念 + 8.2 指向简单变量的指针 一、单选题 1. 关于指针,下列说法正确的是( ) A. 指针就是地址,指针变量是用来存放地址的变量 B. 指针是一种特殊的数据,其值不能改变 C. 指针变量只能存放整型数据的地址 D. 所有类型的指针变量占用相同大小的内存 【答案】A 【解析】指针(地址)是内存单元的编号。指针变量是专门用来存放地址的变量。不同类型的指针变量(如int*和char*)存放的都是地址,其大小取决于编译器和系统架构,通常相同,但这是实现细节而非语言保证。 2. 已定义 int a = 10; int *p; 要将变量a的地址赋给指针p,正确的语句是( ) A. p = a; B. p = &a; C. p = *a; D. *p = &a; 【答案】B 【解析】&是取地址运算符,&a表示变量a在内存中的地址。p是指针变量,可以存放地址值。p=&a将a的地址赋给p,使p指向a。A将整数值10赋给指针(类型不匹配);C语法错误(*a要求a是指针);D语义错误。 3. 要定义一个指向float类型变量的指针p,正确的定义语句是( ) A. float p; B. pointer float p; C. float *p; D. float &p; 【答案】C 【解析】定义指针变量的格式为:类型名 *指针变量名; 其中*表示该变量是指针类型。float *p定义了一个指向float型变量的指针p。A定义了普通float变量;B中pointer不是C关键字;D中&不是类型修饰符。 4. 已定义 int a = 5; int *p = &a; 则表达式 *p + 2 的值是( ) A. 5 B. a的地址值加2 C. 2 D. 7 【答案】D 【解析】*p是间接访问运算符,表示访问指针p所指向的变量,即a的值5。*p+2=5+2=7。注意区分:*p+2是先取*p的值再加2,而*(p+2)是先移动指针再加间接访问。 5. 以下指针定义和初始化中,正确的是( ) A. int a = 10; int *p = &a; B. int *p = 10; C. int a = 10; int *p = a; D. int *p = &10; 【答案】A 【解析】定义指针变量时可以同时初始化:int *p = &a; 将a的地址赋给p。B将整数10直接赋给指针(类型不匹配);C将整数值赋给指针;D不能对常量10取地址。 6. 有以下程序段:int x = 3, y = 8; int *p = &x; *p = y; 执行后x的值是( ) A. 3 B. 8 C. p的地址值 D. 不确定 【答案】B 【解析】p指向x(p=&x),*p等价于x。*p=y相当于x=y,将y的值8赋给x。通过指针可以间接修改所指向变量的值。注意这个操作修改的是x本身,p仍指向x。 7. int a = 1, b = 2; int *p = &a, *q = &b; p = q; 执行后,以下说法正确的是( ) A. *p的值变为2,*q变为1 B. a和b的值发生了交换 C. p指向了b,*p的值为2 D. *p和*q都指向b 【答案】C 【解析】p=q是将q中存放的地址(即b的地址)赋给p,使得p也指向变量b。此时*p等价于b,值为2。这个操作改变的是指针的指向,并不改变a和b的值。要交换a和b的值需要用*p和*q配合临时变量完成。 二、程序运行结果题 8. 以下程序的运行结果是【··】。 #include <stdio.h> main() { int a = 10, b = 20; int *p = &a, *q = &b; *p = *p + *q; *q = *p - *q; *p = *p - *q; printf("%d,%d", a, b); } 【答案】20,10 【解析】p指向a,q指向b。*p=*p+*q→a=10+20=30;*q=*p-*q→b=30-20=10;*p=*p-*q→a=30-10=20。通过指针实现了不借助临时变量交换a和b的值,最终a=20,b=10。 三、程序填空题 9. 以下程序的功能是:通过指针变量将输入的两个整数翻倍后输出。请填空。 #include <stdio.h> main() { int m, n; int *p = &m, *q = &n; printf("请输入两个整数:"); scanf("%d%d", p, q); *p = *p * 2; 【1】; printf("翻倍后:%d,%d ", m, n); } 【答案】【1】*q = *q * 2 【解析】p指向m,q指向n。scanf中p、q本身就是地址,直接传入即可。*p=*p*2将m翻倍。需要对称地填写*q=*q*2将n也翻倍。最终通过m和n输出结果,验证了指针修改变量的效果。 四、阅读程序改错题 10. 阅读以下程序,该程序的功能是通过指针输入一个整数并输出。程序中有1处错误,请指出错误所在行号并修改正确,不许增删行,在原行上修改。 L1 #include <stdio.h> L2 main() L3 { L4 int *p; L5 scanf("%d", p); L6 printf("%d ", *p); L7 } 【答案】【1】L4-L5: int *p; scanf("%d", p); → 应改为 int a, *p = &a; scanf("%d", p);(指针p定义后未初始化,指向的内存不确定,向不确定地址写入数据会导致程序崩溃) 【解析】指针变量在使用前必须初始化,使其指向合法的内存空间。未初始化的指针(野指针)中存放的是随机值,向其指向的地址写入数据会访问非法内存,导致程序崩溃等不可预期的行为。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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