全國計算機等級考試二級C上機考試必讀.doc_第1頁
全國計算機等級考試二級C上機考試必讀.doc_第2頁
全國計算機等級考試二級C上機考試必讀.doc_第3頁
全國計算機等級考試二級C上機考試必讀.doc_第4頁
全國計算機等級考試二級C上機考試必讀.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機等級考試二級C上機考試專題機試部分:機試就要親自編程,考核閱讀程序、編寫程序的實踐能力。題型分為:程序填空30分、程序改錯30分、編寫程序40分,3大題共100分。主要是熟悉C程序設(shè)計的方法和步驟、掌握C語言語法規(guī)則,掌握程序設(shè)計的控制結(jié)構(gòu)及其流程的執(zhí)行走向,掌握數(shù)組、指針、函數(shù)、字符串、文件等相關(guān)內(nèi)容,實現(xiàn)程序?qū)嵺`。主要涉及的章節(jié)主要是函數(shù)、數(shù)組、文件、循環(huán)、字符串、指針、選擇等??疾閮?nèi)容主要包括:A. 數(shù)據(jù)統(tǒng)計與檢索,包括:累加、連乘、最大值、最小值、平均值等;B. 數(shù)組元素和字符串的使用;C. 數(shù)值計算包括矩陣計算、矩陣轉(zhuǎn)置;D. 字符處理,包括英文字母大小寫轉(zhuǎn)換和字符個數(shù)統(tǒng)計等。一、上機改錯題的特點和注意事項1上機改錯的試題中通常包含兩個(或三個)錯誤需要修改。 2試題中用*found*/來提示在下一行(或下面第二行)有錯。 3錯誤的性質(zhì)基本分語法錯和邏輯錯兩種,也有些試題要求把語句添加在下劃線處。 4特別要注意的是:只能在出錯的行上進行修改,不要改動程序行的順序,更不要自己另編程序。二、上機改錯測試時,建議按以下步驟進行1首先仔細審題,了解試題的要求,看清楚試題給出的輸入和輸出例示,以便檢驗改錯后程序運行的結(jié)果是否正確。 2當在V C+6.0環(huán)境下調(diào)出源程序后,審視/*found*/所在函數(shù),根據(jù)題義理解程序所采用的基本算法,做到心里有數(shù)。 3先按CTRL+F7對測試程序進行檢查是否有語法錯誤。當編譯提示有語法錯時,可參考編譯提示來查找并改正錯誤。 4當不再出現(xiàn)語法錯時,使用CTRL+F5執(zhí)行, 按照試題的示例給出的數(shù)據(jù)進行試算,若試算的結(jié)果與給出的輸出結(jié)果相同時,該題就做對了;若試算的結(jié)果與給出的輸出結(jié)果不同,就應(yīng)進一步檢查程序中的邏輯錯誤。 5當程序存在邏輯錯誤時,首先應(yīng)當理解題意、讀懂程序的算法,必要時可按步檢查數(shù)據(jù)的流程,以便確定錯誤所在。例如,題目要求數(shù)據(jù)按由小到大排序,而結(jié)果數(shù)據(jù)是按由大到小進行了排序,問題可能出現(xiàn)在條件判斷上。又如,輸出的字符串比預(yù)期的短,就有可能字符串的結(jié)束標志放錯了位置。再如做循環(huán)的時候 數(shù)組上限下限錯誤了 ,基數(shù)是從0開始 而不是1開始的。修改程序中的邏輯錯時,要求考生認真讀懂程序代碼。 6修改完成,得到正確結(jié)果后,一定不要忘記把修改后的程序存盤。三、上機編程題的特點和說明在二級C程序設(shè)計上機考試中,要求完成一個獨立的函數(shù)的編程。目前教育部考試中心已出版了上機考試習題集,這些有助于學(xué)習編程,但應(yīng)當在學(xué)習過程中理解基本的算法,通過實際上機操作積累經(jīng)驗,才能掌握基本的編程能力。 四、進行編程測試時,建議按以下步驟進行1首先仔細審題,了解試題的要求,記下試題給出的輸入和輸出例示,以便檢驗在完成指定的函數(shù)后程序運行的結(jié)果是否正確。 2當在V C+6.0環(huán)境下調(diào)出源程序后,應(yīng)對照函數(shù)首部的形參,審視主函數(shù)中調(diào)用函數(shù)時的實參內(nèi)容,以便明確在函數(shù)中需要處理的數(shù)據(jù)對象。 3理解試題的要求,審視主函數(shù)中調(diào)用函數(shù)的方式,若在表達式中調(diào)用函數(shù)(如把函數(shù)值賦給某個對象),則要求有函數(shù)值返回,需注意函數(shù)的類型,并在函數(shù)中用return語句返回函數(shù)值;若主函數(shù)中僅用語句形式調(diào)用函數(shù),則需要通過形參間接地返回所得結(jié)果。 4選擇適當?shù)乃惴ㄟM行編程,輸入程序語句。不要忘記及時存盤! 5編譯程序,直到?jīng)]有語法錯誤。 6調(diào)試程序,利用試題中給出的例示數(shù)據(jù)進行輸入(若要求輸入的話),運行程序,用例示的輸出數(shù)據(jù)檢驗輸出結(jié)果,直到結(jié)果相同。以下是一些C編程時常犯的錯誤,特別寫給各位同學(xué)以供參考。 1.書寫標識符時,忽略了大小寫字母的區(qū)別。 main() int a=5; printf(%d,A); 編譯程序把a和A認為是兩個不同的變量名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字符。習慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。 2.忽略了變量的類型,進行了不合法的運算。 main() float a,b; printf(%d,a%b); %是求余運算,得到a/b的整余數(shù)。整型變量a和b可以進行求余運算,而實型變量則不允許進行“求余”運算。 3.將字符常量與字符串常量混淆。 char c; c=a; 在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個字符,字符串常量是一對雙引號括起來的字符序列。C規(guī)定以“”作字符串結(jié)束標志,它是由系統(tǒng)自動加上的,所以字符串“a”實際上包含兩個字符:a和,而把它賦給一個字符變量是不行的。 4.忽略了“=”與“=”的區(qū)別。 在許多高級語言中,用“=”符號作為關(guān)系運算符“等于”。如在BASIC程序中可以寫 if (a=3) then 但C語言中,“=”是賦值運算符,“=”是關(guān)系運算符。如: if (a=3) a=b; 前者是進行比較,a是否和3相等,后者表示如果a和3相等,把b值賦給a。由于習慣問題,初學(xué)者往往會犯這樣的錯誤。 5.忘記加分號。 分號是C語句中不可缺少的一部分,語句末尾必須有分號。 a=1 b=2 編譯時,編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上一行語句的一部分,這就會出現(xiàn)語法錯誤。改錯時,有時在被指出有錯的一行中未發(fā)現(xiàn)錯誤,就需要看一下上一行是否漏掉了分號。 z=x+y; t=z/100; printf(%f,t); 對于復(fù)合語句來說,最后一個語句中最后的分號不能忽略不寫。6.多加分號。 對于一個復(fù)合語句,如: z=x+y; t=z/100; printf(%f,t); ; 復(fù)合語句的花括號后不應(yīng)再加分號,否則將會畫蛇添足。 又如: if (a%3=0); I+; 本是如果3整除a,則I加1。但由于if (a%3=0)后多加了分號,則if語句到此結(jié)束,程序?qū)?zhí)行I+語句,不論3是否整除a,I都將自動加1。 再如: for (I=0;I5;I+); scanf(%d,&x); printf(%d,x); 本意是先后輸入5個數(shù),每輸入一個數(shù)后再將它輸出。由于for()后多加了一個分號,使循環(huán)體變?yōu)榭照Z句,此時只能輸入一個數(shù)并輸出它。 7.輸入變量時忘記加地址運算符“&”。 int a,b; scanf(%d%d,a,b); 這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進去?!?a”指a在內(nèi)存中的地址。 8.輸入數(shù)據(jù)的方式與要求不符。 scanf(%d%d,&a,&b); 輸入時,不能用逗號作兩個數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4 輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。 scanf(%d,%d,&a,&b); C規(guī)定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。下面輸入是合法的: 3,4 此時不用逗號而用空格或其它字符是不對的。 3 4 3:4 又如: scanf(a=%d,b=%d,&a,&b); 輸入應(yīng)如以下形式: a=3,b=4 9.輸入字符的格式與要求不一致。 在用“%c”格式輸入字符時,“空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。 scanf(%c%c%c,&c1,&c2,&c3); 如輸入a b c 字符“a”送給c1,字符“ ”送給c2,字符“b”送給c3,因為%c只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔。 10.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致。 例如,a已定義為整型,b定義為實型 a=3;b=4.5; printf(%f%dn,a,b); 編譯時不給出出錯信息,但運行結(jié)果將與原意不符。這種錯誤尤其需要注意。 11.輸入數(shù)據(jù)時,企圖規(guī)定精度。 scanf(%7.2f,&a); 這樣做是不合法的,輸入數(shù)據(jù)時不能規(guī)定精度。 12.switch語句中漏寫break語句。 例如:根據(jù)考試成績的等級打印出百分制數(shù)段。 switch(grade) case A:printf(85100n); case B:printf(7084n); case C:printf(6069n); case D:printf(60n); default:printf(errorn); 由于漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數(shù)在執(zhí)行完第一個語句后接著執(zhí)行第二、三、四、五個printf函數(shù)語句。正確寫法應(yīng)在每個分支后再加上“break;”。例如 case A:printf(85100n);break; 13.在定義數(shù)組時,將定義的“元素個數(shù)”誤認為是可使的最大下標值。 main() static int a10=1,2,3,4,5,6,7,8,9,10; printf(%d,a10); C語言規(guī)定:定義時用a10,表示a數(shù)組有10個元素。其下標值由0開始,所以數(shù)組元素a10是不存在的。 14.在不應(yīng)加地址運算符&的位置加了地址運算符。 scanf(%s,&str); C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入項是字符數(shù)組名,不必要再加地址符&。應(yīng)改為: scanf(%s,str);一、填空題:1. 給定程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將該學(xué)生的各科成績都乘以一個系數(shù)a。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include typedefstruct intnum; charname9; floatscore3; STU; voidshow(STUtt) inti; printf(%d%s:,tt.num,); for(i=0;i3;i+) printf(%5.1f,tt.scorei); printf(n); /*found*/ voidmodify(_1_*ss,floata) inti; for(i=0;i_2_*=a; main() STUstd=1,Zhanghua,76.5,78.0,82.0; floata; printf(nTheoriginalnumberandnameandscores:n); show(std); printf(nInputanumber:);scanf(%f,&a); /*found*/ modify(_3_,a); printf(nAresultofmodifying:n); show(std); 參考答案:(1)STU(2)scorei(3)&std 2. 給定程序中,函數(shù)fun的功能是將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確嶄綢果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include voidfun(char*s,inta,doublef) /*found*/ _1_fp; charch; fp=fopen(file1.txt,w); fprintf(fp,%s%d%fn,s,a,f); fclose(fp); fp=fopen(file1.txt,r); printf(nTheresult:nn); ch=fgetc(fp); /*found*/ while(!feof(_2_) /*found*/ putchar(_3_);ch=fgetc(fp); putchar(n); fclose(fp); main() chara10=Hello!;intb=12345; doublec=98.76; fun(a,b,c); 參考答案:(1)FILE *(2)fp(3)ch 3. 給定程序中,函數(shù)fun的功能是:將s所指字符串中的所有數(shù)字字符移到所有非數(shù)字字符之后,并保持數(shù)字字符串和非數(shù)字字符串原有的先后次序。例如,形參s所指的字符串為:def35adh3kjsdf7。執(zhí)行結(jié)果為:defadhkjsdf3537。 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include voidfun(char*s) inti,j=0,k=0;chart180,t280; for(i=0;si!=0;i+) if(si=0&si=9) /*found*/ t2j=si;_1_; elset1k+=si; t2j=0;t1k=0; /*found*/ for(i=0;ik; i+)_2_; /*found*/ for(i=0;i_3_;i+)sk+i=t2i; main() chars80=def35adh3kjsdf7; printf(nTheoriginalstringis:%sn,s); fun(s); printf(nTheresultis:%sn,s); 參考答案:(1)j+(2)si=t1i(3)j 4、給定程序中,函數(shù)fun的功能是:有NN矩陣,以主對角線為對稱線,對稱元素相加并將結(jié)果存放在左下三角元素中,右上三角元素置為0。例如,若N=3,有下列矩陣: 123 456 789計算結(jié)果為 100 650 10149 請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include #defineN4 /*found*/ voidfun(int(*t)_1_) inti,j; for(i=1;iN; i+) for(j=0;jI; j+) /*found*/ _2_=tij+tji; /*found*/ _3_=0; main() inttN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10,i,j; printf(nTheoriginalarray:n); for(i=0;iN; i+) for(j=0;jN;j+) printf(%d,tij); printf(n); fun(t); printf(nTheresultis:n); for(i=0;iN; i+) for(j=0;jN;j+) printf(%d,tij); printf(n); 參考答案:(1)N(2)tij(3)tji 二、程序改錯題1、給定程序MODI1.C中函數(shù) fun 的功能是: 將十進制正整數(shù)m轉(zhuǎn)換成k(2k9)進制數(shù), 并按高位到低位順序輸出。 例如,若輸入8和2,則應(yīng)輸出1000(即十進制數(shù)8轉(zhuǎn)換成二進制表示是1000)。 請改正 fun 函數(shù)中的錯誤,使它能得出正確的結(jié)果。 注意:不要改動 main 函數(shù)。不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include #include void fun( int m, int k ) int aa20, i; for( i = 0; m; i+ ) /*found*/ aai = m/k; m /= k; for( ; i; i- ) /*found*/ printf( %d, aa i ); main() int b, n; printf( nPlease enter a number and a base:n ); scanf( %d %d, &n, &b ); fun( n, b ); printf(n); 答案:(1)aai=m%k;(2)printf(%d,aai-1); 2、給定程序MODI1.C中函數(shù) fun 的功能是:用冒泡法對6個字符串按由小到大的順序進行排序。 請改正程序中的錯誤,使它能得出正確的結(jié)果。 注意: 不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! #include #include #define MAXLINE 20 fun ( char *pstr6) int i, j ; char *p ; for (i = 0 ; i 5 ; i+ ) /*found*/ for (j = i + 1, j 0) p = *(pstr + i) ; /*found*/ *(pstr + i) = pstr + j ; *(pstr + j) = p ; main( ) int i ; char *pstr6, str6MAXLINE ; for(i = 0; i 6 ; i+) pstri = stri ; printf( nEnter 6 string(1 string at each line): n ) ; for(i = 0 ; i 6 ; i+) scanf(%s, pstri) ; fun(pstr) ; printf(The strings after sorting:n) ; for(i = 0 ; i 6 ; i+) printf(%sn, pstri) ; 答案:(1)for(j=i+1;j=0 & si=48 & *s=57) count+; s+; return count; 2、編寫一個函數(shù),從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意: 主函數(shù)中用*作為結(jié)束輸入的標志,函數(shù)fun中給出的語句僅供參考。) 注意:部分源程序在文件PROG1.C中。 請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。 #include #include void fun(char(*a)81,int num,char *max) /* 以下代碼僅供參考 */ int i,k=0,len, maxlen; /* k為a數(shù)組中最長串所在元素的下標,初始為0,maxlen為其串長 */ maxlen=strlen(ak); for(i=1;ik

溫馨提示

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

評論

0/150

提交評論