




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——計算機二級C語言學習常見的18種錯誤計算機二級C語言學習常見的18種錯誤
C語言的最大特點是:功能強、使用便當生動。C編譯的程序對語法檢查并不象其它高級語言那么嚴格,這就給編程人員留下"生動的余地',但還是由于這個生動給程序的調試帶來了大量不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪里的錯誤。看著有錯的程序,不知該如何改起,本人通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。
1.書寫標識符時,疏忽了大小寫字母的識別
main
inta=5;
printf%d,A;
編譯程序把a和A認為是兩個不同的變量名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的`字符。習慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。
2.疏忽了變量的類型,舉行了不合法的運算。
main
floata,b;
printf%d,a%b;
%是求余運算,得到a/b的整余數。整型變量a和b可以舉行求余運算,而實型變量那么不允許舉行"求余'運算。
3.將字符常量與字符串常量混淆。
charc;
c=a;
在這里就混淆了字符常量與字符串常量,字符常量是由一對單引號括起來的單個字符,字符串常量是一對雙引號括起來的字符序列。C規定以"\'作字符串終止標志,它是由系統自動加上的,所以字符串"a'實際上包含兩個字符:a和\,而把它賦給一個字符變量是不行的。
4.疏忽了"='與"=='的識別。
在大量高級語言中,用"='符號作為關系運算符"等于'。如在BASIC程序中可以寫
ifa=3then
但C語言中,"='是賦值運算符,"=='是關系運算符。如:
ifa==3a=b;
前者是舉行對比,a是否和3相等,后者表示假設a和3相等,把b值賦給a。由于習慣問題,初學者往往會犯這樣的錯誤。
5.忘卻加分號。
分號是C語句中不成缺少的一片面,語句末尾務必有分號。
a=1
b=2
編譯時,編譯程序在"a=1'后面沒察覺分號,就把下一行"b=2'也作為上一行語句的一片面,這就會展現語法錯誤。改錯時,有時在被指出有錯的一行中未察覺錯誤,就需要看一下上一行是否漏掉了分號。
z=x+y;
t=z/100;
printf%f,t;
對于復合語句來說,結果一個語句中結果的分號不能疏忽不寫這是和PASCAL不同的。
6.多加分號。
對于一個復合語句,如:
z=x+y;
t=z/100;
printf%f,t;
;
復合語句的花括號后不應再加分號,否那么將會畫蛇添足。
又如:
ifa%3==0;
I++;
本是假設3整除a,那么I加1。但由于ifa%3==0后多加了分號,那么if語句到此終止,程序將執行I++語句,不管3是否整除a,I都將自動加1。
再如:
forI=0;I5;I++;
scanf%d,x;
printf%d,x;
本意是先后輸入5個數,每輸入一個數后再將它輸出。由于for后多加了一個分號,使循環體變為空語句,此時只能輸入一個數并輸出它。
7.輸入變量時忘卻加地址運算符"'。
inta,b;
scanf%d%d,a,b;
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。"a'指a在內存中的地址。
8.輸入數據的方式與要求不符。
①scanf%d%d,a,b;
輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:
3,4
輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。
②scanf%d,%d,a,b;
C規定:假設在"格式操縱'字符串中除了格式說明以外還有其它字符,那么在輸入數據時應輸入與這些字符一致的字符。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字符是不對的。
343:4
又如:
scanfa=%d,b=%d,a,b;
輸入應如以下形式:
a=3,b=4
9.輸入字符的格式與要求不一致。
在用"%c'格式輸入字符時,"空格字符'和"轉義字符'都作為有效字符輸入。
scanf%c%c%c,c1,c2,c3;
如輸入abc
字符"a'送給c1,字符"'送給c2,字符"b'送給c3,由于%c只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔。
10.輸入輸出的數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf%f%d\n,a,b;
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要留神。
11.輸入數據時,企圖規定精度。
scanf%7.2f,a;
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試勞績的等級打印出百分制數段。
switchgrade
caseA:printf85~100\n;
caseB:printf70~84\n;
caseC:printf60~69\n;
caseD:printf60\n;
default:printferror\n;
由于漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句后接著執行其次、三、四、五個printf函數語句。正確寫法應在每個分支后再加上"break;'。例如
caseA:printf85~100\n;break;
13.忽略了while和do-while語句在細節上的識別。
1main
inta=0,I;
scanf%d,I;
whileI=10
a=a+I;
I++;
printf%d,a;
2
main
inta=0,I;
scanf%d,I;
do
a=a+I;
I++;
whileI=10;
printf%d,a;
可以看到,當輸入I的值小于或等于10時,二者得到的結果一致。而當I10時,二者結果就不同了。由于while循環是先判斷后執行,而do-while循環是先執行后判斷。對于大于10的數while循環一次也不執行循環體,而do-while語句那么要執行一次循環體。
14.定義數組時誤用變量。
intn;
scanf%d,n;
inta[n];
數組名后用方括號括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的"元素個數'誤認為是可使的最大下標值。
main
staticinta[10]=1,2,3,4,5,6,7,8,9,10;
printf%d,a[10];
C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開頭,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲。
inta[3]=0,1,2;
這樣初始化數組是不對的。C語言規定只有靜態存儲static數組和外部存儲exterm數組才能初始化。應改為:
staticinta[3]=0,1,2;
17.在不應加地址運算符的位置加了地址運算符。
scanf%s,str;
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字符數組名,不必要再加地址符。應改為:
scanf%s,str;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年大連西太平洋石油化工有限公司秋季高校畢業生招聘40人筆試參考題庫附帶答案詳解
- 2024年合肥某國有企業社會招聘50人筆試參考題庫附帶答案詳解
- 多維經營績效管理體系建設
- 安徽省阜陽市太和中學2025屆高三第二次檢測試題數學試題試卷
- 股權分配的協議書二零二五年
- 二零二五版離婚后同居協議書范例
- 專業愛情合同范例
- 涉法涉訴信訪培訓
- 七中語文考試卷子及答案
- 七下道法期中試卷及答案
- 2025-2030年中國CAE軟件行業市場行情監測及發展前景研判報告
- 2025江西南昌市江銅產融社會招聘1人筆試參考題庫附帶答案詳解
- (二統)昆明市2025屆“三診一模”高三復習教學質量檢測地理試卷(含答案)
- Unit 3 Keep Fit Section A 2a-2e 教學設計 2024-2025學年人教版(2024)七年級英語下冊
- 2025徽縣輔警考試題庫
- (一模)2025年廣東省高三高考模擬測試 (一) 卷數學試卷(含官方答案)
- 腦心健康管理師的學習匯報
- 樹木移植合同范本
- 2025年開封大學單招職業技能測試題庫新版
- 2025年張家界航空工業職業技術學院單招職業技能測試題庫及參考答案
- 財政投資評審咨詢服務預算和結算評審項目投標文件(技術方案)
評論
0/150
提交評論