第34练 8.4-8.5 指向字符串的指针、指针作为函数参数 《C语言》 (第五版) 一课一练 (山东省)

2026-06-24
| 2份
| 12页
| 2人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 作业-同步练
知识点 C语言概述
使用场景 同步教学
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 107 KB
发布时间 2026-06-24
更新时间 2026-06-24
作者 xkw_068401954
品牌系列 上好课·一课一练
审核时间 2026-06-24
下载链接 https://m.zxxk.com/soft/58480046.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第34练,内容是8.4-8.5 指向字符串的指针、指针作为函数参数。 《C语言》(第五版)一课一练 第34练 8.4-8.5 指向字符串的指针、指针作为函数参数 一、单选题 1. 以下能正确定义字符指针并指向字符串常量的是( ) A. char *p = 'Hello'; B. char p = "Hello"; C. char *p; *p = "Hello"; D. char *p = "Hello"; 2. 以下关于字符数组和字符指针的描述中,正确的是( ) A. 字符数组和字符指针完全相同,可以互换使用 B. 字符数组名可以被重新赋值指向新字符串 C. 字符数组可以修改其中的字符内容,字符指针指向字符串常量时不能修改内容 D. 字符指针指向字符串常量时可以修改该常量的内容 3. 设有定义 char *p = "ABCDE"; 则表达式 *(p+3) 的值是( ) A. 'D' B. 'C' C. "D" D. 'E' 4. 以下关于指针作为函数参数的叙述中,正确的是( ) A. 指针参数传递的是变量的值,函数内无法修改实参 B. 使用指针参数时,实参必须是常量 C. 指针参数与普通值参数效果完全相同 D. 指针参数使得函数可以修改调用者中的变量值 5. 以下程序片段的输出结果是 char s[] = "Hello"; char *p = s; while (*p) p++; printf("%d", p - s);( ) A. 6 B. 5 C. 4 D. 0 6. 以下代码片段中,运行时会出现错误的是( ) A. char *p = "ABC"; p[0] = 'D'; B. char s[] = "ABC"; s[0] = 'D'; C. char s[] = "ABC"; char *p = s; *p = 'D'; D. char s[] = "ABC"; char *p = s; p++; 7. 以下程序片段的输出结果是 void f(int x, int *y) { x = 100; *y = 200; } main() { int a = 1, b = 2; f(a, &b); printf("%d %d", a, b); }( ) A. 100 200 B. 1 2 C. 1 200 D. 100 2 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void copy(char *dest, char *src) { while (*src) { *dest = *src; dest++; src++; } *dest = '\0'; } main() { char a[20] = "Hello", b[20]; copy(b, a); printf("%s ", b); printf("%d ", b[0] - 'A'); } 三、案例分析题 9. 以下程序的功能是编写函数将字符串中的小写字母转为大写字母。请填空。 #include <stdio.h> void toUpper(【1】) { while (*s) { if (*s >= 'a' 【2】 *s <= 'z') *s = *s 【3】 ('a' - 'A'); s++; } } main() { char str[80]; printf("请输入字符串:"); gets(str); toUpper(str); printf("大写:%s ", str); } 四、综合应用题 10. 编写一个C程序:定义函数strCat,使用指针实现字符串连接功能(不使用strcat库函数)。函数将src指向的字符串连接到dest指向的字符串末尾。在main函数中定义两个字符数组并初始化,调用strCat函数后输出连接结果。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第34练,内容是8.4-8.5 指向字符串的指针、指针作为函数参数。 《C语言》(第五版)一课一练 第34练 8.4-8.5 指向字符串的指针、指针作为函数参数 一、单选题 1. 以下能正确定义字符指针并指向字符串常量的是( ) A. char *p = 'Hello'; B. char p = "Hello"; C. char *p; *p = "Hello"; D. char *p = "Hello"; 【答案】D 【解析】D中char *p="Hello"定义字符指针p并指向字符串常量"Hello"的首字符地址,正确。A中'Hello'单引号内不能有多个字符,字符串应用双引号。B中p是char类型变量,不能存储地址。C中*p="Hello"是对p指向的未知地址赋值,p未初始化时解引用是危险操作。 2. 以下关于字符数组和字符指针的描述中,正确的是( ) A. 字符数组和字符指针完全相同,可以互换使用 B. 字符数组名可以被重新赋值指向新字符串 C. 字符数组可以修改其中的字符内容,字符指针指向字符串常量时不能修改内容 D. 字符指针指向字符串常量时可以修改该常量的内容 【答案】C 【解析】字符数组在内存中开辟了独立空间,可以修改数组中的字符。字符指针指向字符串常量时,常量存储在不可写区域,不能通过指针修改内容。A错误,两者有本质区别:数组名是常量不能赋值,指针是变量可以改变指向。B错误,数组名是地址常量,不能被重新赋值。D错误,字符串常量不可修改。 3. 设有定义 char *p = "ABCDE"; 则表达式 *(p+3) 的值是( ) A. 'D' B. 'C' C. "D" D. 'E' 【答案】A 【解析】p指向字符串"ABCDE"的首字符'A',p+3指向第4个字符'D'(下标从0开始),*(p+3)取出字符'D'。B是*(p+2)的值。C中"D"是字符串而非字符。D是*(p+4)的值。 4. 以下关于指针作为函数参数的叙述中,正确的是( ) A. 指针参数传递的是变量的值,函数内无法修改实参 B. 使用指针参数时,实参必须是常量 C. 指针参数与普通值参数效果完全相同 D. 指针参数使得函数可以修改调用者中的变量值 【答案】D 【解析】指针参数传递的是变量的地址,函数通过间接访问可以修改调用者中变量的值,这是指针作为参数的核心优势。A描述的是值传递的特征。B错误,实参应该是变量的地址(如&a),不是常量。C错误,指针参数实现地址传递,可以修改实参指向的内容,与值传递效果不同。 5. 以下程序片段的输出结果是 char s[] = "Hello"; char *p = s; while (*p) p++; printf("%d", p - s);( ) A. 6 B. 5 C. 4 D. 0 【答案】B 【解析】p从s开始遍历,while(*p)在*p为'\0'时停止。"Hello"有5个字符加'\0',p最终指向'\0'。p-s=5(两个指针相减得到元素个数差)。这是用指针计算字符串长度的方法。 6. 以下代码片段中,运行时会出现错误的是( ) A. char *p = "ABC"; p[0] = 'D'; B. char s[] = "ABC"; s[0] = 'D'; C. char s[] = "ABC"; char *p = s; *p = 'D'; D. char s[] = "ABC"; char *p = s; p++; 【答案】A 【解析】B中s是字符数组,数组内容可以修改,合法。C中p指向字符数组s,通过p修改s[0]也是合法的。A中p指向字符串常量"ABC",字符串常量存储在只读区域,通过p[0]='D'修改常量内容会导致运行时错误。D中p++使指针后移,是合法操作。 7. 以下程序片段的输出结果是 void f(int x, int *y) { x = 100; *y = 200; } main() { int a = 1, b = 2; f(a, &b); printf("%d %d", a, b); }( ) A. 100 200 B. 1 2 C. 1 200 D. 100 2 【答案】C 【解析】f(a,&b)调用时,a是值传递,函数内x=100修改的是形参x,不影响实参a,a仍为1。b是地址传递,函数内*y=200通过指针间接修改了实参b,b变为200。值传递形参是实参的副本,地址传递可以通过指针修改实参。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void copy(char *dest, char *src) { while (*src) { *dest = *src; dest++; src++; } *dest = '\0'; } main() { char a[20] = "Hello", b[20]; copy(b, a); printf("%s ", b); printf("%d ", b[0] - 'A'); } 【答案】Hello 7 【解析】copy函数将src指向的字符串逐字符复制到dest中。*src非0时循环执行复制并移动指针,最后添加'\0'。b得到"Hello"的副本。b[0]='H','H'-'A'=72-65=7(H的ASCII码比A大7)。 三、案例分析题 9. 以下程序的功能是编写函数将字符串中的小写字母转为大写字母。请填空。 #include <stdio.h> void toUpper(【1】) { while (*s) { if (*s >= 'a' 【2】 *s <= 'z') *s = *s 【3】 ('a' - 'A'); s++; } } main() { char str[80]; printf("请输入字符串:"); gets(str); toUpper(str); printf("大写:%s ", str); } 【答案】【1】char *s 【2】&& 【3】- 【解析】【1】函数参数应为字符指针char *s,用于接收字符串首地址。【2】判断小写字母需要两个条件同时满足:大于等于'a'并且小于等于'z',用逻辑与&&连接。【3】小写转大写需减去差值'a'-'A'=32,即*s-32。函数通过指针直接修改原字符串中的字符。 四、综合应用题 10. 编写一个C程序:定义函数strCat,使用指针实现字符串连接功能(不使用strcat库函数)。函数将src指向的字符串连接到dest指向的字符串末尾。在main函数中定义两个字符数组并初始化,调用strCat函数后输出连接结果。 【答案】#include <stdio.h> void strCat(char *dest, char *src) { while (*dest) dest++; while (*src) { *dest = *src; dest++; src++; } *dest = '\0'; } main() { char a[40] = "Hello"; char b[] = " World"; strCat(a, b); printf("%s ", a); } 【解析】strCat函数分两步:第一个while让dest指针移到目标字符串末尾('\0'处)。第二个while将src的字符逐个复制到dest末尾,同时移动两个指针。最后添加'\0'结束符。注意目标数组a必须有足够空间容纳连接后的字符串。这是用指针实现字符串连接的标准方法。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第34练 8.4-8.5 指向字符串的指针、指针作为函数参数 《C语言》 (第五版) 一课一练 (山东省)
1
第34练 8.4-8.5 指向字符串的指针、指针作为函数参数 《C语言》 (第五版) 一课一练 (山东省)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。