全國計算機等級考試二級C語言上機答題技巧1_第1頁
全國計算機等級考試二級C語言上機答題技巧1_第2頁
全國計算機等級考試二級C語言上機答題技巧1_第3頁
全國計算機等級考試二級C語言上機答題技巧1_第4頁
全國計算機等級考試二級C語言上機答題技巧1_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 全國計算機等級考試二級C語言上機答題技巧一、上機改錯題的特點和注意事項 1上機改錯的試題常包含兩個(或三個)錯誤需要修改。2試題中用"*found*/"來提示在下一行(或下面第二行)有錯。3錯誤的性質基本分語法錯和邏輯錯兩種,也有些試題要求把語句添加在下劃線處。4特別要注意的是:只能在出錯的行上進行修改,不要改動程序行的順序,更不要自己另編程序。二、上機改錯測試時,建議按以下步驟進行1首先仔細審題,了解試題的要求,看清楚試題給出的輸入和輸出例示,以便檢驗改錯后程序運行的結果是否正確。2當在Visual C+6.0環境下調出源程序后,審視所在函數,根據題義理解程序所采用的基

2、本算法,做到心里有數。3先按CTRL+F7對測試程序進行檢查是否有語法錯誤。當編譯提示有語法錯時,可參考編譯提示來查找并改正錯誤。4當不再出現語法錯時,使用F7執行,看結果使用CTRL+F5,按照試題的示例給出的數據進行試算,若試算的結果與給出的輸出結果一樣時,該題就做對了;若試算的結果與給出的輸出結果不同,就應進一步檢查程序中的邏輯錯誤。5當程序存在邏輯錯誤時,首先應當理解題意、讀懂程序的算法,必要時可按步檢查數據的流程,以便確定錯誤所在。例如,題目要求數據按由小到大排序,而結果數據是按由大到小進行了排序,問題可能出現在條件判斷上。又如,輸出的字符串比預期的短,就有可能字符串的結束標志放錯了

3、位置。再如做循環的時候數組上限下限錯誤了,基數是從0開始而不是1開始的。修改程序中的邏輯錯時,要求考生認真讀懂程序代碼。6修改完成,得到正確結果后,一定不要忘記把修改后的程序存盤。三、上機編程題的特點和說明1在二級C程序設計上機考試中,要求完成一個獨立的函數的編程。目前教育部考試中心已出版了上機考試習題集,這些有助于學習編程,但考生應當在學習過程中理解基本的算法,通過實際上機操作積累經驗,才能掌握基本的編程能力。四、進行編程測試時,建議按以下步驟進行1首先仔細審題,了解試題的要求,記下試題給出的輸入和輸出例示,以便檢驗在完成指定的函數后程序運行的結果是否正確。2當在Visual C+6.0環境

4、下調出源程序后,應對照函數首部的形參,審視主函數中調用函數時的實參容,以便明確在函數中需要處理的數據對象。3理解試題的要求,審視主函數中調用函數的方式,若在表達式中調用函數(如把函數值賦給某個對象),則要求有函數值返回,需注意函數的類型,并在函數中用return語句返回函數值;若主函數中僅用語句形式調用函數,則需要通過形參間接地返回所得結果。4選擇適當的算法進行編程,輸入程序語句。不要忘記與時存盤!5編譯程序,直到沒有語法錯誤。6調試程序,利用試題中給出的例示數據進行輸入(若要求輸入的話),運行程序,用例示的輸出數據檢驗輸出結果,直到結果一樣。1.書寫標識符時,忽略了大小寫字母的區別。main

5、()int a=5;printf("%d",A);編譯程序把a和A認為是兩個不同的變量名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字符。習慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。2.忽略了變量的類型,進行了不合法的運算。main()float a,b;printf("%d",a%b);%是求余運算,得到a/b的整余數。整型變量a和b可以進行求余運算,而實型變量則不允許進行“求余”運算。3.將字符常量與字符串常量混淆。char c;c="a"在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單

