等級考試心得:考的就是細心

  等級考試(筆試)雖然知識面比較廣,但不是很深,基礎部分考的是你日常操作的能力,程式設計多數是考你的細心。辛辛苦苦準備了大半年,又經過2個小時的考場之戰,交卷之後還很“自美”,成績單上的“不及格”讓你一時不敢相信自己的眼睛。

  當對著答案細細“品味”時,你會n次的感嘆……原來“罪魁禍首”是“不細心”。

綜觀這四年來的考題,對容易出錯的典型題例作了匯總和分析,也好給以後參加二級c考試的朋友增加點免疫力吧。本文將分三次刊登。

第一類,審題不清

1.審題時的一字之差。

一定要搞清題意,題目讓我們選擇的是“正確”還是“不正確”的;“能”還是“不能”的;本來要求選出一個錯誤的答案,但題目中沒有“錯誤”字樣,而是說 “……請選出不正確的一項”,一不小心你就可能會把選項中最前面一個“正確”的選為答案,因“正確”的有三個選項,當然覺得很容易,就這樣,“錯誤”輕易地從你的筆尖溜走了。

2.不注意文字部分的要求和說明。

很多時候,為了省時間,上來就去看程式,這樣不僅不能省時間,還會走彎路、出錯誤。看看下面的兩個例子吧!

題例1:以下程式中函式f的功能是將n個字元串,按由大到小的順序進行排序。

#include

void f(char p[][10],int n)

{略}

main()

{char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i;

f(p,5); printf("%d\n",strlen(p[0])); }

程式運行後的輸出結果是

(a)6 (b)4 (c)5 (d)3

(為了節省版面,把函式f的內容略去了。)看過文字說明,接著看主函式,就可以鎖定這個字元串是“dcdbe”,而不用花時間去分析函式f。要注意的是:別把最長的一串當成最大的字元串噢,看上“aabdfg”可就錯了,答案應為c。

題例2: 以下程式中給指針p分配三個double型動態記憶體單元,請填空。

# include

main ( )

{ double 漰;

p=(double ) malloc(【 】);

p[0]=1.5;p[1]=2.5;p[2]=3.5;

printf("%f%f%f\n",p[0],p[1],p[2]);}

如果上來就看程式,就會忽略“給指針p分配三個double型動態記憶體單元”,這裡要求“三個”,如果大筆一揮寫出了sizeof(double)可就太冤枉了,其實應該是3漵izeof(double)。

第二類,把“賦值”

看成了“等於”

題例:有以下程式段

int k=0

while(k=1)k++;

while 循環執行的次數是:

(a)無限次 (b)有語法錯,不能執行

(c)一次也不執行 (d)執行1次

此題如果理解為k等於1時循環才執行,那么“k++”不被執行,k的值就始終為0,這時就把c選上了。其實,while循環的條件是一個賦值表達式,答案為a。

第三類,表達式的值

與變數的值

題例:有以下程式

int a=2;

int f(int 漚)

{return (漚)++;}

main( )

{ int s=0;

{ int a=5;

s+=f(&&a);

}

s+=f(&&a);

printf("%d\n",s);

} 執行後輸出結果是()

(a)10 (b)9 (c)7 (d)8

答案是c。

此題有兩個要點,1是局部變數與全局變數的作用範圍,2是,函式f(&&a)返回的是表達式 (漚)++的值,而不 a的值。

第四類,把關係表達式有別於數學上的關係式

題例:有以下程式

main()

{ int a=5,b=4,c=3,d=2;

if(a>b>c)

printf("%d\n",d);

else if((c-1>=d)==1)

printf("%d\n",d+1);

else

printf("%d\n",d+2);

執行後輸出結果是 ( )

(a)2 (b)3

(c)4 (d)編譯時有錯,無結果

這道題的關鍵在(a>b>c),答案容易判斷為a,5大於4也大於3,就把整個表達式判斷為真值,其實,a>b已為真值,1>c則成了假值,所以答案為b。

第五類,字元串的拷貝,

拷成了同一個字元

題例:若有定義語句:char s[100],d[100]; int j=0, i=0;,且s中已賦字元串,請填空以實現字元串拷貝。(註:不得使用逗號表達式)

while([i]){ d[j]= 【 】;j++;}

d[j]=0;

這裡容易只看到當前,忽略了還有其他字元,錯填為s[i]。答案為s[i++]。