MSE C语言第八章习题.doc
下面是研究生考试网为报考GCT软件工程硕士的考生整理的MSE考研复习备考资料。希望这些资料能够给考生一定帮助。在此,预祝考生复习备考顺利! 第九章 指针一、单项选择题1. 变量的指针,其含义是指该变量的 A) 值 B) 名 C) 地址 D) 名和值2.已知指针P的指向如图所示,则表达式*+p的值是a0a1a2a3a41020304050PA 20 B 30 C 21 D 313. 下面程序应能对两个整型变量的值进行交换。以下正确的说法是 main ( ) int a=10,b=20; swap(a, b); prinif("a=%d,b=%dn",a,b); swap(int p, int q) int t; t=p;p=q;q=t;A) 该程序完全正确B) 该程序有错,只要将语句swap(a, b);中的参数改为&a, &b即可C) 该程序有错,只要将swap( )函数中的形参p和q以及t均定义为指针即可D) 以上说法都不正确4. 以下对指针变量进行操作的语句,正确的选项是 A) int *p,*q; q=p; B) int a,*p,*q; q=&a; p=*q;C) int a=b=0,*p; p=&a; b=*p; D) int a=20,*p,*q=&a; p=q;5. 已有定义int k=2, *ptr1,*ptr2; 且ptrl和Ptr2均已指向变量k,下面能正确执行的赋值语句是 A) k=*ptrl+*ptr2; B) ptr2=kC) *ptrl=ptr2; D) ptrl=*ptr2;6. 若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是 (1) int *p=&a; (2) *p=a;A) 语句(1)和(2)中的*P含义相同,都表示给指针变量p赋值B) 语句(1)和语句(2)的执行结果,都是把变量a的地址值赋给指针变量pC) 语句(1)在对p进行说明的同时进行初始化,使p指向a,语句(2)将变量a的值赋给指针变量pD) 语句(1)在对p进行说明的同时进行初始化,使p指向a,语句(2)将变量a的值赋于*p7. 若有语句int *p, a=4; 和p=&a; 下面均代表变量值的一组选项是 A) a, p, *&a B) &*a, &a,*pC) *&p, *p,&a D) *&a, *p, a8. 若有说明:int *p1,*p2, m=5, n=9; 以下均是正确赋值语句的选项是 A) p1=&m; p2=&p1; B) p1=&m; p2=&n; *p1=*p2;C) p1=&m; p2=p1 D) p1=&m; *p2=*p1;9. 下面判断正确的是 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 c4=d4="abc"10. 设char *s="tabc017n" 则指针变量s指向的字符串所占的字节数是 A) 9 B) 8 C) 6 D 7 11. 下面能正确进行字符串赋值操作的是 A) char s5=("ABCDE"); B) char s5=A,B,C,D,E;C) char *s; s="ABCDE" D) char *s; scanf("%s",s);12. 下面程序段的运行结果是 char *s="abcde" s+=2; printf("%c",*s);A) cde B) c C)字符c的地址 D) 无确定的输出结果13. 下面程序段的运行结果是 char *format="%s,a=%d,b=%dn"int a=1, b=3;a+=b;printf(format,"a+=b",a,b);A) "a+=b",4,3 B) format,"a+=b",4,3C) a+=b, a=4,b=3 D) “a+=b”, a=4,b=314. 以下不能正确进行字符串赋初值的语句是 A) char str5="good!" B) char str ="good!"C) char *str="good!" D) char str5=g',o',o',d'15. 若有以下定义和语句:int s45, (*ps)5;ps=s;则对s数组元素的正确引用形式是 A) ps+1 B) *(ps+3) C) ps02 D) *(ps+1)+316. 在声明语句:int *f( ); 中,标识符f代表的是 A) 一个用于指向整型数据的指针变量B) 一个用于指向一维数组的行指针C) 一个用于指向函数的指针变量D) 一个返回值为指针型的函数名17. 若有以下说明和定义 fun (int *c) main ( ) int (*a)( )=fun, *b( ), w10, c; 在必要的赋值之后,对fun函数的正确调用语句是 A) a=a(w); B) (*a)(&c); C) b=*b(w); D) fun (b);18. 有如下说明 int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为9的表达式是 A) *p+9 B) *(p+8) C) *p+=9 D) p+819. 若有以下调用语句,则不正确的fun函数的首部是 main ( ) int a50,n; fun(n, &a9); A void fun (int m, int x ) B void fun (int s, int h41)C void fun (int p, int *s) D void fun (int n, int a)20 设已有定义:char *st="how are you" 下列程序段中正确的是 A char a11, *p; strcpy(p=a+1,&st4);B char a11; strcpy(+a, st);C char a11; strcpy(a, st);D char a , *p; strcpy(p=&a1,st+2);21. 设有如下定义语句: int x6=2,4,6,8,5,7,*p=x, i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A) for(i=0; i<6; i+) printf("%2d",*(p+);B) for(i=0;i<6;i+) printf("%2d",*(p+i);C) for(i=0;i<6;i+) printf("%2d",*p+);D) for(i=0;i<6;i+) printf("%2d",(*p)+); 22. 以下程序程序运行后的输出结果是 main ( ) int a =1,2,3,4,5,6,7,8,9,10,11,12, *p=a+5, *q=NULL; *q=*(p+5); printf ("%d %dn",*p,*q);A) 运行后报错 B) 6 6 C) 6 11 D) 5 10 23. 有以下定义和语句:int a32=1,2,3,4,5,6,*p3;p0=a1;则*(p0+1) 所代表的数组元素是 A) a01 B) a10 C) a11 D) a1224. 已有定义:int i,a10,*p;,则合法的赋值语句是 A) p=100; B) p=a5; C) p=a2+2 ; D) p=a+2;25. 程序中对fun函数有如下说明 void *fun( );此说明的含义是: A)fun函数无返回值B)fun函数的返回值可以是任意的数据类型C) fun函数的返回值是无值型的指针类型D) 指针fun指向一个函数,该函数无返回值26. 以下与库函数strcpy(char *p1, char *p2) 功能不相等的程序段是 A) strcpyl (char *p1, char *p2) while (p1+=p2+)!='0'); B) strcpy2 (char *pl, char *p2) while (*p1=*p2)!=0) pl+, p2+; C) strcpy3 (char *pl, char *p2) while(*p1+=*p2+);)D) strcpy4 (char *p1, char *p2) whi1e(*p2) *pl+=*p2+;27. 下面程序段的运行结果是 char s6; s="abcd" printf("%sn", s);A) abcd B) "abcd" C) abc D) 编译出错28. 若有以下定义,则对c数组元素地址的正确引用是C int c5, *p=c;A) p+5 B) *c+1 C) &c0 D) &c+129. 若有定义:int a34; 则对a数组的第i行第j列(假设i, j已正确说明并赋值)元素值的不正确引用为 A) *(*(a+i)+j) B) *(a+i)j C) *(a+i+j) D) *(ai+j)30. 若有以下定义初语句,则对a数组元素地址的不正确引用为 int a34, (*p)3; p=a;A) *(p+2) B) p2 C) p1+1 D) (p+1)+231. 若要对a进行+运算,则a应具有下面说明 A) int a32; B) char *a ="12","ab"C) char (*a)3; D) int b10, *a=b;32. 设有以下程序段:char s410="first","second","third","fourth", *sp4;int i;for (i=0; i<4; i+) spi=si;若k为int型变量且0<=k<4,则对字符串的正确引用是 A) sp B) sk C) sp+k D) s+k33. 若有以下定义,则*(p+5)表示 int a10, *p=a;A) 元素a5的地址 B) 元素a5的值C) 元素a6的地址 D) 元素a6的值34. 若有定义:int a46; 则能正确表示a数组中任一元素aij (0<=i<4,0<=j<6)地址的表达式是: A) a0+6*j+i B) a0+4*j+i C) a0+4*i+j D) a0+6*i+j 35. 若有以下定义和语句,则能正确表示a数组元素的表达式是 int a10,*p1;p1=a;A) a B) p1+5 C)*p1 D) &a536. 设有一个名为file1源程序,且已知命令行为: FILE1 BEIJING SHANGHAI,则可得到以下运行结果的程序为 BEIJINGSHANGHAIA) main (int argc, char *argv ) while(-argc>1) printf("%sn",*+argv); B) main (int argc, char *argv ) while(argc->=1) printf("%sn",*+argv); C) main(int argc, char *argv ) while(argc->1) printf("%sn",*+argv);D) main(int argc, char *argv ) while(argc>1) prinif("%sn",*+argv);37. 若有说明:char *lang ="F0RTRAN","BASIC","PASCAL", "JAVA","C" 则lang3的值是 A) 一个地址 B) 一个字符 C) 一个字符串 D) 一个不定值38. 已有定义int (*f)( ); 指针f可以 A) 代表函数的返回值 B) 表示函数返回值的类型C) 表示函数的类型 D) 指向函数的入口地址39. 已知:int *p; 则变量p是 A) 指向int型变量的指针 B) 指向指针的指针C) int型变量 D) 以上三种说法均不正确40. 设有以下程序段,则在main函数中使用语句 是无意义的 main ( ) min (int x, int y) int min( ); int a, b, c, (*p)( ); p=min; A) printf (“%dn”, min(a,b); B) c=min(a, b);C) c=(*p)(a, b); D) p+;41. 下列函数FUN的功能是 FUN( char *ps) char *p;p=ps;while(*p+) ;return(p-ps); A) 比较两个字符串的大小 B) 求字符串的长度C) 复制字符串 D) 以上说法都不对42. 已知指针p的指向如图所示,则表达式+*p的值是a0a1a2a3a41020304050PA 20 B 30 C 21 D 3143. 已知指针p的指向如图所示,则执行语句*p +;后,*p的值是a0a1a2a3a41020304050PA 20 B 30 C 21 D 3144. 已定义以下函数int fun(int *p)return *p;fun 函数返回值是A不确定的值 B一个整数C 形参p中存放的值 D形参p的地址值45. 若有说明语句:double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a; scanf(“%lf”,p); B)*p=&a; scanf(“%f”,p);C) P=&a; scanf(“%lf”,*p); D)p=&a; scanf(“%lf”,p);46. 以下语句或语句组中,能正确进行字符串赋值的是 A. char *p; *sp=”right!”; B. char s10; s=”right!”; C. char s10; *s=”right”; D. char *sp=”right”;47. 有以下程序Fun(char *a,char *b) while(*a!=0)&&(*b!=0)&&(*a=*b) a+;b+; Return (*a-*b);该函数的功能是A 计算a和b所指字符串的长度之差 B 将b所指字符串复制到a所制字符串中C将b所指字符串连接到a所指字符串后面 D 比较a和b所指字符串大小48.程序中若有如下说明和语句char fun(char *);main() char *s=”one”,a5=0,(*f1)()=fun,ch; 以下选项中对函数fun的正确调用语句是A (*f1)(a); B *f1(*s); C fun(&a); D ch=*f1(s) 49. 若有语句:char*line5;,以下叙述中正却的是 A 定义line是一个数组,每个数组元素是一个基类型为char的指针变量 B 定义line是一个指针变量,改变量可以指向一个长度为5的字符型数组 C 定义line是一个指针数组,语句中的*号称为间址运算符 D 定义line是一个指向字符型的指针50. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是 A *p=*q; B p=q; C*p=&n1 D p=*q;51. 设有定义:int x=0,*p=&x;则语句printf(“%dn”,*p);的输出结果是 A 随机值 B 0 C x的地址 D p的地址52.有以下程序main()int a=1,b=3,c=5;int *p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%dn",c);执行后的输出结果是A 1 B 2 C 3 D 453.若有定义:int w35;,则以下不能正确表示该数组元素的表达式是A *(*w+3) B *(w+1)4 C *(*(w+1) D *(&w00+1)54.若有以下函数首部int fun(double x10,int *n)则下面针对此函数的函数声明语句中正确的是A int fun(double x,int *n); B int fun(double,int);C int fun(double *x,int n); D int fun(double *,int *);55.若有定义语句:int k23,*pk3;,则以下语句中正确的是A pk=k; B pk0=&k12; C pk=k0; D pk1=k;56.有以下程序void change(int k)k0=k5;main()int x10=1,2,3,4,5,6,7,8,9,10,n=0; while(n<=4)change(&xn);n+; for(n=0;n<5;n+)printf("%d",xn); printf("n");程序运行后的输出结果是A 6 7 8 9 10 B 1 3 5 7 9 C 1 2 3 4 5 D 6 2 3 4 557.有以下程序main()char s="aeiou",*ps; ps=s;printf("%cn",*ps+4);程序运行后的输出结果是A a B e C u D 元素s4的地址58.以下语句中存在的语法错误是A char ss620; ss1="right?"B char ss20="right?"C char *ss6; ss1="right?"D char *ss="right?"59.若有定义:char *x="abcdefghi",以下选项中正确运用了strcpy函数的是A char y10;strcpy(y,x4);B char y10;strcpy(+y,&x1); C char y10,*s;strcpy(s=y+5,x);D char y10,*s;strcpy(s=y+1,x+1);60.有以下程序#include <string.h>main(int argc,char *argv)int i=1,n=0; while(i<argc)n=n+strlen(argvi);i+; printf("%dn",n);该程序生成的可执行文件名为:proc.exe,若在运行时输入命令行: proc 123 45 67则该程序的输出结果是A 3 B 5 C 7 D 11二、读程序,写运行结果一般题1. 以下程序运行后的输出结果是_ _void fun (char *c, int d) *c=*c+1; d=d+1; printf("%c,%c,",*c,d);main ( ) char a='A', b='a' fun(&b,a); printf("%c,%cn",a,b);2. 以下程序运行后的输出结果是 _ #include <string.h>main ( ) char *p="abcde0fghjik0" printf("%dn",strlen(p);3 以下程序程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:ex1 abcd efg 10<回车>,则运行的结果是_#include <string.h>main (int argc, char *argv ) int i, len=0; for(i=1; i<argc; i+) len+=strlen(argvi); printf("%dn",len);4 以下程序运行后的输出结果是_int fa(int x) return x*x; int fb(int x) return x*x*x; int f(int (*f1)( ), int (*f2)( ), int x) return f2(x)-f1(x); main( )int i; i=f(fa,fb,2); printf("%dn",i);5设有以下程序, 执行该程序后,a的值为 ,b的值为 main ( ) int a, b, k=4, m=6, *p1=&k, *p2=&m; a=p1=&m; b=(*p1)/(*p2)+7; printf("a=%dn",a); printf("b=%dn",b); 6. 以下程序运行后的输出结果是 main ( ) char s ="9876",*p; for ( p=s ; p<s+2 ; p+) printf("%s", p);7. 下列程序的运行结果是 void fun(int *a, int *b) int *k; k=a; a=b; b=k;main() int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);8. 以下程序的输出结果是 main ( ) int arr =30,25,20,15,10,5, *p=arr; p+; printf("%dn",*(p+3);9. 下列程序的输出结果是 int b=2;int func (int *a) b += *a; return(b); main ( ) int a=2, res=2; res += func(&a); printf("%d n",res);10. 以下程序运行后的输出结果是_ _void ss(char *s, char t) while (*s) if(*s= =t) *s=t-'a'+'A' s+; main ( )char str1100="abcddfefdbd", c='d' ss(str1,c); printf("%sn",str1);11. 以下程序的输出结果是 char cchar(char ch) if(ch>=A&&ch<=Z') ch=ch-A'+a'return ch;main ( ) char s ="ABC+abc=defDEF",*p=s;while (*p) *p=cchar(*p);p+;printf("%sn",s);12. 以下程序运行后的输出结果是 。main () char a ="Language",b ="Programe" char *p1,*p2; int k; p1=a; p2=b; for(k=0;k<=7;k+) if(*(p1+k)=*(p2+k) printf("%c",*(p1+k);13. 以下程序的运行结果是 sub(int x, int y, int *z) *z=y-x; main ( ) int a, b, c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4dn",a,b,c);14. 下面程序的运行结果是 #include<stdio.h>main ( ) int a=28, b; char s10,*p; p=s; do b=a%16; if(b<10) *p=b+48; else *p=b+55; p+; a=a/5; while(a>0); *p='0' puts(s);15. 下面程序的运行结果是 #include <stdio.h>void delch(char *s) int i, j; char *a; a=s; for(i=0,j=0;ai!='0'i+) if(ai>='0'&&ai<='9') sj=ai;j+;sj='0' main ( )char *item="a34bc" delch(item); printf("n%s",item); 16. 下面程序的运行结果是 #include<stdio.h>#include<string.h>fun (char *w, int n) char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2) t=*s1+;*s1=*s2-;*s2=t;main ( )char *p; p="" fun(p,strlen(p); puts(p); 17. 下面程序的运行结果是 #include <stdio.h>main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p, i; for(p=a0,i=0; p<a0+12; p+,i+) if(i%4=0) printf("n"); printf("%4d",*p); 18. 下面程序的运行结果是 #include <stdio.h>int a10=1,2,3,4,5,6,7;rev ( int *m, int n) int t;if (n>1) t=*m; *m=*(m+n-1); *(m+n-1)=t; rev(m+1, n-2);main ( ) int i; rev (a, 6); for(i=0; i<10; i+) printf("%d",ai); printf("n");19. 下面程序的运行结果是 main( ) char *s=""int v4=0,0,0,0, k, i;for(k=0;sk;k+) switch(sk) case '1': i=0; case '2': i=1; case '3': i=2; case '4': i=3;vi+;for(k=0;k<4;k+)printf("%d",vk);20. 若有以下输入,则下面程序的运行结果是 ,程序功能是 5 3 8 9<回车> 6 4 7 9<回车>11 2 5 8<回车>2 6 1 4<回车> #define N 4 main ( ) int aNN, sN, i, j, k;for ( i=0; i<N; i+) for (j=0; j<N; j+) scanf ("%d", *(a+i)+j);for ( i=0; i<N; i+) *(s+i)= *(*(a+i); for (j=0; j<N; j+) if ( *(s+i)> *(*(a+i)+j) ) *(s+i)= *(*(a+i)+j);for ( i=0; i<N; i+) printf ("Row=%2d V=%5dn", i, *(s+i); 21. 若有以下输入,则下面程序的运行结果是 2, 2<回车>main ( ) int a33=1,3,5,7,9,11,13,15,17;int (*p)3, i, j;p=a;scanf ("%d,%d", &i, &j);printf ("%dn", *(*(p+i)+j);22. 下面程序的运行结果是 main () int x5=2,4,6,8,10,*p,*pp; p=x; pp=&p; printf("%d",*(p+); printf("%3dn",*pp); 23. 下面程序的运行结果是 main ( ) char ch25="6937","8254", *p2; int i, j, s=0; for(i=0; i<2; i+) pi=chi; for(i=0; i<2; i+) for(j=0; pij>'0' j+=2) s=10*s+pij-'0' printf("%dn",s);24. 下列程序段的输出结果是 void fun(int *x, int *y) printf("%d %d", *x, *y); *x=3; *y=4; main ( ) int x=1,y=2; fun(&y,&x); printf("%d