| wz82 |
2008-04-04 21:09 |
计算机二级C考试心得分享
等级考试(笔试)虽然知识面比较广,但不是很深,基础部分考的是你日常操作的能力,程序设计多数是考你的细心。辛辛苦苦准备了大半年,又经过2个小时的考场之战,交卷之后还很“自美”,成绩单上的“不及格”让你一时不敢相信自己的眼睛。 OX;bA^+}P MT{1/A;`) 当对着答 案细细“品味”时,你会N次的感叹……原来“罪魁祸首”是“不细心”。 h4n~V:nNm +L 09^I 综观这四年来的考题,对容易出错的典型题例作了汇总和分析,也好给以后参加二级C考试的朋友增加点免疫力吧。本文将分三次刊登。 5RT#H0/+ AF:_&gF 第一类,审题不清 Hcf"u&% @1j*\gYz 1.审题时的一字之差。 {MtJP:8Jp c]*yo 一定要搞清题意,题目让我们选择的是“正确”还是“不正确”的;“能”还是“不能”的;本来要求选出一个错误的答 案,但题目中没有“错误”字样,而是说 “……请选出不正确的一项”,一不小心你就可能会把选项中最前面一个“正确”的选为答 案,因“正确”的有三个选项,当然觉得很容易,就这样,“错误”轻易地从你的笔尖溜走了。 EZj rX>"#
]!ZZRe 2.不注意文字部分的要求和说明。 (Nzh1ul\} `Am|9LOT 很多时候,为了省时间,上来就去看程序,这样不仅不能省时间,还会走弯路、出错误。看看下面的两个例子吧! -c>3|bo 4zs0+d+ 题例1:以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 KcT(/! ;1~ n|IY #include }oD^tU IK =sWK;` void f(char p[][10],int n) Ea4zC|; TFHYB9vV {略} BD"Dzq 2z;nPup, main() 4l0>['K&{ OI Fjc0 {char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i; kiF}+,z" 5B%KiE&p f(p,5); printf("%d\n",strlen(p[0])); } fhg'4FO p4uzw 程序运行后的输出结果是 \>\ERVEd c6b51)sQ" (A)6 (B)4 (C)5 (D)3 ~JRq : j~bNH~3 (为了节省版面,把函数f的内容略去了。)看过文字说明,接着看主函数,就可以锁定这个字符串是“dcdbe”,而不用花时间去分析函数f。要注意的是:别把最长的一串当成最大的字符串噢,看上“aabdfg”可就错了,答 案应为C。 n%WjU)< 2?qT,pN 题例2: 以下程序中给指针p分配三个double型动态内存单元,请填空。 <mJ8~ g8/ ,E-u # include E|-oUzt +/_XSo main ( ) kP5I+B [m! P(o { double ?p; 9<&*iIrM [VX5r1-F p=(double ?) malloc(【 】); otaRA +6: p[0]=1.5;p[1]=2.5;p[2]=3.5; a,fcKe&B 0[H/>%3O printf("%f%f%f\n",p[0],p[1],p[2]);} 5ms]Wbh) F(j;|okf; 如果上来就看程序,就会忽略“给指针p分配三个double型动态内存单元”,这里要求“三个”,如果大笔一挥写出了sizeof(double)可就太冤枉了,其实应该是3?sizeof(double)。 9y[U\[H &CQ28WG X 第二类,把“赋值”看成了“等于” zv"NbN <0Y<9+g! 题例:有以下程序段 8@doKOA~T S5gBVGh int k=0 I\Y N! ,+d8
while(k=1)k++; %$Fe[#1 [zl4"|_` while 循环执行的次数是: 83]m/Iz hKg +A (A)无限次 (B)有语法错,不能执行 cD9U^SOS R:l &2 (C)一次也不执行 (D)执行1次 UFZOu%Y `
,SNq i 此题如果理解为k等于1时循环才执行,那么“k++”不被执行,k的值就始终为0,这时就把C选上了。其实,while循环的条件是一个赋值表达式,答 案为A。 $[Ut])4
~ o;
6^: 第三类,表达式的值与变量的值 JPL`/WA0 >Q_
'[!S 题例:有以下程序 -cJ,rrN_9 h=6D=6c int a=2; /]0SF_dZ |aU8WRq int f(int ?a) mcidA% y5KeUMcu {return (?a)++;} RnC+]J+?4 !5h8sD; main( ) s1sn,? ue?3;BF 5 { int s=0; pyX:$j2R+% FjizPg/|! { int a=5; #l`\'0`. i`<L#6RBT s+=f(&&a); QrFKjmD< hi(e%da } >hSu1s: B#`'h~(7 s+=f(&&a); XM"Qs.E 9Nna-}e?W printf("%d\n",s); eU`O=uE PJ&L7 } 执行后输出结果是() \b6{u6?+ T~L V\}h (A)10 (B)9 (C)7 (D)8 BHU$QX LXJ;8uW2y 答 案是C。 N5`z S79W 'Q7^bF^ 此题有两个要点,1是局部变量与全局变量的作用范围,2是,函数f(&&a)返回的是表达式 (?a)++的值,而不? a的值。 O0
Uh /s+IstW 第四类,把关系表达式有别于数学上的关系式 g]N'6La }kItVx 题例:有以下程序 f8WI@]1F SO STtuT main() g)ZMU^1 ~:0w% { int a=5,b=4,c=3,d=2; 4{vEW( -I6t ^$HA if(a>b>c) fE)o-q6Z XpkOC o 02 printf("%d\n",d); XjP;O,x f}*:wj else if((c-1>=d)==1) %{3q=9ii Ac*J;fI printf("%d\n",d+1); M=&,+#z<V [dz3k@ >0 else <Uj9~yVN] xs Pt printf("%d\n",d+2); {,*vMQ<^ h~CLJoK< } >KdV]!H Z
zp"CK 5 执行后输出结果是 ( ) $)X8'1%6 i'>5vU0?3 (A)2 (B)3 4$ihnb`DQN Y.tT#J^= (C)4 (D)编译时有错,无结果 dkDPze9l < FO=PM 这道题的关键在(a>b>c),答 案容易判断为A,5大于4也大于3,就把整个表达式判断为真值,其实,a>b已为真值,1>c则成了假值,所以答 案为B。 U1lqg?KO q3h&V 第五类,字符串的拷贝 5F
^VvzNn E'Ux2sh 拷成了同一个字符 5U+4vV/* ]{\M,txo8 题例:若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式) )i[Vq|n d}ycC.h4k while(){ d[j]= 【 】;j++;} '6>*J G-RDQ d[j]=0; hLk6Hqr7 z,^~H 这里容易只看到当前,忽略了还有其他字符,错填为s。答 案为s[i++]。
|
|