第14卷 指向数组的指针变量《C语言程序设计》山东省春季高考《软件与应用技术类考纲百套卷》

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

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 8.3 指向数组的指针变量
类型 题集-专项训练
知识点 指针
使用场景 中职复习
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 182 KB
发布时间 2026-06-12
更新时间 2026-06-12
作者 xkw__007
品牌系列 学易金卷·考纲百套卷
审核时间 2026-06-12
下载链接 https://m.zxxk.com/soft/58312477.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

编写说明:山东省春季高考《软件与应用技术类考纲百套卷》,依据山东省《软件与应用技术类专业知识考试标准》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。 本试卷是第14卷,按《C语言程序设计》范围和要求编写。具体内容为: 掌握指向数组的指针变量。 山东省《软件与应用技术类考纲百套卷》 第14卷 《C语言程序设计》 指向数组的指针变量 考点训练卷 考试时间60分钟 满分100分 班级 姓名 学号 成绩 一、选择题(本大题共20小题,每题3分,共60分) 1.以下关于 C 语言数组名的描述中,正确的是( ) A. 数组名是变量,可以被赋值 B. 数组名代表数组最后一个元素的地址 C. 数组名代表数组第一个元素的地址 D. 数组名的类型是 int 型 2.以下定义指向包含 5 个 int 元素的一维数组的指针变量,正确的是( ) A. int *p [5]; B. int (*p)[5]; C. int p [5]; D. int **p; 3.若有定义int a[5]={1,2,3,4,5}, *p=a;,则p+2指向的元素是( ) A. a [2] B. a [3] C. a [0]+2 D. a [1]+2 4.若有定义int a[5]={1,2,3,4,5}, *p=a;,则*(p+3)的值是( ) A. 1 B. 2 C. 3 D. 4 5.数组名作为函数参数时,传递的是( ) A. 数组全部元素的值 B. 数组首元素的地址 C. 数组的长度 D. 数组第一个元素的值 6.若有定义int a[5], *p=a;,以下表达式错误的是( ) A. p++ B. *(p+1) C. a++ D. p [2] 7.若有定义int a[3][4], (*p)[4]=a;,则p+1指向的是( ) A. a [1] B. a [0][1] C. a [0]+1 D. a [1][0] 8.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a; printf("%d", *p++); A. 2 B. 3 C. 4 D. 1 9.若有定义int a[5]={1,2,3,4,5}, *p=a;,则p[2]等价于( ) A. p+2 B. *(p+2) C. *a+2 D. a+2 10.以下关于指针算术运算的描述中,正确的是( ) A. 两个指针可以相加 B. 指针可以乘以一个整数 C. 指针可以减去一个整数 D. 指针可以除以一个整数 11.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=&a[2]; printf("%d", p[1]); A. 4 B. 3 C. 5 D. 2 12.若有定义int a[3][4]={{1,2},{3,4},{5,6}}, (*p)[4]=a;,则*(*(p+1)+1)的值是( ) A. 1 B. 2 C. 4 D. 3 13.以下函数定义中,形参为数组指针的是( ) A. void fun (int a [5]) B. void fun (int (*p)[5]) C. void fun (int *p) D. void fun (int **p) 14.若有定义int a[5]={1,2,3,4,5}, *p=a+1;,则以下表达式值为 3 的是( ) A. *p+2 B. *(p+1) C. p+2 D. *p++ 15.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a; while(*p!=3) p++; printf("%d", *p); A. 1 B. 2 C. 4 D. 3 16.以下关于指向二维数组的指针的描述中,正确的是( ) A. int (*p)[4] 可以指向任意二维数组 B. int (*p)[4] 只能指向列数为 4 的二维数组 C. int (*p)[4] 可以指向行数为 4 的二维数组 D. int (*p)[4] 是指针数组 17.若有定义int a[5]={5,4,3,2,1}, *p=a;,则*(p+4)的值是( ) A. 5 B. 4 C. 1 D. 2 18.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a, *q=&a[4]; printf("%d", q-p); A. 4 B. 5 C. 20 D. 编译错误 19.以下用指针遍历数组的写法中,错误的是( ) A. for (p=a; p<a+5; p++) printf ("% d", *p); B. for (p=a; *p!='\0'; p++) printf ("% d", *p); C. for (i=0; i<5; i++) printf ("% d", *(a+i)); D. for (i=0; i<5; i++) printf ("% d", p [i]); 20.若有定义int a[3][4], (*p)[4]=a;,则p[2][3]等价于( ) A. a [2][3] B. *(p+2)+3 C. *(*p+2)+3 D. *(p [2]+3) 二、简答题(本大题共2小题,每题10分,共20分) 1.阅读以下 C 语言程序,程序运行后的结果为______ #include <stdio.h> int main() { int a[5]={2,4,6,8,10}; int *p=a, i; for(i=0; i<5; i++) { printf("%d ", *(p+i)*2); } printf(" "); return 0; } 2.阅读以下 C 语言程序,程序运行后的结果为______ #include <stdio.h> int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int (*p)[3]=a, i; for(i=0; i<3; i++) { printf("%d ", *(*p+i)); } return 0; } 三、案例分析题(本大题共1小题,每题10分,共10分) 1.以下程序的功能是:用指针实现数组元素的逆序存放。请在程序的下划线处填入正确的内容,使程序完整并能正确运行。 #include <stdio.h> int main() { int a[5]={1,2,3,4,5}; int *p=a, *q=&a[4], temp; while(____1____) { temp=*p; ____2____; ____3____; p++; ____4____; } for(int i=0; i<5; i++) printf("%d ", a[i]); return 0; } 四、综合应用题(本大题共1小题,每题10分,共10分) 1.编写一个 C 语言程序,实现以下功能:定义一个包含 10 个元素的整型数组,要求输入 10 个整数存入数组,用指针遍历数组,计算数组所有元素的平均值并输出(保留两位小数)。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 编写说明:山东省春季高考《软件与应用技术类考纲百套卷》,依据山东省《软件与应用技术类专业知识考试标准》编写。每门课程均分三层训练:基础层(具象化支架)拆解考点为微目标,紧扣考纲 “掌握”“理解” 要求编写考点训练卷;巩固层(关联性支架)强化知识交叉与场景关联,按考纲专题编专题训练卷;应用层(引导性支架)聚焦真题突破,结合知识模块与教材编写课程综合卷。 本试卷是第14卷,按《C语言程序设计》范围和要求编写。具体内容为: 掌握指向数组的指针变量。 山东省《软件与应用技术类考纲百套卷》 第14卷 《C语言程序设计》 指向数组的指针变量 考点训练卷 考试时间60分钟 满分100分 班级 姓名 学号 成绩 一、选择题(本大题共20小题,每题3分,共60分) 1.以下关于 C 语言数组名的描述中,正确的是( ) A. 数组名是变量,可以被赋值 B. 数组名代表数组最后一个元素的地址 C. 数组名代表数组第一个元素的地址 D. 数组名的类型是 int 型 【答案】C 【解析】数组名是常量指针,代表数组首元素的地址,不能被赋值。 2.以下定义指向包含 5 个 int 元素的一维数组的指针变量,正确的是( ) A. int *p [5]; B. int (*p)[5]; C. int p [5]; D. int **p; 【答案】B 【解析】int (*p)[5]是数组指针,指向包含 5 个 int 元素的一维数组;A 是指针数组,每个元素是 int 指针。 3.若有定义int a[5]={1,2,3,4,5}, *p=a;,则p+2指向的元素是( ) A. a [2] B. a [3] C. a [0]+2 D. a [1]+2 【答案】A 【解析】指针 p 指向 a [0],p+1 指向 a [1],p+2 指向 a [2],指针加减按元素大小偏移。 4.若有定义int a[5]={1,2,3,4,5}, *p=a;,则*(p+3)的值是( ) A. 1 B. 2 C. 3 D. 4 【答案】D 【解析】*(p+3)等价于 a [3],值为 4。 5.数组名作为函数参数时,传递的是( ) A. 数组全部元素的值 B. 数组首元素的地址 C. 数组的长度 D. 数组第一个元素的值 【答案】B 【解析】数组名作为函数参数时退化为指针,传递首元素地址。 6.若有定义int a[5], *p=a;,以下表达式错误的是( ) A. p++ B. *(p+1) C. a++ D. p [2] 【答案】C 【解析】数组名是常量指针,不能进行自增运算;p 是变量指针,可以自增。 7.若有定义int a[3][4], (*p)[4]=a;,则p+1指向的是( ) A. a [1] B. a [0][1] C. a [0]+1 D. a [1][0] 【答案】A 【解析】p 是指向包含 4 个 int 元素的一维数组的指针,p+1 跳过 4 个 int 元素,指向 a [1](第二行)。 8.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a; printf("%d", *p++); A. 2 B. 3 C. 4 D. 1 【答案】D 【解析】*p++是后置自增,先取 * p 的值 1,然后 p 自增指向 a [1]。 9.若有定义int a[5]={1,2,3,4,5}, *p=a;,则p[2]等价于( ) A. p+2 B. *(p+2) C. *a+2 D. a+2 【答案】B 【解析】指针下标访问p[i]等价于*(p+i),与数组下标访问规则一致。 10.以下关于指针算术运算的描述中,正确的是( ) A. 两个指针可以相加 B. 指针可以乘以一个整数 C. 指针可以减去一个整数 D. 指针可以除以一个整数 【答案】C 【解析】指针可以加减整数(按元素大小偏移),也可以减去同类型指针(得到元素个数差),不能进行乘除和相加运算。 11.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=&a[2]; printf("%d", p[1]); A. 4 B. 3 C. 5 D. 2 【答案】A 【解析】p 指向 a [2],p[1]等价于*(p+1),即 a [3],值为 4。 12.若有定义int a[3][4]={{1,2},{3,4},{5,6}}, (*p)[4]=a;,则*(*(p+1)+1)的值是( ) A. 1 B. 2 C. 4 D. 3 【答案】C 【解析】p+1 指向 a [1],*(p+1)是 a [1] 的首地址,*(p+1)+1指向 a [1][1],值为 4。 13.以下函数定义中,形参为数组指针的是( ) A. void fun (int a [5]) B. void fun (int (*p)[5]) C. void fun (int *p) D. void fun (int **p) 【答案】B 【解析】int (*p)[5]是指向包含 5 个 int 元素的一维数组的指针;A 和 C 本质都是 int 指针。 14.若有定义int a[5]={1,2,3,4,5}, *p=a+1;,则以下表达式值为 3 的是( ) A. *p+2 B. *(p+1) C. p+2 D. *p++ 【答案】B 【解析】p 指向 a [1](值 2),*(p+1)是 a [2],值为 3。 15.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a; while(*p!=3) p++; printf("%d", *p); A. 1 B. 2 C. 4 D. 3 【答案】D 【解析】指针 p 从 a [0] 开始遍历,直到指向值为 3 的元素 a [2],输出 * p=3。 16.以下关于指向二维数组的指针的描述中,正确的是( ) A. int (*p)[4] 可以指向任意二维数组 B. int (*p)[4] 只能指向列数为 4 的二维数组 C. int (*p)[4] 可以指向行数为 4 的二维数组 D. int (*p)[4] 是指针数组 【答案】B 【解析】数组指针的列数必须与指向的二维数组的列数一致,否则类型不匹配。 17.若有定义int a[5]={5,4,3,2,1}, *p=a;,则*(p+4)的值是( ) A. 5 B. 4 C. 1 D. 2 【答案】C 【解析】p+4 指向 a [4],值为 1。 18.执行以下程序段后,输出结果是( ) int a[5]={1,2,3,4,5}, *p=a, *q=&a[4]; printf("%d", q-p); A. 4 B. 5 C. 20 D. 编译错误 【答案】A 【解析】同类型指针相减得到两个指针之间的元素个数,q-p=4。 19.以下用指针遍历数组的写法中,错误的是( ) A. for (p=a; p<a+5; p++) printf ("% d", *p); B. for (p=a; *p!='\0'; p++) printf ("% d", *p); C. for (i=0; i<5; i++) printf ("% d", *(a+i)); D. for (i=0; i<5; i++) printf ("% d", p [i]); 【答案】B 【解析】整型数组没有 '\0' 结束符,*p!='\0'会导致越界访问。 20.若有定义int a[3][4], (*p)[4]=a;,则p[2][3]等价于( ) A. a [2][3] B. *(p+2)+3 C. *(*p+2)+3 D. *(p [2]+3) 【答案】A 【解析】数组指针 p 可以像二维数组名一样使用下标访问,p[2][3]等价于a[2][3]。 二、简答题(本大题共2小题,每题10分,共20分) 1.阅读以下 C 语言程序,程序运行后的结果为______ #include <stdio.h> int main() { int a[5]={2,4,6,8,10}; int *p=a, i; for(i=0; i<5; i++) { printf("%d ", *(p+i)*2); } printf(" "); return 0; } 【答案】4 8 12 16 20 2.阅读以下 C 语言程序,程序运行后的结果为______ #include <stdio.h> int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int (*p)[3]=a, i; for(i=0; i<3; i++) { printf("%d ", *(*p+i)); } return 0; } 【答案】1 2 3 三、案例分析题(本大题共1小题,每题10分,共10分) 1.以下程序的功能是:用指针实现数组元素的逆序存放。请在程序的下划线处填入正确的内容,使程序完整并能正确运行。 #include <stdio.h> int main() { int a[5]={1,2,3,4,5}; int *p=a, *q=&a[4], temp; while(____1____) { temp=*p; ____2____; ____3____; p++; ____4____; } for(int i=0; i<5; i++) printf("%d ", a[i]); return 0; } 【答案】 1.p < q 2.*p = *q 3.*q = temp 4.q-- 四、综合应用题(本大题共1小题,每题10分,共10分) 1.编写一个 C 语言程序,实现以下功能:定义一个包含 10 个元素的整型数组,要求输入 10 个整数存入数组,用指针遍历数组,计算数组所有元素的平均值并输出(保留两位小数)。 【答案】 #include <stdio.h> int main() { int a[10], *p=a, sum=0, i; float avg; printf("请输入10个整数:"); for(i=0; i<10; i++) { scanf("%d", &a[i]); } for(p=a; p<a+10; p++) { sum += *p; } avg = sum / 10.0; printf("数组元素的平均值为:%.2f ", avg); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

第14卷 指向数组的指针变量《C语言程序设计》山东省春季高考《软件与应用技术类考纲百套卷》
1
第14卷 指向数组的指针变量《C语言程序设计》山东省春季高考《软件与应用技术类考纲百套卷》
2
第14卷 指向数组的指针变量《C语言程序设计》山东省春季高考《软件与应用技术类考纲百套卷》
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。