C语言 下载本文

答案为ABCD

10. 一个函数定义中的形式参数如果为简单变量形式,调用时对应的实参可以是( )。 A) 同类型的简单变量 B) 同类型的常数 C) 同类型的数组元素 D) 同类型的地址量 E) 同类型的数组名

答案为ABCD

11. 在定义函数时,函数的存储类型可以( )。

A) 是static B) 是auto C) 是register D) 是extern E) 省略 答案为ADE

12. 假设变量a,i均已定义并赋值,则以下合法的C语句有( ) A)a= =1; B)++i C)a=(int)i+2.5; D)sqtr(a); E); 答案为ACDE

13. C语言规定,调用一个函数时,实参变量和形参变量之间的数据是( )。 (A)地址传递 (B)值传递 (C)由实参传给形参,并由形参传回给实参 (D)由用户指定传递方式 (E)类型必须一致 答案为BE

14. 在函数调用过程中,下列说法的是( ) (A)形式参数和实在参数各占一个独立的存储单元

(B)形式参数和实在参数存储空间都是在函数调用时分配的

(C)在函数的执行过程中,形参变量值的改变不会影响实参值的改变 (D)函数调用结束时,临时存储区被撤消

(E)在函数调用过程中,实在参数与形式参数在个数、类型上必须匹配 答案为ACDE

15. 以下的说法是( )

A)C语言有四种存储类:auto、register、static和extern。

B)C语言提供的for、while和do-while等三种循环语句可以做等价变换。 C)C语言提供的结构类型不允许其成员具有不同的数据类型。 D)C语言允许用typedef来定义一种新的数据类型。

E)C语言允许经常在程序中使用的常量用宏定义来定义。 答案为ABE

16. C语言中,局部变量默认的存储类型是( )。

A) auto B) register C) extern D) static 答案为A

17. 在下面C语言的函数说明语句中,的是( )。 A) int fun(int , int); B) int fun(int x,y);

C) int fun(x,y); D) int fun(int x; int y); E) int fun(int x,int y); 答案为AE

9章 指针 一、判断题

1. 若有定义:long int j, *p;,则操作j=(long int)p;是合法操作。答案为√ 2. 设有说明int (*ptr)[M]; 其中ptr是指向含有M个整型元素的一维数组的指针。( 答案为√

) 3. 对同一类型的两个指针变量而言,一个变量向另外一个变量赋值的结果是使得两个指针指向同一个对象。答案为√

4. 定义一个指向某种类型函数的指针后,就可以讲任何函数的首地址赋给这个指针变量。答案为×

5. 可以将一个整型指针变量的值赋给一个实型指针变量,但可能引起符号位扩展。答案为×

6. 可以将一个实型指针变量的值赋给一个整型指针变量,但可能影响指针的精度。答案为×

7. 由于指针的数据类型实际上是指定指针所能指向对象的数据类型,所以不通数据类型的指针变量不能相互赋值。答案为√

8. 函数中使用指针变量作为形式参数,就有可能在被调函数中操作主调函数中的实参。答案为√

9. 若有定义:int a[5],*p;,则操作p=a;是合法的操作。答案为√

10. 若有定义:int a[5],*p;,则操作p=&a[2];是合法的操作。答案为√ 11. 若有定义:int a[5][5],*p;,则操作p=a;是合法操作。答案为× 12. 若有定义:int a[5][5],*p;,则操作p=*a;是合法操作。答案为√ 13. 若有定义:int a[5][5],*p;,则操作p=a[0];是合法操作。答案为√ 14. 若有定义:int a[5][5],*p;,则操作p=&a[0][0];是合法操作。答案为√ 15. 若有定义:int a[5][5], (*p)[5];,则操作p=a;是合法操作。答案为√ 16. 若有定义:int a[5][5], (*p)[5];,则操作p=*a;是合法操作。答案为× 17. 若有定义:int a[5][5], (*p)[5];,则操作p=a[0];是合法操作。答案为×

18. 若有定义:int a[5][5], (*p)[5];,则操作p=&a[0][0];是合法操作。答案为× 19. 若有定义:double (*dd)[10];则dd是一个指向具有10个元素的double型数组的指针变量;( )答案为∨

20. 在C语言中,程序main(){int *ptr; *ptr=100; printf(\是的。( )答案为×

21. 如果指针占用的内存大小为2 Byte,那么指向它的二重指针占用内存大小为4 Byte。( )答案为×

22. 指针变量的值是无符号整型值,所以指针变量都是整型变量。答案为× 23. 凡是整型变量可以参加的运算,指针变量都可以参加。答案为× 24. 即使数据类型相同,两个指针变量也不能相互赋值。答案为× 25. 两个同类型的指针变量可以相互赋值。答案为√ 26. 指针变量可以与一个整型常量相加。答案为√ 27. 指针变量可以与一个整型常量相减。答案为√ 28. 指针变量可以与一个整型常量相乘。答案为× 29. 指针变量可以除以一个不为0的整数。答案为×

30. 对于指向同一个数组的两个变量而言,两个指针变量相减的操作是有意义的。答案为√

31. 若有定义:long int j, *p;,则操作p=j;是合法操作。答案为× 32. 若有定义:long int j, *p;,则操作j=p;是合法操作。答案为× 33. 若有定义:long int j, *p;,则操作p=(int)j;是合法操作。答案为× 34. 指针变量的类型确定了该指针能够指向的对象的数据类型。答案为√ 二、单选题

1. 有定义:int x,*p;,能使指针变量p指向变量x的语句是( )。

A) *p=&x; B) p=&x; C) *p=x; D) p=*&x; 答案为B

