C竞赛 下载本文

A. pb=&x B. pb=x; C. *pb=&x; D. *pb=*x

int *p ,a=10 ,b=1 ; p=&a ; a=*p+b ;

9、 有如下程序段

执行该程序段后,a 的值为 。

A. 12 B. 11 C. 10 D. 编译出错

double r=99 , *p=&r ; *p=r ;

10、若有以下定义和语句:

则以下正确的叙述是 。

A. 以下两处的*p 含义相同,都说明给指针变量p 赋值

B. 在\;\中,把r 的地址赋值给了p 所指的存储单元 C. 语句\;\把变量r 的值赋给指针变量p D. 语句\;\取变量r 的值放回r 中 此功能的函数是 。

A. funa (int *x,int *y) { int *p; *p=*x; *x=*y;*y=*p; } B. fund (int x,int y) { int t; t=x;x=y;y=t; } C. func (int *x,int *y) { *x=*y;*y=*x;}

D. fund (int *x,int *y) { *x=*x+*y;*y=*x-*y;*x=*x-*y; } 是 。

A. *p=&a; scanf(\,p);

B. p=(long *)malloc(8); scanf(\,p); C. scanf(\,p=&a); D. scanf(\,&a);

A. < B. = C. + D. - 址的表达式是 。

A. p+1 B. a+1 C. a++ D. ++p

int a[10]={1,2,3,4,5,6,7,8,9,10} ,*p=a ;

11、要求函数的功能是交换x 和y 中的值,且通过正确调用返回交换结果.能正确执行

12、若有说明:long *p ,a;则不能通过scanf 语句正确给输入项读入数据的程序段

13、对于类型相同的两个指针变量之间,不能进行的运算是 。

14、若已定义:int a[9] ,*p=a;并在以后的语句中未改变p 的值,不能表示a[1] 地

15、若有以下说明:

则数值为6 的表达式是 。

A. *p+6 B. *(p+6) C. *p+=5 D. p+5

44

16、设P1 和P2 是指向同一个int 型一维数组的指针变量,k 为int 型变量,则不能正

45

确执行的语句是 。

A. k=*P1+*P2; B. p2=k; C. P1=P2; D. k=*P1 * (*P2);

int a[ ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} , *p=a ;

17、若有以下的定义:

则值为3 的表式是 。

A. p+=2 , *(p++) B. p+=2 ,*++p C. p+=3 , *p++ D. p+=2 ,++*p

int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ,*p=a ;

18、若有以下定义和语句:

则不能表示a 数组元素的表达式是 。

A. *p B. a[10] C. *a D. a[p-a]

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

19、有如下说明

则数值为9 的表达式是 。

A. *p+9 B. *(p+8) C. *p+=9 D. p+8 void main()

{ int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s; for(p=a, s=a; p-a<10; p++) if(【 】)s=p; printf(\:%d\,*s): }

则在if 语句中的判断表达式应该是 。

A. p>s B. *p>*s C. a[p]>a[s] D. p-a>p-s

int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ,*p=a ;

20、下面程序输出数组中的最大值,由s 指针指向该元素.

21、若有以下定义和语句:

则不能表示a 数组元素的表达式是 。

A. *p B. a[10] C. *a D. a[p-a]

int w[2][3] ,(*pw)[3] ; pw=w ;

22、若有以下定义和语句:

则对w 数组元素非法引用是 。

A. *(w[0]+2) B. *(pw+1)[2] C. pw[0][0] D. *(pw[1]+2)

23、有以下说明和语句,则 是对c 数组元素的正确引用。

int c[4][5] , (*cp)[5] ; cp=c ;

A. cp+1 B. *(cp+3) C. *(cp+1)+3 D. *(*cp+2)

char str[ ]=\; char *ptr ; ptr=str ;

24、设有如下的程序段:

执行上面的程序段后 ,*(ptr+5)的值为 。

A. 'o' B. '\\0' C. 不确定的值 D. 'o'的地址

sss(char *s ,char *t )

{ while((*s)&&(*t)&&(*t++== *s++)) ; return(*s-*t) ; }

25、下面函数的功能是 。

A. 求字符串的长度 B. 比较两个字符串的大小 C. 将字符串s 复制到字符串t 中 D. 将字符串s 接续到字符串t 中 A. char ST[5]={\; C. char *S; S=\;

int fun1(char * x) { char *y=x; while(*y++) ; return(y-x-1);}

B. char S[5]={'A','B','C','D','E'}; D. char *S; scanf(\,S);

26、下面各语句行中,不能正确进行字符串赋值操作的语句是 。

27、下列函数的功能是 。

A. 求字符串的长度 B. 比较两个字符串的大小

C. 将字符串X 复制到字符串Y D. 将字符串X 连接到字符串Y 后面

#include < stdio.h> #include < string.h> void main( )

{ char *S1=\, *s2=\; s1++; s2++;

printf(\, strcmp( s1,s2)); }

28、请读程序:

上面程序的输出结果是 。

A. 正数 B. 负数 C. 零 D. 不确定的值

46

29、设有如下定义:

int (*ptr)( ); 则以下叙述中正确的是 。 A. ptr 是指向一维组数的指针变量 B. ptr 是指向int 型数据的指针变量

C. ptr 是指向函数的指针 ;该函数返回一个int 型数据

D. ptr 是一个函数名 ;该函数的返回值是指向int 型数据的指针 正确的调用方法是 。

A. (*p)max(a ,b); B. *pmax(a ,b);C. (*p)(a ,b) ; D. *p(a ,b); A. p=max; B. *p=max; C. p=max(a,b); D. *p=max(a,b); A. 代表函数的返回值 B. 指向函数的入口地址 C. 表示函数的类型 D. 表示函数返回值的类型

fun(int *c){ } void main()

{ int (*a)()=fun,*b(),w[10],c; ? }

30、若有函数max(a ,b),并且已使函数指针变量p 指向函数max ,当调用该函数时,

31、已有函数max(a,b),为了让函数指针变量p 指向函数max,正确的赋值方法是 。 32、已有定义 int (*p)();指针p 可以 。

33、若有以下说明和定义

在必要的赋值之后,对fun 函数的正确调用语句是 。

A. a=a(w); B.(*a)(&c); C. b=*b(w); D. fun(b);

char *aa[2]={\,\;

34、设有如下定义:

则以下说法中正确的是 。

A. aa 数组成元素的值分别是\和ABCD\

B. aa 是指针变量,它指向含有两个数组元素的字符型一维数组

C. aa 数组的两个元素分别存放着含有4 个字符的一维字符数组的首地址 D. aa 数组的两个元素中各自存放了字符'a'和'A'的地址

A. C 语言允许main 函数带形数,且形参个数和形参名均可由用户指定 B. C 语言允许main 函数带形参,形参名只能是argc 和argv C. 当main 函数带有形参时,传给形参的值只能从命令行中得到

D. 有说明: main(int argc,char *argv),则形参argc 的值必须大于1

47

35、以下正确的叙述是 。