第36练 第8章 指针综合 《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/58480070.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第36练,内容是第8章 指针综合。 《C语言》(第五版)一课一练 第36练 第8章 指针综合 一、单选题 1. 设有定义 int a=5, *p=&a; 则以下表达式中,能使a的值增加1的是( ) A. (*p)++; B. *p++; C. &a++; D. p++; 2. 设有定义 int a[5]={3,6,9,12,15}, *p=a+1; 则p[2]的值是( ) A. 9 B. 15 C. 6 D. 12 3. 以下程序片段的输出结果是 char *s = "ABCDE"; char *p = s + 2; printf("%s", p);( ) A. ABCDE B. CDE C. CD D. B 4. 以下程序片段的输出结果是 void add(int *a, int b) { *a += b; b *= 2; } main() { int x = 10, y = 3; add(&x, y); printf("%d %d", x, y); }( ) A. 13 3 B. 13 6 C. 10 3 D. 10 6 5. 设有定义 struct Stu { int num; float score; } s[3]={{101,80},{102,90},{103,70}}, *p=s; 则以下表达式值最大的是( ) A. (p+2)->score B. p->score C. (++p)->score D. p[1].score 6. 设有定义 int a=1, b=2, c=3, *p[3]={&a,&b,&c}; 则*p[1]的值是( ) A. 1 B. 3 C. &b的地址 D. 2 7. 以下程序片段的输出结果是 int a[4] = {1, 2, 3, 4}; int *p = a; int sum = 0; for (int i = 0; i < 4; i++) sum += *(p + i); p = a + 3; sum += *p; printf("%d", sum);( ) A. 10 B. 11 C. 14 D. 18 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void swap(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = t; } main() { int a[5] = {5, 3, 1, 4, 2}; int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4 - i; j++) if (a[j] > a[j + 1]) swap(&a[j], &a[j + 1]); for (i = 0; i < 5; i++) printf("%d ", a[i]); } 三、案例分析题 9. 以下程序的功能是使用指针实现字符串的逆序存放。请填空。 #include <stdio.h> #include <string.h> void reverse(char *s) { char *p = s, *q = s + strlen(s) - 1, t; while (【1】) { t = *p; 【2】; *q = t; p++; 【3】; } } main() { char str[80] = "Hello World"; reverse(str); printf("%s ", str); } 四、综合应用题 10. 编写一个C程序:使用指针实现选择排序,对包含8个整数的一维数组进行升序排列。要求:(1)定义函数selectSort,参数为整型指针和元素个数,函数内使用指针操作完成排序;(2)在main函数中定义数组并初始化,调用排序函数后输出排序结果。全程不使用下标访问数组元素。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 【编写说明】依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循“由浅入深、循序渐进”的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《C语言》(第五版)《一课一练》第36练,内容是第8章 指针综合。 《C语言》(第五版)一课一练 第36练 第8章 指针综合 一、单选题 1. 设有定义 int a=5, *p=&a; 则以下表达式中,能使a的值增加1的是( ) A. (*p)++; B. *p++; C. &a++; D. p++; 【答案】A 【解析】(*p)++先解引用p得到a的值5,然后对a做后置自增,a变为6。B中*p++由于++优先级高于*,等价于*(p++),p先指向a取值5,然后p本身后移(指向未知地址),a不变。C中&a取地址是右值不能自增。D中p++使指针后移,不改变a的值。 2. 设有定义 int a[5]={3,6,9,12,15}, *p=a+1; 则p[2]的值是( ) A. 9 B. 15 C. 6 D. 12 【答案】D 【解析】p=a+1使p指向a[1],p[2]等价于*(p+2),即a[1+2]=a[3]=12。指针带下标的访问方式p[i]等价于*(p+i)。A是p[1]即a[2]=9。B是p[3]即a[4]=15。C是p[0]即a[1]=6。 3. 以下程序片段的输出结果是 char *s = "ABCDE"; char *p = s + 2; printf("%s", p);( ) A. ABCDE B. CDE C. CD D. B 【答案】B 【解析】s指向字符串"ABCDE"的首字符'A',s+2指向第3个字符'C'。printf("%s",p)从p指向的位置开始输出直到遇到'\0',因此输出"CDE"。%s输出从给定地址到'\0'之间的全部字符。 4. 以下程序片段的输出结果是 void add(int *a, int b) { *a += b; b *= 2; } main() { int x = 10, y = 3; add(&x, y); printf("%d %d", x, y); }( ) A. 13 3 B. 13 6 C. 10 3 D. 10 6 【答案】A 【解析】调用add(&x,y)时,a接收x的地址,b接收y的值3。*a+=b即x=10+3=13。b*=2修改的是形参b为6,不影响实参y。因此x=13,y=3。指针参数可以修改实参,值参数的修改不影响实参。 5. 设有定义 struct Stu { int num; float score; } s[3]={{101,80},{102,90},{103,70}}, *p=s; 则以下表达式值最大的是( ) A. (p+2)->score B. p->score C. (++p)->score D. p[1].score 【答案】C 【解析】初始p=s指向s[0]。A中(p+2)->score=s[2].score=70。B中p->score=s[0].score=80。C中(++p)先使p指向s[1],再取s[1].score=90。D中p[1].score此时p已指向s[1],p[1]即s[2].score=70。比较各值:A=70,B=80,C=90,D=70,C最大。 6. 设有定义 int a=1, b=2, c=3, *p[3]={&a,&b,&c}; 则*p[1]的值是( ) A. 1 B. 3 C. &b的地址 D. 2 【答案】D 【解析】int *p[3]是包含3个整型指针的数组(指针数组)。p[0]=&a,p[1]=&b,p[2]=&c。*p[1]等价于*(p[1]),即解引用p[1]得到b的值2。A是*p[0]的值。B是*p[2]的值。C是p[1]的值而非*p[1]。 7. 以下程序片段的输出结果是 int a[4] = {1, 2, 3, 4}; int *p = a; int sum = 0; for (int i = 0; i < 4; i++) sum += *(p + i); p = a + 3; sum += *p; printf("%d", sum);( ) A. 10 B. 11 C. 14 D. 18 【答案】C 【解析】循环中*(p+i)依次为a[0]=1,a[1]=2,a[2]=3,a[3]=4,sum=1+2+3+4=10。然后p=a+3指向a[3],*p=4,sum=10+4=14。注意循环已经累加了所有元素,p重新指向a[3]后又加了一次a[3]的值4。 二、简答题 8. 以下程序的运行结果是【··】。 #include <stdio.h> void swap(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = t; } main() { int a[5] = {5, 3, 1, 4, 2}; int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4 - i; j++) if (a[j] > a[j + 1]) swap(&a[j], &a[j + 1]); for (i = 0; i < 5; i++) printf("%d ", a[i]); } 【答案】1 2 3 4 5 【解析】程序使用冒泡排序对数组a进行升序排列,通过swap函数交换相邻元素。初始{5,3,1,4,2},第一轮:交换5和3得{3,5,1,4,2},交换5和1得{3,1,5,4,2},交换5和4得{3,1,4,5,2},交换5和2得{3,1,4,2,5}。继续排序最终得到{1,2,3,4,5}。swap函数通过指针参数实现真正的元素交换。 三、案例分析题 9. 以下程序的功能是使用指针实现字符串的逆序存放。请填空。 #include <stdio.h> #include <string.h> void reverse(char *s) { char *p = s, *q = s + strlen(s) - 1, t; while (【1】) { t = *p; 【2】; *q = t; p++; 【3】; } } main() { char str[80] = "Hello World"; reverse(str); printf("%s ", str); } 【答案】【1】p<q 【2】*p=*q 【3】q-- 【解析】【1】双指针法逆序,p从左端q从右端,当p<q时继续交换。【2】交换*p和*q的值:先保存*p到t,然后*p=*q将q指向的字符赋给p指向的位置。【3】交换后q前移,即q--。每次交换后两端指针向中间靠拢,直到相遇完成逆序。 四、综合应用题 10. 编写一个C程序:使用指针实现选择排序,对包含8个整数的一维数组进行升序排列。要求:(1)定义函数selectSort,参数为整型指针和元素个数,函数内使用指针操作完成排序;(2)在main函数中定义数组并初始化,调用排序函数后输出排序结果。全程不使用下标访问数组元素。 【答案】#include <stdio.h> void selectSort(int *a, int n) { int *p, *q, *minp, t; for (p = a; p < a + n - 1; p++) { minp = p; for (q = p + 1; q < a + n; q++) if (*q < *minp) minp = q; if (minp != p) { t = *p; *p = *minp; *minp = t; } } } main() { int a[8] = {49, 38, 65, 97, 76, 13, 27, 49}; int *p; selectSort(a, 8); for (p = a; p < a + 8; p++) printf("%d ", *p); printf(" "); } 【解析】selectSort函数使用选择排序算法,全程通过指针操作数组。外层循环指针p从首元素到倒数第二个元素,内层循环指针q从p的下一个元素到末尾,找出最小值的位置minp。交换*p和*minp完成一趟选择。main中传入数组名a作为指针参数,排序后用指针遍历输出。整个程序未使用任何下标运算。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

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