wz82 |
2008-04-04 21:09 |
计算机二级C考试心得分享
等级考试(笔试)虽然知识面比较广,但不是很深,基础部分考的是你日常操作的能力,程序设计多数是考你的细心。辛辛苦苦准备了大半年,又经过2个小时的考场之战,交卷之后还很“自美”,成绩单上的“不及格”让你一时不敢相信自己的眼睛。 <X97W\ bhZ5-wo4% 当对着答 案细细“品味”时,你会N次的感叹……原来“罪魁祸首”是“不细心”。 \naG #fyY37- 综观这四年来的考题,对容易出错的典型题例作了汇总和分析,也好给以后参加二级C考试的朋友增加点免疫力吧。本文将分三次刊登。 3] U/^f3 j_zy"8Y{ 第一类,审题不清 QYBLU7 D2:ShyYAS 1.审题时的一字之差。 0 R&7vn QX(t@VP 一定要搞清题意,题目让我们选择的是“正确”还是“不正确”的;“能”还是“不能”的;本来要求选出一个错误的答 案,但题目中没有“错误”字样,而是说 “……请选出不正确的一项”,一不小心你就可能会把选项中最前面一个“正确”的选为答 案,因“正确”的有三个选项,当然觉得很容易,就这样,“错误”轻易地从你的笔尖溜走了。 +fMW B 8h|~>v 2.不注意文字部分的要求和说明。 Au )%w 6H|T ) 很多时候,为了省时间,上来就去看程序,这样不仅不能省时间,还会走弯路、出错误。看看下面的两个例子吧! ZU9Rvtb KB UyNP:q: 题例1:以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 % <%r <%`z:G3 #include $@dPIq4o;} }L5;=A']S void f(char p[][10],int n) Z>'hNj)ju h{E9rc1, {略} Zl2doXC iW?NxP main() )YLZ"@ O=Vj*G, {char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i; m{6*ae 6y@o[=m f(p,5); printf("%d\n",strlen(p[0])); } F2=#\U$ }-WuHh# 程序运行后的输出结果是 "9H#pj - \'nE{ (A)6 (B)4 (C)5 (D)3 ~^eC?F( LkXF~ (为了节省版面,把函数f的内容略去了。)看过文字说明,接着看主函数,就可以锁定这个字符串是“dcdbe”,而不用花时间去分析函数f。要注意的是:别把最长的一串当成最大的字符串噢,看上“aabdfg”可就错了,答 案应为C。 9Bu=8P? 8O^z{Yh7 题例2: 以下程序中给指针p分配三个double型动态内存单元,请填空。 @ v}M\$N? xkz`is77Y@ # include X*:)]p(R ]G=^7O]`C! main ( ) 'KNUPi| qI\B;&hr( { double ?p; xx%*85 < bEzy KrN\ p=(double ?) malloc(【 】); M5LqZyY ;cWFh4_ p[0]=1.5;p[1]=2.5;p[2]=3.5; NVo=5 Uw>g^[V; printf("%f%f%f\n",p[0],p[1],p[2]);} qI gb;=V }9&~+Q2 如果上来就看程序,就会忽略“给指针p分配三个double型动态内存单元”,这里要求“三个”,如果大笔一挥写出了sizeof(double)可就太冤枉了,其实应该是3?sizeof(double)。 _5768G`P X]%n#\t,] 第二类,把“赋值”看成了“等于” > bSQ}kXe !iGZo2LV 题例:有以下程序段 sX=_|<[ S
5nri(m int k=0 /=:X,^"P ("@ih]zYf while(k=1)k++; knu>{a} 5A"OL6ty while 循环执行的次数是: +t;j5\HS rIF6^? (A)无限次 (B)有语法错,不能执行 kR(hUc1O I78huYAYA (C)一次也不执行 (D)执行1次 nSV
OS6 Y-:{a1/RKo 此题如果理解为k等于1时循环才执行,那么“k++”不被执行,k的值就始终为0,这时就把C选上了。其实,while循环的条件是一个赋值表达式,答 案为A。 X9n},}bJ" >I.X]<jI 第三类,表达式的值与变量的值 ]1n
=O"vE 2UjQ!g` 题例:有以下程序 &]H Y: i!EN/Bd int a=2; Ea[K$NC)# v`pIovn int f(int ?a) #a"gW,/K *H%Jgz, {return (?a)++;} F:rT.n *b]$lj main( ) veh?oJi@ keWqL] { int s=0; a-7T N!:&Xz { int a=5; V,)bw D>Dch0{H,: s+=f(&&a); |cCrLa2*- }
^67HtNQ } J(\f(jh/ 0 lsX~d'W s+=f(&&a); z>X<Di&x) %) 8 UyZG printf("%d\n",s); 7ClN-/4 aI:G(C?jm } 执行后输出结果是() YYUWBnf30G U(cV#@Y (A)10 (B)9 (C)7 (D)8 H$i4OQ2 &c)n\x* 答 案是C。 nv^nq]4'Dq !B &%!06 此题有两个要点,1是局部变量与全局变量的作用范围,2是,函数f(&&a)返回的是表达式 (?a)++的值,而不? a的值。
&(Ot(. ?oX.$E?( 第四类,把关系表达式有别于数学上的关系式 4=E9$.3a `Al( AT(p 题例:有以下程序 gIfl}Jat Hqpw Q main() + 5:oW~
; ~ g \GC { int a=5,b=4,c=3,d=2; 9,`eYAu -_RMiGM?T if(a>b>c) hI{M?LQd -mlBr63Bj printf("%d\n",d); ~]_gq;bG Hki else if((c-1>=d)==1) fH/J8< ')Drv)L
printf("%d\n",d+1); A[@xTqs{{ X)^kJ` else Z2,[-8,Kx &v\ printf("%d\n",d+2); 3~7X2}qU t_PAXj } JC6Bs`=s~ IO x9". 执行后输出结果是 ( ) &xG>"sJ V~>
x\ (A)2 (B)3 A[F tPk{k "r Bb2. (C)4 (D)编译时有错,无结果 a.r+>44M '<.@a"DnJ 这道题的关键在(a>b>c),答 案容易判断为A,5大于4也大于3,就把整个表达式判断为真值,其实,a>b已为真值,1>c则成了假值,所以答 案为B。 T(E$0a)# FCu0)\ 第五类,字符串的拷贝 *TEgV O|opNr 拷成了同一个字符 H +O7+=& jU~
!*] 题例:若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式) M~Tx4_t b'Scoa7@' while(){ d[j]= 【 】;j++;} [YQVZBT|{ Ov$_Phm: d[j]=0; #@QZ 38Q>x 这里容易只看到当前,忽略了还有其他字符,错填为s。答 案为s[i++]。
|
|