任务31:指针变量及指针变量的运算 《编程语言-C语言》45分钟专题训练
|
2份
|
22页
|
94人阅读
|
1人下载
内容正文:
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目七: 指针
第31卷: 指针变量及指针变量的运算
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.若有定义:double x,y,*px,*py;,则执行了px=&x;py=&y;之后,输入语句正确的是( )
A.scanf(“%f%f”,x,y);
B.scanf(“%f%f”&x,&y);
C.scanf(“%lf%le”,px,py);
D.scanf(“%lf%lf”,x,y);
【答案】C
2.若有定义语句:int a,b,c,*p=&c;,则执行以下选项中的语句,能够正确执行的语句是( )
A.scanf(“%d%d%d”,a,b,c);
B.scanf(“%d”,a,b,c);
C.scanf(“%d”,p);
D.scanf(“%d”,&p);
【答案】C
3.下列叙述中,不正确的一项是( )
A.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
B.函数可以返回地址值
C.改变函数形参的值,不会改变对应实参的值
D.可以给指针变量赋一个整数作为地址值
【答案】D
4.下列有关指针的叙述中,正确的一项是( )
A.所有类型的指针变量所占内存的大小是一样的
B.指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节
C.指针变量可以直接指向任何类型的变量,而不会出现编译或运行错误
D.指针变量既可以直接指向结构体,也可以直接指向结构体中的某个成员,而不会出现编译或运行错误
【答案】A。注意指针变量基类型的重要性。
5.下列有关地址和指针的叙述中,正确的一项是( )
A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量
B.可以取一个常数的地址赋给同类型的指针变量
C.可以取一个表达式的地址赋值给同类型的指针变量
D.可以取一个指针变量的地址赋值给基类型相同的指针变量
【答案】A。C项中,可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量。
6.下列有关指针的叙述中,不正确的一项是( )
A.两个基类型相同的指针变量不能指向同一对象
B.可以通过对指针变量的自增、自减来移动指针
C.只有两个类型相同的指针才能进行减运行
D.一个指针变量可以通过不同的方式获得一个确定地址值
【答案】A。只有两个指针变量的基类型相同,可以指向同一个对象。
7.下列叙述中,不正确的一项是( )
A.基类型不同的指针可以直接相互赋值
B.函数可以通过指针形参向所指单元传回数据
C.字符型指针可以指向一个字符串
D.一般情况下,指针的运用可使程序代码效率更高
【答案】A
8.执行以下程序段的输出结果是( )
main()
{char *p1;
int *p2;
float *p3;
printf("%d,%d,%d
",sizeof(p1),sizeof(p2),sizeof(p3));getch();}
A.1,4,8 B.4,4,4 C.1,2,4 D.1,1,4
【答案】B。所有类型的指针变量都是地址,所占字节数均为4。
9.若有定义语句:double a,*p=&a;,下列叙述中,不正确的一项是( )
A.定义语句中的p只能存放double类型变量的地址
B.定义语句中的*号是一个说明符
C.定义语句中的*号是一个间址运算符
D.定义语句中的*p=&a把变量a的地址作为初值赋给指针变量p
【答案】C。只有取指针变量的值时,*号才是间址运算符,引用指针指向的存储单元。
10.设有定义:int a,b[10],*c=NULL,*p;,则以下语句错误的一项是( )
A.p=a; B.p=b; C.p=c; D.p=&b[0];
【答案】A。p为指针变量,存放变量的地址,对指针变量赋值,必须是地址值,a整型变量不是地址值。
11.设有定义:int x=0,*p;则下列赋值语句中,正确的是( )
A.*p=x; B.*p=NULL; C.p=x; D.p=NULL;
【答案】D。C选项中,p未进行初始化之前,无法进行C选项的赋值操作。
12.设有定义:float x;则以下对指针变量p进行定义且赋初值的语句中,正确的一项是( )
A.float *p=&x; B.int *p=(float)x;
C.float p=&x; D.float *p=1024;
【答案】A
13.设变量p是指针变量,语句p=NULL;是给指针变量赋值NULL值,它等价于( )
A.p=""; B.p='0'; C.p=0; D.p='';
【答案】C。NULL的ASCII码值为0,p=NULL等价于p='\0';或p=0。
14.下列程序中关于指针输入格式正确的一项是( )
A. int *p;scanf("%d",&p);
B. int *p;scanf("%d",p);
C. int k,*p=&k;scanf("%d",p);
D. int k,*p;*p=&k;scanf("%d",&p);
【答案】C
15.下列叙述中,正确的一项是( )
A.在对指针进行加、减算数运算时,数字1表示1个存储单元的长度
B.如果p是指针变量,则*p表示变量p的地址值
C.如果p是指针变量,则&p是不合法的表达式
D.如果p是指针变量,则*p+1和*(p+1)的效果是一样的
【答案】A
16.下列叙述中,正确的一项是( )
A.函数的形参类型不能是指针类型
B.函数的类型不能是指针类型
C.设有指针变量double *p,则p+1将指针p移动8个字节
D.基类型不同的指针变量可以相互混用
【答案】C
17.若有定义语句:int year=2024,*p=&year;,以下不能使得变量year中的值增至2025的语句是( )
A.*p+=1; B.(*p)++; C.++(*p); D.*p++;
【答案】D
18.设有定义:int k,a[10],*p1=a,*p2=a;,则以下语句中,不正确的一项是( )
A.k=*p1+*p2; B.k=*p1*(*p2); C.p2=k; D.p1=p2;
【答案】C
19.设有定义:int n1=0,n2,*p=&n2,*q=&n1;,则以下赋值语句中与n2=n1;等价的是( )
A.*p=*q; B.p=q; C.*p=&n1; D.p=*q;
【答案】A
20.设有定义:int i,j=9,*p;*p=&i;,则与i=j;等价的语句是( )
A.i=*p; B.*p=*&j; C.i=&j; D.i=**p;
【答案】B
21.下列程序试图通过指针p为变量n读入数据并输出,程序中第( )行有错误。
L1 main()
L2 {int n,*p=NULL;
L3 p=&n;
L4 scanf("%d",&p);
L5 printf("%d",*p);
getch();}
A.L2 B.L3 C.L4 D.L5
【答案】C
22.执行以下程序段的输出结果是( )
main()
{int *p,x=100;
p=&x;
x=*p+10;
printf("%d
",x);getch();}
A.90 B.100 C.110 D.120
【答案】C
23.执行以下程序段的运行结果是( )
main()
{int i,array[5]={1,2},len,*ry=array;
for(len=4;len>=0;len--)
array[len]-=1;
for(i=0;i<4;i++)
printf("%d ",array[i]);getch();}
A. 0 1 -1 -1 B.1 1 -1 -1 -1 C.1 0 -1 1 -1 D.1 -1 1 -1 1
【答案】A
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d
",c);
getch();}
【答案】3
25.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=0,*ptr;
ptr=&a;
*ptr=3;
a=(*ptr)++;
printf("%d,%d
",a,*ptr);
getch();}
【答案】4,4
26.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int m=1,n=2,*p=&m,*q=&n,*r;
r=p;
p=q;
q=r;
printf("%d,%d,%d,%d
",m,n,*p,*q);
getch();}
【答案】1,2,2,1
27.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+2;
printf("a=%d,b=%d",a,b);
getch();}
【答案】a=0,b=2
28.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=12,b=13,*p1,*p2,*p;
p1=&a;
p2=&b;
if(a<b)
{p=p1;p1=p2;p2=p;}
printf("%d %d ",a,b);
printf("%d %d
",*p1,*p2);
getch();}
【答案】12 13 13 12
29.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=10,b=20,*pa=&a,*pb=&b;
*pa=*pa+5;
*pb=*pb-5;
printf("a=%d,b=%d
",a,b);
getch();}
【答案】a=15,b=15
30.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=10,b=40,c=20;
int *x=&a,*y=&b,*z=&c;
printf("%d,%d,%d
",++*x,++*y,++*z);
printf("%d,%d,%d
",++*x,++*y,++*z);
getch();}
【答案】
11,41,21
12,42,22
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.下列程序的功能是:输入3个整数,按照由小到大的顺序输出。程序中有三处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {int n1,n2,n3,p;
L5 int *p1,*p2,*p3;
L6 printf("input three integer n1,n2,n3:");
L7 scanf("%d%d%d",&n1,&n2,&n3);
L8 p1=&n1;
L9 p2=&n2;
L10 p3=&n3;
L11 if(n1<n2)
L12 {p=*p1;*p1=*p2;*p2=p;}
L13 if(n1>n3)
L14 {p=*p1;*p1=*p2;*p2=p;}
L15 if(n2>n1)
L16 {p=*p2;*p2=*p3;*p3=p;}
L17 printf("Now,the order is:%d,%d,%d
",n1,n2,n3);
L18 getch();}
答案:
L11 if(n1>n2)
L14 {p=*p1;*p1=*p3;*p3=p;}
L15 if(n2>n3)
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.以下程序段的功能是:从键盘输入:this is a text.<回车>,则输出:This Is A Text. 将每个英文单词的首字母更改为大写。请填空。
#include <stdio.h>
#include<conio.h>
#define TRUE 1
#define FALSE 0
【1】
main()
{int flag=TRUE;
char ch;
do{ch=getchar();
flag=【2】;
putchar(ch);}while(【3】);
printf("
");
getch();}
int change(char *c,int status)
{if(【4】) return TRUE;
else
{if(status&&*c<='z'&&*c>='a')
【5】;
return FALSE;}}
答案:①int change(char *c,int status); ②change(&ch,flag)
③ch!='.' ④*c==' ' ⑤*c+='A'-'a'
33.以下程序的功能是:求整数x的y次方的低3位值,例如,5的6次方为15625,此值的低3位值为625。请填空。
#include <stdio.h>
#include<conio.h>
main()
{int t,r;
int x,y;
printf("input x and y:
");
scanf("%d%d",&x,&y);
t=【1】;
printf("x=%d,y=%d,r=%d,last=%d",x,y,r,t);
getch();}
int fun(int x,int y,int *p)
{int i,t=1;
for(i=1;i<=y;i++)
t=t*x;
【2】;
t=【3】;
return t;}
答案:①fun(x,y,&r) ②*p=t ③t%1000
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目七: 指针
第31卷: 指针变量及指针变量的运算
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.若有定义:double x,y,*px,*py;,则执行了px=&x;py=&y;之后,输入语句正确的是( )
A.scanf(“%f%f”,x,y);
B.scanf(“%f%f”&x,&y);
C.scanf(“%lf%le”,px,py);
D.scanf(“%lf%lf”,x,y);
2.若有定义语句:int a,b,c,*p=&c;,则执行以下选项中的语句,能够正确执行的语句是( )
A.scanf(“%d%d%d”,a,b,c);
B.scanf(“%d”,a,b,c);
C.scanf(“%d”,p);
D.scanf(“%d”,&p);
3.下列叙述中,不正确的一项是( )
A.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
B.函数可以返回地址值
C.改变函数形参的值,不会改变对应实参的值
D.可以给指针变量赋一个整数作为地址值
4.下列有关指针的叙述中,正确的一项是( )
A.所有类型的指针变量所占内存的大小是一样的
B.指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节
C.指针变量可以直接指向任何类型的变量,而不会出现编译或运行错误
D.指针变量既可以直接指向结构体,也可以直接指向结构体中的某个成员,而不会出现编译或运行错误
5.下列有关地址和指针的叙述中,正确的一项是( )
A.通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量
B.可以取一个常数的地址赋给同类型的指针变量
C.可以取一个表达式的地址赋值给同类型的指针变量
D.可以取一个指针变量的地址赋值给基类型相同的指针变量
6.下列有关指针的叙述中,不正确的一项是( )
A.两个基类型相同的指针变量不能指向同一对象
B.可以通过对指针变量的自增、自减来移动指针
C.只有两个类型相同的指针才能进行减运行
D.一个指针变量可以通过不同的方式获得一个确定地址值
7.下列叙述中,不正确的一项是( )
A.基类型不同的指针可以直接相互赋值
B.函数可以通过指针形参向所指单元传回数据
C.字符型指针可以指向一个字符串
D.一般情况下,指针的运用可使程序代码效率更高
8.执行以下程序段的输出结果是( )
main()
{char *p1;
int *p2;
float *p3;
printf("%d,%d,%d
",sizeof(p1),sizeof(p2),sizeof(p3));getch();}
A.1,4,8 B.4,4,4 C.1,2,4 D.1,1,4
9.若有定义语句:double a,*p=&a;,下列叙述中,不正确的一项是( )
A.定义语句中的p只能存放double类型变量的地址
B.定义语句中的*号是一个说明符
C.定义语句中的*号是一个间址运算符
D.定义语句中的*p=&a把变量a的地址作为初值赋给指针变量p
10.设有定义:int a,b[10],*c=NULL,*p;,则以下语句错误的一项是( )
A.p=a; B.p=b; C.p=c; D.p=&b[0];
11.设有定义:int x=0,*p;则下列赋值语句中,正确的是( )
A.*p=x; B.*p=NULL; C.p=x; D.p=NULL;
12.设有定义:float x;则以下对指针变量p进行定义且赋初值的语句中,正确的一项是( )
A.float *p=&x; B.int *p=(float)x;
C.float p=&x; D.float *p=1024;
13.设变量p是指针变量,语句p=NULL;是给指针变量赋值NULL值,它等价于( )
A.p=""; B.p='0'; C.p=0; D.p='';
14.下列程序中关于指针输入格式正确的一项是( )
A. int *p;scanf("%d",&p);
B. int *p;scanf("%d",p);
C. int k,*p=&k;scanf("%d",p);
D. int k,*p;*p=&k;scanf("%d",&p);
15.下列叙述中,正确的一项是( )
A.在对指针进行加、减算数运算时,数字1表示1个存储单元的长度
B.如果p是指针变量,则*p表示变量p的地址值
C.如果p是指针变量,则&p是不合法的表达式
D.如果p是指针变量,则*p+1和*(p+1)的效果是一样的
16.下列叙述中,正确的一项是( )
A.函数的形参类型不能是指针类型
B.函数的类型不能是指针类型
C.设有指针变量double *p,则p+1将指针p移动8个字节
D.基类型不同的指针变量可以相互混用
17.若有定义语句:int year=2024,*p=&year;,以下不能使得变量year中的值增至2025的语句是( )
A.*p+=1; B.(*p)++; C.++(*p); D.*p++;
18.设有定义:int k,a[10],*p1=a,*p2=a;,则以下语句中,不正确的一项是( )
A.k=*p1+*p2; B.k=*p1*(*p2); C.p2=k; D.p1=p2;
19.设有定义:int n1=0,n2,*p=&n2,*q=&n1;,则以下赋值语句中与n2=n1;等价的是( )
A.*p=*q; B.p=q; C.*p=&n1; D.p=*q;
20.设有定义:int i,j=9,*p;*p=&i;,则与i=j;等价的语句是( )
A.i=*p; B.*p=*&j; C.i=&j; D.i=**p;
21.下列程序试图通过指针p为变量n读入数据并输出,程序中第( )行有错误。
L1 main()
L2 {int n,*p=NULL;
L3 p=&n;
L4 scanf("%d",&p);
L5 printf("%d",*p);
getch();}
A.L2 B.L3 C.L4 D.L5
22.执行以下程序段的输出结果是( )
main()
{int *p,x=100;
p=&x;
x=*p+10;
printf("%d
",x);getch();}
A.90 B.100 C.110 D.120
23.执行以下程序段的运行结果是( )
main()
{int i,array[5]={1,2},len,*ry=array;
for(len=4;len>=0;len--)
array[len]-=1;
for(i=0;i<4;i++)
printf("%d ",array[i]);getch();}
A. 0 1 -1 -1 B.1 1 -1 -1 -1 C.1 0 -1 1 -1 D.1 -1 1 -1 1
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d
",c);
getch();}
25.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=0,*ptr;
ptr=&a;
*ptr=3;
a=(*ptr)++;
printf("%d,%d
",a,*ptr);
getch();}
26.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int m=1,n=2,*p=&m,*q=&n,*r;
r=p;
p=q;
q=r;
printf("%d,%d,%d,%d
",m,n,*p,*q);
getch();}
27.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+2;
printf("a=%d,b=%d",a,b);
getch();}
28.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=12,b=13,*p1,*p2,*p;
p1=&a;
p2=&b;
if(a<b)
{p=p1;p1=p2;p2=p;}
printf("%d %d ",a,b);
printf("%d %d
",*p1,*p2);
getch();}
29.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=10,b=20,*pa=&a,*pb=&b;
*pa=*pa+5;
*pb=*pb-5;
printf("a=%d,b=%d
",a,b);
getch();}
30.以下程序的运行结果是( )
#include <stdio.h>
#include<conio.h>
main()
{int a=10,b=40,c=20;
int *x=&a,*y=&b,*z=&c;
printf("%d,%d,%d
",++*x,++*y,++*z);
printf("%d,%d,%d
",++*x,++*y,++*z);
getch();}
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.下列程序的功能是:输入3个整数,按照由小到大的顺序输出。程序中有三处错误,请改正。
L1 #include <stdio.h>
L2 #include<conio.h>
L3 main()
L4 {int n1,n2,n3,p;
L5 int *p1,*p2,*p3;
L6 printf("input three integer n1,n2,n3:");
L7 scanf("%d%d%d",&n1,&n2,&n3);
L8 p1=&n1;
L9 p2=&n2;
L10 p3=&n3;
L11 if(n1<n2)
L12 {p=*p1;*p1=*p2;*p2=p;}
L13 if(n1>n3)
L14 {p=*p1;*p1=*p2;*p2=p;}
L15 if(n2>n1)
L16 {p=*p2;*p2=*p3;*p3=p;}
L17 printf("Now,the order is:%d,%d,%d
",n1,n2,n3);
L18 getch();}
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.以下程序段的功能是:从键盘输入:this is a text.<回车>,则输出:This Is A Text. 将每个英文单词的首字母更改为大写。请填空。
#include <stdio.h>
#include<conio.h>
#define TRUE 1
#define FALSE 0
【1】
main()
{int flag=TRUE;
char ch;
do{ch=getchar();
flag=【2】;
putchar(ch);}while(【3】);
printf("
");
getch();}
int change(char *c,int status)
{if(【4】) return TRUE;
else
{if(status&&*c<='z'&&*c>='a')
【5】;
return FALSE;}}
33.以下程序的功能是:求整数x的y次方的低3位值,例如,5的6次方为15625,此值的低3位值为625。请填空。
#include <stdio.h>
#include<conio.h>
main()
{int t,r;
int x,y;
printf("input x and y:
");
scanf("%d%d",&x,&y);
t=【1】;
printf("x=%d,y=%d,r=%d,last=%d",x,y,r,t);
getch();}
int fun(int x,int y,int *p)
{int i,t=1;
for(i=1;i<=y;i++)
t=t*x;
【2】;
t=【3】;
return t;}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$