a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 108|回复: 0

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

[复制链接]
发表于 2012-7-31 22:22:49 | 显示全部楼层 |阅读模式
  二、填空题。/ t6 i8 W3 b1 H5 |2 e8 b
4 E+ |9 L/ u' Z: h2 n* x4 {
   (1)算法的复杂度主要包括空间复杂度和【1】复杂度。
) |; V! D- {( y   【解析】算法的复杂度主要指时间复杂度和空间复杂度。. q' J% {2 y( f) j1 y

* k/ j" o1 _$ J5 j+ H6 x6 n   (2)在线性结构中,队列的操作顺序是先进先出,而栈的操作顺序是【2】 。; ^, R+ `% {. c
   【解析】队列和栈都是线性结构,但是不同之处在于队列的操作顺序是先进先出,而栈的操作顺序是先进后出。
# G  X' ~( N- A2 e" z- e
* A1 p" m  h9 R: y* s   (3)数据流图的类型有【3】和事务型。
! A  ]" X; O* z# u& M/ K5 B   【解析】典型的数据流图有两种,即变换型和事务型。
& P. T8 n; w. P' c0 A! k1 X3 e6 Z' e8 g9 J8 r8 m3 O6 h8 G2 y
   (4)在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为【4】 。
  Z8 g& s' E. m7 o* N   【解析】数据的物理结构改变,不影响数据库的逻辑结构,从而不引起应用程序的变化,这种性质叫做物理独立性。' j7 M; Y! N# m8 E+ y. z9 v

% F; ^& n2 M  U7 u   (5)数据库管理系统是位于用户与【5】之间的软件系统。
0 f. n; ^4 e' n: u   【解析】数据库管理系统是帮助用户创建和管理数据库的应用程序的集合。因此,数据库管理系统需要操作系统的支持,为用户提供服务。
& `$ f% f3 ~' H4 d2 P1 N* t( s/ m* x, n3 H  S
   (6)若从键盘输入58,则以下程序的输出结果是【6】 。
; `8 q" k* l2 c0 Y( x2 c( ?" }   main(). N. k+ O7 _& B, I( p
   { int a;8 o1 F; p' K0 z5 Z7 z/ a
   scanf("%d",&a);
$ f2 ]0 [! x! e& f) A& ]   if(a>50) printf("%d",a);0 k8 e  k5 U3 p- W) k; p
   if(a>40) printf("%d",a);
0 j( p  U- x) Y- K   if(a>30) printf("%d",a);
. @. j* c/ I1 W! ^8 v( N+ ?; g, Y   }
, s' o2 w4 v# O8 z   【解析】在程序中,执行scanf()语句后,a被赋值为58。接着执行第一个if语句,因为,a=58>50,执行第一个if语句后面的输出语句,输出58;接着执行第二个if语句,因为,a=58>40,执行第二个if语句后面的输出语句,输出58;接着执行第三个if语句,因为,a=58>30,执行第三个if语句后面的输出语句,输出58,所以最后的输出为585858。
+ M% l$ E, J2 ~- I+ z5 d; I0 g& W! h0 _" ^" o; Y  [
   (7)以下程序的输出结果是【7】 。# {% E, I8 T6 N2 D( a, L5 M% Q) }  G  w
   main()
* O  {+ ~9 m+ ]$ N   { int a=177;
7 z, i9 V: @0 x6 V2 }/ n0 W" f   printf("%o\n",a);
, E+ b* q+ z0 q0 f, y   }5 m/ C9 a2 D1 K) C9 J; M
   【解析】在控制格式符中“o”代表的是将数据按八进制数输出,十进制数的177代表的八进制数是261。
/ |* ]2 O* A4 h; Z' O" S
  L& l, W# E* \2 ]: k   (8)以下程序的输出结果是【8】 。
) o) n: Q& T! Y   main()
! A1 F) z- D6 e! d6 T" w   { int a=0;+ N& X! q0 u2 w, X* l# Y* {4 y6 |4 Z
   a+=(a=8);
