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