a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 121|回复: 1

[考试试题] 07年4月等级考试二级C语言练习一[3]

[复制链接]
发表于 2012-7-31 22:22:49 | 显示全部楼层 |阅读模式
(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]。
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:22:50 | 显示全部楼层

07年4月等级考试二级C语言练习一[3]

(44)以下程序的输出结果是
/ H1 L2 P4 i% O. B# g4 ?, E  F* d; l, |   main()
5 F. C4 `  F* s% ]   { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
. f/ Y/ Y9 J3 k   for (i=0;i<3;i++)
2 d& y( E0 N8 P. B( _   for(j=i;j<=i;j++)t=t+b[i][b[j][j]];
% ~' y  }. i$ O& X5 C0 K3 e   printf("%d\n",t);+ D2 r7 [; w' t& T/ `( C
   }
9 \2 f# \% K1 a1 ~/ r8 H0 f5 i+ n   A)3
! {5 C+ N% Q1 G* U5 ]" Q1 W   B)4
# p" y" p* ]' D' v7 f0 i% D' R   C)1 3 j4 M. p# Q+ W
   D)97 D; I: o4 u& X) {/ j1 q5 r3 O
   【答案】B
/ P' ]; E5 e  Y2 B7 z+ H   【解析】本题中定义了一个二维数组b并初始化,定义了一个变量t并赋初值1。接着通过一个二重循环将若干个元素的值加到变量t中。循环的执行步骤是:外层循环变量i=0时,内层循环变量j=i执行语句“t=t+b[b[j][j]]”,相当于t=t+b[0][b[0][0]],由于b[0][0]的值为0,得到t的值为1;依次类推,循环共执行了3次,最后输出t的值为4。7 ]0 ~) E- t" W, R. S
6 \3 H& P8 z5 O4 J: t! B
   (45)以下程序的输出结果是
/ g* J2 x# |! q   #include <stdio.h>- Z" W' U. P( E' \
   #include <string.h>% W1 I, T9 h4 D( C' w6 N  S! [% L# p
   main()" X' l+ e( B7 F2 d* p; e
   { char b1[8]="abcdefg",b2[8],*pb=b1+3;
4 V3 B) s& ^% D$ x; P* E   while(--pb>=b1)strcpy(b2,pb);+ i% S1 H, O. C$ |0 L
   printf("%d\n",strlen(b2));
7 B, z4 k3 K+ C* Q; y  y   }  v3 q( e0 J+ u6 F
   A)8 % `# ]2 m$ j7 k! D
   B)3 1 |8 d3 h) q' J( E8 y: C
   C)1 , H( _5 {# v! M6 ]% T
   D)73 F1 K8 l2 G: v, }2 N
   【答案】D. h3 ?. J1 F. U& H
   【解析】strcpy()函数的作用是把第二个参数代表的字符串,复制到第一个参数指向数组中。首先定义了两个字符数组b1和b2,并用一个字符串给b1赋初值,然后定义了一个字符型指针变量pb,通过赋初值使它指向b1[3]。接着执行while循环,该循环执行了3次:第一次判断条件“--pb>=b1”,使pb的值为“b1+2”,执行“strcpy(b2,pb);”后,b2中的内容为“cdefg”;第二次判断条件“--pb>=b1”,使pb的值为“b1+1”,执行“strcpy(b2,pb);”后b2的内容为“bcdefg”第三次判断条件“--pb>=b1”使pb的值为“b1”,执行“strcpy(b2,pb);”后b2的内容为“abcdefg”。最后输出b2数组中存放的字符串长度,显然是7。(这里还有一个关键点:就是每当执行一次while循环判断条件,就执行一次“--pb”,使得指针pb自减1,即前移一位)。& n( s- e1 L. t: D

5 Z( g2 l0 L7 T0 o: _   (46)在说明语句:int *f();中,标识符f代表的是  o3 O. `7 L& J* W- ]+ p0 M
   A)一个用于指向整型数据的指针变量
  Q$ p0 }, H- T: Z6 Q   B)一个用于指向一维数组的行指针& K" u: i% p0 |" Z! s
   C)一个用于指向函数的指针变量
