内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第45练,内容涵盖第8章 指针的8.4指向字符串的指针变量。
《编程语言基础-C语言》(高教版第5版)第45练
第8章 指针
8.4 指向字符串的指针变量(原卷版)
一、单项选择题(本题共5小题)
1、以下关于字符串指针的说法,正确的是( )
A. char *p = "Hello"; 定义了一个字符指针变量 p,并将字符串常量的首地址赋值给 p
B. char *p = "Hello"; 等价于 char p[] = "Hello";
C. 可以通过 p[0] = 'h'; 修改字符串常量的内容
D. char *p; 定义后可以直接使用 gets(p); 输入字符串
2、若有定义 char str[10] = "C语言"; char *p = str;,则以下引用字符串的方式错误的是( )
A. printf("%s", str);
B. printf("%s", p);
C. printf("%c", *p);
D. printf("%s", &str[0]);
3、以下程序段的输出结果是( )
#include <stdio.h>
main() {
char *p = "abcdef";
p += 2;
printf("%s", p);
}
A. abcdef
B. cdef
C. ab
D. bcdef
4、以下关于字符数组和字符指针变量的叙述,正确的是( )
A. 字符数组名和字符指针变量都是常量,不能自增
B. 字符数组名是常量,而字符指针变量是变量,可以改变指向
C. 字符数组和字符指针变量在内存中都是分配在栈区
D. 两者完全等价,可以互换使用
5、下列选项中,能正确将字符串 "world" 连接到字符串 "hello " 后面的代码段是( )
A. char s1[20] = "hello "; char *s2 = "world"; strcat(s1, s2);
B. char *s1 = "hello "; char *s2 = "world"; strcat(s1, s2);
C. char s1[20] = "hello "; char s2[] = "world"; s1 = s1 + s2;
D. char s1[20] = "hello "; char *s2 = "world"; s1 += s2;
二、判断题(本题共5小题)
1、可以使用 char *p = "hello"; 定义指针变量并指向字符串常量,但不能通过 p 修改字符串内容。( )
2、定义 char str[10] = "abc"; 与 char *p = "abc"; 后,sizeof(str) 与 sizeof(p) 的值相同。( )
3、若有 char *p = "China";,则 *(p+2) 是字符 'i'。( )
4、以下程序段可以正确输出字符串的长度( )
char *p = "hello";
int len = 0;
while (*(p++)) len++;
printf("%d", len);
5、定义 char *p = "hello"; 后,可以使用 p[0] = 'H'; 将字符串首字母改为大写。( )
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《编程语言基础-C语言》(高教版第5版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《编程语言基础-C语言》(高教版第5版)一课一练的第8章的第45练,内容涵盖第8章 指针的8.4指向字符串的指针变量。
《编程语言基础-C语言》(高教版第5版)第45练
第8章 指针
8.4 指向字符串的指针变量(解析版)
一、单项选择题(本题共5小题)
1、以下关于字符串指针的说法,正确的是( )
A. char *p = "Hello"; 定义了一个字符指针变量 p,并将字符串常量的首地址赋值给 p
B. char *p = "Hello"; 等价于 char p[] = "Hello";
C. 可以通过 p[0] = 'h'; 修改字符串常量的内容
D. char *p; 定义后可以直接使用 gets(p); 输入字符串
【答案】A
【解析】选项A正确,char *p = "Hello"; 使 p 指向字符串常量 "Hello" 的首地址。选项B错误,字符数组 char p[] = "Hello"; 会在栈中分配空间并复制字符串,而指针指向常量区,两者内存不同。选项C错误,字符串常量通常存储在只读存储区,修改会导致未定义行为。D错误,p 未初始化,不能直接用于输入。
2、若有定义 char str[10] = "C语言"; char *p = str;,则以下引用字符串的方式错误的是( )
A. printf("%s", str);
B. printf("%s", p);
C. printf("%c", *p);
D. printf("%s", &str[0]);
【答案】D
【解析】*p 是 p 所指向的第一个字符 'C',是一个字符,不是字符串地址。
3、以下程序段的输出结果是( )
#include <stdio.h>
main() {
char *p = "abcdef";
p += 2;
printf("%s", p);
}
A. abcdef
B. cdef
C. ab
D. bcdef
【答案】B
【解析】p 初始指向字符串 "abcdef" 的首地址(字符 'a')。p += 2; 使指针向后移动2个字符,指向 'c'。printf("%s", p) 从 'c' 开始输出直到结束符,得到 "cdef"。
4、以下关于字符数组和字符指针变量的叙述,正确的是( )
A. 字符数组名和字符指针变量都是常量,不能自增
B. 字符数组名是常量,而字符指针变量是变量,可以改变指向
C. 字符数组和字符指针变量在内存中都是分配在栈区
D. 两者完全等价,可以互换使用
【答案】B
【解析】字符数组名代表数组首地址,是一个地址常量,不能进行自增或赋值运算;而字符指针变量是变量,可以改变指向。
5、下列选项中,能正确将字符串 "world" 连接到字符串 "hello " 后面的代码段是( )
A. char s1[20] = "hello "; char *s2 = "world"; strcat(s1, s2);
B. char *s1 = "hello "; char *s2 = "world"; strcat(s1, s2);
C. char s1[20] = "hello "; char s2[] = "world"; s1 = s1 + s2;
D. char s1[20] = "hello "; char *s2 = "world"; s1 += s2;
【答案】A
【解析】选项A正确,s1 是字符数组且有足够空间,s2 是指向字符串常量的指针,strcat 可以连接。选项B错误,s1 是指向常量的指针,常量区不可修改,且空间可能不足。选项C和D语法错误,不能直接对数组名或指针使用加法连接字符串。
二、判断题(本题共5小题)
1、可以使用 char *p = "hello"; 定义指针变量并指向字符串常量,但不能通过 p 修改字符串内容。( )
【答案】√
【解析】字符串常量通常存放在只读存储区,通过指针访问时只能读取,不能修改。若尝试修改(如 p[0]='H';),行为未定义,可能导致程序崩溃。
2、定义 char str[10] = "abc"; 与 char *p = "abc"; 后,sizeof(str) 与 sizeof(p) 的值相同。( )
【答案】×
【解析】sizeof(str) 计算整个数组的字节数,为10;sizeof(p) 计算指针变量本身的字节数,在32位系统下为4,64位下为8。两者值不同。
3、若有 char *p = "China";,则 *(p+2) 是字符 'i'。( )
【答案】√
【解析】p 指向 'C',p+2 指向 'i'(因为 p[0]='C',p[1]='h',p[2]='i'),*(p+2) 即 'i'。正确。
4、以下程序段可以正确输出字符串的长度( )
char *p = "hello";
int len = 0;
while (*(p++)) len++;
printf("%d", len);
【答案】√
【解析】while (*(p++)) 先取 *p 判断是否为 '\0',然后 p 自增。当遇到结束符时循环停止,len 统计了非空字符个数,即字符串长度5。注意循环结束后 p 指向结束符之后,但 len 正确。
5、定义 char *p = "hello"; 后,可以使用 p[0] = 'H'; 将字符串首字母改为大写。( )
【答案】×
【解析】p 指向字符串常量,字符串常量是不可修改的。尝试修改会导致运行时错误(段错误)或未定义行为。如需修改,应使用字符数组 char p[] = "hello";。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$