第45练 第8章 字符串与指针(字符串的表示形式、字符数组与字符串指针变量比较)《C语言程序设计》(电子工业出版社)一课一练
|
2份
|
6页
|
37人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第45练,内容涵盖第8章指针的8.4 字符串与指针(字符串的表示形式、字符数组与字符串指针变量比较)。
《C语言程序设计》(电子工业出版社)一课一练 第45练
第8章 指针
8.4 字符串与指针(字符串的表示形式、字符数组与字符串指针变量比较)
1、 单项选择题(本题共4小题)
1、下列关于字符串指针变量的赋值操作,正确的是( )
A. char a [10]; a = "hello";
B. char *p; *p = "hello";
C. char *p; p = "hello";
D. char a [10]; a [0] = "hello";
2、字符数组和字符串指针变量的核心区别是( )
A. 字符数组存单个字符的集合,指针变量存字符串的首地址
B. 字符数组存字符串的首地址,指针变量存字符
C. 两者都能直接整体赋值字符串
D. 两者都可以随意修改指向的地址
3、已知有定义char a[] = "I love C"; char *p = a;,下列操作合法的是( )
A. a++;
B. p++;
C. a = p;
D. a [0] = p;
4、已知char *p = "program";,下列选项中能正确引用字符 'r' 的是( )
A. p+2
B. *(p+2)
C. p [2]
D. 以上 B 和 C 都正确
2、 判断题(本题共3题)
1、字符串指针变量中存储的是整个字符串的所有字符内容。( )
2、字符数组的数组名是一个常量,不能对其进行自增(a++)或赋值操作。( )
3、字符串指针变量可以像字符数组一样,使用下标形式引用字符串中的单个字符。( )
3、 填空题(本题共2题)
1、字符串指针变量的核心存储内容是____,它本身并不存储字符串的字符内容。
2、已知char *p;,给 p 赋值字符串 "student" 的正确 C 语言语句是____,而字符数组不能直接使用该方式赋值字符串。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
char *str = "Welcome to C!";
str += 8;
printf("%s", str);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第45练,内容涵盖第8章指针的8.4 字符串与指针(字符串的表示形式、字符数组与字符串指针变量比较)。
《C语言程序设计》(电子工业出版社)一课一练 第45练
第8章 指针
8.4 字符串与指针(字符串的表示形式、字符数组与字符串指针变量比较)
1、 单项选择题(本题共4小题)
1、下列关于字符串指针变量的赋值操作,正确的是( )
A. char a [10]; a = "hello";
B. char *p; *p = "hello";
C. char *p; p = "hello";
D. char a [10]; a [0] = "hello";
【答案】C
【解析】字符数组不能直接整体赋值字符串(A 错误),字符串指针变量可以直接赋值字符串的首地址(C 正确);*p表示指针指向的字符,不能赋值字符串(B 错误);a[0]是单个字符,不能赋值字符串(D 错误)。
2、字符数组和字符串指针变量的核心区别是( )
A. 字符数组存单个字符的集合,指针变量存字符串的首地址
B. 字符数组存字符串的首地址,指针变量存字符
C. 两者都能直接整体赋值字符串
D. 两者都可以随意修改指向的地址
【答案】A
【解析】字符数组的存储空间用于存放字符串的每个字符(含 '\0');字符串指针变量本身只存储字符串在内存中的首地址,不存储字符;字符数组不能直接整体赋值字符串,数组名是常量不能修改地址,只有 A 描述正确。
3、已知有定义char a[] = "I love C"; char *p = a;,下列操作合法的是( )
A. a++;
B. p++;
C. a = p;
D. a [0] = p;
【答案】B
【解析】数组名 a 是常量,不能进行自增、赋值等修改操作(A、C 错误);a[0]是单个字符,不能赋值指针变量 p 的地址值(D 错误);指针变量 p 是变量,可以自增移动指向的地址(B 正确)。
4、已知 char *p = "program";,下列选项中能正确引用字符 'r' 的是( )
A. p+2
B. *(p+1)
C. p[2]
D. 以上 B 和 C 都正确
【答案】B
【解析】本题考查字符指针与字符串的索引规则,字符串 "program" 的字符下标从 0 开始计数,p[0]='p'、p[1]='r'、p[2]='o'。其中p+2表示下标为 2 的字符的地址,并非字符本身;*(p+1)通过指针偏移访问内存单元,等价于p[1],可正确引用字符'r';p[2]访问的是下标为 2 的字符'o',不符合题目要求,因此选项 B 正确。
2、 判断题(本题共3题)
1、字符串指针变量中存储的是整个字符串的所有字符内容。( )
【答案】×
【解析】字符串指针变量的存储空间仅用于存储字符串在内存中的首地址,字符串的字符内容实际存放在内存的连续单元中,指针只是指向这个起始位置。
2、字符数组的数组名是一个常量,不能对其进行自增(a++)或赋值操作。( )
【答案】√
【解析】字符数组名代表数组的首地址,是固定不变的常量,因此不能通过自增修改其值,也不能直接赋值其他地址或内容。
3、字符串指针变量可以像字符数组一样,使用下标形式引用字符串中的单个字符。( )
【答案】√
【解析】C 语言允许字符串指针变量使用下标(如 p [i])引用字符,本质等价于 *(p+i),通过指针偏移访问对应位置的字符。
3、 填空题(本题共2题)
1、字符串指针变量的核心存储内容是____,它本身并不存储字符串的字符内容。
【答案】字符串在内存中的首地址
【解析】字符串指针变量的作用是指向字符串的起始位置,通过存储的首地址可以间接访问内存中的字符串字符。这一特性使得指针可以灵活切换指向不同的字符串,节省存储空间。
2、已知char *p;,给 p 赋值字符串 "student" 的正确 C 语言语句是____,而字符数组不能直接使用该方式赋值字符串。
【答案】p = "student";
【解析】字符串指针变量可以直接接收字符串常量的首地址,完成指向操作。字符数组只能在初始化时整体赋值字符串,后续无法通过数组名整体赋值,只能逐个元素修改。
4、 读程序写结果题(本题共1题)
1、阅读下面的 C 语言程序,写出程序运行后的输出结果。
【程序代码】
#include <stdio.h>
int main() {
char *str = "Welcome to C!";
str += 8;
printf("%s", str);
return 0;
}
【答案】
程序运行结果:
to C!
【解析】
指针变量 str 初始指向字符串 "Welcome to C!" 的首地址,执行str += 8后,指针向后偏移 8 个字符的位置,指向字符 't' 的地址。printf("%s", str)会从当前指针指向的地址开始输出字符串,直到遇到结束符 '\0',因此输出 "to C!"。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$