(1)書寫識別符號時,忽略大小寫
main()
int c=5;
printf("%d",c);
編譯程式會出錯。c語言區分大小寫。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
(2)忽略變數型別,進行不合法運算
main()
float a,b;
printf("%d",a%b);
%是求餘運算,得到a/b的整餘數。整型變數可進行求餘運算,而實型變數則不允許進行求餘運算。
(3)將字元常量與字串常量混淆
char a;
a="b";
字元常量是一對單引號括起來的常量,字串常量是一對雙引號括起來的常量。c語言規定以「\0」作為字串結束標誌,它是系統自動加上的,所以字元常量「b」其實包含兩個字元'b' '\0',而把它賦給乙個字元變數是不行的。
(4)忽略了「=」和「==」的區別
if(a==b)a=b;
c語言中,「=」是賦值運算子,「==」是關係運算子。在此**中,前者是進行比較,後者是進行賦值。
(5)忘記加分號
c=1b=2
幾乎在所有程式語言中,都是用「;」代表一句或多句語句的結束。
(6)多加分號
z=x/y;
z=z%10;
printf("%d",z);
if(a%2==0);
a+=a;
for(i=0;i<5;++i);
a-=a;
printf("%d",a);
(7)忘加位址運算子「&」
int a;
scanf("%d",a);
(8)輸入資料的方式與要求不符
scanf("%a%b",&a,&b);
輸入時不能用「,」將a,b隔開如:3,4;應該用空格
scanf("%a,%b",&a,&b);
此時應輸入a,b 才是正確的
scanf("a=%d,b=%d",&a,&b);
此時應輸入a=3,b=4
(9)輸入字元的格式與要求不一致
在用「%c」格式輸入字元時,空格字元和轉義字元都作為有效字元輸入。
scanf("%c%c%c",&c1,&c2,&c3);
如輸入:a b c 字元「a」賦值給c1,字元「 」賦值給c2,「b」賦值給c3。正確形式應輸入:abc
(10)輸入、輸出的資料型別與所用格式說明符不一致
int a=1;
float b=1.2;
printf("%f%d",a,b);
這種錯誤要引起重視,編譯器不會出現錯誤,但執行結果錯誤。
(11)輸入資料時,規定精度
scanf("%6.2lf",&a);
輸入資料時不能規定精度。
(12)switch語句中漏寫break語句
switch(grade)
case 'a':printf("90-100\n");
case 'b':printf("75-89\n");
case 'c':printf("60-74\n");
case 'd':printf("<60\n");
default:printf("put in error\n");
由於漏寫了break語句,case只起標識的作用,而不起判斷的作用。當grade的值為a時,程式會從上到下執行完,五個printf都輸出。正確的寫法應為:
switch(grade)
case 'a':printf("90-100\n");break;
case 'b':printf("75-89\n");break;
case 'c':printf("60-74\n");break;
case 'd':printf("<60\n");break;
default:printf("put in error\n");break;
(13)忽視while和do-while語句區別
while語句
main()
int a=0,i;
scanf("%d",&i);
while(i<=10)
a+=i;
++i;
printf("%d",a);
do-while語句
main()
int a=0,i;
scanf("%d",&i);
doa+=i;
++i;
}while(i<=10);
printf("%d",a);
當輸入的i值小於等於10時,兩者輸出結果無區別。當輸入的i大於10時,while語句不執行迴圈體,do-while語句執行一次迴圈題。因為while語句先判斷後執行,do-while語句先執行後判斷。
(14)忽略自增(自減)運算子的細節
第乙個區別, i++ 返回原來的值,++i 返回加1後的值
main()
int a=0,b=0,i;
scanf("%d",&i);
a=++i;
--i;//保證i值沒變化
b=i++;
print("a=%d,b=%d",a,b);
輸出結果:a=i+1 b=i 。因為a=++i;是先把i加1再賦值給a,可以把此句分解為:i=i+1;a=i;;b=i++; 是先把i賦值給b再加1,可分解為:b=i;i=i+1; 。
第二個區別,i++ 不能作為左值,而++i 可以
左值是對應記憶體中有確定儲存位址的物件的表示式的值,而右值是所有不是左值的表示式的值。
int i = 1;
int *p1 = &(++i); //正確
int *p2 = &(i++); //錯誤
++i = 6; //正確
i++ = 8; //錯誤
(15)忽略sizeof()和strlen()的區別
char str[20]="incredibly";
int a=strlen(str); /* a=10;strlen 計算字串的長度,以\0'為字串結束標記。*/
int b=sizeof(str); /* b=20;sizeof 計算的則是分配的陣列str[20] 所佔的記憶體空間的大小,不受裡面儲存的內容影響*/
(16)在定義陣列時,將定義的「元素個數」誤認為是可使用的最大下標
main()
int a[5]=;
printf("%d",a[5]);
c語言中,定義時用a[5],表示a陣列中有5個元素。其下標是從0開始的,陣列中最後乙個元素是a[4],不存在a[5]。
(17)定義陣列時誤用變數
int i;
scanf("%d",#i);
int a[i];//錯
陣列名後用方括號括起來的是常量表示式,可以包括常量和符號常量。即c不允許對陣列大小作動態定義。
(18)位址運算子&使用錯誤
char str[8];
scanf("%s",&str);//錯
char str[8];
scanf("%s",str);
(19)同時定義了形參和函式中的區域性變數
int x,y,z;
int max(x,y)
z=x>y?x:y;
return z;
形參應在函式體外定義,而區域性變數應在函式體內定義。正確的應為:
電文加密 C語言
已知電文加密的規律為 將字母變成其後面的第四個字母,其它字元保持不變。例如,a e,a e,w a。現在要求輸入的電文轉換成加密電文輸出。輸入輸入包含多組測試資料,每組測試資料佔一行 字元只包含英文本母a z a z及數字0 9 輸出輸出每組測試資料的加密電文 樣例輸入 student123 樣例輸...
電文加密的 C語言練習
已知電文加密的規律為 將字母變成其後面的第四個字母,其它字元保持不變。例如,a e,a e,w a。現在要求輸入的電文轉換成加密電文輸出。輸入輸入包含多組測試資料,每組測試資料佔一行 字元只包含英文本母a z a z及數字0 9 輸出輸出每組測試資料的加密電文 樣例輸入 student123 樣例輸...
C語言 電文破譯
description 有n行電文,每行電文都已按下面規律譯成密碼 即第1個字母變成第26個字母,第2個字母變成第25個字母,第26個字母變成第1個字母。其它非字母字元不變。現在我們已截獲n行採取這種方式加密的電文,為了幫助情報員獲取正確情報,需要你編寫一段程式將加密的電文譯回原文。input 輸入...