6、個字符,字符串常量是一對雙引號括起來的字符序列。C規定以“”作字符串結束標志,它是由系統自動加上的,所以字符串“a”實際上包含兩個字符:a'和',而把它賦給一個字符變量是不行的。4.忽略了“=”與“=”的區別。在許多高級語言中,用“=”符號作為關系運算符“等于”。如在BASIC程序中可以寫if (a=3) then 但C語言中,“=”是賦值運算符,“=”是關系運算符。如:if (a=3) a=b;前者是進行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習慣問題,初學者往往會犯這樣的錯誤。5.忘記加分號。分號是C語句中不可缺少的一部分,語句末尾必須有分號。a=1

7、b=2編譯時,編譯程序在“a=1”后面沒發現分號,就把下一行“b=2”也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。 z=x y;t=z/100;printf("%f",t);對于復合語句來說,最后一個語句中最后的分號不能忽略不寫。6.多加分號。對于一個復合語句,如: z=x y;t=z/100;printf("%f",t);復合語句的花括號后不應再加分號,否則將會畫蛇添足。又如:if (a%3=0);I ;本是如果3整除a,則I加1。但由于if (a%3=0)后多加了分號,則

8、if語句到此結束,程序將執行I 語句,不論3是否整除a,I都將自動加1。再如:for (I=0;I<5;I );scanf("%d",&x);printf("%d",x);本意是先后輸入5個數,每輸入一個數后再將它輸出。由于for()后多加了一個分號,使循環體變為空語句,此時只能輸入一個數并輸出它。7.輸入變量時忘記加地址運算符“&”。int a,b;scanf("%d%d",a,b);這是不合法的。Scanf函數的作用是:按照a、b在存的地址將a、b的值存進去。“&a”指a在存中的地址。8.輸入數據的方

9、式與要求不符。scanf("%d%d",&a,&b);輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:3,4輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。scanf("%d,%d",&a,&b);C規定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數據時應輸入與這些字符一樣的字符。下面輸入是合法的:3,4此時不用逗號而用空格或其它字符是不對的。3 4 3:4又如:scanf("a=%d,b=%d",&a,&b);輸入應如以下形式

10、:a=3,b=49.輸入字符的格式與要求不一致。在用“%c”格式輸入字符時,“空格字符”和“轉義字符”都作為有效字符輸入。scanf("%c%c%c",&c1,&c2,&c3);如輸入a b c字符“a”送給c1,字符“”送給c2,字符“b”送給c3,因為%c只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔。10.輸入輸出的數據類型與所用格式說明符不一致。例如,a已定義為整型,b定義為實型a=3;b=4.5;printf("%f%dn",a,b);編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。11.輸入

11、數據時,企圖規定精度。scanf("%7.2f",&a);這樣做是不合法的,輸入數據時不能規定精度。12.switch語句中漏寫break語句。例如:根據考試成績的等級打印出百分制數段。switch(grade) case 'A':printf("85100n");case 'B':printf("7084n");case 'C':printf("6069n");case 'D':printf("<60 ");defa

12、ult:printf("error ");由于漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句后接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支后再加上“break;”。例如case 'A':printf("85100 ");break;13.在定義數組時,將定義的“元素個數”誤認為是可使的最大下標值。main()static int a10=1,2,3,4,5,6,7,8,9,10;printf("%d",a10);C語言

13、規定:定義時用a10,表示a數組有10個元素。其下標值由0開始,所以數組元素a10是不存在的。16.在不應加地址運算符&的位置加了地址運算符。scanf("%s",&str);    =C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字符數組名,不必要再加地址符&。應改為:scanf("%s",str);1、編一個函數fun(char *s),函數的功能是把字符串中的容逆置。例子如:字符串中原有的容為:abcdefg,則調用該函數后,串中的容為:gfedcbaf

