




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 .二級C上機改錯題技巧總結一、 改錯題之方法步驟1. 上機考試中改錯題占30分,一般有兩個地方有錯誤,題型簡單2. 做改錯題時先看出錯的地方,分析語法錯誤,如果能用C語言的語法判斷出錯誤,改之即可3. 沒有語法錯誤即分析邏輯錯誤,邏輯錯誤可以從幾個方面分析:(1) 從題目的要求中找到錯誤,例如:題目要求計算s=1+1/2+1/3+1/n,那么循環的范圍就應該是for(i=0;i<=n;i+),但是考試中經常將其寫為:for(i=0;i<n;i+)(2) 根據題目中的關鍵字改錯,例如:題目中要求從小到大排序,則“從小到大”就是關鍵字(3) 重點注意函數的調用、函數的返回值類型,函數
2、的形參,這個是上機考試中的重點(4) 注意細節,請參考以下為考生總結的知識(5) 多練習,多思考,多總結二、 改錯題之語法錯誤1. 關鍵字出錯(1) 關鍵字出錯,指的是C語言中的關鍵字出錯。C語言的關鍵字都是小寫字母,并且在VC+6.0中以藍色字體顯示,如果常見的關鍵字是黑色字體,可以斷定關鍵字出錯;(2) if關鍵字出錯1) 舉例:上機題庫P79第6題/*found*/ If(substrk+1='0') 2) 類似題目:12、35題(3) double關鍵字出錯1) 舉例:上機題庫P86第23題/*found*/double fun(double a, dounle x0)
3、2) 類似題目:36、51(4) while關鍵字出錯1) 舉例:上機題庫P77第2題/*found*/ wihle( q>p )2) 類似題目:(5) return關鍵字出錯1) 舉例:上機題庫P101第54題/*found*/ Return(Value);2) 類似題目:862. 格式出錯(1) C語言中的語句、基本結構、函數等都有相應的規范格式,程序中將這些格式書寫錯誤,將導致編譯器無法識別程序,因此導致出錯;(2) 語句末尾少分號1) 分號是語句結束的標志,每個語句都必須以分號結尾2) 舉例:上機題庫P77第2題第一個出錯點/*found*/ q=p+i3) 類似的題目:28題第
4、一空、29題第1空、34題第2空、37題第2空、48題第2空,49第1空,59第2空、70、79、97(3) for結構格式出錯1) for結構的格式:for(表達式1;表達式2;表達式3) 循環體語句 ,for結構體中表達式必須以分號隔開,改錯題中經常出現將for結構中分號錯寫為逗號的情況;2) 舉例:上機題庫P77第3題第2個出錯點/*found*/ for( i = 100, i <= m, i += 100 )3) 類似的題目:6題第一空、14題第二空、53第1空、73、86第1空(4) if結構格式出錯1) if結構的格式:if(表達式),if后面必須加上小括號2) 舉例:P9
5、3第37第1個出錯點/*found*/ if n = = 03) 類似題目:59題第1空(5) 數組格式出錯1) 一維數組的定義形式:類型名 數組名常量表達式,謹記是數組的獨有特征2) 舉例:P89第28題第2個出錯點/*found*/ t(k)=b(j);3) 舉例2:P97第1個出錯點(二維數組不能省略列下標)/*found*/int fun(int n, int xx)4) 類似題目:95題第1空(6) 函數格式出錯1) 記住函數名后面一定是花括號,不能是方括號,方括號只有在數組下標中用到2) 舉例:P86第22題第1出錯點/*found*/ n=strlen aa ;3) scanf(
6、輸入控制,輸入數據列表),scanf函數中輸入數據列表要求為變量的地址4) 舉例2:P95第41題第2出錯點/*found*/ scanf("%d",aij);5) 類似題目:第80題第1空(7) 命令行格式錯誤1) #include “stdio.h”,include和define前面都必須有#2) 舉例:P84第17題第1出錯點/*found*/include (stdio.a)3. 使用了未定義的變量:變量必須先定義后執行(1) 0(零)和o(字母歐)的區別1) 區別:零像雞蛋,字母歐像乒乓球2) 舉例:上機題庫P85第19題第一個出錯點/*found*/ a2=k/
7、1o;3) 類似題目:19題第一空、23題第二空、43題第二空、51題第二空、77、98、(2) P(大)和p(小)的區別1) 區別:一般在定義時候p為小寫,但是在使用的時候變為大寫P,做題時候一定要細心2) 舉例:上機題庫P91第33題第一出錯點fun(int *a,int n,int x) int p=0,i; an=x; while( x!=ap )p=p+1;/*found*/ if(P=n) return -1;3) 類似題目:33題第一空、82(3) 普通變量大小寫的區別1) 定義時候和使用時候變量的大小寫不一致,違背了變量必須“先定義后執行”的原則2) 舉例:18題第2空int
8、fun ( float *s, int n, float *aver ) float ave, t = 0.0 ; int count = 0, k, i ; for ( k = 0 ; k < n ; k+ )/*found*/ t = sk ; ave = t / n ; for ( i = 0 ; i < n ; i+ ) if ( s i < ave ) count+ ;/*found*/ *aver = Ave ;/*分析:定義時候float ave, t = 0.0 ;ave為小寫,但是此時使用時候卻是Ave大寫,因此出錯*/ return count ;3) 類
9、似題目:18題第2空、22題第2空、38題第1空、54題第2空三、 改錯題之邏輯錯誤1. 運算符號出錯:(1) C語言中除號是“/”不是“”(2) 賦值號(=)和等號(= =)混淆1) 記住在if語句中出現賦值號(=)一般是講它改為等號(= =)。2) 類似題目:14題第一空和29題第二空都是這樣的錯誤、87、91、942. 表達式的取值范圍出錯:(1) 當遇到計算表達式的累加或是累減時,一定用到循環來完成相應的操作。(2) 例如:改錯題第七題中要求計算t=1-1/2*2-1/3*3-.-1/m*m這個表達式,在這個題目中第一空有這樣的for語句:for(i=2;i<m;i+)y-=1/
10、(i*i);從題目中不難發現i是一個變量,它的取值范圍從整數2開始到m-1結束,最終計算的結果為 y=1-1/2*2-1/3*3-.-1/(m-1)*(m-1)和題目要求的不符,因此將i<m改為i<=m。(3) 做這樣的題目看兩點:一看題目中的表達式,二看for語句中變量的取值范圍。(4) 類似題目:31題第二空、52第2空、81、88、3. C語言中的除法運算:(1) 這個考點同樣考查表達式的相關知識。(2) 例如:改錯題第七題中要求計算t=1-1/2*2-1/3*3-.-1/m*m這個表達式,在這個題目中第一空有這樣的for語句:for(i=2;i<m;i+)y-=1/(
11、i*i);剛才我們將了表達式的范圍,現在我們考慮y-=1/(i*i);是否正確?賦值號左邊問題不大,我們看看右邊1/(i*i),其中i是整數,那么i*i也是整數,在C語言中1除以比它大的數時值為零。這樣和題目的要求就不相符。(3) 記住:1/2的值為零,只有1.0/2或是1.0/2.0的值為0.5。(4) 類似題目:39題第一空也同樣是這種錯誤、57、764. 找最大值和排序問題:(1) 遇到這種題目在改錯題中最容易考查的是大于(>)、小于(<)等符號的變化,當你查找出錯的地方沒有語法錯誤,也沒有使用了未定義的變量時,記住這個口訣:將大于改為小于,將小于改為大于!(2) 類似題目:
12、11題第二空、12題第一空和13題第二空、4題第二空、585. 函數的返回值及其參數:重點int fun(int x,int y) main() if(x>y)return x; int a,b,c;else return y; scanf(“%d%d”,&a,&b); c=fun(a,b); printf(“最大值為:%d”,c);(1) 函數的返回類型:1) 在上面的例子中fun函數的返回值是int,如果將int改為double,很明顯是錯誤的。從兩個地方來看,首先return x;中x的類型必須和fun函數中的返回值相同,x是整型。其次c=fun(a,b);中fun
13、函數將一個返回值賦值給了變量C,說明函數返回的值一定是整型。2) 記住:函數調用、函數的返回值和ruturn中數據類型必須一致!3) 類似題目:1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1、71都死這樣的錯誤,(注1.1表示第一題第一空)。78、89、90、(2) return后面的表達式及其類型:19.2、30.2、39.2(3) 函數傳遞的參數:int fun(int *x,int *y) main() if(*x>*y)return *x; int a,b,c;else return *y; scanf(“%d%d”,&a,&b); c
14、=fun(&a,&b); printf(“最大值為:%d”,c);1) 一定注意:傳遞的是值還是地址。比較上面兩個例子大家很容易區別傳遞的是值還是地址,第一個例子調用函數的時候傳遞的是值,因此在fun函數的形參中x和y僅僅是普通的變量,而第二個例子中調用函數的時候傳遞的是地址,因此在fun函數的形參中x和y就是兩個指針變量。2) 類似題目:5.1、13.1、17.2、20.1、25.2、52.1、56、84、85、100(4) 指針的使用:int fun(int *x,int *y) if(*x>*y)return *x; else return *y; 1) 在此例中f
15、un函數的形參是x和y,它們的類型是整型的指針,那么在fun函數的函數體中使用到x和y的值時一定要區分:x>y比較的是x和y所存變量地址的大小,*x>*y才是比較值的大小。2) 如果存在*x=x+y;的類似情況一定是錯誤的,必須要將賦值號的左右兩邊的類型變為一致。 3) 類似題目:5.2、5.3、20.2、24.2、35.1、44.1、72、75、一定特別注意!6. 數組: (1) 數組下標的初始值:數組下標從零開始,到長度減一結束。1) 考試技巧:當出錯行在定義部分時,先檢查該定義語句有沒有語法錯誤,再看定義語句中的變量有沒有賦初始值,最后看變量賦的初始值有沒有正確。 2) 定義
16、初始值有竅門,遇到累加時,用來存放累加和的變量一般賦值為零,遇到求階乘時,用來存放階乘值的變量一般賦值為一。3) 8.1中的變量k賦值為1,但是數組的下標只能從0開始,因此將1改為0就行了。 (2) 普通變量的初始值:1) 依照上面的技巧,我們同樣可以將它延伸到普通變量中。41.1中需要將變量的值進行初始化,題目中有這樣的要求:“輸出主對角線元素之和”,既然這樣我們很肯定初始值應該為零,接著我們看看是給哪個變量賦值?看printf(“sum=%d”,sum);輸出的是sum的值,說明sum就是我們要補充在橫線上的變量。2) 10.1也可以用同樣的方法來分析。 (3) 數組和字符串長度減一:1)
17、 當使用數組中的元素時,最大值只能到數組長度減一。字符串以0作為字符串的結束標志,因此取值最大也只能到字符串長度減一。25.2中輸出printf(“%d”,aai);分析程序知道i在此時就是數組的長度,我們要輸出數組中的元素,最大就只能到aai-1,因此改為 printf(“%d”,aai-1);就行了。2) 4.1和38.2中考查的是字符串長度減一的問題。(4) 數組下標往后走:1) 當題目要求將一個數組中的元素直接賦值或是以某種方式復制到另一個數組中時,接受數據的數組中的下標要自增。9.1中sj=si;將si中的值復制給sj,聯系上下函數段發現i是一個變量被for語句控制,從0開始直到遇到
18、0結束。i一直在加但是j沒有變化,因此改為sj+=si;即可。2) 類似的題目有:25.2、26.2、32.1、50.2。7. 特例:(1) 部分題目的解答很特殊,需要根據上下文中的內容來解答題目:例如10.1,在此題目中,定義了變量t=0;根據下面程序中的循環,s=0.0,首先加的是變量t的值,即s的值是從0.0開始的,s得到的值是:s=0.0+0.0+1.0/3+,觀察表達式的值,這個少加了第一項1.0的值,所以變量t的初值不能是0.0,只能是1.0,或者是1;(2) 21.2中的這個題目中,表達式的值是從2/1+3/2+5/3即表達式的規律是從第一項開始,以后的每一項的分子是前一項的分子
19、和分母的和,分母為前一項的分子。所以該題目的第二個空中的內容應該是:c=a;a+=b;b+=c;這一條語句中 a代表的變量的分子,b代表的是變量的分母,執行第一個表達式的值,把a的值賦值給變量c,第二個表達式是把分子和分母的和相加復制給變量a,第三個表達式是把原來a的值和變量b的值相加之后得到的值賦值給變量b,則變量b得到的值也為分子分母的和,不滿足題意,而分母應該為原來分子的值。第三表達式的值應該改為:b=c;(3) 類似的題目有:33.2、40.2、43.1、47.1、50.18. 素數 11.1 、29、83(1) 判斷一個數是否是素數的方法很多,的是只用掌握一種即可,首先掌握判斷一個素數的方法;(2) 素數的定義:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提高認知裁判員試題及答案
- 2024年籃球裁判員考試實踐部分的注意事項 試題及答案
- 學校冬季傳染病防控課件
- 農作物種子繁育員考試全景分析試題及答案
- 2020年11月中央機關遴選公務員筆試題B卷真題試卷答案解析
- 電刀的安全使用課件
- 2024年籃球裁判員復習工作的重要環節分析 試題及答案
- 植保員職業發展方向與前景試題及答案
- 2024年游泳救生員考試改革試題及答案
- 提高通過率2024年體育經紀人試題及答案
- 工程建設招標投標合同(資格預審邀請書)
- 2022浪潮英政服務器CS5260H2用戶手冊
- UL3030標準中文版-2018無人機系統UL中文版標準
- 三年級中華大家庭教學計劃人教版中華大家庭教學計劃
- 建設項目全過程工程咨詢-第一次形成性考核-國開(SC)-參考資料
- 食品供應鏈售后服務保障方案
- 《真希望你也喜歡自己》房琪-讀書分享
- GB/T 16895.24-2024低壓電氣裝置第7-710部分:特殊裝置或場所的要求醫療場所
- 低空經濟在環境保護領域的應用分析
- 三年級下第五單元課件
- 富血小板血漿(PRP)臨床實踐與病例分享課件
評論
0/150
提交評論