( g- I; h, @$ B$ D: l   D)一个返回值为指针型的函数名5 |( ^1 Y" q3 o+ s& I' L, Y) ]
   【答案】D
# }5 x3 F+ W6 `7 s. M2 |   【解析】定义指向整型元素的指针变量形式为:int*指针变量名。定义指向整型一维数组的行指针形式为:int(*指针变量名[长度],定义指向返回值为整型的函数的指针变量的形式为:int(*函数名)(),定义返回值为指向整型的指针型函数的形式为:int *函数名()。本题定义的是一个返回值为指针型的函数f()。
  @4 w- a* U) K) d0 q5 r4 A, Z, a1 l" h0 }
   (47)不合法的main函数命令行参数表示形式是6 @, n; k- `# X
   A)main(int a,char *c[])
) L) i: L% e" }( k6 J   B)main(int arc,char **arv). @' e# ^! s9 i( y9 a# Z5 G
   C)main(int argc,char *argv) ; Y1 c  Y# e9 c- m: F2 I4 Q( P
   D)main(int argv,char *argc[])
6 Z4 B- p  l: Q  M- s) s$ r+ c/ ]   【答案】C
6 E) T( ]0 c* S9 X. Q   【解析】main()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用来记下命令行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量(指向一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串的首地址。故本题只有C选项不符合要求。8 Q% A' A+ E9 ^' b6 [% G; l

5 i. r# r+ q5 e! O   (48)以下程序的输出结果是* q$ N3 d/ ~1 m8 D1 p
   int x=3;1 X2 B6 p4 u$ o- u. b) F  Y& @  z
   main()* ^) h* t. Z' P& o
   { int i;& y* T4 D' T: l* E3 o
   for(i=1;i<x;i++)incre();
5 ~& e- _3 t2 W4 A4 g   }0 ]4 q: o- ~3 i% x5 }7 B6 _
   incre()2 E5 e/ R& X- M4 ~1 i+ a* S
   { static int x=1;
6 x# ], `, @) g+ W7 m5 ]7 w( x: V) X   x*=x+1;" ?: j, w3 w9 ?+ e3 n' e
   printf("%d",x);9 x9 _  u8 O$ ?: Z
   }4 P8 b2 z5 q8 t) u, A  [, ^
   A)3 3 8 C1 I1 S, F5 v: m/ h6 ~; Z
   B)2 2
3 m5 y2 r# R, ~# M: d* y   C)2 6
; A) g* Z0 W& r3 k6 V2 l% F   D)2 5
% B' b$ w! A! S8 S0 _0 r   【答案】C1 }+ X. ?! T5 H$ `/ f
   【解析】本题首先定义一个全局变量x并赋初值为3,主函数中使用这个全局变量控制循环次数,循环执行了2次,调用两次incre()函数。第一次调用incre(),定义一个静态变量x并赋初值1,然后执行“x*=x+1”,使x的值变为2;第二次调用incre()函数时,静态变量将保留上一次退出时的值即2,执行语句“x*=x+1”后,x的值变成6,输出x的值为6。5 p' }5 w* U4 j6 G

# s( o; N( ~9 h6 E' Y- y   (49)若有以下定义:4 l6 c. B8 U/ @, M. x
   struct link
+ P7 J" W) o! N$ D& D7 |. ]: g0 K   { int data;4 [5 G8 g: {4 `4 Q7 J
   struct link *next;
% W: ]' c  v( L   }a,b,c,*p,*q;
1 C! ]' _( I- D) R! C   且变量a和b之间已有如下图所示的链表结构:指针p指向变量a,q指向变量c。则能够把c插入到a和b之间并形成新的链表的语句组是
4 y) V: B/ u  L" z0 C5 B   A)a.next=c;c.next=b;
$ `2 e+ c- b! Z" b/ ]   B)p.next=q;q.next=p.next;
( }: [( U2 k5 s' U# n   C)p->next=&c;q->next=p->next; " |* {! j- B, V4 a
   D)(*p).next=q;(*q).next=&b;
4 V0 p' Z. m+ u/ C1 ?) Y* q   【答案】D( p3 T- N% s( m$ |  E; l
   【解析】在本题中指针p指向变量a,q指向变量c。要把c插入到变量a和变量b之间,就应该首先让变量a的指针域指向变量c,即(*p).next=q,然后让变量c的指针域指向变量b,即(*q).next=&b。- a3 {2 k1 \  A+ O: J4 w( ^1 }
6 C+ j/ s- l( s  _; l+ I# F
   (50)设有以下说明语句
( Y! y0 M/ J: I- r7 e   typedef struct# F  Z% s+ w# G) V5 R
   { int n;
2 E9 \8 y2 Y! w* `   char ch[8];
! K; y+ ^- w: q2 ]6 @   } PER;
. k( T: E. G6 e: m0 N1 k   则下面叙述中正确的是
* ?" s& J# z% P/ N   A)PER是结构体变量名
0 C/ a1 |4 Y& J' J; y7 C   B)PER是结构体类型名
3 C4 W: ?( I* N   C)typedef struct是结构体类型 / ?5 F5 z7 W( Q+ l; J6 K) v+ f* t
   D)struct是结构体类型名: i) k$ D+ Y8 x( v) l
   【答案】B
" q$ K+ `- ~" z; b   【解析】本题通过typedef在定义一个结构体类型的同时,把它自定义成类型名PER,故PER是结构体类型名。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 07:17 , Processed in 0.146072 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表