C语言程序设计试题(2)1 下载本文

return num; }

① A) str[i]==substr[i] B) str[i]!=‘\\0’

C) str[i]==‘\\0’ D) str[i]>substr[i] ② A) j=i+1 B) j=i C) j=i+10 D) j=1 ③ A) k B) k++ C) k+1 D) ++k

53. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

void Delblank(char *s) { int i,t; char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i]; c[t]=‘\\0’; strcpy(s,c); }

① A) s[i] B) !s[i] C) s[i]=‘\\0’ D) s[i]==‘\\0’ ② A) s+i B) *c[i] C) *(s+i)=‘\\0’ D) *(s+i) 54. 以下conj函数的功能是将两个字符串s和t连接起来。

char *conj(char *s,char *t) { char *p=s; while(*s) ① ; while(*t)

{*s= ② ;s++;t++;} *s=‘\\0’; ③ ; }

① A) s-- B) s++ C) s D) *s

② A) *t B) t C) t-- D) *t++

③ A) return s B) return t C) return p D) return p-t 55. 下列程序的输出结果是 。

#include main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址 56. 下列程序的输出结果是 ( )

#include fun(int *a,int *b)

{int *w;*a=*a+*a;*w=*a; *a=*b; *b=*w;} main()

{int x=9,y=5,*px=&x,*py=&y;fun(px,py);printf(“%d, %d\\n”,x,y);} A)出错 B) 18, 5 C) 5, 9 D) 5, 18 57. 若定义了以下函数:

void f(??) {??

p=(double *)malloc(10*sizeof(double)); ?? }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是( )

A) double *p B) float **p C) double **p D) float *p

二、判断题

1.( )指针变量里存放的是地址值,因此指针变量只能是int型的。 2.( )在C语言中,所谓指针型数据,即指该数据是一个地址。 3.( )有一个一维数组a[10],那么a与&a[0]等价。

4.( )如有说明:int b[10], *p = b;表明在使用时b与p就完全等价了。

5.( )数组中的每一个元素相当于一个变量。若要让一个指针变量指向它,必须用“&数组元素”的方法

向该指针变量赋值。

6.( )有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,含义是一样的。 7.( )在C语言中,每一个变量在内存里占用的单元数都是相同的。 8.( )通过指针变量,就能间接地得到它所指向的变量的内容。

9.( )说明语句:int *p, p1, p2;只说明了一个能指向int型变量的指针。 10.( )有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p将指向1501的

内存单元。

11.( )数组元素可以是不同数据类型的。

12.( )如果初值表中的初值个数少于数组长度,那么C语言编译程序会自动把剩余的元素初始化为初值

表中的最后一个值。

13.( )主调函数把单个数组元素传递给修改该元素值的被调函数时,主调函数就能够得到修改后的值。 14.( )设p是指向数组a的指针变量,则a[i]和p[i]等价。 15.( )一个变量的指针就是该变量的地址。

16.( )若定义int **p;则程序中调用*p时,它代表的是p的地址。

17.( )若指针占用的内存大小为2Byte,则指向它的二重指针占用内存大小为4Byte . 18.( )带参main函数中的形参的值可以在程序中得到。

19.( )main(argc,argv)中的参数argv的定义格式为char argv[]。 20.( )int **p;表示定义一个*p指针变量。

21.( )在C语言中允许将一个整数赋给指针变量。

22.( )一个指针变量加1表示将该指针变量的原值(地址)加1。 23.( )int *p();表示定义一个指向函数的指针变量p。

24.( )当函数实参中使用指针变量时,形参变量也必须使用指针变量。 25.( )*p++等价于(*p)++。

26.( )使用指针技术,可以通过修改形参变量的值达到修改实参变量的值的目的。。

27.( )因为用字符数组和字符指针变量都能实现字符串的存储和运算,因此它们二者是完全等价的。 28.( )对指向函数的指针变量,像p+n、p++、p- -等运算是无意义的。

29.( )main(int argc,char *argv[])中的参数argc表示命令行只参数的个数。 30.( )在int a[3][4];中a+i和*(a+i)的含义是不一样的。 31.( )char *p[10];定义了一个指向字符数组的指针变量。

32.( )将指向函数的指针作为函数的参数,虽然可以提高效率,但是容易造成混乱,所以不符合结构化程序设计的原则。

33.( )数组名实际上是此数组的首地址,所以数组名相当于一个指针变量。 34.( )若定义数组a[2][3],则a+1和*(a+1)完全等价。

35.( )函数的形参为一个数组,则调用此函数时将数组名作为对应的实参。