第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',否则输出时会出现乱码,保证字符串的完整性和合法性。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第35练 单元8 指针与一维数组(数组名即首地址、指针运算)《C语言程序设计》(高教版第2版)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。