C语言指针练习题_第1页
C语言指针练习题_第2页
C语言指针练习题_第3页
C语言指针练习题_第4页
C语言指针练习题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指针练习题指针练习题 ( (一一) )选择题选择题 1 1若有以下定义,则对若有以下定义,则对 a a 数组元素的正确引用是数组元素的正确引用是_._. intint a5,*p=a;a5,*p=a;a)*a10,*p=a;则则 p+5p+5 表示表示_._. a)a)元素元素 a5a5的地址的地址 b)b)元素元素 a5a5的值的值 c)c)元素元素 a6a6的地址的地址d)d)元素元素 a6a6的值的值 4 4下面程序段的运行结果是下面程序段的运行结果是_._. charchar *s=abcde;*s=abcde;s+=2;printf(%d,s);s+=2;printf(%d,s); a)cdea)cdeb)b)字符字符ccc)c)字符字符cc的地址的地址d)d)无确定的输出结无确定的输出结 果果 5 5设设 p1p1 和和 p2p2 是指向同一个字符串的指针变量,是指向同一个字符串的指针变量,c c 为字符变量,则以下不能正确为字符变量,则以下不能正确 执行的赋值语句是执行的赋值语句是_._. a)c=*p1+*p2;a)c=*p1+*p2;b)p2=cb)p2=cc)p1=p2c)p1=p2d)c=*p1*(*p2);d)c=*p1*(*p2); 6 6以下正确的程序段是以下正确的程序段是_._. a)chara)char str20;str20;b)charb)char *p;*p; scanf(%s,scanf(%s,scanf(%s,p);scanf(%s,p); c)charc)char str20;str20;d)chard)char str20,*p=str;str20,*p=str; scanf(%s,scanf(%s,scanf(%s,p2);scanf(%s,p2); 7 7若有说明语句若有说明语句 charchar a=Ita=It isis mine;mine;charchar *p=It*p=It isis mine;mine;则以下不正确的叙述是则以下不正确的叙述是 _._. a)a+1a)a+1 表示的是字符表示的是字符 t t 的地址的地址 b)pb)p 指向另外的字符串时,字符串的长度不受限制指向另外的字符串时,字符串的长度不受限制 c)pc)p 变量中存放的地址值可以改变变量中存放的地址值可以改变 d)ad)a 中只能存放中只能存放 1010 个字符个字符 8 8下面程序的运行结果是下面程序的运行结果是_._. #include#include #include#include main()main() charchar *s1=AbDeG;*s1=AbDeG;charchar *s2=AbdEg;*s2=AbdEg; s1+=2;s2+=2;s1+=2;s2+=2;printf(%dn,strcmp(s1,s2);printf(%dn,strcmp(s1,s2); a)a)正数正数b)b)负数负数c)c)零零d)d)不确定的值不确定的值 9 9下面程序的运行结果是下面程序的运行结果是_._. #include#include #include#include fun(charfun(char *w,int*w,int n)n) charchar t,*s1,*s2;t,*s1,*s2;s1=w;s2=w+n-1;s1=w;s2=w+n-1; while(s1s2)t=*s1+;*s1=*s2-;*s2=t;while(s1s2)t=*s1+;*s1=*s2-;*s2=t; main()main() charchar *p;*p;p=1234567;p=1234567;fun(p,strlen(p);fun(p,strlen(p);puts(p);puts(p); a)7654321a)7654321b)1714171b)1714171c)1711717c)1711717d)7177171d)7177171 1010变量的指针,其含义是指该变量的变量的指针,其含义是指该变量的_._. a)a)值值b)b)地址地址c)c)名名d)d)一个标志一个标志 1111若有语句若有语句 intint *point,a=4;*point,a=4;和和 point=point=下面均代表地址的一组选项是下面均代表地址的一组选项是_._. a)a,point,*int;int *p,m=5,n;*p,m=5,n;以下正确的程序段的是以下正确的程序段的是_._. a)p=a)p=b)p=b)p= scanf(%d,scanf(%d,scanf(%d,*p);scanf(%d,*p); c)scanf(%d,c)scanf(%d,d)p=d)p= *p=n;*p=n;*p=m;*p=m; 1 13 3已知有以下的说明,已知有以下的说明, intint a=8,1,2,5,0,4,7,6,3,9;a=8,1,2,5,0,4,7,6,3,9;那么那么 a*(a+a3)a*(a+a3)的值为的值为_ _._. 1414对于指向同一数组的指针变量,不能进行哪种运算对于指向同一数组的指针变量,不能进行哪种运算? ? () A.A. + +B.B. - -C.C. = =D.D. = 1515若有以下说明和语句,且若有以下说明和语句,且 0=i10,0=i10, 则下面哪个是对数组元素的错误引用则下面哪个是对数组元素的错误引用? ?() intint a=1,2,3,4,5,6,7,8,9,0,a=1,2,3,4,5,6,7,8,9,0, *p,*p, i;i;p=a;p=a; A.A. *(a+i)*(a+i)B.B. ap-aap-aC.C. p+ip+iD.D. *(*p,i;p=a;p=a; A.A. *p4,i; for(i=0;i4;i+)for(i=0;i4;i+)pi=pi=printf(%dn,*p3);printf(%dn,*p3); A.A. 输出项不合法输出项不合法B.B. . . 7 7D.D. 1010 1818有以下说明和语句,有以下说明和语句,, , 则则 p2-p1p2-p1 的值为多少的值为多少?(?(单选单选) ) () intint a10,a10, *p1,*p1, *p2;*p2;p1=a;p1=a;p2=p2= A.A. 5 5B.B. . . 1010 D.D. 没有指针与指针的减法没有指针与指针的减法 1919若有以下定义和语句若有以下定义和语句: : intint s45,(*ps)5;s45,(*ps)5; ps=s;ps=s;则对则对 s s 数组元素的正确引用形式是数组元素的正确引用形式是 () A)A) ps+1ps+1B)B) *(ps+3)*(ps+3)C)C) ps02ps02D)D) *(ps+1)+3*(ps+1)+3 2020若有以下的定义,若有以下的定义,intint t32t32;能正确表示;能正确表示 t t 数组元素地址的表达式是(数组元素地址的表达式是() A)A) *p); voidvoid main()main() intint a=1,b=2,c;a=1,b=2,c;c=func(a,c=func(a,a=1,b=4,c=6;a=1,b=4,c=6; b=func(c,b=func(c, c=6,a=9,b=16c=6,a=9,b=16a=func(b,a=func(b, b=16,c=19,a=36;b=16,c=19,a=36; printf(a=%d,b=%d,c=%d,a,b,c);printf(a=%d,b=%d,c=%d,a,b,c); intint func(intfunc(int a,inta,int *p)*p) a+;a+;*p=a+2;*p=a+2;return(*p+a);return(*p+a); 2222有以下程序有以下程序 voidvoid fun(charfun(char *c,int*c,int d)d) *c=*c+1;d=d+1;*c=*c+1;d=d+1; printf(%c,%c,*c,d);printf(%c,%c,*c,d); main()main() charchar a=A,b=a;a=A,b=a; fun(fun( printf(%c,%cn,a,b);printf(%c,%cn,a,b); 程序运行后的输出结果是(程序运行后的输出结果是() 。 A)A) B,a,B,aB,a,B,a B)B) a,B,a,Ba,B,a,B C)C) A,b,A,bA,b,A,b D)D) b,B,A,bb,B,A,b 2323在说明语句:在说明语句:intint *f();*f();中中, ,标识符标识符 f f 代表的是代表的是 () A)A) 一个用于指向整型数据的指针变量一个用于指向整型数据的指针变量 B)B) 一个用于指向一维数组的行指针一个用于指向一维数组的行指针 C)C) 一个用于指向函数的指针变量一个用于指向函数的指针变量 D)D) 一个返回值为指针型的函数名一个返回值为指针型的函数名 2424以下程序段给数组所有元素输入数据,应在下划线处添入的是以下程序段给数组所有元素输入数据,应在下划线处添入的是 () A A)a+(i+)a+(i+) B B)while(i10)i=0;while(i10) scanf(scanf(“%d%d”,_);,_); 2525以下程序的输出结果是(以下程序的输出结果是() A A)1717B B) )1919D D)2020 main(main( ) ) intint aa =2,4,6,8,10,y=1,x,*p;=2,4,6,8,10,y=1,x,*p;p=p= forfor (x=0;x*b)_; if(num*c)_;if(num*c)_; printf(printf(输出最小整数输出最小整数:%dn,num);:%dn,num); 2 2下面程序段的运行结果是下面程序段的运行结果是_._. charchar s80,*sp=HELLO!;s80,*sp=HELLO!; sp=strcpy(s,sp);sp=strcpy(s,sp);s0=h;s0=h;puts(sp);puts(sp); 3 3下面程序段的运行结果是下面程序段的运行结果是_._. charchar str=abc0def0ghi,*p=str;str=abc0def0ghi,*p=str;printf(%s,p+5);printf(%s,p+5); 4 4下面程序的功能是将两个字符串下面程序的功能是将两个字符串 s1s1 和和 s2s2 连接起来。请填空。连接起来。请填空。 #include#include main()main() charchar s180,s280;s180,s280;gets(s1);gets(s1); gets(s2);gets(s2); conj(s1,s2);conj(s1,s2);puts(s1);puts(s1); conj(charconj(char *p1,char*p1,char *p2)*p2) charchar *p=p1;*p=p1; while(*p1)_;while(*p1)_; while(*p2)*p1=_;p1+;p2+;while(*p2)*p1=_;p1+;p2+; *p1=0;*p1=0; _;_; 5 5若有定义若有定义:int:int a=2,4,6,8,10,12,*p=a;a=2,4,6,8,10,12,*p=a;则则*(p+1)*(p+1)的值是的值是_._. *(a+5)*(a+5)的值是的值是_._. 6 6若有以下定义若有以下定义:int:int a23=2,4,6,8,10,12;a23=2,4,6,8,10,12;则则 a10a10的值是的值是_._. *(*(a+1)+0)*(*(a+1)+0)的值是的值是_._. 7 7以下程序将数组以下程序将数组 a a 中的数据按逆序存放,请填空。中的数据按逆序存放,请填空。 #define#define M M 8 8 main()main() intint aM,i,j,t;aM,i,j,t; for(i=0;iM;i+)scanf(%d,a+i);for(i=0;iM;i+)scanf(%d,a+i); i=0;j=M-1;i=0;j=M-1; while(ij)while(ij) t=*(a+i);_;*(_)=t;t=*(a+i);_;*(_)=t;i+;j-;i+;j-; for(i=0;iM;i+)printf(=,*(a+i);for(i=0;iM;i+)printf(=,*(a+i); 8 8若有定义:若有定义:intint a35,i,j;(a35,i,j;(且且 0=i3,0=j5),0=i3,0=0;j-)printf(%sn,*(p-); 1 10 0、以下程序的输出结果是(、以下程序的输出结果是() #include#include Stdio.hStdio.h #include#include Conio.hConio.h intint main(void)main(void) intint *var,ab;*var,ab; ab=100;ab=100; var=var= ab=*var+10;ab=*var+10; printf(%dn,*var);printf(%dn,*var);getch();getch();returnreturn 0;0; 1111、以下程序的输出结果是(、以下程序的输出结果是() #include#include Stdio.hStdio.h #include#include Conio.hConio.h voidvoid ast(intast(int x,intx,int y,inty,int *cp,int*cp,int *dp)*dp) *cp=x+y;*cp=x+y;*dp=x-y;*dp=x-y; intint main(void)main(void) intint a,b,c,d;a,b,c,d;a=4;a=4; b=3;b=3;ast(a,b,ast(a,b,printf(%d,%dn,c,d);printf(%d,%dn,c,d); getch();getch();returnreturn 0;0; 1212、若有定义、若有定义 charcharch;ch; (1)(1)使指针使指针 p p 可以指向变量可以指向变量 chch 的定义语句是(的定义语句是(). . (2)(2)使指针使指针 p p 可以指向变量可以指向变量 chch 的赋值语句是(的赋值语句是(). . (3)(3)通过指针通过指针 p p 给变量给变量 chch 读入字符的读入字符的 scanfscanf 函数调用语句是(函数调用语句是(). . (4)(4)通过指针通过指针 p p 给变量给变量 chch 赋字符的语句是(赋字符的语句是(). . (5)(5)通过指针通过指针 p p 输出输出 chch 中字符的语句是(中字符的语句是(). . 1313、 若有图中所示五个连续若有图中所示五个连续的的 inint t 类型的存储单元并赋值如图类型的存储单元并赋值如图, 且且 p p 和和 s s 的基类型皆的基类型皆为为 int,int,p p 已指向存储单元已指向存储单元 a1.a1. (1)(1)通过指针通过指针 p p 给给 s s 赋值,使其指向最后一个存储单元赋值,使其指向最后一个存储单元 a4a4的语句是(的语句是(). . (2)(2)用以移动指针用以移动指针 s,s,使之指向中间的存储单元使之指向中间的存储单元 a2a2的表达式是(的表达式是(). . (3)(3)已知已知 k=2k=2,指针,指针 s s 已指向存储单元已指向存储单元 a2,a2,表达式表达式*(s+k)*(s+k)的值是(的值是(). . (4)(4)指指针针s s已指向存储单已指向存储单元元a2,a2,不移动指不移动指针针s,s,通通过过s s引用存储单引用存储单元元a3a3的表达式是的表达式是 () . . (5)(5)指针指针 s s 已指向存储单元已指向存储单元 a2,pa2,p 指向存储单元指向存储单元 a0,a0,表达式表达式 s-ps-p 的值是(的值是(). . (6)(6)若若 p p 指向存储单元指向存储单元 a0,a0,则以下语句的输出结果是(则以下语句的输出结果是(). . 1414、WhatWhat resultsresults afterafter runrun thethe followingfollowing codecode ? ? 1 1、#include#include intint main()main() intint *ptr;*ptr; ptrptr = = (int(int *)0 x8000;*)0 x8000; *ptr*ptr = = 123;123; printf(printf(%d%d, ,* *ptr);ptr); returnreturn 0;0; 2 2、#include#include intint main()main() intint v210;v210; intint (*a)10(*a)10 = = intint (*tmp)10(*tmp)10 = = a;a; a+;a+; printf(%dn,printf(%dn, (int)a(int)a - - (int)tmp);(int)tmp); returnreturn 0;0; 三、编程题:三、编程题: 1 1、编写一个函数编写一个函数,其功能是对传送过来的两个浮点数求出和值与差值其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回并通过形参传送回 调用函数。调用函数。 #include#include Stdio.hStdio.h #include#include Conio.hConio.h voidvoid f(floatf(float x,floatx,float y,floaty,float *ps,float*ps,float *pd)*pd) *ps=x+y;*ps=x+y; *pd=x-y;*pd=x-y; return;return; intint main(void)main(void) floatfloat x,y,sum,diff;x,y,sum,diff; printf(inputprintf(input x,y=?);x,y=?); scanf(%f,%f,scanf(%f,%f, f(x,y,f(x,y, printf(%f+%f=%fprintf(%f+%f=%f%f-%f=%f,x,y,sum,x,y,diff);%f-%f=%f,x,y,sum,x,y,diff); getch();getch(); returnreturn 0;0; 评析评析:此题要求编写的函数需要返回两个结果此题要求编写的函数需要返回两个结果(和值和差值和值和差值) ,而函数的返回值只能返回一而函数的返回值只能返回一 个值。因此使用指针作为函数参数,题目要求编写的函数没有返回值,即类型为个值。因此使用指针作为函数参数,题目要求编写的函数没有返回值,即类型为 voidvoid。注。注 意实参与形参的对应关系。意实参与形参的对应关系。 2 2、编写一个函数,对传送过来的三个数求出最大和最小数,并通过形参传送回调用函数、编写一个函数,对传送过来的三个数求出最大和最小数,并通过形参传送回调用函数。 #include#include Stdio.hStdio.h #include#include Conio.hConio.h voidvoid f(intf(int a,inta,int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论