c語言電文加密a變成z c語言程式設計常見錯誤集錦

2021-10-14 08:56:09 字數 3776 閱讀 5016

(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 輸入...