c语言指针教案下载,c语言指针习题及答案.doc

c语言指针习题及答案.doc

指针习题及答案一选择题1.变量的指针,其含义是指该变量的 B 。A)值 B)地址 C)名 D)一个标志2.已有定义int k2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。A)k*ptr1*ptr2 B)ptr2k C)ptr1ptr2 D)k*ptr1**ptr23.若有说明int *p,m5,n;以下程序段正确的是 D 。A)pn ; B)p n ; scanf“d”,p; scanf“d”,*p;C)scanf“d”,n; D)p n ; *pn ; *p m ;4.已有变量定义和函数调用语句int a25;print_valuea;下面函数的输出结果是 D 。void print_valueint *x printf“dn”,*x; A)23 B)24 C)25 D)265.若有说明int *p1, *p2,m5,n;以下均是正确赋值语句的选项是 C 。A)p1m; p2p1 ; B)p1m; p2n; *p1*p2 ;C)p1m; p2p1 ; D)p1m; *p1*p2 ;6.若有语句int *p,a4;和pa;下面均代表地址的一组选项是 D 。A)a,p,*a B)*a,a,*p C)*p,*p,a D)a,*p,p7.下面判断正确的是 C 。A)char *a”china”; 等价于 char *a; *a”china” ;B)char str10“china”; 等价于 char str10; str “china”;C)char *s”china”; 等价于 char *s; s”china” ;D)char c4”abc”,d4”abc”; 等价于 char c4d4”abc” ;8.下面程序段中,for循环的执行次数是 C 。char *s”ta018bc” ;for ; *s0 ; s printf“*” ;A)9 B)7 C)6 D)59.下面能正确进行字符串赋值操作的是 C 。A)char s5“ABCDE”; B)char s5A,B,C,D,E;C)char *s ; s”ABCDE” ; D)char *s; scanf“s”,s ;10.下面程序段的运行结果是 C 。char *s”abcde” ;s2 ; printf“d”,s;A)cde B)字符c C)字符c的地址 D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。A)c*p1*p2 B)p2c C)p1p2 D)c*p1**p212.设有程序段char s ”china”; char *p ; ps ;则下面叙述正确的是 D 。A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)s数组长度和p所指向的字符串长度相等D)*p与s0相等13.以下与库函数strcpychar *p1,char *p2功能不相等的程序段是 D 。A)strcpy1char *p1,char *p2 while *p1*p20 ; B)strcpy2char *p1,char *p2 while *p1*p20 p1; p2 C)strcpy3char *p1,char *p2 while *p1*p2 ; D)strcpy4char *p1,char *p2 while *p2 *p1*p2 ; 14.下面程序段的运行结果是 C 。 char a ”language” , *p ; pa ; while *pu printf“c”,*p-32; p ; A)LANGUAGE B)language C)LANG D)langUAGE16.以下与库函数strcmpchar *s,char *t功能相等的程序段是 C 。A)strcmp1char *s,char *t for ; *s*t; if *s 0 return 0 ;return *s-*t ; B)strcmp2char *s,char *t for ; *s*t; if *s return 0 ;return *s-*t ; C)strcmp3char *s,char *t for ; *t *s; if *t return 0 ; t ; s ; return *s-*t ; D)strcmp4char *s,char *t for ; *s*t; s, t if *s return 0 ;return *t-*s ; 17.以下说明不正确的是 D 。A)char a10”china” ; B)char a10,*pa; p”china”;C)char *a; a”china” ; D)char a10,*p; pa”china”;18.设有说明语句char a”It is mine”;char *p”It is mine”;则以下不正确的叙述是 D 。A)a1表示的是字符t的地址 B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符19.若已定义char s10;则在下面表达式中不表示s1的地址是 B 。A)s1 B)s C)s01 D)s120.若有定义int a5,*pa;则对a数组元素的正确引用是 D 。A)*a5 B)a2 C)*p5 D)*a221.若有定义int a5,*pa;则对a数组元素地址的正确引用是 D 。A)p5 B)*a1 C)a1 D)a022.若有定义int a23;则对a数组的第i行第j列元素值的正确引用是 A 。A)**aij B)aij C)*aij D)*aij23.若有定义int a23;则对a数组的第i行第j列元素地址的正确引用是 D 。A)*aij B)ai C)*aj D)aij24.若有程序段int a23,*p3; pa;则对a数组元素地址的正确引用是 。A)*p2 B)p2 C)p11 D)p1225.若有程序段int a23,*p3; pa;则对a数组元素的正确引用是 C 。A)p10 B)**p21 C)*p11 D)p1226.若有定义int a5;则a数组中首元素的地址可以表示为 C 。A)a B)a1 C)a D)a127.若有定义int *p4;则标识符p C 。A)是一个指向整型变量的指针B)是一个指针数组名C)是一个指针,它指向一个含有四个整型元素的一维数组D)定义不合法28.以下与int *q5;等价的定义语句是 C 。A)int q5 B)int *q C)int *q5 D)int *q529.以下正确的说明语句是 B 。A)int *b1,3,5,7,9 ;B)int a5,*num5a0,a1,a2,a3,a4;C)int a1,3,5,7,9; int *num5a0,a1,a2,a3,a4;D)int a34,*num4; num1a13;30.若有定义int b46,*p,*q4;且0i4,则不正确的赋值语句是 D 。A)qibi; B)pb; C)pbi; D)qib0032.若要对a进行自减运算,则a应有下面说明 D 。A)int p3; B)int k; C)char *a3 D)int b10; int *ap; int *ak; int *ab1;33.以下选项中,对指针变量p的正确操作是 B 。A)int a3, *p; B)int a5, *p; C)int a5; D)int a5pa; pa; int *pa100; int *p1,*p2a; *p1*p2;34.若有定义int x100,1,2,3,4,5,6,7,8,9,*p1;则数值不为3的表达式是 C 。A)x3 B)p1x3,*p1C)p1x2,*p1 D)p1x2,*p135.下面程序段的输出是 C 。int a 2,4,6,8,10,12,14,16,18,20,22,24,*q4,k;for k01; k4; k qkak*3;printf“dn”,q30;A)8 B)16 C)20 D)输出不合法36.若要对a进行自增运算,则a应具有下面说明 D 。A)int a32; B)char *a “12”,”ab”;C)char *a 3 D)int b10, *ab;37.若有定义int a46;则能正确表示a数组中任一元素aij(i,j均在有效范围内)地址的表达式 A 。A)a006*ij B)a004*jiC)a004*ij D)a006*jI38.下面程序的运行结果是 B 。main int x52,4,6,8,10, *p, pp ; px , pp p ; printf“d”,*p; printf“3d”,pp;A)4 4 B)2 4 C)2 2 D)4 639.若有定义int x431,2,3,4,5,6,7,8,9,10,11,12; int *p3x ; 则能够正确表示数组元素x12的表达式是 D 。A)**p12 B)*p12C)**p5 D)**p1240.若有说明char *language“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”;则language2的值是 B 。A)一个字符 B)一个地址 C)一个字符串 D)一个不定值41.设有定义char *cc2“1234”,”5678”;则正确的叙述是 A 。A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)cc是指针变量,它指向含有两个数组元素的字符型一维数组D)cc元素的值分别维”1234”和”5678”42.已有定义int *p ;指针p可以 B 。A)代表函数的返回值 B)指向函数的入口地址C)表示函数的类型 D)表示函数返回值的类型43.已有函数maxa,b,为了让函数指针变量p指向函数max,正确的赋值方法是 A 。A)pmax; B)pmaxa,b; C)*pmax; D)*pmaxa,b;44.若有函数maxa,b,并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是 C 或 pa,b 。A)*pmaxa,b B)*pmaxa,b; C)*pa,b; D *pa,b;45.以下正确的叙述是 C 。A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定B)C语言允许main函数带形参,形参名只能是argc和argvC)当main函数带有形参时,传给形参的值只能从命令行中得到D)若有说明 int mainint argc,char argv,则argc的值必须大于1三程序阅读题1.写出下面程序的运行结果。 5funcchar *s,char a,int n int j; *sa; jn ; while *ssj j ; return j;main char c6 ; int i ; for i1; i5 ; i *c1Ai1; printf“dn”,funcc,E,5;2.写出下面程序的运行结果。 6fun char *s char *ps; while *p p ; return p-s ;main char *a”abcdef” ; printf“dn”,funa ;3.写出下面程序的运行结果。 abcdefglkjihsubchar *a,int t1,int t2 char ch; while t1t2 ch *at1; *at1*at2 ; *at2ch ; t1 ; t2 ; main char s12; int i; for i0; i12 ; i siAi32 ; subs,7,11; for i0; i12 ; i printf “c”,si; printf“n”;4.当运行以下程序时,写出输入 6 的程序运行结果。 976531subchar *a,char b while *a0 ; while *a-1b *a*a-1; *ab;main char s”97531”,c; c getchar ; subs,c; putss ;5.写出下面程序的运行结果。JavadBaseC LanguagePascalmain char *a“Pascal”,”C Language”,”dBase”,”Java”; char p ; int j ; p a 3 ; for j3; j0; j printf“sn”,*p ;四程序填空题1.下面函数的功能是从输入的十个字符串中找出最长的那个串,请填2空使程序完整。void funchar str1081,char sp int i; *sp 【1 str0 】; for i1; i10; i if strlen *spstrlenstri 【2 *spstri 】;2.下面函数的功能是将一个整数字符串转换为一个整数,例如”-1234”转换为1234,请填3空使程序完整。int chnumchar *p int num0,k,len,j ; len strlenp ; for ; 【1 *p0 】; p k【2 *p-0 】; jlen ; while 【3 j0 】 kk*10 ; num num k ; return num;3.下面函数的功能使统计子串substr在母串str中出现的次数,请填3空使程序完整。int countchar *str, char *substr int i,j,k,num0; for i0; 【1 stri0 】; i for 【2 ji 】, k0; substrk strj; k; j if substr 【3 k 】 0 num ; break ; return num ;6.下面函数的功能是将两个字符串s1和s2连接起来,请填2空使程序完整。void conjchar *s1,char *s2 while *s1 【1 s1 】; while *s2 *s1【2 *s2 】; s1,s2; *s10 ; 五编程题1.定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出。2.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数输入10个数;进行处理;输出10个数。所有函数的参数均用指针。3.编写一个求字符串的函数(参数用指针),在主函数中输入字符串,并输出其长度。4.编写一个函数(参数用指针)将一个33矩阵转置。5.写函数原型为int strcmpchar *s1,char *s2;的函数,该函数实现两个字符串的比较(函数功能描述参见教材P137,strcmp字符串处理函数)。6.利用指向行的指针变量求53数组各行元素之和。7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值