(35)在C语言中,形参的缺省存储类是
; O9 y# |! p L5 I9 u4 e* t A)auto M: U9 _( h. d+ g
B)register " s, j6 y0 r% Z1 S% P
C)static
% J$ g) ]1 W1 w9 _3 k D)extern4 x B) |! ]$ r4 a' N* {
【答案】A
, t, @. a0 T( u0 d& D 【解析】本题考核的知识点是定义函数时形参的缺省存储类。在C语言中,形参的缺省存储类为auto。
, q# ], `0 w( b& V! I/ X" y+ d- |. i& t7 Z
(36)若指针p已正确定义,要使p指向两个连续的整型动态存储单位,不正确的语句是3 q5 C% U. ~* t. p7 D& P
A)p=2*(int *)malloc(sizeof(int));
& D4 z s& Z2 k( U% N% s B)p=(int *)malloc(2*sizeof(int));
8 q3 C% }7 S1 b8 o1 _ C)p=(int *)malloc(2*2);
K. L+ [5 {! {- N$ I. I D)p=(int *)malloc(2,sizeof(int));7 z4 V- R: R& U: W6 b7 D& I$ ^" I
【答案】A8 q* I# G6 S. ]2 P3 W
【解析】malloc()函数的调用格式是“malloc(n)”,作用是申请n个字符的存储单元并把该存储区的首地址作为返回值,实际调用的时候可在前面加上“(类型说明符*)”,以转换成需要的类型的地址。选项D多了一个参数,不符合malloc()函数的调用格式;整型变量在有的计算机系统里占4个字节,并不一定在所有的计算机系统里都是两个字节;选项A中是申请一个整型的存储空间并把该存储空间的首地址乘以2,这样的做法是不正确的,其存储空间为没乘以2之前的存储空间的2倍的连续存储空间的地址。; P4 g% r1 @4 e3 L
( v" s6 p1 z, c& l4 q (37)以下程序的输出结果是
& ^! m+ v5 y6 |; x# s main()
X5 R, f. E$ d: @0 g { char x=040;" y$ |7 l, ?9 X2 `8 H1 t
printf("%o\n",x<<1);
( C+ V8 d" W% i$ l2 I& m2 | }: y* e! {0 s# p
A)100
. r9 f5 N# {: C; u! s) o B)80 $ v. W6 n+ R& H# H I) K) M4 P
C)64 + J h0 p% u, ~& r
D)32
/ |9 b0 o! H. L5 N4 D8 Z, I9 T 【答案】A
# q3 V& x E) ]7 ]; A 【解析】首先将八进制040转换成二进制数000100000,再将此二进制数左移一位为001000000,输出时转换成八进制数100。
1 P' J8 G8 k1 e B& b: s
% ~# K3 Q' G8 }/ ~ (38)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是
* s9 ^5 p ~4 j3 y* } A)fopen("A:\user\abc.txt", "r")
6 \7 I1 U7 I0 e+ F! c! N; B B)fopen("A:\\user\\abc.txt", "r+"), T$ S) l! g7 \3 Y, i
C)fopen("A:\user\abc.txt", "rb")
3 h) Q" d" p, L. K' L( M3 I D)fopen("A:\\user\\abc.txt","w")
4 q5 n% I- {! o7 `0 C! K 【答案】B; _+ ?- Q+ S3 o, U( X
【解析】本题考核的知识点是文件名的表示法以及文件的读写模式。由于“\”是转义字符,所以在文件名中的“\”用“\\”来表示。要打开文本文件进行读写,应使用读写模式“r+”。
( p9 S; G* l& K( q* y' x/ c7 X. h% B& [( |1 p
(39)以下不能正确进行字符串赋初值的语句是
4 g# J9 O! [. J: Y$ b1 }5 N4 } A)char str[5]="good! ";
$ u3 S% Y/ G+ A7 ?1 K5 s* P7 c3 j8 W B)char str[]="good! ";
( h) n. k8 t7 F) L7 U4 j C)char *str="good! "; 8 k& H. v! y0 p& `" s
D)char str[5]={'g', 'o', 'o', 'd'};$ } t) \' }- _
【答案】A
, b/ w, @/ n- D. G. l# J6 G 【解析】选项A定义了一个字符数组str,具有5个元素,但赋初值的时候,初值个数却是6个(有一个'\0',);选项B定义了一个字符数组str并给它赋初值,由于省去了长度定义,长度由初值个数确定,相当于str[6];选项C定义了一个字符型指针变量并用一个字符串给它赋初值,使该字符型指针指向了该字符串;选项D是对字符型数组中单个元素依次赋初值。/ q+ H C% w) t# A: B
" R2 C' H2 J$ b6 @' j
(40)若有下面的说明和定义:- U3 _, \7 n7 K$ }4 K
struct test
5 o& x; g$ ` v% {/ l* u0 s { int ml;char m2;float m3;
; r K* w% c+ g' D% Z union uu{char ul[5];int u2[2];} ua;$ L' W! ?( H# M: o# u$ a( l7 P
} myaa;
& L$ p3 O9 L B$ C5 ]+ v. ~ 则 sizeof(struct test)的值是6 h( P, g5 l9 D1 C9 f
A)12
) V" r' D4 Z8 Z! M& { B)16
+ ?- I# y" `* d% H1 } C)14
$ W& H3 [5 t0 i. f3 k% C+ H D)9( o9 K K+ p4 e0 |: E' b
【答案】A
5 v8 r' h$ W" q5 l9 t 【解析】结构体所占用的存储空间是其所有成员占用的存储空间之和,而共用体所占用的存储空间是成员中占用存储空间最大者的空间,共用体类型uu是结构体的成员,它所占的内存长度为最大成员的长度,即字符型数组u1的长度,即1×5=5。每个整型数据占用2个字节,每个字符型数据占用一个字节,单精度型数据占4个字节,myaa为结构体变量,它所占的存储空间为各个成员所占存储空间之和,即2+1+4+5=12。! f$ o E1 T+ N4 w5 {( @0 ?
l# \) |' |3 v2 C% W2 Y
(41)若有定义:int aa[8];。则以下表达式中不能代表数组元素aa[1]的地址是. A3 a* [; w$ y# q' c
A)&aa[0]+1 4 l- Y; c2 W+ O1 P5 ?& V' Z* k
B)&aa[1] 1 ~+ M$ J4 ^, H3 I, u4 }, K( E3 `0 Z* I
C)&aa[0]++
7 ~; o& q7 x4 B& u3 Z) o D)aa+1" Y( s2 Q" N q$ [* D6 x! e0 o+ n) o( j
【答案】C
& Q9 W1 M& \& B: I 【解析】在C语言中,数组的地址和数组中的第一个元素的地址相同。数组中第一个元素地址的表示方法为&aa[0],与其等价的有&aa[0]++;选项A为数组的第1个元素的地址下移一位即是第二个元素aa[l]的地址;B也为数组的第二个元素的地址,选项D中aa表示数组的地址,加1表示数组首地址后移一位,即代表数组元素中的第二个元素aa[1]的地址。5 y. `7 [8 H# [) m
0 k5 d, P5 r' C w; _% s( h* Q; Y
(42)以下程序的输出结果是
0 o3 T- L: Q' H) I f(int b[],int m,int n)6 K+ D2 R& r3 `& H6 r
{ int i,s=0;$ ^4 ?5 K0 m5 ?0 F
for (i=m;i<n;i=i+2)s=s+b[i];- S0 R- n# b' V5 s6 x3 t
return s;! a9 v( {' l+ e
}4 I: C5 U7 Q& c8 k
main()1 n a0 b- Q! |8 w
{ int x,a[]={1,2,3,4,5,6,7,8,9};; w O3 _# \) o# P" H* L
x=f(a,3,7);% P Q! Z& ]9 O+ {, k
printf("%d\n",x);. p7 p! g0 Z6 f7 Y" o- H
}
0 F! j8 L# H: G) P- {0 a" s2 ~9 ~ A)10
- u8 g9 X- y% i. O& ? B)18
1 C8 g, w' o, ] C)8
' ^0 d/ H: U$ K2 o( z, s D)15
9 f% E; {9 ?) l! F- R5 ~ K3 y 【答案】A9 S& {. `$ H, g0 f8 A# U
【解析】在main()函数中定义了一个变量x,以及一个有9个元素的数组a,并且每个元素分别赋初值为1、2、3、4、5、6、7、8和9。执行函数调用f(a,3,7),把a的首地址赋给形参b,把3和7分别赋给形参m和n。在f()函数中,for循环执行了2次:第一次,i的值为3,相当于执行了语句“s=s+b[3]”,b[3]的值就是a[3]的值4,故s的值变为4;第二次,i值为5,相当于执行了语句“s=s+b[5];”,b[5]的值为6,故s的值变为10。把s作为函数值返回并赋值给x。6 y3 O! w' s) s+ i- F! O: _, T
! u7 _* D! F1 k: I6 _7 F (43)若有以下定义和语句:1 M, a& L; o* P7 i
int s[4][5],(*ps)[5];
! }+ i4 z, v) D2 M$ P ps=s;1 q* L% I4 T0 {( v4 l
则对s数组元数的正确引用形式是
5 U. s; m7 M* o2 N0 N5 y! q8 P+ o A)ps+1 : ?, `" ]0 l8 f5 V
B)*(ps+3)
- n" D4 T, e4 `0 V, {- X- h4 g C)ps[0][2] 8 r8 ^5 a- r2 v: L5 a; d
D)*(ps+1)+3
5 ~& A) C( I4 P" X) C 【答案】C" m7 i. ~1 h& w4 W% `9 U* }( ~
【解析】本题首先定义了一个4行5列的数组s,又定义了一个指向由5个元素组成的一维数组的指针变量ps,通过赋值让ps指向了数组s的首地址。此时数组元素s[j]的地址为“*(ps+i)+j”,数组元素s[j]可表示为*(*(ps+i)+j)。选项B表示的是数组元素a[3][0]的地址;选项D表示的是数组元素s[1][3]的地址;选项A中“ps+1”为指向下一行(第二行)的地址;选项C中ps[0][2]无条件等价于“*(ps[0]+2)”又无条件等价于“*(*(ps+0)+2)”,即是数组元素s[0][2]。 |