C语言习题指针.doc
C语言(指针一)单元练习五一选择题1下列程序的输出结果是_。 A#include <stdio.h>#include <string.h>main() char *p1,*p2,s10="12345" p1="abcde" p2="ABCDE" strcpy(s+2,p1+3); strcat(s,p2+2); printf("%s",s); return;A. 12deCDE B.12abcAB C. cdABC45 D. abcBDE2. 以下程序运行之后的输出结果是_。 B #include <stdio.h> void main() int *p,*p1,*p2,a=3,b=7; p1=&a; p2=&b; if(a<b) p=p1;p1=p2;p2=p; printf("%d,%d ",*p1,*p2); printf("%d,%d",a,b); A. 3,7 7,3B. 7,3 3,7C. 7,3 7,3D. 3,7 3,73. 以下函数的功能是_。 B fun(int *p1,*p2) int *p; *p=*p1; *p1=*p2; *p2=*p;A. 正确,但没有交换*p1和*p2的值。B. 使用了空指针,可能造成系统故障。C. 能成功交换*p1和*p2的值。D. 能成功交换*p1和*p2的地址。4. 有以下程序: B#include <stdio.h>void main() int x8=8,7,6,5,0,0,*s;s=x+3;printf("%dn",s2); 执行后输出结果是_。A.随机值 B.0 C.5 D.65. 以下程序的输出结果是_。 D#include <stdio.h> #include <string.h> void main() char b18="abcdefg",b28,*pb=b1+3;while (-pb>=b1) strcpy(b2,pb);printf("%dn",strlen(b2); A. 8 B. 3 C. 1 D. 76. 若有以下说明: Dint w34=0,1,2,4,5,8;int (*p)4=w;则数值为4的表达式是_。A. *w1+1 B. p+,*(p+1) C. w22 D. p117. 以下程序的输出结果是_。 A#include <stdio.h>int i;fun(int a, int *b);main() int i=1, j=2; fun(fun(i, &j), &j); return; fun(int a, int *b) static int m=2; i+=m+a; m=+(*b); printf("%d,%dn", i, m); return (m); A. 3,3 B. 3,3 C. 3,3 D. 3,3 9,4 6,3 9,3 6,4 6.48. 若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是_。 CA. a,p,&*a B. *&a,&a,*p C. &a,p,&*p D. *&p,*p,&a9. 以下程序的输出结果为_。 C#include <stdio.h>void main() char s="123",*p; p=s; printf("%c%c%cn",*p+,*p+,*p+); A. 123 B. 231 C. 321 D. 31210. 以下程序的输出结果是_。 A#include <stdio.h>void main() static char s1="programe",s2="language" char *p1,*p2; int i; p1=s1; p2=s2; for(i=0;i<8;i+) if(*(p1+i)=*(p2+i) printf("%c",*(p1+i); A. gae B.ga C. pro D. lang11. 以下定义中与int *p4等价的是_。 CA. int p4 B. int *p C. int *(p4) D. int (*p)412. 以下程序的运行结果是_。 A#include <stdio.h>void main() char *s="xcbc3abcd" int a, b, c, d; a=b=c=d=0; for(; *s; s+) switch(*s) case 'c': c+; case 'b': b+; default : d+; break; case 'a': a+; printf("a=%d,b=%d,c=%d,d=%dn", a, b, c, d); A. a=1,b=5,c=3,d=8 B. a=1,b=2,c=3,d=3C. a=9,b=5,c=3,d=8 D. a=0,b=2,c=3,d=313. 设char *aa2="abcd","ABCD" 则以下说法中正确的是_。 CA. aa数组元素的值分别是"abcd"和"ABCD"。B. aa是指针变量,它指向含有两个数组元素的字符型一维数组。C. aa数组的两个元素分别存放的是含有4个字符的一维字符数组首地址。D. aa数组的两个元素中各自存放了字符'a'和'A'的地址。14. 已知函数定义如下: B fun (char *p1) char *p2=p1; while(*p2!= '0') p2+; return (p2-p1); 在主函数中用语句printf("%d",fun("hello world!");调用上述函数,则输出结果为_。A. 13 B.12 C. 11 D. 1015. 若有以下定义:int a=1,2,3,4,5,6,7,8,9,10, *p=a; 表达式的值为3的是_。AA. p+=2,*(p+) B. p+=2,*+p C. p+=3,*p+ D. p+=2,+*p16. 以下程序段执行完后,a的值为_。A static int s24=0,1,2,3,4,5,6,7; int a,*p; p=&s01; a=(*p)*(*p+3)*(*p+5);A. 24 B. 15 C. 28 D. 不确定17设x为一数字字符,则其所对应的十进制数值为_。BA.x B.x-0 C.*x D.&x18以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址,若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为_。B#include <stdio.h>#include <string.h>char *scmp(char *s1, char *s2) if(strcmp(s1,s2)<0) return(s1);else return(s2); main() int i; char string20, str320;for(i=0;i<3;i+) gets(stri);strcpy(string,scmp(str0,str1); strcpy(string,scmp(string,str2);printf("%sn",string); return;A.abcd B.abba C.abc D.abca19. 以下程序的输出结果是_。A #include <stdio.h>void main() int *p1,*p2,*p,a=7,b=9; p1=&a;p2=&b; if(a<b) p=p1;p1=p2;p2=p; printf("%d,%d ",*p1,*p2); printf("%d,%d ",a,b); A. 9,7 7,9 B. 7,9 7,9 C. 7,9 9,7 D. 9,7 9,720. 有以下程序: B#include <stdio.h>int *f(int *x, int *y) if (*x < *y) return x;else return y; main() int a=7,b=8,*p,*q, *r;p=&a; q=&b;r = f(p,q);printf("%d,%d,%dn",*p,*q,*r); return; 执行后输出结果是_。 A.7,8,8 B.7,8,7 C.8,7,7 D.8,7,821. 已知有以下的说明,那么执行语句a=p+2;后, a0的值等于多少_。 Dfloat a3=1.2,45.6,-23.0;float *p=a;A. 1.2 B. 45.6 C. -23.0 D. 语句有错22. 如下程序的执行结果是_。 C#include <stdio.h>void main() int p1,m1,n1,dv,df;char *p="a+b-c+d/e",c;p1=m1=n1=dv=df=0;while (c=*p+)!='0') switch(c) case '+':p1+;break; case '-':m1+;break; case '*':n1+;break; case '/':dv+;break; default:df+; printf("%d,%d,%d,%dn",p1,m1,dv,df); A.2,1,0,1 B. 2,1,0,5 C. 2,1,1,5 D. 2,1,1,223. 有以下程序: B#include <stdio.h>void main() int a33,*p,i;p=&a00;for(i=0;i<9;i+) pi=i+1;printf("%d n",a12); 程序运行后的输出结果是_。A.3 B.6 C.9 D.224. 如下程序的执行结果是_。A#include <stdio.h>void main() int a33=2,4,6,i,*p=&a00;for (i=0;i<2;i+) if (i=0) aii+1=*p+1; else +p;printf("%d",*p); printf("n"); A. 23 B. 26 C. 33 D. 3625. 已知char s="789",*p;则执行下列语句后的输出是_。B p=s; printf("%c",*(p+2);A.字符'8' B.字符'9'C.字符'8' 的地址 D.字符'9'的地址二、判断题1.(对)以下程序:#include <stdio.h>int fun(int array,int n) int m=0,i; for(i=0; i<n; i+) m+=*array; array+; return m; main() int a10=1,2,3,4,5,6,7,8,9,10; printf("fun=%dn",fun(a,10); return; 其输出结果是110的总和。 2.(对)有如下定义:int a=1,3,5,7,9, i, *p ;则语句:for(i=0; i<5; i+) printf("a%d=%dt",i,ai);与语句:for(p=a, i=0; i<5; i+) printf("a%d=%dt",i,pi); 等价的。3.(错)以下程序:#include <stdio.h>main() int i=10,*p; p=&i; *p=5; printf("%dn",i); return; 输出结果为10。4.(错)在定义:int *fun();中,标识符fun是一个用于指向函数的指针变量。5.(错)可通过int *i=NULL; scanf("%d",i); 正确进行整数赋值。6.(错)指针加1表示每次向下移动1个字节。7.(对)相同类型的指针可以进行减法运算。8.(错)函数fun(int *p) return *p; 的返回值是不确定的值。9.(错)使用指针变量作函数参数采取的是"值传递"的方式。10.(对)如果数组中每个元素都是具有相同的数据类型的指针,则这种数组称为指针数组。三、填空题1. 以下程序的执行结果是_12_。#include <stdio.h>void main() int a12=1,2,3,4,5,6,7,8,9,10,11,12,*p4,i;for (i=0;i<4;i+) pi=&ai*3;printf("%dn",p32); 2.若有定义:int a=2,4,6,8,10,12, *p=a;则*(p+1)的值是_4_。3. 已知有以下的说明,int a=8,1,2,5,0,4,7,6,3,9;那么a*(a+a3)的值为_0_。4. 在C程序中,指针变量的值增1,表示指针变量指向_下一个_存储单元。5. 以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。row#include <stdio.h>#define N 3#define M 3select(int aNM,int *n) int i,j,row=1,colum=1;for(i=0;i<N;i+) for(j=0;j<M;j+)if(aij>arowcolum)row=i;colum=j;*n=_row_;return arowcolum; main() int aNM=9,11,23,6,1,15,9,17,20,max,n;max=select(a,&n);printf("max=%d,line=%dn",max,n); return; 6. 输入10个整数存入一维数组,从中查找某个整数X,查到则输出其是第几个数,查不到则输出“Not Find!”。请填空。 #include <stdio.h> void main () int a10,*p=a,x,n,flag=0; for (;p<a+10;p+) scanf ("%d",p); scanf ("%d",&x); for (n=1,p=a; _n<=10_ ;p+,n+) if (*p=x) flag = 1;break; if (! flag) printf ("Not Find! n"); else printf ("%dn",n); 7. 执行以下程序后,输出结果为_6xyz_。 #include <stdio.h>void main() char *s6="564","379","207","816","xyz","abc" char *p; int i; p=s; for(i=0;i<5;i+) printf("%s",pi); 8. 一个专门用来存放另一个变量地址的变量叫_指针变量_。9. 以下程序的执行结果是_ch=f_。#include <stdio.h>void main() char a="abcdefg",*p;p=a;*(p+3)+=2;printf("ch=%cn",*(p+5); 10. 以下程序的执行结果是_a=100_。#include <stdio.h>void main() int a=50,*p;p=&a;*p=100;printf("a=%dn",a); 11. 以下程序的输出结果是_7_。#include <stdio.h>void sub(int *a,int n,int k);main() int x=0;sub(&x,8,1);printf("%dn",x); return; void sub(int *a,int n,int k) if(k<=n) sub(a,n/2,2*k);*a+=k; 12. mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。int mystrlen(char *str) int i;for(i=0; _*(str+i)或stri_!='0'i+); return i; 13. 以下程序的执行结果是_s=24_。#include <stdio.h>void main() int a=2,3,4,*p,s,i;s=1;p=a;for (i=0;i<3;i+) s*=*(p+i);printf("s=%dn",s); 14. 执行以下程序段后,a的值为_4_。 static int s=5,8,4,6,10,7; int a,i,*p; a=10; p=&s0; for(i=0;i<6;i+) a=(*(p+i)<a)?*(p+i):a;15. 执行以下程序段后,m的值是_6_。 int a=7,4,6,3,10,m,k,*ptr; m=10; ptr=&a0; for(k=0;k<5;k+=2) m=(*(ptr+k)<m)?*(ptr+k):m;