第一篇:C語言錯誤大全
fatal error C1004: unexpected end of file found
未找到文件末尾(可能是括號匹配問題)
fatal error C1021: invalid preprocessor command '1nclude'
無效的編譯預處理命令'1nclude'
fatal error C1083: Cannot open include file: 'stdi.h': No such file or directory 不能打開頭文件'stdi.h',文件或文件夾不存在error C2101: '&' on constant
不能計算常量的地址
error C2059: syntax error : 'while'
在'while'附近,存在語法錯誤
error C2061: syntax error : identifier 'x'
標識符x的附近,存在語法錯誤
error C2065: 'i' : undeclared identifier
變量i未定義
error C2078: too many initializers
數(shù)組/結(jié)構(gòu)等變量初始化時的數(shù)據(jù)太多
error C2087: '
丟失數(shù)組下標
error C2106: '=' : left operand must be l-value
'='的左側(cè)應當是左值,即不能是常量
error C2115: '=' : incompatible types
'='兩側(cè)的類型不兼容
error C2133: 'a' : unknown size
a(可能是數(shù)組名)的大小不確定。
error C2137: empty character constant
空的字符常量
error C2143: syntax error : missing ';' before......在......之前,缺少';'
error C2146: syntax error : missing ')' before identifier '......'
在標識符'......'之前缺少')'
error C2181: illegal else without matching if
else缺少匹配的if
error C2198: 'printf' : too few actual parameters
'printf'函數(shù)的參數(shù)太少
error C2223: left of '->x' must point to struct/union
'->x'的左側(cè)應是結(jié)構(gòu)類型變量或聯(lián)合類型變量
error C2224: left of '.x' must have struct/union type
'.x'的左側(cè)應是結(jié)構(gòu)類型變量或聯(lián)合類型變量
error C2371: 'f1' : redefinition;different basic types
函數(shù)'f1'的接口被重定義,參數(shù)類型或返回值類型不一致
warning C4101: 'x' : unreferenced local variable
'x'是一個從未被使用的局部變量
warning C4013: 'fi' undefined;assuming extern returning int
函數(shù)'fi'未定義,假設其是外部函數(shù),返回值類型是int
warning C4020: 'fun' : too many actual parameters
調(diào)用'fun'函數(shù)時,有太多的實參
warning C4033: 'f3' must return a value
函數(shù)'f3'應當有返回值語句
warning C4047: '=' : 'int *' differs in levels of indirection from 'int '
賦值運算中的類型轉(zhuǎn)換:從'int '轉(zhuǎn)換到'int *'可能存在問題
warning C4098: 'f2' : 'void' function returning a value
函數(shù)'f2'是無返回值的函數(shù),竟然有返回值語句。
warning C4133: 'function' : incompatible types-from '...' to '...'
不兼容的類型轉(zhuǎn)換(從'...'類型向'...'類型)
warning C4244: 'initializing' : conversion from 'const double ' to 'int ', possible loss of data 在初始化數(shù)據(jù)時,類型轉(zhuǎn)換可能導致數(shù)據(jù)丟失
warning C4305: 'initializing' : truncation from 'const int ' to 'char '
初始化時,數(shù)據(jù)被截斷
warning C4700: local variable 'x' used without having been initialized
局部變量'x'在被使用之前未初始化,error LNK2001: unresolved external symbol _f5
f5從未定義
第二篇:c語言常見錯誤
1.= 不等于 ==
從 Algol 派生出來的語言,如 Pascal 和 Ada,用 := 表示賦值而用 = 表示比較。而 C 語言則是用 = 表示賦值而用 == 表示比較。這是因為賦值的頻率要高于比較,因此為其分配更短的符號。此外,C 可以多重賦值(如 a = b = c),并且可以將賦值嵌入到一個大的表達式或者語句中。這種便捷導致了一個潛在的問題:需要用比較的地方卻寫成了賦值。下面的語句看起來好像是要檢查 x 是否等于 y :
if(x = y)
foo();
而實際上是將 y 的值賦值給 x,并檢查結(jié)果是否非零。再看看下面的一個希望跳過空格、制表符和換行符的循環(huán):
while(c == ’ ’ || c = ’t’ || c == ’n’)
c = getc(f);
在應該與 ’t’ 進行比較的地方程序員錯誤地使用了 =,而不是==。這個“比較”實際上是將’t’ 賦給 c,然后判斷 c 的(新的)值是否為零。因為 ’t’ 不為零,所以這個“比較”一直為真,因此這是一個死循環(huán)。
一些編譯器會對形如 e1 = e2 的條件給出一個警告以提醒用戶。當你確實需要對一個變量進行賦值,然后再檢查變量是否“非零”時,為了避免這種警告信息,應顯式給出比較符。也就是將:
if(x = y)
foo();改寫為:
if((x = y)!= 0)
foo();
2.多字符符號
一些 C 符號,如 /、* 或 =,只有一個字符。還有些 C 符號,如 /*、== 或標識符,具有多個字符。當編譯器遇到緊連在一起的 / 和 * 時,它必須決定是將這兩個字符識別為兩個符號還是一個單獨的符號。C 語言標準規(guī)定:“如果一個字符被識別為符號,則應該包含下一個字符看看包含此字符后構(gòu)成的字符串是否仍然可以構(gòu)成符號,如果可以則繼續(xù)包含下一個字符,一直到不能構(gòu)成符號為止?!薄R虼耍绻?/ 是符號的第一個字符,并且 / 后面緊隨著一個 *,則這兩個字符構(gòu)成注釋符開始標記。下面的語句看起來像是將 y 的值設置為 x 的值除以 p 所指向的值:
y = x/*p
/* p 指向除數(shù) */;
實際上,因為 /* 是注釋符開始標記,因此編譯器會簡單地“吞噬”程序文本,直到 */ 出現(xiàn)為止。換句話說,這條語句僅僅把 y 的值設置為 x 的值,而根本沒有看到 p。我們應該將這條語句改為:
y = x / *p
/* p 指向除數(shù) */;或者:
y = x /(*p)
/* p指向除數(shù) */;
3.else 問題
考慮下面的程序片斷:
if(x == 0)
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
寫這段程序的程序員的目的明顯是想將情況分為兩種:x == 0 和x!= 0。在第一種情況中,如果 y == 0,則調(diào)用 error()。第二種情況中,程序執(zhí)行 z = x
y;和 f(&z)。
然而,這段程序的實際效果卻大為不同。其原因是 else 總是與離它最近的 if 相關(guān)聯(lián)。上面那段代碼其實等價于:
if(x == 0){
if(y == 0)
error();
else {
z = x
y;
f(&z);
}
}
也就是說,當 x!= 0 發(fā)生時什么也不做。如果要達到我們想要的效果,應該改成:
if(x == 0){
if(y == 0)
error();
} else {
z = z
y;
f(&z);
}
4.表達式求值順序
一些運算符以一種已知的、特定的順序?qū)ζ洳僮鲾?shù)進行求值。但另一些則不是。例如下面的表達式:
a
5.&&、|| 和!運算符
C 規(guī)定 0 代表“假”,非零代表“真”。這些運算符返回 1 表示“真”而返回 0 表示“假”。&& 和 || 運算符如果可以通過左邊的操作數(shù)確定整個表達式的真假性,就不會對右邊的操作數(shù)進行求值。!10 返回 0,因為 10 非零;10 && 12 返回 1,因為 10 和 12 的值都不是 0;10 || 12 也是 1,因為 10 非零。這個表達式中的 12 不會被求值,因為左邊的 10 就足夠確定整個表達式為真。同理 :10 || f()中的 f()也不會被求值。
6.下標從零開始
C 語言中,一個具有 n 個元素的數(shù)組中沒有下標為 n 的元素,元素的下標是從 0 到n-1。下面的程序可能會崩潰:
int i, a[10];
for(i = 1;i
7.getchar 函數(shù)的返回值為整型(int)
請看以下程序:
#include
int main(void)
{
char c;
while((c = getchar())!= EOF)
putchar(c);
return 0;
}
這段代碼存在一個小小的,但已經(jīng)足以致命的錯誤:c 被聲明為字符型(char)而不是整型。這意味著 c 可能不能正確接收 EOF,從而導致程序不能退出!正確的寫法是:將 char 改成int。
第三篇:C語言錯誤種類總結(jié)
Turbo C(V2.0)編譯錯誤信息
編譯錯誤信息
說明:Turbo C 的源程序錯誤分為三種類型:致命錯誤、一般錯誤和警告。其中,致命錯誤通常是內(nèi)部編譯出錯;一般錯誤指程序的語法錯誤、磁盤或內(nèi)存存取錯誤或命令行錯誤等;警告則只是指出一些得懷疑的情況,它并不防止編譯的進行。
下面按字母順序A~Z分別列出致命錯誤及一般錯誤信息,英漢對照及處理方法:
(一)、致命錯誤英漢對照及處理方法: A-B致命錯誤
Bad call of in-line function(內(nèi)部函數(shù)非法調(diào)用)分析與處理:在使用一個宏定義的內(nèi)部函數(shù)時,沒能正確調(diào)用。一個內(nèi)部函數(shù)以兩個下劃線(__)開始和結(jié)束。
Irreducable expression tree(不可約表達式樹)分析與處理:這種錯誤指的是文件行中的表達式太復雜,使得代碼生成程序無法為它生成代碼。這種表達式必須避免使用。Register allocation failure(存儲器分配失敗)分析與處理:這種錯誤指的是文件行中的表達式太復雜,代碼生成程序無法為它生成代碼。此時應簡化這種繁雜的表達式或干脆避免使用它。
(二)、一般錯誤信息英漢照及處理方法
#operator not followed by maco argument name(#運算符后沒跟宏變元名)分析與處理:在宏定義中,#用于標識一宏變串。“#”號后必須跟一個宏變元名。
'xxxxxx' not anargument('xxxxxx'不是函數(shù)參數(shù))分析與處理:在源程序中將該標識符定義為一個函數(shù)參數(shù),但此標識符沒有在函數(shù)中出現(xiàn)。
Ambiguous symbol 'xxxxxx'(二義性符號'xxxxxx')分析與處理:兩個或多個結(jié)構(gòu)的某一域名相同,但具有的偏移、類型不同。在變量或表達式中引用該域而未帶結(jié)構(gòu)名時,會產(chǎn)生二義性,此時需修改某個域名或在引用時加上結(jié)構(gòu)名。Argument # missing name(參數(shù)#名丟失)分析與處理:參數(shù)名已脫離用于定義函數(shù)的函數(shù)原型。如果函數(shù)以原型定義,該函數(shù)必須包含所有的參數(shù)名。Argument list syntax error(參數(shù)表出現(xiàn)語法錯誤)分析與處理:函數(shù)調(diào)用的參數(shù)間必須以逗號隔開,并以一個右括號結(jié)束。若源文件中含有一個其后不是逗號也不是右括號的參數(shù),則出錯。Array bounds missing(數(shù)組的界限符“]”丟失)分析與處理:在源文件中定義了一個數(shù)組,但此數(shù)組沒有以下右方括號結(jié)束。
Array size too large(數(shù)組太大)分析與處理:定義的數(shù)組太大,超過了可用內(nèi)存空間。Assembler statement too long(匯編語句太長)分析與處理:內(nèi)部匯編語句最長不能超過480字節(jié)。Bad configuration file(配置文件不正確)分析與處理:TURBOC.CFG配置文件中包含的不是合適命令行選擇項的非注解文字。配置文件命令選擇項必須以一個短橫線開始。Bad file name format in include directive(包含指令中文件名格式不正確)分析與處理:包含文件名必須用引號(“filename.h”)或尖括號(
Bad undef directive syntax(undef指令語法錯誤)分析與處理:#undef指令必須以單個標識符(只此一個)作為該指令的體。
Bad file size syntax(位字段長語法錯誤)分析與處理:一個位字段長必須是1—16位的常量表達式。Call of non-functin(調(diào)用未定義函數(shù))分析與處理:正被調(diào)用的函數(shù)無定義,通常是由于不正確的函數(shù)聲明或函數(shù)名拼錯而造成。
Cannot modify a const object(不能修改一個長量對象)分析與處理:對定義為常量的對象進行不合法操作(如常量賦值)引起本錯誤。
Case outside of switch(Case 出現(xiàn)在switch外)分析與處理:編譯程序發(fā)現(xiàn)Case語句出現(xiàn)在switch語句之外,這類故障通常是由于括號不匹配造成的。Case statement missing(Case語句漏掉)分析與處理:Case語必須包含一個以冒號結(jié)束的常量表達式,如果漏了冒號或在冒號前多了其它符號,則會出現(xiàn)此類錯誤。Character constant too long(字符常量太長)分析與處理:字符常量的長度通常只能是一個或兩個字符長,超過此長度則會出現(xiàn)這種錯誤。
Compound statement missing(漏掉復合語句)分析與處理:編譯程序掃描到源文件未時,未發(fā)現(xiàn)結(jié)束符號(大括號),此類故障通常是由于大括號不匹配所致。Conflicting type modifiers(類型修飾符沖突)分析與處理:對同一指針,只能指定一種變址修飾符(如near 或far);而對于同一函數(shù),也只能給出一種語言修飾符(如Cdecl、pascal或interrupt)。
Constant expression required(需要常量表達式)分析與處理:數(shù)組的大小必須是常量,本錯誤通常是由于#define常量的拼寫錯誤引起。
Could not find file 'xxxxxx.xxx'(找不到'xxxxxx.xx'文件)分析與處理:編譯程序找不到命令行上給出的文件。Declaration missing(漏掉了說明)分析與處理:當源文件中包含了一個struct或 union域聲明,而后面漏掉了分號,則會出現(xiàn)此類錯誤。
Declaration needs type or storage class(說明必須給出類型或存儲類)分析與處理:正確的變量說明必須指出變量類型,否則會出現(xiàn)此類錯誤。
Declaration syntax error(說明出現(xiàn)語法錯誤)分析與處理:在源文件中,若某個說明丟失了某些符號或輸入多余的符號,則會出現(xiàn)此類錯誤。
Default outside of switch(Default語句在switch語句外出現(xiàn))分析與處理:這類錯誤通常是由于括號不匹配引起的。
Define directive needs an identifier(Define指令必須有一個標識符)分析與處理:#define 后面的第一個非空格符必須是一個標識符,若該位置出現(xiàn)其它字符,則會引起此類錯誤。Division by zero(除數(shù)為零)分析與處理:當源文件的常量表達式出現(xiàn)除數(shù)為零的情況,則會造成此類錯誤。Do statement must have while(do語句中必須有While關(guān)鍵字)分析與處理:若源文件中包含了一個無While關(guān)鍵字的 do語句,則出現(xiàn)本錯誤。
DO while statement missing((Do while語句中漏掉了符號 “(”)分析與處理:在do語句中,若 while關(guān)鍵字后無左括號,則出現(xiàn)本錯誤。Do while statement missing;(Do while語句中掉了分號)分析與處理:在DO語句的條件表達式中,若右括號后面無分號則出現(xiàn)此類錯誤。
Duplicate Case(Case情況不唯一)分析與處理:Switch語句的每個case必須有一個唯一的常量表達式值。否則導致此類錯誤發(fā)生。Enum syntax error(Enum語法錯誤)分析與處理:若enum說明的標識符表格式不對,將會引起此類錯誤發(fā)生。
Enumeration constant syntax error(枚舉常量語法錯誤)分析與處理:若賦給enum類型變量的表達式值不為常量,則會導致此類錯誤發(fā)生。
Error Directive : xxxx(Error指令:xxxx)分析與處理:源文件處理#error指令時,顯示該指令指出的信息。Error Writing output file(寫輸出文件錯誤)分析與處理:這類錯誤通常是由于磁盤空間已滿,無法進行寫入操作而造成。
Expression syntax error(表達式語法錯誤)分析與處理:本錯誤通常是由于出現(xiàn)兩個連續(xù)的操作符,括號不匹配或缺少括號、前一語句漏掉了分號引起的。Extra parameter in call(調(diào)用時出現(xiàn)多余參數(shù))分析與處理:本錯誤是由于調(diào)用函數(shù)時,其實際參數(shù)個數(shù)多于函數(shù)定義中的參數(shù)個數(shù)所致。
Extra parameter in call to xxxxxx(調(diào)用xxxxxxxx函數(shù)時出現(xiàn)了多余參數(shù))File name too long(文件名太長)分析與處理:#include指令給出的文件名太長,致使編譯程序無法處理,則會出現(xiàn)此類錯誤。通常DOS下的文件名長度不能超過 64個字符。
For statement missing)(For語名缺少“)”)分析與處理:在 for語句中,如果控制表達式后缺少右括號,則會出現(xiàn)此類錯誤。
For statement missing((For語句缺少“(”)For statement missing;(For 語句缺少“;”)分析與處理:在 for語句中,當某個表達式后缺少分號,則會出現(xiàn)此類錯誤。
Function call missing)(函數(shù)調(diào)用缺少“)”)分析與處理:如果函數(shù)調(diào)用的參數(shù)表漏掉了右手括號或括號不匹配,則會出現(xiàn)此類錯誤。
Function definition out of place(函數(shù)定義位置錯誤)Function doesn't take a variable number of argument(函數(shù)不接受可變的參數(shù)個數(shù))Goto statement missing label(Goto語句缺少標號)If statement missing((If語句缺少“(”)If statement missing)(If語句缺少“)”)lllegal initalization(非法初始化)lllegal octal digit(非法八進制數(shù))分析與處理:此類錯誤通常是由于八進制常數(shù)中包含了非八進制數(shù)字所致。
lllegal pointer subtraction(非法指針相減)lllegal structure operation(非法結(jié)構(gòu)操作)lllegal use of floating point(浮點運算非法)lllegal use of pointer(指針使用非法)Improper use of a typedef symbol(typedef符號使用不當)Incompatible storage class(不相容的存儲類型)Incompatible type conversion(不相容的類型轉(zhuǎn)換)Incorrect commadn line argument:xxxxxx(不正確的命令行參數(shù):xxxxxxx)Incorrect commadn file argument:xxxxxx(不正確的配置文件參數(shù):xxxxxxx)Incorrect number format(不正確的數(shù)據(jù)格式)Incorrect use of default(deflult不正確使用)Initializer syntax error(初始化語法錯誤)Invaild indrection(無效的間接運算)Invalid macro argument separator(無效的宏參數(shù)分隔符)Invalid pointer addition(無效的指針相加)Invalid use of dot(點使用錯)Macro argument syntax error(宏參數(shù)語法錯誤)Macro expansion too long(宏擴展太長)Mismatch number of parameters in definition(定義中參數(shù)個數(shù)不匹配)Misplaced break(break位置錯誤)Misplaced continue(位置錯)Misplaced decimal point(十進制小數(shù)點位置錯)Misplaced else(else 位置錯)Misplaced else driective(clse指令位置錯)Misplaced endif directive(endif指令位置錯)Must be addressable(必須是可編址的)Must take address of memory location(必須是內(nèi)存一地址)No file name ending(無文件終止符)No file names given(未給出文件名)Non-protable pointer assignment(對不可移植的指針賦值)Non-protable pointer comparison(不可移植的指針比較)Non-protable return type conversion(不可移植的返回類型轉(zhuǎn)換)Not an allowed type(不允許的類型)Out of memory(內(nèi)存不夠)Pointer required on left side of(操作符左邊須是一指針)Redeclaration of 'xxxxxx'('xxxxxx'重定義)Size of structure or array not known(結(jié)構(gòu)或數(shù)組大小不定)Statement missing;(語句缺少“;”)
Structure or union syntax error(結(jié)構(gòu)或聯(lián)合語法錯誤)Structure size too large(結(jié)構(gòu)太大)Subscription missing ](下標缺少‘]’)
Switch statement missing((switch 語句缺少“(”)Switch statement missing)(switch 語句缺少“)”)Too few parameters in call(函數(shù)調(diào)用參數(shù)太少)Too few parameter in call to'xxxxxx'(調(diào)用'xxxxxx'時參數(shù)太少)Too many cases(Cases太多)Too many decimal points(十進制小數(shù)點太多)Too many default cases(defaut太多)Too many exponents(階碼太多)Too many initializers(初始化太多)Too many storage classes in declaration(說明中存儲類太多)Too many types in decleration(說明中類型太多)Too much auto memory in function(函數(shù)中自動存儲太多)Too much global define in file(文件中定義的全局數(shù)據(jù)太多)Two consecutive dots(兩個連續(xù)點)Type mismatch in parameter #(參數(shù)“#”類型不匹配)Type mismatch in parameter # in call to 'XXXXXXX'(調(diào)用'XXXXXXX'時參數(shù)#類型不匹配)Type missmatch in parameter 'XXXXXXX'(參數(shù)'XXXXXXX'類型不匹配)Type mismatch in parameter 'YYYYYYYY' in call to 'YYYYYYYY'(調(diào)用'YYYYYYY'時參數(shù)'XXXXXXXX'數(shù)型不匹配)Type mismatch in redeclaration of 'XXX'(重定義類型不匹配)Unable to creat output file 'XXXXXXXX.XXX'(不能創(chuàng)建輸出文件'XXXXXXXX.XXX')Unable to create turboc.lnk(不能創(chuàng)建turboc.lnk)Unable to execute command 'xxxxxxxx'(不能執(zhí)行'xxxxxxxx'命令)Unable to open include file 'xxxxxxx.xxx'(不能打開包含文件'xxxxxxxx.xxx')Unable to open inputfile 'xxxxxxx.xxx'(不能打開輸入文件'xxxxxxxx.xxx')Undefined label 'xxxxxxx'(標號'xxxxxxx'未定義)Undefined structure 'xxxxxxxxx'(結(jié)構(gòu)'xxxxxxxxxx'未定義)Undefined symbol 'xxxxxxx'(符號'xxxxxxxx'未定義)Unexpected end of file in comment started on line #(源文件在某個注釋中意外結(jié)束)Unexpected end of file in conditional stated on line #(源文件在#行開始的條件語句中意外結(jié)束)Unknown preprocessor directive 'xxx'(不認識的預處理指令:'xxx')Untermimated character constant(未終結(jié)的字符常量)Unterminated string(未終結(jié)的串)Unterminated string or character constant(未終結(jié)的串或字符常量)User break(用戶中斷)Value required(賦值請求)While statement missing((While語句漏掉 '(')While statement missing)(While語句漏掉 ')')Wrong number of arguments in of 'xxxxxxxx'(調(diào)用'xxxxxxxx'時參數(shù)個數(shù)錯誤)
第四篇:語言學習中的錯誤改正
語言學習中的錯誤改正來源:英語畢業(yè)論文 http:///
數(shù)學語言是數(shù)學思想的表現(xiàn)形式,是進行數(shù)學思維和數(shù)學交流的工具。
斯托利亞爾曾指出“:數(shù)學教學也就是數(shù)學語言的教學?!睂W生學習數(shù)學的過程,就是將代表數(shù)學知識、數(shù)學思想的數(shù)學語言內(nèi)化為自己頭腦中的數(shù)學認知結(jié)構(gòu)的過程。因此,學生對數(shù)學語言的理解、掌握和運用將直接影響他的數(shù)學學習。
由于中學生(尤其是差生)在數(shù)學語言的學習中存在不少錯誤和障礙,要提高中學的數(shù)學教學質(zhì)量,教師就應當對這些錯誤和障礙進行分析和研究,找出產(chǎn)生的原因,在教學中加以改進。數(shù)學語言一般可分為3部分:數(shù)學文字語言、數(shù)學符號語言和數(shù)學圖形語言。本文將對中學生在數(shù)學語言學習中常見的一些錯誤和障礙從以下3方面進行分析。
1、數(shù)學文字語言學習中的常見錯誤數(shù)學中的許多概念和定理是用文字語言來表述的,這里所指的文字語言與人們?nèi)粘I钪械淖匀徽Z言是有區(qū)別的,它是經(jīng)過提煉和加工,具有高度的概括性和嚴謹性的文字語言,故稱為數(shù)學文字語言。例如圓的定義是“:到定點的距離等于定長的點的集合?!庇秩缗卸▋蓚€三角形全等的公理“:有三邊對應相等的兩個三角形全等?!敝袑W生在數(shù)學文字語言的學習中,常忽視某些字、詞、句,造成對概念和定理的錯誤理解。學習習近平行四邊形的判定定理“:一組對邊平行且相等的四邊形是平行四邊形”時,有的學生常忽視“且”字,認為1個字無關(guān)緊要,可有可無,因此出現(xiàn)這樣的錯誤,將定理理解為“:一組對邊平行,一組對邊相等的四邊形是平行四邊
形”。學生為何會忽略“且”字,心理學的理論認為,當人們對某個事物(稱為刺激物)進行感知時,刺激物中各部分的條件有強有弱,其中強的部分所產(chǎn)生的效果幾乎等價于整個刺激物所引起的效果,而弱的部分被強的部分所掩蔽,似乎不起獨立作用,故而常常被人們忽視。
在上述定理中“,平行”、“相等”的條件很強,因此,學生的注意往往集中在這個強的條件上,而“且”字條件較弱,不易引起學生的注意。此時,教師應根據(jù)這一情況,指出,定理中的“且”字是強調(diào)平行的這一組對邊“同時”還要相等,如果去掉“且”字,就有可能是“這一組對邊平行,而另一組對邊相等”。根據(jù)這樣的條件作出的四邊形就不一定是平行四邊形,這樣就加深了學生對這樣的關(guān)鍵詞的理解。學生在理解數(shù)學概念或定理時,常常停留在表面形式上。學生學習了奇函數(shù),偶函數(shù)的定義“:如果對于函數(shù)定義域內(nèi)任意一個x,都有f(-x)= f(x),那么函數(shù)f(x)就叫奇函數(shù)”“;如果對于定義域內(nèi)任意一個x,都有f(-x)=f(x),那么函數(shù)就叫偶函數(shù)”。
要求學生根據(jù)定義判斷函數(shù)f(x)=3 x2,x∈[-1,1)的奇偶性時,往往許多學生只是形式地得出于f(-x)=3(-x)2=3 x=f(x),而錯誤地斷定該函數(shù)是偶函數(shù)。原因是他們僅注意到定義的表面形式f(-x)=f(x),而沒有準確理解定義的深刻內(nèi)涵。定義中的“對定義域內(nèi)任意一個x,都有f(-x)=-f(x)“或”f(-x)=f(x)“隱含著奇、偶函數(shù)的定義域應滿足的條件是在X軸上是關(guān)于原點為對稱的數(shù)集。而該題的定義域為[-1,1),形式上雖有f(-x)=f(x),但注意到x的任意性,當x=-1時,-x=1|[-1,1),故f(1)無意義,因此f(-1)=f(1)不成立,故此函數(shù)應當是非奇非偶函數(shù)。由于學生沒有認識到定義隱含的條件,因而在判斷函數(shù)的奇偶性時,常犯形式主義的錯誤。
因此教師要引導學生對定義進行深入的剖析,注意挖掘其隱含條件,做到對概念的準確理解。
2、數(shù)學符號語言學習中常見的錯誤數(shù)學語言的一個顯著特點是使用符號,如數(shù)字、字母、運算符號和關(guān)系符號等,稱為數(shù)學符號語言(以下簡稱為符號語言)。符號語言的使用,使得數(shù)學語言具有高度的概括性和精確性,同時被抽象的數(shù)學概念和法則形式化。
例如,乘法分配律可用形式a(b+c)=ab+ac 表示。分式的基本性質(zhì),可用形式AB=A×MB×M;AB=A÷MB÷M(其中M是不等于零的整式)來表示。由于使用數(shù)學符號來表示文字語言中用詞組或句子表示的概念和法則,因此,不少中學生對于抽象的符號語言的理解存在許多障礙和困難,使得他們不能正確地掌握、靈活地使用這些符號所代表的數(shù)學內(nèi)容。學生進入初中后,開始學習有理數(shù)的概念,教科書上規(guī)定“像5,115,1012,8 848等大于0的數(shù),叫做正數(shù)。
像-5,-115,-1012,-155等在正數(shù)前面加上‘-’(讀作負)號的數(shù),叫做負數(shù)?!彪S著字母的引入,學生對字母代替數(shù)的任意性認識不夠,仍停留在對具體、直觀的數(shù)字的認識階段,由于思維定勢的作用,錯誤地認為字母“a”前面沒有負號因此是正數(shù),而“-a”的前面有負號因此是負數(shù),故初一的學生常犯下列錯誤:a+b>a-b,3 a>a,|a|=a,|-a|=a,a2=a要避免以上錯誤的產(chǎn)生,教師從初一就要注意逐步培養(yǎng)學生思維的抽象性,使學生的運算能力從數(shù)的運算提高到對代數(shù)式的運算。學生在學習新知識時,如果新知識與舊知識在內(nèi)容或結(jié)構(gòu)上相似但實質(zhì)不相同時,學生頭腦中的原有知識容易先入為主,新知識常被理解為原有知識,被原有知識取代,從而出現(xiàn)負遷移,這樣的負遷移也影響了學生對一些公式或法則的理解。
學生常犯以下錯誤:sin(A+B)=sinA+sinB lg(A+B)=lg A+lg B。產(chǎn)生上述錯誤的原因在于學生把sin(A+B),lg(A+B)與先前學習的乘法分配律a(b+c)=ab+ac作形式上的類比,將sin,lg運算符號誤認為是數(shù)量符號,從而用對乘法分配律的認識來理解后面所學的知識。要防止以上負遷移的產(chǎn)生,就需要教
師在遇到類似情況時,強調(diào)新舊知識的差異,從正、反兩方面給出例證,使學生清楚地認識到新知識與舊知識不同的地方,從而正確理解各種數(shù)學符號的含義。
3、數(shù)學圖形語言學習中的常見錯誤和障礙數(shù)學研究中的許多數(shù)學對象,數(shù)學性質(zhì)都可以用圖形或圖象表示,稱其為數(shù)學圖形語言。這是1種視覺語言,可以為數(shù)學對象、數(shù)學質(zhì)提供直觀的模型。例如實數(shù)集可用數(shù)軸來表示,函數(shù)的一些性質(zhì)可以通過函數(shù)圖象看出來。中學生在圖形語言學習中,將文字或符號語言轉(zhuǎn)化為圖形語言時,常出現(xiàn)錯誤和障礙。
已知等腰三角形的底角等于15°,腰長為a,求腰上的高。圖1有的學生作△ABC,∠B=15°,AB=AC=a后,將題目要求的高作成AD,如圖1所示,而沒有作出腰上的高,當老師問及原因時,這些學生認為,只有這條邊(指BC)上能作出高,其它邊上的高作不出來,因此題目要求的當然是AD。為何學生作不出兩腰上的高呢?原因是由于學生平時在幾何學習中經(jīng)??吹降氖卿J角三角形,銳角三角形三條邊上的高都在三角圖形的內(nèi)部,高的垂足都在三條邊上,因此,學生被這些表面現(xiàn)象所迷惑,將這些非本質(zhì)特征誤作為三角形的高的特征。
當三角形是鈍角三角形時,只有鈍角所對的邊上的高在三角形的內(nèi)部,而從其余個銳角的頂點向所對的邊作垂線時,垂足都落在對邊的延長線上,垂線位于三角形的外部,因此學生認為兩腰上的高沒法作。如果在學習三角形的高的概念圖時,采用變式圖形,通過各種三角形將高的特征突出,就可以避免出現(xiàn)這樣的錯誤了。
中學生在將圖形語言轉(zhuǎn)化為文字語言或符號語言時,由于觀察不全面或概括不準確,也會出現(xiàn)錯誤。教師在“弦切角”的概念教學中,先出示弦切角的各種圖形,如圖2所示,讓學生觀察后概括這些角的特點,往往學生概括為“弦與切線所成的角”,或“割線與切線所成的角”,原因是圖形中,角的“兩條邊”這
個條件很強,將角的“頂點”這一較弱的條件掩蔽,因此學生容易注意到角的兩邊而忽視角的頂點。
為此,教師可以通過圖3中的∠A′B′C′與圖(2)中的角對比,找出兩者的差異在于圖2中∠ABC的頂點在切點,而圖3中∠A′B′C′的頂點不在切點,指出學生概括的漏洞,引導學生逐步抽象出弦切角的定義,同時也培養(yǎng)了學生全面觀察問題和抽象概括的能力。
綜上所述,教師分析研究中學生數(shù)學語言學習中的錯誤和障礙,幫助他們加以克服,將使學生加深對數(shù)學概念的理解,有助于對數(shù)學知識的掌握和應用,促進學生的數(shù)學學習,也必然有助于數(shù)學教學質(zhì)量的提高。
第五篇:C語言常見錯誤小結(jié)(定稿)
c語言的最大特點是:功能強、使用方便靈活。C編譯的程序?qū)φZ法檢查并不象其它高級語言那么嚴格,這就給編程人員留下“靈活的余地”,但還是由于這個靈活給程序的調(diào)試帶來了許多不便,尤其對初學C語言的人來說,經(jīng)常會出一些連自己都不知道錯在哪里的錯誤??粗绣e的程序,不知該如何改起,本人通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。
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(chǎn)'和‘',而把它賦給一個字符變量是不行的。
4.忽略了“=”與“= =”的區(qū)別。
在許多高級語言中,用“=”符號作為關(guān)系運算符“等于”。如在BASIC程序中可以寫
if(a=3)then ?
但C語言中,“=”是賦值運算符,“==”是關(guān)系運算符。如:
if(a==3)a=b;
前者是進行比較,a是否和3相等,后者表示假如a和3相等,把b值賦給a。由于習慣問題,初學者往往會犯這樣的錯誤。
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);}
對于復合語句來說,最后一個語句中最后的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。
對于一個復合語句,如:
{ z=x+y;t=z/100;
printf(“%f”,t);};
復合語句的花括號后不應再加分號,否則將會畫蛇添足。
又如:
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;I<5;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ù)時應輸入與這些字符相同的字符。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字符是不對的。4 3:4
又如:
scanf(“a=%d,b=%d”,&a,&b);輸入應如以下形式:
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(“85~100n”);case 'B':printf(“70~84n”);case 'C':printf(“60~69n”);case 'D':printf(“<60n”);default:printf(“errorn”);
由于漏寫了break語句,case只起標號的作用,而不起判定作用。因此,當grade值為A時,printf函數(shù)在執(zhí)行完第一個語句后接著執(zhí)行第二、三、四、五個printf函數(shù)語句。正確寫法應在每個分支后再加上“break;”。例如
case 'A':printf(“85~100n”);break;
13.忽視了while和do-while語句在細節(jié)上的區(qū)別。
(1)main(){int a=0,I;
scanf(“%d”,&I);while(I<=10){a=a+I;I++;}
printf(“%d”,a);}
(2)main(){int a=0,I;
scanf(“%d”,&I);do
{a=a+I;I++;
}while(I<=10);printf(“%d”,a);}
可以看到,當輸入I的值小于或等于10時,二者得到的結(jié)果相同。而當I>10時,二者結(jié)果就不同了。因為while循環(huán)是先判定后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判定。對于大于10的數(shù)while循環(huán)一次也不執(zhí)行循環(huán)體,而do-while語句則要執(zhí)行一次循環(huán)體。
14.定義數(shù)組時誤用變量。
int n;
scanf(“%d”,&n);int a[n];
數(shù)組名后用方括號括起來的是常量表達式,可以包括常量和符號常量。即C不答應對數(shù)組的大小作動態(tài)定義。
15.在定義數(shù)組時,將定義的“元素個數(shù)”誤認為是可使的最大下標值。
m ain()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};printf(“%d”,a[10]);}
C語言規(guī)定:定義時用a[10],表示a數(shù)組有10個元素。其下標值由0開始,所以數(shù)組元素a[10]是不存在的。
16.初始化數(shù)組時,未使用靜態(tài)存儲。
int a[3]={0,1,2};
這樣初始化數(shù)組是不對的。C語言規(guī)定只有靜態(tài)存儲(static)數(shù)組和外部存儲(exterm)數(shù)組才能初始化。應改為:
static int a[3]={0,1,2};
17.在不應加地址運算符&的位置加了地址運算符。
scanf(“%s”,&str);
C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址,且scanf函數(shù)中的輸入項是字符數(shù)組名,不必要再加地址符&。應改為:
scanf(“%s”,str);
18.同時定義了形參和函數(shù)中的局部變量。
int max(x,y)int x,y,z;{z=x>y?x:y;return(z);}
形參應該在函數(shù)體外定義,而局部變量應該在函數(shù)體內(nèi)定義。應改為:
int max(x,y)int x,y;{int z;
z=x>y?x:y;return(z);}
附錄:出錯信息解釋
Ambiguous operators need parentheses 不明確的運算需要用括號括起
Ambiguous symbol 'xxx' 不明確的符號
Argument list syntax error 參數(shù)表語法錯誤
Array bounds missing 丟失數(shù)組界限符
Array size toolarge 數(shù)組尺寸太大
Bad character in paramenters 參數(shù)中有不適當?shù)淖址?/p>
Bad file name format in include directive 包含命令中文件名格式不正確
Bad ifdef directive synatax 編譯預處理ifdef有語法錯
Bad undef directive syntax 編譯預處理undef有語法錯
Bit field too large 位字段太長
Call of non-function 調(diào)用未定義的函數(shù)
Call to function with no prototype 調(diào)用函數(shù)時沒有函數(shù)的說明
Cannot modify a const object 不允許修改常量對象
Case outside of switch 漏掉了case 語句
Case syntax error Case 語法錯誤
Code has no effect
代碼不可述不可能執(zhí)行到
Compound statement missing{ 分程序漏掉“{”
Conflicting type modifiers 不明確的類型說明符
Constant expression required 要求常量表達式
Constant out of range in comparison 在比較中常量超出范圍
Conversion may lose significant digits 轉(zhuǎn)換時會丟失意義的數(shù)字
Conversion of near pointer not allowed 不允許轉(zhuǎn)換近指針
Could not find file 'xxx' 找不到XXX文件
Declaration missing;說明缺少“;”
Declaration syntax error 說明中出現(xiàn)語法錯誤
Default outside of switch
Default 出現(xiàn)在switch語句之外
Define directive needs an identifier 定義編譯預處理需要標識符
Division by zero 用零作除數(shù)
Do statement must have while Do-while語句中缺少while部分
Enum syntax error 枚舉類型語法錯誤
Enumeration constant syntax error 枚舉常數(shù)語法錯誤
Error directive :xxx
錯誤的編譯預處理命令
Error writing output file 寫輸出文件錯誤
Expression syntax error 表達式語法錯誤
Extra parameter in call 調(diào)用時出現(xiàn)多余錯誤
File name too long 文件名太長
Function call missing)函數(shù)調(diào)用缺少右括號
Fuction definition out of place 函數(shù)定義位置錯誤
Fuction should return a value 函數(shù)必需返回一個值
Goto statement missing label Goto語句沒有標號
Hexadecimal or octal constant too large 16進制或8進制常數(shù)太大
Illegal character 'x' 非法字符x
Illegal initialization 非法的初始化
Illegal octal digit 非法的8進制數(shù)字
Illegal pointer subtraction 非法的指針相減
Illegal structure operation 非法的結(jié)構(gòu)體操作
Illegal use of floating point 非法的浮點運算
Illegal use of pointer 指針使用非法
Improper use of a typedefsymbol 類型定義符號使用不恰當
In-line assembly not allowed 不允許使用行間匯編
Incompatible storage class 存儲類別不相容
Incompatible type conversion 不相容的類型轉(zhuǎn)換
Incorrect number format 錯誤的數(shù)據(jù)格式
Incorrect use of default Default使用不當
Invalid indirection 無效的間接運算
Invalid pointer addition 指針相加無效
Irreducible expression tree 無法執(zhí)行的表達式運算
Lvalue required
需要邏輯值0或非0值
Macro argument syntax error 宏參數(shù)語法錯誤
Macro expansion too long 宏的擴展以后太長
Mismatched number of parameters in definition 定義中參數(shù)個數(shù)不匹配
Misplaced break
此處不應出現(xiàn)break語句
Misplaced continue
此處不應出現(xiàn)continue語句
Misplaced decimal point 此處不應出現(xiàn)小數(shù)點
Misplaced elif directive 不應編譯預處理elif Misplaced else 此處不應出現(xiàn)else Misplaced else directive
此處不應出現(xiàn)編譯預處理else Misplaced endif directive
此處不應出現(xiàn)編譯預處理endif Must be addressable 必須是可以編址的
Must take address of memory location 必須存儲定位的地址
No declaration for function 'xxx' 沒有函數(shù)xxx的說明
No stack 缺少堆棧
No type information 沒有類型信息
Non-portable pointer assignment 不可移動的指針(地址常數(shù))賦值
Non-portable pointer comparison 不可移動的指針(地址常數(shù))比較
Non-portable pointer conversion 不可移動的指針(地址常數(shù))轉(zhuǎn)換
Not a valid expression format type 不合法的表達式格式
Not an allowed type 不允許使用的類型
Numeric constant too large 數(shù)值常太大
Out of memory 內(nèi)存不夠用
Parameter 'xxx' is never used 能數(shù)xxx沒有用到
Pointer required on left side of-> 符號->的左邊必須是指針
Possible use of 'xxx' before definition 在定義之前就使用了xxx(警告)
Possibly incorrect assignment 賦值可能不正確
Redeclaration of 'xxx' 重復定義了xxx
Redefinition of 'xxx' is not identical xxx的兩次定義不一致
Register allocation failure 寄存器定址失敗
Repeat count needs an lvalue 重復計數(shù)需要邏輯值
Size of structure or array not known 結(jié)構(gòu)體或數(shù)給大小不確定
Statement missing;語句后缺少“;”
Structure or union syntax error 結(jié)構(gòu)體或聯(lián)合體語法錯誤
Structure size too large 結(jié)構(gòu)體尺寸太大
Sub scripting missing ] 下標缺少右方括號
Superfluous & with function or array 函數(shù)或數(shù)組中有多余的“&” Suspicious pointer conversion 可疑的指針轉(zhuǎn)換
Symbol limit exceeded 符號超限
Too few parameters in call
函數(shù)調(diào)用時的實參少于函數(shù)的參數(shù)不
Too many default cases
Default太多(switch語句中一個)Too many error or warning messages 錯誤或警告信息太多
Too many type in declaration 說明中類型太多
Too much auto memory in function 函數(shù)用到的局部存儲太多
Too much global data defined in file 文件中全局數(shù)據(jù)太多
Two consecutive dots 兩個連續(xù)的句點
Type mismatch in parameter xxx 參數(shù)xxx類型不匹配
Type mismatch in redeclaration of 'xxx' xxx重定義的類型不匹配
Unable to create output file 'xxx' 無法建立輸出文件xxx
Unable to open include file 'xxx' 無法打開被包含的文件xxx Unable to open input file 'xxx' 無法打開輸入文件xxx Undefined label 'xxx' 沒有定義的標號xxx Undefined structure 'xxx' 沒有定義的結(jié)構(gòu)xxx Undefined symbol 'xxx' 沒有定義的符號xxx
Unexpected end of file in comment started on line xxx 從xxx行開始的注解尚未結(jié)束文件不能結(jié)束
Unexpected end of file in conditional started on line xxx 從xxx 開始的條件語句尚未結(jié)束文件不能結(jié)束
Unknown assemble instruction 未知的匯編結(jié)構(gòu)
Unknown option 未知的操作
Unknown preprocessor directive: 'xxx' 不認識的預處理命令xxx Unreachable code 無路可達的代碼
Unterminated string or character constant 字符串缺少引號
User break
用戶強行中斷了程序
Void functions may not return a value Void類型的函數(shù)不應有返回值
Wrong number of arguments 調(diào)用函數(shù)的參數(shù)數(shù)目錯
'xxx' not an argument xxx不是參數(shù)
'xxx' not part of structure xxx不是結(jié)構(gòu)體的一部分
xxx statement missing(xxx語句缺少左括號
xxx statement missing)xxx語句缺少右括號
xxx statement missing;xxx缺少分號
xxx' declared but never used 說明了xxx但沒有使用
xxx' is assigned a value which is never used 給xxx賦了值但未用過
Zero length structure 結(jié)構(gòu)體的長度為零