14、un(char *s) int i=0,t,n=strlen(s);for(;s it=*(s i);*(s i)=*(s n-1-i);*(s n-1-i)=t;注:該題的算法是先分別找出字符串的兩頭,然后同時逐一往中間移動,每移動一次都進行兩字符的位置對換,直到中間字符(用s i地址,因此要注意把它的容取出再進行換位。即先進行取容運算*)2、請編寫函數fun,對長度為7個字符的字符串,除首、尾字符外,將其余5個字符按降序排列。例如,原來的字符串為CEAedca,排序后輸出為CedcEAa。int fun(char *s,int num) int i,j,t;for(i=1;ifor(j=i

15、 1;jif(s t=s;s=sj;sj=t;該題采用的排序法是選擇法進行降序排序,算法是用外for()循環從字符串的前端往后端走動,每走動一個字符都用嵌的for()循環在該字符后找出最小的字符與該字符進行換位。直到外for()循環走到最后一個字符。此外,此題還要注意把首尾字符除開,即在最外層for()循環中從1開始,只到num-2即可。3、請編寫一個unsigned fun(unsigned w),w是一個大于10的無符號整數,若w是n(n>=2)位的整數,函數求出w的后n-1位的數作為函數值返回。例如:w值為5923,則函數返回923;w值為923則函數返回23。unsigned f

16、un( unsigned w ) if(w>=10000) return w000;if(w>=1000) return w00;if(w>=100) return w0;return w; 注:由于unsigned型整數在0-65535這間,只要它大于10000則對10000求余即得出后面4位,否則如果大于1000則對1000求余得出后3位數,這樣一層一層往小的判斷。由于return的作用除了返回值以外,還有當執行到return時就跳出該程序,所以可以連續的用if()語句。4、請編一函數void fun(int ttMN,int ppN),tt指向一個M行N列的二維數組,求

17、出二維數組每列中最小元素,并依次放入pp所指一維數組中,二維數組中的數已在主函數中賦予。#define M 3#define N 4void fun(int ttMN,int ppN) int i, j;for(i=0;i pp=tt0;for(j=0;jif(ttj5、請編一個函數fun,其中n所指存儲單元中存放了數組中元素的個數。函數的功能是:刪除所有值為y的元素。數組元素中的值和y的值由主函數通過健盤讀入。試題程序。#define M 20void fun (int bb, int *n,int y) int i,j=0;for( i=0; i<*n; i )if(bb!=y) b

18、bj =bb;*n=j;6、 請編寫一個函數int fun(int x),它的功能是:判斷整數x是否是同構數。若是同構數,函數返回1;否則返回0。所謂“同構數”是指這樣的數,它出現在它的平方數的右邊。例如:輸入整數5,5的平方數是25,5是25中右側的數,所以5是同構數。x的值由主函數從健盤讀入,要求不大于100。int fun (int x) int xx=x * x;if(xx=x/xx=x/xx0=x) return 1;else return 0;7、請編寫函數fun,它的功能是:求出ss所指字符串中、指定字符的個數,并返回此值。例如:若輸入字符串:123412132,輸入字符為:1,

19、則輸出:3。#define M 81int fun(char *ss,char c)int num=0;while(*ss!='0')if(*ss=c) num+ ;ss+ ;return(num);8、請編寫函數fun,經的功能是:求出1到1000之能被7或11整除、但不能同時補7和11整除的所有整數并將它們放在a所指的數組中,通過n返回這些數的個數。void fun(int *a,int *n) int i,m=0;for(i=1;i<1000;i )if(i%7=0)/(i=0)&&!(i%7=0)&&(i=0)am=i;m =1;*n=m;10、要求程序的功能是:把20個隨機數存入一個數組,然后輸出該數組中的最小值。其中確定最小值的下標的操作在fun函數中實現,請給出該函數的定義。試題程序。#include#include#define VSIZE 20int vectorVSIZE;int fu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論