内容正文:
【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《编程语言基础——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定义后未初始化,指向的内存不确定,向不确定地址写入数据会导致程序崩溃)
【解析】指针变量在使用前必须初始化,使其指向合法的内存空间。未初始化的指针(野指针)中存放的是随机值,向其指向的地址写入数据会访问非法内存,导致程序崩溃等不可预期的行为。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$