2. 有定义:int x,*p1=&x, *p2;,则能使得p2也指向x的语句是( )。 A) *p2=&x; B) p2=p1; C) p2=*p1; D) p2=&p1; 答案为B

3. 有定义:int x,y=10,*p=&y;,则能使得x的值也等于10的语句是( )。 A) x=p; B) x=&p; C) x=&y; D) x=*p; 答案为D

4. 有定义:int *p1,*p2;,则的赋值语句为( )。

A) p1*=p2; B) p1/=p2; C) p1+=p2; D) p1+=3; 答案为D

5. 有定义:int *p1,*p2;,则的赋值语句为( )。

A) p1=p2; B) p1/=p2; C) p1+=p2; D) p1*=p2; 答案为A

6. 有定义:int a[5][4], *p=a[0];,则*(p+2*4+3)等于( )。

A) a[2][0] B) a[2][1] C) a[2][2] D) a[2][3] 答案为D

7. 有定义:int a[5][4], (*p)[4]=a;,数组a的首地址为100,*(p+2)+3等于( )。 A)116 B) 118 C) 120 D) 122 答案为D

8. 有定义:int a[5][4], (*p)[4]=a;,则*(*(p+2)+3)等于( )。 A) a[2][0] B) a[2][1] C) a[2][2] D) a[2][3] 答案为D

9. 有定义:int a[]={1,3,5,7,9},*p=a;,则值为5的表达式是( )。

A) p+=2, *p++ B) p+=2, *++p C) p+=2, (*p)++ D) a+=2, *a 答案为A

10. 有如下定义:char *s1=\ 则表达式strcmp(s1+1,s2+1) 的值是( )

A.零 B.负数 C.正数 D.非零值,无法肯定符号 答案为C

11. 以下程序的输出结果是( )。 main()

{ printf (\ * s1 = s * \ \ printf (\ * s2 = %-5s * \ \ );

}

(A) * s1 = chinabeijing_ _ _ * (B) * s1 = chinabeijing_ _ _ * * s2 = * * chi * ; * s2 = chi_ _ *

(C) * s1 = * _ _ chinabeijing * (D) * s1 = _ _ _chinabeijing * * s2 = _ _chi ; * s2 = chi _ _ *; (注:备选答案中,-代表空格) 答案为D

12. 若有 int k=2; int *ptr1, *ptr2; ptr1=&k; ptr2=&k ;那么下列的语句是( )。

(A) k=*ptr1+*ptr2 (B) ptr2=ptr1*2 (C) ptr1=*(ptr1+ ptr2) (D)ptr1=*ptr1*(*ptr2)

答案为A

13. 设有如下的程序段:

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

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

(A)o'' (B) ''\\0'' (C)不确定的值 (D) ''o''的地址 答案为B

14. 若有以下定义和语句,则输出结果是( )。 char *sp=\

printf(\

A) 12 B) 3 C) 17 D) 13 答案为B

15. 对于基类型相同的两个指针变量之间,不可进行的运算是( )。 A)== B)= C)+ D)– 答案为C

16. 已知:int *p( ); p是( )。

(A) 指向int型的指针变量 (B) int型的指针数组 (C) 一个指向函数的指针变量,函数的返回值是int型 (D) 一个函数,该函数的返回值是指向int型的指针变量 答案为D

17. 有定义:float y,*p=&y;,假定变量y在内存中所占地址为100~103。那么p的值为( )。 A) 100 B) 101 C) 102 D) 103 答案为A

18. 有定义:int x,*p=&x;,则能为变量x赋值的语句是( )。 A) scanf(“%d”,x); B) scanf(“%d”,p);

C) scanf(“%d”,*p); D) scanf(“%f”,&x); 答案为B

19. 有定义:int x=100,*p=&x;,则能输出变量x值的语句是( )。 A) printf(“%d\\n”,*x); B) printf(“%d\\n”,p); C) printf(“%d\\n”,*p); D) printf(“%d\\n”,&p);

答案为C

20. 有定义:int a[10], n, *p1=a,*p2=&a[9];,则的赋值语句为( )。 A) n=p2-p1; B) n=p2*p1; C) n=p2+p1; D) n=p1/p2; 答案为A

21. 有定义:int a[5], *p1=a, *p2=p1;,则能够表示元素a[2]的是( )。 A) *(p2+2) B) p2+2 C) *p1+2 D) *p2+2 答案为A

22. 有定义:int a[5],*p=a;,则不能表示元素a[4]地址的是( )。 A) p+4 B) &a+4 C) &a[0]+4 D) a+4 答案为B

23. 有定义:int a[5],*p=a;,则不能表示元素a[4]的是( )。

A) *(p+4) B) *(&a+4) C) *(&a[0]+4) D) *(a+4)