c語言易錯知識點總結
C語言易錯知識點整理
1.變量應先定義后使用,例如:
main( )
{ int i;
for(i=1;i<=10;i++)
s=s+i;
printf("%d",s);}
程序中用到了變量s但是沒有對其定義數據類型,會提示錯誤。
2. 自加自減(++ --)運算符的作用及表達式的值。
例如:
① int i=3,j;
j=i++;
printf(“%d,%d”,i,j);
此時i由1變成2,但是i++表達式的值為1,所以結果輸出2,1。
② int i=3,k;
k=++i;
printf(“%d%d”,i,k);
此時i由1變成2,但是i++表達式的值為2,所以結果輸出2,2。
3.兩整數相除結果是整數,例如5/3=1,不是1.333333。
4.賦值運算的過程:把賦值運算符左邊的值轉換成賦值運算符右邊變量所要求的類型再賦值。
例如:double x;int y;
x=1.5;
y=x;
因為y為整型變量,所以y的值為1。
5.注意賦值運算符和比較運算符的區別,例如:
以下哪個表達式可以表示數x能被4整除( )
A.x/4=0 B.x%4=0 C.x/4= =0 D. x%4= =0
答案為C。
6.變量的取值范圍的表示。例如:
若有定義int x;用C語言描述3
A.33 D.x<5&&x>3
答案為D。
7.輸入函數中同時輸入多個數值型數據時,
①若格式說明字符串中沒有分隔符,那么空格、制表符和換行符可作為數據之間的分割符;
int a,b;
scanf(“%d%d”,&a,&b);
則輸入數據時應為3 4或3<回車>4或3Tab4,兩數據之間可以用空格,回車和Tab鍵作為分隔符。
②當格式說明字符串中有普通字符時,輸入時普通字符要原樣輸入;
例如:int a,b;
scanf(“%d,%d”,&a,&b);
則輸入數據時應為3,4,其他的輸入形式都不對;
例如:int a,b;
scanf(“a=%d,b=%d”,&a,&b);
則輸入數據時應為a=3,b=4,其他的輸入形式都不對。
8.if語句中當表達式為真時,如要執行多條語句時一定要把多條語句用{}括起來,例如:輸入兩整數,按數值的由小到大次序輸出兩個數。
main( )
{ inta,b,t;
scanf(“%d%d”,&a,&b);
if(a>b) {t=a;a=b;b=t;}
printf("%d%d ",a,b);}
9.switch語句的執行過程中,當switch后的表達式與某個case后面的常量表達式的值相等時,就執行case后的語句直到最后一個語句為止。
例如:以下程序運行后輸出結果是( )
main( )
{ int i=1;
switch(5%3)
{ case 1:i++;
case 2: i++;
default: i++;}
printf("%d",i);}
A.2 B.3 C.4 D.5
表達式5%3=2,所以應該執行case 2: i++; default: i++;結果i由1變成3。
10.同學在理解執行switch過程時,比較容易犯的錯誤是以為表達式5%3的值為2,只執行case 2: i++;就結束,這是不對的,若要只執行case 2: i++;就結束,應該在case2: i++;后加上break語句。
11.break語句和continue語句在循環結構中的作用與區別。
①break語句的作用是終止循環的執行。
例如:int i,s=0;
for(i=1;i<=30;i++)
{ if(i%7= =0) break;
s=s+i;
}
printf("%d",s);
程序是由1加到6,當i為7時滿足i%7= =0,執行break;for語句就停止執行了,結果是s的值為1+2+3+…..6=21。
②continue語句的作用是跳過本次循環體中尚未執行的語句,循環并未結束。
若把break改為continue:
int i,s=0;
for(i=1;i<=30;i++)
{ if(i%7= =0) continue;
s=s+i;
}
printf("%d",s);
程序由1加到6,當i為7時滿足i%7==0,執行continue;那么i=7時本次循環體執行結束(即不執行s=s+i;7沒有加到s中),接著執行i++,i=8,滿足i<=30,再執行循環體,把8加到s中,所以程序的作用是把1~30之間,除去能被7整除的數相加。
12.帶參數的宏定義的替換過程:
例如 #define S(r) r*r
main( )
{ int a=1,b=2,c;
c=S(a+b);
printf("%d\n",c);}
宏替換的過程中a+b相當為r, S(a+b)=a+b*a+b=1+2*1+2=5;很多同學在替換的過程中容易犯的錯誤是:把a+b表達式的值先算出來為3,a+b相當為r,然后帶入S(a+b)=3*3=9。
13.函數調用過程中參數的類型對實參的影響。
①參數是數值時,實參把值傳遞給形參,實參和形參占用不同的存儲空間,所以形參的改變不會影響到實參。例如:
void swap(int m,int n)
{printf(“⑵m=%d,n=%d\n”,m,n);
int t;
t=m;m=n;n=t;
printf(“⑶m=%d,n=%d\n”,m,n);
}
main( )
{ int a=3,b=5;
printf(“⑴a=%d,b=%d\n”,a,b);
swap(a,b);
printf(⑷a=%d,b=%d\n”,a,b);
}
程序的結果為
⑴a=3,b=5
⑵m=3,n=5
⑶m=5,n=3
⑷a=3,b=5
②參數是數組名或地址時時,實參把地址傳遞給形參,實參和形參占用共同的存儲空間,形參改變實參也會改變。例如:
14.下面程序運行的結果是( )
A. 53 B.55 C.33 D.35
void swap(int c[ ])
{ int t;
t=c[0];c[0]=c[1];c[1]=t;
}
main( )
{ int a[2]={3,5};
swap(a);
printf(“%d %d \n”,a[0],a[1]);
}
結果是a[0]=5,a[1]=3,答案是B。
看了“c語言易錯知識點總結”的還看了:
1.初三物理期末易錯知識點總結
2.高中生物常見易錯知識點匯編
3.高考化學易錯知識點歸納
4.二十個語文易錯知識點
5.高考英語易錯知識點匯總