- C語(yǔ)言程序設(shè)計(jì)習(xí)題與實(shí)驗(yàn)指導(dǎo)
- 孟東霞主編
- 1949字
- 2025-04-02 16:22:10
2.2 典型例題分析
2.2.1 例題解析
【例2.1】有變量說(shuō)明語(yǔ)句int a=9;,則執(zhí)行完語(yǔ)句a+=a-=a*a;后,a的值是( )。
A. 9
B. 114
C. 0
D. ?114
解:此題應(yīng)用了復(fù)合賦值語(yǔ)句的運(yùn)算規(guī)則。賦值語(yǔ)句的結(jié)合性為“自右至左”,復(fù)合賦值語(yǔ)句可以分解進(jìn)行。將語(yǔ)句a+=a?=a*a;分解成如下兩條語(yǔ)句:a?=a*a; a+=a;,由第一條語(yǔ)句可以算出a的值為?72,由第二條語(yǔ)句算出a的值為?114。答案為D。
【例2.2】在下列選項(xiàng)中,不合法的賦值語(yǔ)句是(?。?。
A. n1=n2=n3=0;
B. k=i==j;
C. k=i&&j
D. a=b+c=1
解:此題應(yīng)用了賦值語(yǔ)句的書(shū)寫(xiě)規(guī)則。選項(xiàng)A相當(dāng)于n3=0; n2=n3; n1=n2;,所以合法;選項(xiàng)B相當(dāng)于k=(i==j);,即賦值號(hào)右側(cè)是關(guān)系表達(dá)式,當(dāng)i和j相等時(shí),k賦值為1,否則k賦值為0,合法;選項(xiàng)C中賦值號(hào)右側(cè)是邏輯表達(dá)式,當(dāng)i和j均非零時(shí),k賦值為1,否則k賦值為0,也合法;選項(xiàng)D相當(dāng)于a=((b+c)=1);,可見(jiàn)右邊的賦值號(hào)的左側(cè)不是變量名,而是表達(dá)式,所以不合法。答案為D。
【例2.3】設(shè)f為浮點(diǎn)型變量,下面表達(dá)式能實(shí)現(xiàn)對(duì)變量f的值小數(shù)點(diǎn)后第三位進(jìn)行四舍五入的表達(dá)式是(?。?。
A. f=(f*100+0.5)/100.0
B. f=(f*100+0.5)/100
C. f=(int) (f*100+0.5)/100.0
D. f=(f/100+0.5)*100
解:此題涉及類(lèi)型轉(zhuǎn)換,當(dāng)實(shí)數(shù)到整型數(shù)據(jù)進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換時(shí),將實(shí)數(shù)的小數(shù)部分全部舍去。若要對(duì)小數(shù)部分進(jìn)行四舍五入處理,則應(yīng)加上0.5后再取整。題目要求在小數(shù)點(diǎn)后第三位進(jìn)行四舍五入處理,即小數(shù)點(diǎn)后保留兩位,對(duì)于浮點(diǎn)型變量f,先放大100倍,然后通過(guò)加0.5后取整,達(dá)到在小數(shù)點(diǎn)后第三位進(jìn)行四舍五入的處理,此時(shí)得到的數(shù)是放大100倍后的整型數(shù)據(jù),再縮小100倍,即為所求。答案為C。
【例2.4】以下選項(xiàng)中不合法的字符常量是( )。
A. '2'
B. '\101'
C. 'ab'
D. '\n'
解:此題應(yīng)用了C語(yǔ)言的字符常量規(guī)則。C語(yǔ)言的字符常量是用單引號(hào)括起來(lái)的單個(gè)字符,因此選項(xiàng)A是合法的字符常量。同時(shí)C語(yǔ)言還允許一種特殊形式的字符常量,就是以“\”開(kāi)頭的字符序列,即轉(zhuǎn)義字符,選項(xiàng)B和D是合法的轉(zhuǎn)義字符,它們分別表示字符A和換行。選項(xiàng)C是用單引號(hào)括起來(lái)的兩個(gè)字符,因此是不合法的字符常量。答案為C。
【例2.5】以下程序的輸出結(jié)果是( )。
main( ) { int i=1, j=2, k=3; if (i++==1&&(++j==3||k++==3)) printf("%d%d%d\n ", i, j, k); }
A. 1 2 3
B. 2 3 4
C. 2 2 3
D. 2 3 3
解:此題考查邏輯表達(dá)式中“短路”時(shí)的計(jì)算。在邏輯表達(dá)式中,當(dāng)“&&”運(yùn)算的第一個(gè)表達(dá)式的值為“假”時(shí),第二個(gè)表達(dá)式不再運(yùn)算;當(dāng)“||”運(yùn)算的第一個(gè)表達(dá)式的值為“真”時(shí),第二個(gè)表達(dá)式將不再運(yùn)算。本題表達(dá)式i++==1&&(++j=3||k++==3)中,先運(yùn)算第一個(gè)表達(dá)式i++==1,其值為“真”,i的值變?yōu)?。接著計(jì)算第二個(gè)表達(dá)式(++j==3||k++==3)。先運(yùn)算++j==3,其值為“真”,j值變?yōu)?,這時(shí)不再計(jì)算k++==3表達(dá)式,因此k值保持不變。所以i,j,k的值分別為2,3,3。又因?yàn)檎麄€(gè)表達(dá)式i++==1&&(++j==3||k++==3)的值為真,因此執(zhí)行輸出語(yǔ)句,輸出結(jié)果為2 3 3。答案為D。
2.2.2 常見(jiàn)錯(cuò)誤
1. 編程語(yǔ)句中,直接使用未定義的變量
在C語(yǔ)言中,變量必須先定義后使用。例如:
void main() { int a, b; a=5; c=a+b; printf("%d", c); }
編譯程序顯示出錯(cuò)信息:變量c沒(méi)有定義,同時(shí)變量b沒(méi)有賦初值,運(yùn)行結(jié)果將與原意不符。應(yīng)改為:
void main() { int a, b, c; a=5; b =5; c=a+b; printf("%d", c); }
2. 書(shū)寫(xiě)標(biāo)識(shí)符時(shí),忽略了大小寫(xiě)字母的區(qū)別
在C語(yǔ)言中,變量是區(qū)分字母大小寫(xiě)的。例如:
void main() { int a=5; printf("%d", A ); }
編譯程序認(rèn)為a和A是兩個(gè)不同的變量名,故而顯示出錯(cuò)信息。習(xí)慣上,符號(hào)常量名用大寫(xiě)字母表示,變量名用小寫(xiě)字母表示,以增加程序的可讀性。
3. 忽略了變量的類(lèi)型,進(jìn)行不合法運(yùn)算
void main() { float a, b; printf("%d", a%b ); }
“%”是求余數(shù)運(yùn)算,運(yùn)算后得到a/b的整余數(shù)。整型變量a和b可以進(jìn)行求余數(shù)運(yùn)算,而實(shí)型變量則不允許進(jìn)行求余數(shù)運(yùn)算。
4. 混淆了字符變量與字符串的概念
字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,字符串常量是由一對(duì)雙引號(hào)括起來(lái)的字符序列。C語(yǔ)言規(guī)定,可用“\0”作為字符串的結(jié)束標(biāo)志,該標(biāo)志由系統(tǒng)自動(dòng)添加。例如:
char c; c = "a";
這里的賦值語(yǔ)句混淆了字符變量與字符串的概念,字符串"a"實(shí)際上包含兩個(gè)字符:'a' 和 '\0',把字符串賦給一個(gè)字符變量是錯(cuò)誤的。
5. 輸入變量時(shí)忘記加地址運(yùn)算符“&”
scanf()函數(shù)中,輸入?yún)?shù)的變量名前必須加地址運(yùn)算符“&”,用于存放接受輸入的數(shù)據(jù)。
int a, b; scanf( "%d %d", a, b);
這里的scanf語(yǔ)句是不合法的。scanf()函數(shù)的作用是,按照a、b在內(nèi)存的地址,將a、b的值存進(jìn)去。"&a"指的是a在內(nèi)存中的地址。應(yīng)改為:
scanf("%d %d", &a, &b);
6. 輸入數(shù)據(jù)的方式與要求不符
C語(yǔ)言中規(guī)定,如果在“格式控制”字符串中,除格式說(shuō)明外,還有其他字符,則應(yīng)在輸入數(shù)據(jù)時(shí),輸入與這些字符相同的字符。例如:
(1)scanf("%d %d", &a, &b);
輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車(chē)鍵或跳格鍵間隔。
(2)scanf("%d, %d", &a, &b);
若輸入“3, 4”,此時(shí)不用逗號(hào)而用空格或其他字符是錯(cuò)誤的。
(3)scanf("a=%d, b=%d", &a, &b);
輸入應(yīng)采用如下形式:a=3,b=4。
7. 輸入/輸出的數(shù)據(jù)類(lèi)型與所用格式說(shuō)明符不一致
對(duì)于格式化輸入/輸出函數(shù)scanf()和printf(),在參數(shù)列表列出的數(shù)據(jù)項(xiàng)中,數(shù)據(jù)的類(lèi)型、個(gè)數(shù)和位置必須與格式控制字符串中的格式控制說(shuō)明符一—對(duì)應(yīng)。
例如:
int a; float b; a =3; b=4.5; printf("%f %d", a, b);
編譯時(shí)不會(huì)給出出錯(cuò)信息,但運(yùn)行結(jié)果將與預(yù)期結(jié)果不符。這種錯(cuò)誤尤其需要注意。
- TypeScript Essentials
- Python從菜鳥(niǎo)到高手(第2版)
- 技術(shù)領(lǐng)導(dǎo)力:程序員如何才能帶團(tuán)隊(duì)
- Blender 3D Incredible Machines
- 3D少兒游戲編程(原書(shū)第2版)
- C和C++游戲趣味編程
- C專(zhuān)家編程
- 智能手機(jī)故障檢測(cè)與維修從入門(mén)到精通
- Distributed Computing in Java 9
- Scala Functional Programming Patterns
- Unity 2017 Game AI Programming(Third Edition)
- JBoss AS 7 Development
- Python深度學(xué)習(xí)與項(xiàng)目實(shí)戰(zhàn)
- Java程序設(shè)計(jì)基礎(chǔ)教程
- Instant PhoneGap