當前位置:編程學習大全網 - 編程語言 - 人民郵電出版社出版的c語言程序設計中的錯誤有哪些

人民郵電出版社出版的c語言程序設計中的錯誤有哪些

1. 書寫標識符時,忽略了大小寫字母的區別。

int main( void )

{

int a = 5;

printf( "%d", A );

return 0;

}

編譯器認為 a 和 A 是兩個不同的變量名,而顯示出錯信息。C 語言規定大寫字母和小寫字母是不同的字符;而有些編程語言是不分大小寫的。習慣上,符號常量名用大寫,變量名用小寫表示,以增加可讀性。

2. 忽略了變量的類型,進行了不合法的運算。

int main( void )

{

float a, b;

printf( "%d", a % b );

return 0;

}

% 是求余運算符,a % b 的結果是 a 除以 b 的余數。只有 % 左右兩邊的操作數都是整型時,才可以進行求余運算。故而上面的程序是錯誤的,因為 a 和 b 是浮點型變量。

3. 將字符常量與字符串常量混淆。

char c;

c = "a";

這裏就混淆了字符常量與字符串常量,字符常量是由壹對單引號括起來的單個字符,字符串常量是壹對雙引號括起來的字符序列。C 語言規定以 \0

作字符串常量的結束標誌,它是由系統自動加上的,所以 "a" 實際上包含兩個字符:'a' 和 '\0'。所以把 "a" 賦給字符變量是不行的。

4. 忽略了“=”與“==”的區別。

許多高級語言都使用“=”符號作為關系運算符的“等於”。如 BASIC 程序中可以寫:

if ( a = 3 ) then …

但 C 語言中,“=”是賦值運算符,“==”才是關系運算符。如:

if (a == 3)

a = b;

a == 3 是比較 a 是否等於 3;而 a = b; 表示把 b 的值賦給 a。初學者往往會把 a == 3 錯寫成 a = 3,這樣寫是符合語法的,但是不符合我們的期望。如果錯寫成了 a = 3,有些編譯器會給出警告。

5. 忘記加分號。

分號是 C 語句中不可缺少的壹部分,語句末尾必須有分號。

a = 1

b = 2;

編譯時,編譯器發現“a = 1”後面沒有分號,就會報錯。改錯時,如果在編譯器所說的有錯的壹行中未發現錯誤,就需要看壹下上壹行是否漏掉了分號。

6. 多加分號。

{

z = x + y;

t = z / 100;

printf( "%f", t );

};

上面代碼中,大括號 } 後面的分號(;)是毫無必要的!因為單獨壹個 ; 也是合法的 C 語言語句,所以 } 後面寫了 ; 也是合法的,但是毫無必要!又如:

if ( a % 3 == 0 );

i++;

程序員的本意是如果 3 整除 a,則 i 加 1。但由於 if ( a % 3 == 0 ) 後加了分號,則 if 語句到此結束。不論 3 是否整除 a,程序都會執行 i++; 語句。再如:

for ( i = 0; i < 5; i++ ) ;

{

scanf( "%d", &x );

printf( "%d", x );

}

程序員的本意是先後輸入 5 個數,每輸入壹個數後再將它輸出。但由於for () 後加了壹個分號,循環體變為空語句 ; 。空語句 ; 執行 5 次後,下面的程序塊才開始執行,導致的結果是只能輸入壹個數並輸出它。

7. 使用 scanf 函數時忘記加取址運算符“&”。

int a, b;

scanf( "%d %d", a, b );

這樣寫是錯誤的!應該改成 scanf( "%d %d", &a, &b );

8. 輸入數據的方式與要求不符。

scanf( "%d %d", &a, &b );

輸入時,不能用逗號作兩個數據間的分隔符。例如:3, 4 。而要使用空格、回車或者 tab 鍵作為分隔符。例如:3 4 。如果我們想用逗號(,)來做分隔符,可以這樣寫:

scanf( "%d,%d", &a, &b );

此時不用逗號而用空格或其它字符是不對的。例如:3:4 。又如:

scanf("a=%d,b=%d",&a,&b);

輸入應如以下形式:

a=3,b=4

9. 輸出的數據類型與所用格式說明符不壹致。

例如,a 定義為整型,b 定義為浮點型

int a = 3;

float b = 4.5;

printf( "%f%d\n", a, b );

編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要註意。應該改成:

printf( "%d%f\n", a, b );

10. 輸入數據時,企圖規定精度。

scanf( "%7.2f", &a );

這樣做是不合法的,輸入數據時不能規定精度。

11. switch 語句中漏寫 break 語句。

例如:根據考試成績的等級打印出百分制數段。

switch ( grade ) {

case 'A':

printf( "85~100\n" );

case 'B':

printf( "70~84\n" );

case 'C':

printf( "60~69\n" );

case 'D':

printf( "<60\n" );

default:

printf( "error\n" );

由於漏寫了 break 語句,當 grade 值為 A 時,printf 函數在執行完第壹個語句後會接著執行第二、三、四、五個 printf 函數語句。正確寫法應在每個分支後再加上“break;”。例如:

case 'A':

printf( "85~100\n" );

break;

12. 忽視了 while 和 do-while 語句在細節上的區別。

(1) int main( void )

{

int a = 0, i;

scanf( "%d", &i );

while ( i <= 10 ) {

a += i;

++i;

}

printf( "%d", a );

return 0;

}

(2) int main( void )

{

int a = 0, i;

scanf( "%d", &i );

do {

a += i;

++i;

} while ( i <= 10 );

printf( "%d", a );

return 0;

}

可以看到,當輸入 i 的值小於或等於 10 時,二者得到的結果相同。而當 i>10 時,二者結果就不同了。因為 while

循環是先判斷後執行,而 do-while 循環是先執行後判斷。對於大於 10 的數 while 循環的循環體壹次也不執行,而 do-while

語句則要執行壹次。

13. 定義數組時誤用變量。

int n = 6;

int a[n];

C99 以前,數組名後用方括號括起來必須是常量,包括常量表達式。但是在最新的 C99 標準中,上面的代碼是正確無誤的。如果您的編譯器不支持 C99 ,那麽上面的代碼不能通過編譯。

14. 在定義數組時,將定義的“元素個數”誤認為是可使的最大下標值。

int main( void )

{

int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

printf( "%d", a[10] );

return 0;

}

C 語言規定:定義時如果用 a[10],則表示數組 a 有 10 個元素,其下標值範圍為0到9。a[10]不屬於上面定義的數組中。對 a[10] 進行賦值可能導致程序崩潰!

15. 在不應加地址運算符 & 的位置加了地址運算符。

char s[100];

scanf( "%99s", &s );

C 語言中,數組名代表該數組的起始地址。因此上面的代碼中,s 本身就已經是壹個地址了,我們不需要再對它進行取址運算。正確的寫法應該是:scanf( "%99s", s );

  • 上一篇:java實現圖片上傳至服務器並顯示,如何做?希望要具體的代碼實現
  • 下一篇:舉壹反三奧數王壹年級教案怎麽寫
  • copyright 2024編程學習大全網