第43练 第8章 指针与一维数组《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
7页
|
27人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第43练,内容涵盖第8章指针的8.3.1 指针与一维数组。
《C语言程序设计》(电子工业出版社)一课一练 第43练
第8章 指针
8.3.1 指针与一维数组
1、 单项选择题(本题共4小题)
1、关于 C 语言中数组名的性质,下列描述正确的是( )
A. 数组名是变量,可以进行自增(a++)操作
B. 数组名是数组的首地址,是一个常量,不能被修改
C. 数组名可以直接赋值给普通整型变量
D. 数组名代表整个数组的所有元素值
2、已知有定义int a[5] = {1,2,3,4,5}, *p = a;,下列选项中不能正确引用数组元素 a [2] 的是( )
A. a [2]
B. *(p+2)
C. *(a+2)
D. p+2
3、若有定义int a[10]; int *p = a;,且数组 a 的首地址是 2000(int 类型占 4 字节),则执行p++后,p 的值为( )
A. 2004
B. 2001
C. 2002
D. 2010
4、下列关于指针变量和数组名的区别,说法错误的是( )
A. 指针变量是变量,可以被重新赋值指向其他同类型变量
B. 数组名是常量,不能被重新赋值
C. 指针变量可以进行自增、自减操作,数组名不行
D. 指针变量和数组名完全等价,可以任意替换使用
2、 判断题(本题共3题)
1、C 语言中,数组名可以像指针变量一样执行自增操作,比如int a[5]; a++;是合法的。( )
2、指针变量指向一维数组后,通过*(p+i)的方式可以引用数组的第 i+1 个元素(i 从 0 开始),和下标法a[i]完全等价。( )
3、可以将一维数组的任意元素的地址赋值给同类型的指针变量,让指针指向该元素。( )
3、 填空题(本题共2题)
1、C 语言中,一维数组的数组名本质是____,其值固定不能被修改。
2、已知int a[5], *p = a;,则引用数组元素 a [3] 的指针法写法为____,该写法和下标法a[3]完全等价。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
int arr[4] = {1,3,5,7};
int *p = arr;
while(p < arr + 4) {
printf("%d ", *p++);
}
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第43练,内容涵盖第8章指针的8.3.1 指针与一维数组。
《C语言程序设计》(电子工业出版社)一课一练 第43练
第8章 指针
8.3.1 指针与一维数组
1、 单项选择题(本题共4小题)
1、关于 C 语言中数组名的性质,下列描述正确的是( )
A. 数组名是变量,可以进行自增(a++)操作
B. 数组名是数组的首地址,是一个常量,不能被修改
C. 数组名可以直接赋值给普通整型变量
D. 数组名代表整个数组的所有元素值
【答案】B
【解析】数组名本质是数组的首地址常量,其值固定不能修改,因此不能进行自增、赋值等操作;数组名仅代表首地址,不是整个数组的元素值,也不能直接赋值给普通整型变量。
2、已知有定义int a[5] = {1,2,3,4,5}, *p = a;,下列选项中不能正确引用数组元素 a [2] 的是( )
A. a [2]
B. *(p+2)
C. *(a+2)
D. p+2
【答案】D
【解析】p+2表示的是数组元素 a [2] 的内存地址,不是元素的值;而*(p+2)、*(a+2)和a[2]都等价于引用 a [2] 的值,因此 D 不能正确引用元素值。
3、若有定义int a[10]; int *p = a;,且数组 a 的首地址是 2000(int 类型占 4 字节),则执行p++后,p 的值为( )
A. 2004
B. 2001
C. 2002
D. 2010
【答案】A
【解析】指针变量的加减运算会根据指向的类型自动调整步长,int 类型占 4 字节,因此 p++ 会让指针的值增加 4,指向数组的下一个元素,2000+4=2004。
4、下列关于指针变量和数组名的区别,说法错误的是( )
A. 指针变量是变量,可以被重新赋值指向其他同类型变量
B. 数组名是常量,不能被重新赋值
C. 指针变量可以进行自增、自减操作,数组名不行
D. 指针变量和数组名完全等价,可以任意替换使用
【答案】D
【解析】指针变量是变量,支持赋值、自增等操作;数组名是常量,不支持这些操作,二者不完全等价,比如不能对数组名执行 a++ 操作,因此 D 的描述错误。
2、 判断题(本题共3题)
1、C 语言中,数组名可以像指针变量一样执行自增操作,比如int a[5]; a++;是合法的。( )
【答案】×
【解析】数组名是数组的首地址常量,其值固定不能被修改,自增操作会改变其值,因此该语句是非法的,编译会报错。
2、指针变量指向一维数组后,通过*(p+i)的方式可以引用数组的第 i+1 个元素(i 从 0 开始),和下标法a[i]完全等价。( )
【答案】√
【解析】C 语言编译时,下标法a[i]会自动转换为*(a+i)的指针形式,二者在执行逻辑和结果上完全一致,都是通过基地址加偏移量访问元素。
3、可以将一维数组的任意元素的地址赋值给同类型的指针变量,让指针指向该元素。( )
【答案】√
【解析】指针变量只要指向的类型与数组类型一致,就可以通过&a[i]获取任意元素的地址并赋值给指针,实现对指定数组元素的间接访问。
3、 填空题(本题共2题)
1、C 语言中,一维数组的数组名本质是____,其值固定不能被修改。
【答案】数组的首地址
【解析】数组名代表数组在内存中的起始位置,是一个常量指针,不能进行赋值、自增等修改操作。这一性质保证了数组在内存中的存储位置不会被意外改变,避免程序出现内存访问错误。
2、已知int a[5], *p = a;,则引用数组元素 a [3] 的指针法写法为____,该写法和下标法a[3]完全等价。
【答案】*(p+3) 或 *(a+3)
【解析】指针变量 p 指向数组首地址后,p+3 表示数组第 4 个元素(下标 3)的地址,加上运算符即可访问该元素的值。C 语言编译系统会将下标法自动转换为对应的指针法,二者的执行逻辑完全相同。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
int arr[4] = {1,3,5,7};
int *p = arr;
while(p < arr + 4) {
printf("%d ", *p++);
}
return 0;
}
【答案】
程序运行结果:
1 3 5 7
【解析】
指针变量 p 初始指向数组 arr 的首地址,循环条件p < arr + 4保证指针遍历数组的 4 个元素。每次循环先输出*p(当前指针指向的元素值),再执行p++让指针移动到下一个数组元素的地址,最终依次输出数组的所有元素。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$