第35练 单元8 指针与一维数组(数组名即首地址、指针运算)《C语言程序设计》(高教版第2版)一课一练
|
2份
|
7页
|
27人阅读
|
0人下载
内容正文:
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第35练,内容涵盖单元8“考试系统”的优化的 8.2.3 过指针引用字符串。
《C语言程序设计》(高教版第2版)一课一练 第35练
单元8 “考试系统”的优化
8.2.3 通过指针引用字符串
1、 单项选择题(本题共5小题)
1、关于字符指针变量指向字符串常量的本质,下列说法正确的是( )
A. 字符指针变量存储了整个字符串的所有字符内容
B. 字符指针变量存储了字符串第一个字符的内存地址
C. 字符串常量直接存放在字符指针变量的内存空间中
D. 字符指针变量一旦指向某个字符串,就不能重新指向其他字符串
2、下列赋值操作合法的是( )
A. char str [10]; str = "hello";
B. char *p; p = "hello";
C. char str [10] = "hello"; str [0] = "H";
D. char *p = "hello"; *p = "H";
3、使用字符串指针作为函数参数时,传递的内容是( )
A. 字符串的所有字符内容
B. 字符串第一个字符的内存地址
C. 字符串的长度
D. 字符串常量本身
4、已知char *p = "I am a student";,执行p += 5;后,printf("%s", p);的输出结果是( )
A. I am a student
B. am a student
C. a student
D. student
5、下列关于字符数组和字符指针的区别,描述错误的是( )
A. 字符数组名是地址常量,不能进行自增、自减运算
B. 字符指针变量是变量,可以改变其指向的内存地址
C. 字符数组在定义完成后,可以进行整体赋值
D. 字符指针变量可以直接用字符串常量赋值
2、 判断题(本题共4题)
1、字符指针变量指向字符串常量后,可以通过指针修改字符串常量的内容。( )
2、字符数组名是一个地址常量,不能对其进行赋值或自增、自减运算。( )
3、char *p = "hello";和char *p; p = "hello";这两种写法的效果完全等价。( )
4、使用%s格式符输出字符指针变量时,会从指针当前指向的位置开始输出,直到遇到 '\0' 结束。( )
3、 程序填空题(本题共1题)
1、题目描述:以下程序通过字符指针实现字符串复制功能,将源字符串的内容复制到目标字符串中,请补充缺失代码;
#include <stdio.h>
// 字符串复制函数,形参为字符指针
void str_copy( (1)____ ) {
// 遍历字符串直到遇到结束符
while( (2)____ ) {
// 将源字符赋值给目标字符
*dest = *src;
// 指针自增,指向下一个字符
(3)____;
(4)____;
}
// 为目标字符串添加结束符
(5)____;
}
int main() {
char src[] = "Hello, Pointer!";
char dest[20];
// 调用字符串复制函数
str_copy(dest, src);
printf("源字符串:%s
", src);
printf("复制后的字符串:%s
", dest);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(高教版第2版)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。
本卷是《C语言程序设计》(高教版第2版)一课一练的单元8的第35练,内容涵盖单元8“考试系统”的优化的 8.2.3 过指针引用字符串。
《C语言程序设计》(高教版第2版)一课一练 第35练
单元8 “考试系统”的优化
8.2.3 通过指针引用字符串
1、 单项选择题(本题共5小题)
1、关于字符指针变量指向字符串常量的本质,下列说法正确的是( )
A. 字符指针变量存储了整个字符串的所有字符内容
B. 字符指针变量存储了字符串第一个字符的内存地址
C. 字符串常量直接存放在字符指针变量的内存空间中
D. 字符指针变量一旦指向某个字符串,就不能重新指向其他字符串
【答案】B
【解析】字符指针变量的核心功能是存储内存地址,指向字符串时仅保存字符串首字符的地址,字符串实际存储在内存的只读字符数组中;且指针变量是可变的,可以重新赋值指向其他字符串。
2、下列赋值操作合法的是( )
A. char str [10]; str = "hello";
B. char *p; p = "hello";
C. char str [10] = "hello"; str [0] = "H";
D. char *p = "hello"; *p = "H";
【答案】B
【解析】选项 A 中数组名是地址常量,不能直接赋值;选项 C 中str[0]是单个字符,不能赋值字符串;选项 D 中字符串常量是只读的,不能通过指针修改其内容;选项 B 中字符指针可以直接赋值字符串常量的首地址,符合语法规则。
3、使用字符串指针作为函数参数时,传递的内容是( )
A. 字符串的所有字符内容
B. 字符串第一个字符的内存地址
C. 字符串的长度
D. 字符串常量本身
【答案】B
【解析】字符串指针作为函数参数属于地址传递,传递的是字符串首字符的地址,形参和实参指向同一片内存空间,修改形参指向的内容会同步影响实参。
4、已知char *p = "I am a student";,执行p += 5;后,printf("%s", p);的输出结果是( )
A. I am a student
B. am a student
C. a student
D. student
【答案】C
【解析】p初始指向字符串第一个字符 'I',p += 5后指针向后移动 5 个字符,指向第 6 个字符(下标从 0 开始)即 'a',%s会从当前指针位置输出到 '\0',因此输出 "a student"。
5、下列关于字符数组和字符指针的区别,描述错误的是( )
A. 字符数组名是地址常量,不能进行自增、自减运算
B. 字符指针变量是变量,可以改变其指向的内存地址
C. 字符数组在定义完成后,可以进行整体赋值
D. 字符指针变量可以直接用字符串常量赋值
【答案】C
【解析】字符数组仅能在定义时进行整体初始化,定义后只能逐个元素赋值,不能整体赋值;其他选项均符合字符数组和指针的特性。
2、 判断题(本题共4题)
1、字符指针变量指向字符串常量后,可以通过指针修改字符串常量的内容。( )
【答案】×
【解析】字符串常量存储在内存的只读区域,不允许修改其内容,通过指针修改会触发未定义行为,导致程序崩溃或异常。
2、字符数组名是一个地址常量,不能对其进行赋值或自增、自减运算。( )
【答案】√
【解析】字符数组名代表数组首元素的地址,属于常量,其值不能被修改,因此不能直接赋值或执行++、--等运算。
3、char *p = "hello";和char *p; p = "hello";这两种写法的效果完全等价。( )
【答案】√
【解析】两种写法都是让字符指针变量p指向字符串常量 "hello" 的首地址,初始化和后续赋值的逻辑一致。
4、使用%s格式符输出字符指针变量时,会从指针当前指向的位置开始输出,直到遇到 '\0' 结束。( )
【答案】√
【解析】这是 C 语言输出字符串的规则,无论是字符数组还是字符指针,%s都会从当前指针指向的地址开始遍历输出,直到遇到字符串结束符 '\0'。
3、 程序填空题(本题共1题)
1、题目描述:以下程序通过字符指针实现字符串复制功能,将源字符串的内容复制到目标字符串中,请补充缺失代码;
#include <stdio.h>
// 字符串复制函数,形参为字符指针
void str_copy( (1)____ ) {
// 遍历字符串直到遇到结束符
while( (2)____ ) {
// 将源字符赋值给目标字符
*dest = *src;
// 指针自增,指向下一个字符
(3)____;
(4)____;
}
// 为目标字符串添加结束符
(5)____;
}
int main() {
char src[] = "Hello, Pointer!";
char dest[20];
// 调用字符串复制函数
str_copy(dest, src);
printf("源字符串:%s
", src);
printf("复制后的字符串:%s
", dest);
return 0;
}
【答案】
(1) char *dest, char *src
(2) *src != '\0'
(3) src++
(4) dest++
(5) *dest = '\0'
【解析】(1) 函数需要接收目标字符串和源字符串的指针,因此定义两个字符指针形参,分别指向目标和源字符串的首地址;
(2) 循环条件判断当前源指针指向的字符是否为结束符 '\0',若不是则继续复制操作;
(3) 源指针自增,移动到下一个字符的地址,准备复制下一个内容;
(4) 目标指针同步自增,移动到下一个空内存单元,准备接收下一个字符;
(5) 复制完成后,必须在目标字符串末尾添加结束符 '\0',否则输出时会出现乱码,保证字符串的完整性和合法性。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$