a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 122|回复: 0

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

[复制链接]
发表于 2012-7-31 22:22:49 | 显示全部楼层 |阅读模式
  二、填空题。* B" U" k3 o* M: K

0 _5 B  o+ @8 |6 y4 f- N   (1)算法的复杂度主要包括空间复杂度和【1】复杂度。
/ r) z. n" [0 A9 ^1 [   【解析】算法的复杂度主要指时间复杂度和空间复杂度。/ Z! ^: E4 t0 C/ D- _# x
" ~, t1 c, x$ v& K3 E
   (2)在线性结构中,队列的操作顺序是先进先出,而栈的操作顺序是【2】 。
, L: B# x% ]: H! T) U! O5 Q   【解析】队列和栈都是线性结构,但是不同之处在于队列的操作顺序是先进先出,而栈的操作顺序是先进后出。
# n/ R/ Z* X; _' |: J0 {
7 C: L; D  h  z0 Y   (3)数据流图的类型有【3】和事务型。
# I' m  L5 Z/ G# U4 U   【解析】典型的数据流图有两种,即变换型和事务型。
% ?5 d& g$ F* h: w6 b* F8 c' k8 j: m: [
   (4)在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为【4】 。
* t: T3 x( f& P$ T* N   【解析】数据的物理结构改变,不影响数据库的逻辑结构,从而不引起应用程序的变化,这种性质叫做物理独立性。
. ~, t, X3 p6 f' t, \6 Y2 \% R1 w) N3 U! A0 M2 E5 w+ M& ~& W2 a
   (5)数据库管理系统是位于用户与【5】之间的软件系统。
/ _3 q5 r& r1 t  v; B) T! v   【解析】数据库管理系统是帮助用户创建和管理数据库的应用程序的集合。因此,数据库管理系统需要操作系统的支持,为用户提供服务。
. z" F. m- |$ c( Q  t
1 s2 o) _+ J' O   (6)若从键盘输入58,则以下程序的输出结果是【6】 。" x1 Z! }) n/ `( h7 {; o6 ^7 `# ]
   main()4 H( l  h: A. V" p: k1 G5 l5 o5 v4 Z
   { int a;
" X( I1 c3 T+ E+ J! h   scanf("%d",&a);
/ Q$ a0 [7 B; c  T( g$ Y0 z   if(a>50) printf("%d",a);/ _( \; i6 \1 n: v2 {% D. c
   if(a>40) printf("%d",a);
5 K1 ~4 D% \) T: U% x   if(a>30) printf("%d",a);
, S/ `/ @. O* k, _8 ?1 y/ K4 v- `6 \   }
  s! h& e8 Y. u8 D) l% ]   【解析】在程序中,执行scanf()语句后,a被赋值为58。接着执行第一个if语句,因为,a=58>50,执行第一个if语句后面的输出语句,输出58;接着执行第二个if语句,因为,a=58>40,执行第二个if语句后面的输出语句,输出58;接着执行第三个if语句,因为,a=58>30,执行第三个if语句后面的输出语句,输出58,所以最后的输出为585858。! |, f, p: P2 M2 y( e, x
3 z6 y* l8 y- \# b6 R
   (7)以下程序的输出结果是【7】 。
  r7 W* [8 h& e' p" }# _, A. w   main()
) ~1 w+ _0 h2 W$ A* u/ @   { int a=177;9 w4 a# D7 ~; q
   printf("%o\n",a);
4 t8 E2 t$ O% V2 w2 g! E  m: P   }1 C" K+ f+ @9 A; q( \' s3 F
   【解析】在控制格式符中“o”代表的是将数据按八进制数输出,十进制数的177代表的八进制数是261。5 r2 [. `4 h+ W6 v3 M  t
  b7 i/ w6 W; f: y  i
   (8)以下程序的输出结果是【8】 。
5 t# ]* K; p5 }2 D2 X4 A( C   main()2 ~) Q' k1 J. `# f$ S4 ]+ k
   { int a=0;, [" A4 ]* {- P) P6 ~6 s
   a+=(a=8);( P: x2 a% |! U1 X2 j6 A8 W
   printf("%d\n",a);
; ^; y2 {" |% }   }4 m  z) ]. \; Q; R; F. d
   【解析】在程序中首先将8赋值给变量a,然后再进行复合赋值运算。即a=a+a=8+8=16,所以该空格处应该填16。  J1 c& I5 z: r* H

# c; s8 N9 F9 J! a& u% ?; F   (9)以下程序的输出结果是【9】 。% u1 f2 \0 F4 {; l$ B4 q9 m
   main(); K4 E. w' j0 K) z
   { int a=5,b=4,c=3,d;% O# {! H  k  {5 u% d
   d=(a>b>c);
$ x& R( G4 M; Z; P6 O0 g0 {   printf("%d\n",d);' [: R! [3 L7 a5 k/ B" D
   }
; I! r3 k( B; b5 k# a; u  Q   【解析】关系运算符“>”的结合方式是从左向右的,所以在本题中的表达式a>b>c;从左向右开始计算,a>b的结果为“1”,接着1和c比较假,该空格处应该填0。  `& ]8 z4 U* C4 s5 ~: d% h
9 f$ }) ?$ N. b6 u
   (10)以下定义的结构体类型包含两个成员,其中成员变量info用来存放整型数据;成员变量link是指向自身结构体的指针。请将定义补充完整。5 @% h4 z0 C5 y8 e- S  x1 T2 k
   struct node  K, Y8 ^. o( U) y* e3 x' y
   { int info;+ Y6 j+ f+ {8 I( y6 \- _
   【10】link;
- l* B8 _' w0 m, r   };
- F* g$ K/ A! T. P; }   【解析】link是指向结构体自身的指针,因此link是指针,指向struct node类型的数据,可定义成“struct node *link”。
3 n" e# \+ x) \4 X6 c4 @' H' `7 d, t9 T
   (11)以下程序的输出结果是【11】 。2 n0 R% o& k+ `/ O
   main()
  |! E. c) W+ S/ g   { int s,i;  `8 Q3 l9 a2 A( f; R: O
   for(s=0,i=1;i<3;i++,s+=i);: P5 i" |% }" i  [* U9 N& q
   printf("%d\n",s);
  g7 J, M& r( }6 ]  A   }
1 g- W% x' d% ?/ p4 B8 p   【解析】此程序中,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”不成立,循环结束。1 Q' l" \: \, l* X$ k/ ]

, S; t; f  k; Z5 B) U   (12)以下程序的输出结果是【12】 。
7 X: l1 K# }2 Z/ }( K/ I6 `' w9 S   main()
! C* C0 W# J& k# K4 q   { char *p="abcdefgh",*r;& ^% z; l  T1 x! ?( f  t9 ~' w
   long *q;; H; l) ?2 A" ]$ f2 z
   q=(long *)p;
7 h3 A( j+ P! [* o8 t2 |/ j   q++;
0 Q: S- N" U& X2 _   r=(char *)q;
& N* m/ P9 E' O5 E7 s5 x  R   printf("%s\n",r);4 b2 ?, n! \. A' B/ I5 r
   }
( r$ Q( A$ h  j2 x! n   【解析】本题定义了一个字符型指针变量p并通过赋初值让它指向了一个字符串,定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句“q=(long*)p;”把p的地址值强制转换为长整型地址值并赋值给q,然后执行“q++;”,地址值增加了4,执行语句“r=(char*)q;”,把长整型指针变量q的值再强制转换成字符型地址值并赋给r,r的值应为字符串中字符“e”的地址,最后输出r指向的字符串,是“efgh”。4 d- F+ n4 }- ?, N

8 C# b4 R6 b5 F' Q( ~, b, @9 g  Y4 B   (13)以下程序的输出结果是【13】 。
! p! w: T- ]# R: z9 y+ {   main()! L5 U" f  d3 I8 U: W
   { char s[]="abcdef";  D- Y$ @$ ~1 ?8 Z, N4 ^2 j9 W
   s[3]='\0';
1 _% a# \5 A1 }( P3 W   printf("%s\n",s);9 \+ }+ |( B! t7 }
   }
! M1 M2 y# I; K# @' `) g   【解析】字符串的结束标记'\0',当输出一个存放在字符数组中的字符串时,只需输出到'\0'为止,而不管其后有什么数据。本题给字符数组s的元素s[3]赋值为'\0',故只能输出3个字符“abc”。  R! b1 ]  t6 q  r) O; l

2 z! K8 m' U. H2 z( \/ m, ]   (14)以下程序的输出结果是【14】 。
# V9 e/ K* N/ w% B& x+ a  |% S9 n   main()
) }  u$ H# L6 X/ p& l) i7 b2 I   { int x=0;; c) k8 _  H& ~& G+ u' J; s  {
   sub(&x,8,1);  p- @* j( {, o' |
   printf("%d\n",x);
0 i4 c+ M; Z$ b8 a   }: T5 Y( ]) M2 J$ j8 M9 d0 S
   sub(int *a,int n,int k)
3 R, e6 i' V6 ^0 U" E/ w   { if(k<=n)sub(a,n/2,2*k);2 s0 i$ S' C. `( N( Z5 a
   *a+=k;
6 S/ u- E' l* e4 A! \" |1 `! @) v1 G   }
6 e( Q* v- P) X% Z4 }   【解析】在主函数中定义了一个变量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。
8 p+ X" J$ ?" F6 r& Q( u. V7 x
. b) i' _& b  i2 N4 C6 b6 P   (15)设有如下宏定义# W- p' \; \$ ^: D. y8 I$ z5 H% P
   #define MYSWAP(z,x,y) {z=x;x=y;y=z;}
/ X6 r2 c, p  k) Z- A   以下程序段通过宏调用实现变量a、b内容的交换,请填空。
5 R, ~$ b9 J1 _% l  S) L   float a=5,b=16,c;
' M# `% Q- [5 z8 ^   MYSWAP(【15】,a,b);
' @' m( ^" I2 Y; w: {4 t   【解析】本题关键在考生是不是了解宏的基本运用,在使用宏的时候明显少了一个实参。在定义宏的时候变量z是用来做中间变量的,题目中缺的变量就是一个中间变量c。- f& V" l2 |4 q% L1 }2 [
( r4 `$ m' X. o' ]- n: i, A
   (16)以下程序用来统计文件中字符的个数。请填空。8 \  p% s( L6 N6 x6 o9 K! e' w
   #include "stdio.h"
3 b6 l$ N- z2 g: D' }$ N   main()
7 \; P8 d1 P3 u  x: ]  L' w) \5 ~   { FILE * fp; long num=0L;
1 c9 f4 b/ N- V* a$ U   if((fp=fopen("fname.dat", "r"))==NULL);! V% p! U) t& `2 L$ e  l  y7 G
   { printf("Open error\n");exit(0);}
' v2 B5 k/ V# _   while(【16】)
5 s) U5 \" e# Z  T, j   { fgetc(fp);num++;}6 u! c$ A. z2 |9 o3 U3 N
   printf("num=%1d\n",num-1);0 H  C, ^( s( }4 w
   fclose(fp);
/ E: I( e$ r+ Q" o   }3 p7 C6 l8 s$ U. _
   【解析】统计文件中字符个数的算法可描述如下:首先判断文件位置指针是否指向了文件尾,如果不是则读出一个字符,同时字符的个数加1,再判断文件位置指针是否位于文件尾,如此循环,直到文件位置指针位于文件尾为止。本题首先以读文件的方式打开了文件“fname.dat”,如果打开成功则把返回的文件型指针赋值给fp,然后通过循环求文件中的字符数。首先判断文件位置指针是否位于文件尾,如果不是则循环读取字符,每次字符数加1。所以下划处应填循环条件,文件位置指针不是指向文件尾,即“!feof(fp)”。
0 ]" I$ r1 t$ P  P/ _
3 A& n, p# W7 M' M6 C+ N   (17)以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。
+ X4 m/ O- ~( E( T- C6 g, i$ p   #define N 3
# ^* k6 J. K& s  e+ `7 N" p   #define M 34 o" q2 }( b+ N5 D& h
   select(int a[N][M],int *n)! C0 G3 J' |! t% w. u0 j  e
   { int i,j,row=1,colum=1;
* A9 c) ^* `, Y' s. f: W# \   for(i=0;i<N;i++)" R/ {: _: b  b5 ^# |" R9 v# u
   for(j=0;j<M;j++)
: J( C# u# Y. z/ v! I   if(a[i][j]>a[row][colum]){row=i;colum=j;}& u& I7 E3 I8 ]/ x  y6 [
   *n=【17】;* u8 I1 @, x7 l$ ~4 `' X& b3 |
   return(【18】);7 \* h: Q* L7 N5 @4 z9 A6 ]/ D. ^- U
   }/ Z) V: g) j3 n6 S$ Q& D
   main()
6 [  H! `9 M6 a7 }; V   { int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;. @3 I$ c" k: x. Q5 t! B
   max=select(a,&n);
: |7 R1 ]/ H: C2 K" c& h8 c" Y   printf("max=%d,line=%d\n",max,n);
4 f" h1 C. b6 w8 s  d   }
  V1 F9 z- D5 U) t" Y" _$ ?0 e   【解析】指针变量作为函数参数及二维数组的一个典型算法—求最大值及其下标。通过对题意的分析,在select()函数中,变量row的作用是用来记录最大元素的行下标,colum的作用是用来记录最大元素的列下标。程序中通过一个循环求得数组元素中最大值的行列下标,分别存放在变量row和colum中,根据题意,应该把行下标赋值给形参指针变量n指向的变量,把最大值a[row][colum]作为函数值返回。, Z/ k7 ]3 r& p6 \0 g: W
; |7 y& q3 a8 \, i) [# Y% I2 \+ O
   (18)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
( w7 F( ?8 J3 t- C/ e6 ]; E$ B   int mystrlen(char *str)
8 ]+ c. m& B, x# S+ a3 c2 h$ K! Y4 O) n   { int i;
1 ^* D7 T8 |0 K( F   for(i=0;【19】!= '\0';i++);0 ^- a) ]: l, w" K
   return(【20】);3 }9 r, e! ]6 N  x( t- W
   }  x0 s: h: @3 u
   【解析】求str指向的字符串长度的算法是:用一个变量i表示字符串中字符的位置,一开始赋值为0,取出i位置的字符,判断是否为“\0”,若不是,则i的值加1,如此循环直到取出的字符是“\0”为止,此时i的值就是字符串的长度。由此可知,第一个空处应填第i位置上的字符*(str+i);第二个空格应该填字符串的长度i。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 07:46 , Processed in 0.233557 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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