9 i+ B/ p/ k) C! K& p. [   printf("%d\n",a);6 x' _9 n( D- R
   }/ d. A" \0 ^9 W0 o
   【解析】在程序中首先将8赋值给变量a,然后再进行复合赋值运算。即a=a+a=8+8=16,所以该空格处应该填16。; Y5 R$ ^5 U1 u8 t

6 Z- r- n7 P5 l! \- d9 j4 x   (9)以下程序的输出结果是【9】 。8 m" r  {; R. q6 }$ w) n  k# \
   main()
  v0 N0 g$ e: I! j" Q" m0 E$ e. i# G   { int a=5,b=4,c=3,d;# O6 d! V4 Y4 b+ `0 f
   d=(a>b>c);
. y' i1 J2 b% F. P   printf("%d\n",d);
- ~$ W& U% h: A# O5 O) R   }, \6 K: v9 a/ R5 ?% w
   【解析】关系运算符“>”的结合方式是从左向右的,所以在本题中的表达式a>b>c;从左向右开始计算,a>b的结果为“1”,接着1和c比较假,该空格处应该填0。6 v0 Q2 Z( E9 t% l+ Z0 s8 q: K: W4 R
' w6 S$ g/ @8 C6 @  }
   (10)以下定义的结构体类型包含两个成员,其中成员变量info用来存放整型数据;成员变量link是指向自身结构体的指针。请将定义补充完整。) t% {/ s5 H- `; }& p
   struct node5 ^' W2 H6 X% g; ?/ W3 ]) j
   { int info;% J2 M8 N( [$ d8 R' u
   【10】link;
4 N$ k# ?/ c2 B3 N( Z$ _7 V/ {$ M6 ^   };
% h# W. e# C, O: m3 S  r   【解析】link是指向结构体自身的指针,因此link是指针,指向struct node类型的数据,可定义成“struct node *link”。
3 G9 c  n3 W: n. T! A+ f. y& p3 E& P1 D) o8 ]5 P/ }* I" ?  Z+ P
   (11)以下程序的输出结果是【11】 。
& v8 S/ z6 ~5 }) g0 e6 Q   main()
3 B0 C. J1 c! F   { int s,i;4 V: N  L5 h! D# q" r" B
   for(s=0,i=1;i<3;i++,s+=i);
- @! {+ V' p0 j  G2 t   printf("%d\n",s);
! K6 _  E; [% r9 B( T   }& {- c+ ?  X3 Z+ O( \4 |
   【解析】此程序中,for循环语句后面直接跟了一个“;”,表明循环体为空。输出语句不在for循环体内,所以在循环执行完毕后才输出s的值。s、i的初值分别为0和1,判断循环条件,表达式“1<3”成立,执行“i++,s+=i”后,i和s的值分别为2和1,继续判断循环条件,表达式“2<3”成立,执行“i++,s+=i”后,i和s的值分别为3,再次判断循环条件,表达式“3<3”不成立,循环结束。" ~+ \6 Q3 L3 s4 Q1 p; {( X0 D$ x

0 r4 [/ y' W, J) X' Z- r   (12)以下程序的输出结果是【12】 。: N( \0 {5 r+ N( g
   main()
8 Q3 V, n; y" u+ ]   { char *p="abcdefgh",*r;
) m! `  g& T0 N" p8 z- ]9 S, h. Y0 t" O   long *q;1 V# A8 P0 Y, `
   q=(long *)p;
' R& X3 d$ `1 F   q++;% ]- V$ z6 L% C, x3 U! o# C+ n
   r=(char *)q;" q6 l! |6 Z! ~
   printf("%s\n",r);
) e$ d4 i- g6 N- Z; O   }" Z0 N! X# ~' l- R+ ~' Z0 w
   【解析】本题定义了一个字符型指针变量p并通过赋初值让它指向了一个字符串,定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句“q=(long*)p;”把p的地址值强制转换为长整型地址值并赋值给q,然后执行“q++;”,地址值增加了4,执行语句“r=(char*)q;”,把长整型指针变量q的值再强制转换成字符型地址值并赋给r,r的值应为字符串中字符“e”的地址,最后输出r指向的字符串,是“efgh”。
