内容正文:
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第11卷,为知识训练卷,按《C语言程序设计知识》中“指针变量与数组指针”范围和要求编写。具体内容为:(1)理解指针变量的定义及引用。(2)掌握指向数组的指针变量。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第11卷 C语言程序设计知识——指针变量与数组指针
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.若变量x为int类型,指针p指向x的正确赋值是( )
A.*p = &x
B.p = x
C.&p = x
D.p = &x
2.若p为有效的int指针,表达式*p的含义是( )
A.p所指向整数的值
B.p的地址
C.p所占字节数
D.p保存的地址
3.下列语句中,正确的指针变量定义是( )
A.int p*;
B.int *p;
C.*int p;
D.pointer int p;
4.执行下列程序后,输出结果是( )
int x = 5;
int *p = &x;
printf("%d", *p);
A.地址值
B.0
C.5
D.x
5.执行下列程序后,x的值是( )
int x = 3;
int *p = &x;
*p = 8;
A.3
B.8
C.地址值
D.5
6.表达式&x表示( )
A.指针p的值
B.变量x的类型
C.变量x的值
D.变量x的地址
7.若int x = 6; int *p = &x;,则表达式&p表示( )
A.x的地址
B.p所指向的值
C.指针变量p自身的地址
D.x的值
8.若定义int a[4] = {10, 20, 30, 40}; int *p = a;,则*p的值是( )
A.10
B.20
C.数组长度4
D.30
9.若定义int a[4] = {10, 20, 30, 40}; int *p = a;,则*(p + 2)的值是( )
A.20
B.30
C.10
D.40
10.若定义int a[3] = {1, 2, 3}; int *p = a;,执行p++后,p指向( )
A.a[3]
B.a[2]
C.a[1]
D.a[0]
11.若定义int a[3] = {1, 2, 3}; int *p = &a[1];,则*p的值是( )
A.2
B.1
C.3
D.a[1]的地址
12.执行下列程序后,输出结果是( )
int a[3] = {2, 4, 6};
int *p = a;
printf("%d", *(p + 1));
A.6
B.1
C.2
D.4
13.下列语句中,能把指针p指向数组a的第3个元素的是( )
A.p = &a[2];
B.*p = a[2];
C.&p = a[2];
D.p = a[2];
14.若定义int a[4] = {1, 2, 3, 4}; int *p = &a[3];,则p指向的元素值是( )
A.2
B.3
C.4
D.1
15.若定义int x = 7; int *p = &x;,下列操作会把x改为9的是( )
A.&p = 9;
B.x = &p;
C.p = 9;
D.*p = 9;
16.若定义int a[3] = {3, 6, 9}; int *p = a;,则p[1]的值是( )
A.9
B.6
C.3
D.1
17.下列关于数组名和指针的说法正确的是( )
A.数组名在表达式中通常表示首元素地址
B.指针不能指向数组元素
C.数组名可以直接被赋值
D.数组名总是普通变量
18.执行下列程序后,输出结果是( )
int a[3] = {5, 8, 11};
int *p = &a[0];
p = p + 2;
printf("%d", *p);
A.2
B.5
C.8
D.11
19.若定义int a[2][2] = {{1, 2}, {3, 4}}; int (*p)[2] = a;,则p[1][0]的值是( )
A.2
B.4
C.3
D.1
20.执行下列程序后,输出结果是( )
int x = 4;
int *p = &x;
printf("%d", *p + 2);
A.4
B.6
C.2
D.地址值
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出程序的输出结果。
#include <stdio.h>
int main( )
{
int a[4] = {2, 4, 6, 8};
int *p = a;
printf("%d %d
", *p, *(p + 2));
return 0;
}
2.阅读程序,写出程序的输出结果。
#include <stdio.h>
int main( )
{
int x = 5;
int *p = &x;
*p = *p + 3;
printf("%d %d
", x, *p);
return 0;
}
三、案例分析题(共1题,共10分)
1.下面程序用于输出数组a的第2个元素,但程序中有一处错误,请指出并改正。
#include <stdio.h>
int main( )
{
int a[3] = {10, 20, 30};
int *p = a;
printf("%d
", *(p + 2));
return 0;
}
四、综合应用题(共1题,共10分)
1.编写程序:输入5个整数存入数组,使用指针变量遍历数组并求出所有元素的和,最后输出结果。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版山东省春季高考统一考试软件与应用技术类《考纲百套卷》,依据《软件与应用技术类专业知识考试标准》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共85份试卷,其中知识训练卷48份、专题训练卷25份、课程综合卷12份。
本试卷是第11卷,为知识训练卷,按《C语言程序设计知识》中“指针变量与数组指针”范围和要求编写。具体内容为:(1)理解指针变量的定义及引用。(2)掌握指向数组的指针变量。
山东省春季高考统一考试
软件与应用技术类《考纲百套卷》
第11卷 C语言程序设计知识——指针变量与数组指针
(考试时间:45分钟 满分:100分)
一、选择题(共20题,每题3分,共60分)
1.若变量x为int类型,指针p指向x的正确赋值是( )
A.*p = &x
B.p = x
C.&p = x
D.p = &x
【答案】D
【解析】p保存地址,x的地址用&x表示,因此p=&x正确;*p表示所指对象,不能用来接收地址。
2.若p为有效的int指针,表达式*p的含义是( )
A.p所指向整数的值
B.p的地址
C.p所占字节数
D.p保存的地址
【答案】A
【解析】一元*对指针进行解引用,得到p所指向对象的值。
3.下列语句中,正确的指针变量定义是( )
A.int p*;
B.int *p;
C.*int p;
D.pointer int p;
【答案】B
【解析】C语言中int *p表示p是指向int类型数据的指针变量。
4.执行下列程序后,输出结果是( )
int x = 5;
int *p = &x;
printf("%d", *p);
A.地址值
B.0
C.5
D.x
【答案】C
【解析】p指向x,*p取得x的值5,%d输出整数5。
5.执行下列程序后,x的值是( )
int x = 3;
int *p = &x;
*p = 8;
A.3
B.8
C.地址值
D.5
【答案】B
【解析】*p是x的别名,通过*p赋值8就是把x修改为8。
6.表达式&x表示( )
A.指针p的值
B.变量x的类型
C.变量x的值
D.变量x的地址
【答案】D
【解析】取地址运算符&作用于变量时,得到该变量在内存中的地址。
7.若int x = 6; int *p = &x;,则表达式&p表示( )
A.x的地址
B.p所指向的值
C.指针变量p自身的地址
D.x的值
【答案】C
【解析】p是一个指针变量,&p表示指针变量p自身的地址;*p才表示x的值。
8.若定义int a[4] = {10, 20, 30, 40}; int *p = a;,则*p的值是( )
A.10
B.20
C.数组长度4
D.30
【答案】A
【解析】数组名a在表达式中表示首元素a[0]的地址,p指向a[0],所以*p为10。
9.若定义int a[4] = {10, 20, 30, 40}; int *p = a;,则*(p + 2)的值是( )
A.20
B.30
C.10
D.40
【答案】B
【解析】p指向a[0],p+2指向a[2],因此*(p+2)取得30。
10.若定义int a[3] = {1, 2, 3}; int *p = a;,执行p++后,p指向( )
A.a[3]
B.a[2]
C.a[1]
D.a[0]
【答案】C
【解析】p原来指向a[0],自增后按int类型的一个元素移动,指向a[1]。
11.若定义int a[3] = {1, 2, 3}; int *p = &a[1];,则*p的值是( )
A.2
B.1
C.3
D.a[1]的地址
【答案】A
【解析】p保存a[1]的地址,*p取得a[1]的值2。
12.执行下列程序后,输出结果是( )
int a[3] = {2, 4, 6};
int *p = a;
printf("%d", *(p + 1));
A.6
B.1
C.2
D.4
【答案】D
【解析】p+1指向数组第二个元素a[1],解引用后得到4。
13.下列语句中,能把指针p指向数组a的第3个元素的是( )
A.p = &a[2];
B.*p = a[2];
C.&p = a[2];
D.p = a[2];
【答案】A
【解析】指针需要保存地址,数组第3个元素a[2]的地址为&a[2]。
14.若定义int a[4] = {1, 2, 3, 4}; int *p = &a[3];,则p指向的元素值是( )
A.2
B.3
C.4
D.1
【答案】C
【解析】p保存a[3]的地址,*p取得数组第四个元素的值4。
15.若定义int x = 7; int *p = &x;,下列操作会把x改为9的是( )
A.&p = 9;
B.x = &p;
C.p = 9;
D.*p = 9;
【答案】D
【解析】*p表示p所指向的x,通过*p=9可以修改x的值。
16.若定义int a[3] = {3, 6, 9}; int *p = a;,则p[1]的值是( )
A.9
B.6
C.3
D.1
【答案】B
【解析】指针也可以使用下标形式访问,p[1]等价于*(p+1),取得a[1]的值6。
17.下列关于数组名和指针的说法正确的是( )
A.数组名在表达式中通常表示首元素地址
B.指针不能指向数组元素
C.数组名可以直接被赋值
D.数组名总是普通变量
【答案】A
【解析】在多数表达式中,数组名会转换为指向首元素的地址;指针可以指向数组元素,但数组名本身不能作为普通变量被重新赋值。
18.执行下列程序后,输出结果是( )
int a[3] = {5, 8, 11};
int *p = &a[0];
p = p + 2;
printf("%d", *p);
A.2
B.5
C.8
D.11
【答案】D
【解析】p从a[0]移动两个元素后指向a[2],*p的值为11。
19.若定义int a[2][2] = {{1, 2}, {3, 4}}; int (*p)[2] = a;,则p[1][0]的值是( )
A.2
B.4
C.3
D.1
【答案】C
【解析】p是指向含2个int元素的一行的指针,p[1][0]等价于a[1][0],值为3。
20.执行下列程序后,输出结果是( )
int x = 4;
int *p = &x;
printf("%d", *p + 2);
A.4
B.6
C.2
D.地址值
【答案】B
【解析】*p取得x的值4,*p+2的结果为6,因此输出6。
二、简答题(共2题,每题10分,共20分)
1.阅读程序,写出程序的输出结果。
#include <stdio.h>
int main( )
{
int a[4] = {2, 4, 6, 8};
int *p = a;
printf("%d %d
", *p, *(p + 2));
return 0;
}
【答案】输出:2 6
【解析】p指向a[0],所以*p为2;p+2指向a[2],*(p+2)为6。
2.阅读程序,写出程序的输出结果。
#include <stdio.h>
int main( )
{
int x = 5;
int *p = &x;
*p = *p + 3;
printf("%d %d
", x, *p);
return 0;
}
【答案】输出:8 8
【解析】p指向x,*p与x表示同一个整数对象;执行*p=*p+3后x和*p都为8。
三、案例分析题(共1题,共10分)
1.下面程序用于输出数组a的第2个元素,但程序中有一处错误,请指出并改正。
#include <stdio.h>
int main( )
{
int a[3] = {10, 20, 30};
int *p = a;
printf("%d
", *(p + 2));
return 0;
}
【答案】将printf("%d
", *(p + 2));改为printf("%d
", *(p + 1));。
【解析】p指向数组首元素a[0],p+1指向a[1],即数组第2个元素;原程序使用p+2,输出的是第3个元素30。
四、综合应用题(共1题,共10分)
1.编写程序:输入5个整数存入数组,使用指针变量遍历数组并求出所有元素的和,最后输出结果。
【答案】
#include <stdio.h>
int main( )
{
int a[5];
int i;
int sum = 0;
int *p = a;
for (i = 0; i < 5; i++) {
scanf("%d", p + i);
}
for (i = 0; i < 5; i++) {
sum += *(p + i);
}
printf("%d
", sum);
return 0;
}
【解析】p指向数组首元素,p+i指向第i个元素的地址,*(p+i)取得对应元素的值;程序先读入5个整数,再通过指针表达式累加并输出总和。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$