& A2 U: g+ {$ Q6 P7 D3 S2 W
! O* w2 y( }( [: D5 K" G0 C) U   (13)以下程序的输出结果是【13】 。7 }! a8 `; ?8 J: J! l  B2 x
   main()
+ q: N7 R( H+ m) `/ P- e   { char s[]="abcdef";
  l/ N. N2 u9 m+ B( z- I% j& V   s[3]='\0';' d) }; ~3 p! p: P* r
   printf("%s\n",s);5 U: d" f) h1 s
   }, ~7 R" g( I7 u8 Y& {: [
   【解析】字符串的结束标记'\0',当输出一个存放在字符数组中的字符串时,只需输出到'\0'为止,而不管其后有什么数据。本题给字符数组s的元素s[3]赋值为'\0',故只能输出3个字符“abc”。- i" E2 x: B4 h8 C5 q. ]; p2 t) r9 x
/ p6 J  N7 H1 U- h: @: s
   (14)以下程序的输出结果是【14】 。
& S; n$ a4 a9 x- e* A$ w2 {   main()
. a8 c7 E2 b0 [& m   { int x=0;
5 G9 L/ ?& I; u, M   sub(&x,8,1);- @) G7 _) e0 N3 {0 K* S8 j
   printf("%d\n",x);
  C7 q, O+ o( v- \6 K/ E( Q   }* G5 A- j7 ?/ S( F; p+ ~' I
   sub(int *a,int n,int k)
0 q$ s/ P. k; [   { if(k<=n)sub(a,n/2,2*k);5 {$ f* S; L+ O: D8 ^+ C
   *a+=k;9 W7 M6 W2 A! I& B7 z
   }
' t% i" }+ o: K; b0 Y- A4 _* W   【解析】在主函数中定义了一个变量x并赋初值0,然后执行函数调用语句,该语句的执行过程为sub(&x,8,1)调用sub(&a,4,2),sub(&a,4,2)调用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括号里的判断为假,递归结束,执行其后的*a+=k;语句此时x=x+k=0+4=4,回退到上一层调用函数sub(&x,4,2)中,执行后面的语句,x=x+k=4+2=6,再回推到最上一层调用函数sub(&x,8,1)执行后面的语句,x=x+k=6+1=7,所以最后输出7。+ v; ?; F! H/ ~& Z
# O+ ?( K  ?+ x' ?
   (15)设有如下宏定义
; `" \4 N3 ]. V8 A' O% N' T   #define MYSWAP(z,x,y) {z=x;x=y;y=z;}
7 V3 i2 R+ y' L1 T2 R' T   以下程序段通过宏调用实现变量a、b内容的交换,请填空。
0 c* ?; ^; R/ c4 h: k   float a=5,b=16,c;
8 G4 p% f' s4 c: O- R   MYSWAP(【15】,a,b);$ H/ s/ x9 O  q4 V" m
   【解析】本题关键在考生是不是了解宏的基本运用,在使用宏的时候明显少了一个实参。在定义宏的时候变量z是用来做中间变量的,题目中缺的变量就是一个中间变量c。
" Z" f  [" {+ E- @9 Y- A8 A' U* K6 z( }  Z. G
   (16)以下程序用来统计文件中字符的个数。请填空。2 U: ^8 ~( t2 e! F  q' B
   #include "stdio.h"6 z+ ^9 d# v9 J( Y
   main()
; N+ S& f9 r2 ?2 v& A   { FILE * fp; long num=0L;
! M) ^/ ~9 y: |% I- e$ m* ^   if((fp=fopen("fname.dat", "r"))==NULL);3 s- `# b$ p% c8 k2 U
   { printf("Open error\n");exit(0);}
" J/ ]' o: T; m; S7 n& y   while(【16】)
+ ~1 }( I* W3 u# q6 V   { fgetc(fp);num++;}
6 n. R+ Q. e' m$ j) q   printf("num=%1d\n",num-1);- S) W" U/ J% `- L: n& L
   fclose(fp);' S9 i* c+ C5 |7 @( Q" _+ T8 `
   }/ J8 v) @5 Y' ^  W; B6 \( D
   【解析】统计文件中字符个数的算法可描述如下:首先判断文件位置指针是否指向了文件尾,如果不是则读出一个字符,同时字符的个数加1,再判断文件位置指针是否位于文件尾,如此循环,直到文件位置指针位于文件尾为止。本题首先以读文件的方式打开了文件“fname.dat”,如果打开成功则把返回的文件型指针赋值给fp,然后通过循环求文件中的字符数。首先判断文件位置指针是否位于文件尾,如果不是则循环读取字符,每次字符数加1。所以下划处应填循环条件,文件位置指针不是指向文件尾,即“!feof(fp)”。- o: x. B! t; K1 u( D! F
# n/ s$ }1 u' R7 d( e- D, E/ K
   (17)以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。0 r0 f' K& e, `
   #define N 3; B! L+ j7 [8 d+ `- O' }
   #define M 3
* ~5 P3 X7 i2 x: m6 x( U/ a3 b   select(int a[N][M],int *n)! N+ V8 w  z+ W
   { int i,j,row=1,colum=1;3 f4 w4 c+ I8 G' ]% O7 H: M
   for(i=0;i<N;i++)! i; }% e- B# _6 r6 c6 }
   for(j=0;j<M;j++)  N* ~# F/ T9 g3 v8 U/ }4 `
   if(a[i][j]>a[row][colum]){row=i;colum=j;}
. k" Q5 O* c/ ~3 m   *n=【17】;
0 ^+ ]* f- G' R* `# T   return(【18】);
/ o! d7 n$ I6 h9 t' J   }' x5 t9 a. S# U% B
   main(); e  u) J, {- Z9 u. Z7 X) h% e
   { int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;4 H* i& Q, v& a, Y
   max=select(a,&n);3 ?4 ~7 [  Q; A0 t1 y7 O
   printf("max=%d,line=%d\n",max,n);! Y3 }; L: ]! o) q
   }
. l2 M/ E, S$ d9 z* k" j   【解析】指针变量作为函数参数及二维数组的一个典型算法—求最大值及其下标。通过对题意的分析,在select()函数中,变量row的作用是用来记录最大元素的行下标,colum的作用是用来记录最大元素的列下标。程序中通过一个循环求得数组元素中最大值的行列下标,分别存放在变量row和colum中,根据题意,应该把行下标赋值给形参指针变量n指向的变量,把最大值a[row][colum]作为函数值返回。- y7 F! q" s% h) K9 d
' _8 b& C) @6 e
   (18)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。6 w6 b6 @, O/ m4 K' j1 X
   int mystrlen(char *str)
& M0 p: N) o  S& @+ e) t6 x   { int i;) [& ?( ]+ i1 X
   for(i=0;【19】!= '\0';i++);, Y2 D: i; l9 }
   return(【20】);) v0 M! Q/ t3 J! h% L- C
   }; p' A# f+ I) q4 K
   【解析】求str指向的字符串长度的算法是:用一个变量i表示字符串中字符的位置,一开始赋值为0,取出i位置的字符,判断是否为“\0”,若不是,则i的值加1,如此循环直到取出的字符是“\0”为止,此时i的值就是字符串的长度。由此可知,第一个空处应填第i位置上的字符*(str+i);第二个空格应该填字符串的长度i。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 09:55 , Processed in 0.295311 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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