全國二級C語言考前復(fù)習(xí)資料_第1頁
全國二級C語言考前復(fù)習(xí)資料_第2頁
全國二級C語言考前復(fù)習(xí)資料_第3頁
全國二級C語言考前復(fù)習(xí)資料_第4頁
全國二級C語言考前復(fù)習(xí)資料_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、全國計算機等級考試二級C語言考前復(fù)習(xí)資料(選擇題部分)思維導(dǎo)圖1:C語言程序設(shè)計知識結(jié)構(gòu)第一課 C語言程序設(shè)計基礎(chǔ)思維導(dǎo)圖2:第一課 C語言程序設(shè)計基礎(chǔ)第 80 頁本課主要知識點:1.知識點:C程序基礎(chǔ)l C語言是一種結(jié)構(gòu)化程序設(shè)計語言。三種基本結(jié)構(gòu):順序、選擇、循環(huán)。例1:(2010-09-11)以下關(guān)于結(jié)構(gòu)化程序設(shè)計的敘述中正確的是(C)A) 一個結(jié)構(gòu)化程序必須同時由順序、分支、循環(huán)三種結(jié)構(gòu)組成B) 結(jié)構(gòu)化程序使用goto語句會很便捷C) 在C語言中,程序的模塊化是利用函數(shù)實現(xiàn)的D) 由三種基本結(jié)構(gòu)構(gòu)成的程序只能解決小規(guī)模的問題例2:(2011-03-26)計算機高級語言程序的運行方法有編

2、譯執(zhí)行與解釋執(zhí)行兩種,以下敘述中正確的是(A)A)C語言程序僅可以編譯執(zhí)行B)C語言程序僅可以解釋執(zhí)行C)C語言程序既可以編譯執(zhí)行又可以解釋執(zhí)行D)以上說法都不對【解析】計算機不能直接理解高級語言,只能直接理解機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能執(zhí)行高級語言編寫的程序。 翻譯的方式有兩種,一個是編譯,一個是解釋。C語言程序僅可以編譯。例3:(2011-03-26)以下敘述中錯誤的是( D)A)C語言的可執(zhí)行程序是由一系列機器指令構(gòu)成的B)用C語言編寫的源程序不能直接在計算機上運行C)通過編譯得到的二進制目標程序需要連接才可以運行D)在沒有安裝C語言集成開發(fā)環(huán)境的機器上不能運

3、行C源程序生成的.exe文件【解析】C程序開發(fā)過程:編輯>(.c)編譯>(.obj)鏈接>可執(zhí)行文件(.exe)2.知識點:C語言程序的構(gòu)成l C程序是由函數(shù)構(gòu)成的,一個C程序有且僅有一個main函數(shù)。一個函數(shù)由兩部分組成:函數(shù)的首部與函數(shù)體。函數(shù)體包括聲明部分與執(zhí)行部分。一個C程序總是從main函數(shù)開始執(zhí)行(即程序的入口),由main函數(shù)結(jié)束,(即程序的出口)。例1:(2010-03-12)以下敘述正確的是(B)A) C語言程序是由過程與函數(shù)組成的B) C語言函數(shù)可以嵌套調(diào)用,例如:fun(fun(x)C) C語言函數(shù)不可以單獨編譯D) C語言中除了main函數(shù),其他函數(shù)不

4、可作為單獨文件形式存在例2:(2011-09-11)以下敘述中錯誤的是 (C)A.C語言編寫的函數(shù)源程序,其文件名后綴可以是CB.C語言編寫的函數(shù)都可以作為一個獨立的源程序文件C.C語言編寫的每個函數(shù)都可以進行獨立的編譯并執(zhí)行D.一個C語言程序只能有一個主函數(shù)3.知識點:標識符l 命名規(guī)則: 標識符中只能包含字母 (a-z,A-Z),數(shù)字(0-9),下劃線(_)。第一個字符必須是字母或下劃線。類型說明符:int,float,double等語句定義符:if,for,while等l 分類都是小寫關(guān)鍵字(32個) (有固定含義,不可改變)庫函數(shù)的名字:printf , scanf 等編譯預(yù)處理命令名

5、:include等預(yù)定義標識符 (有特殊含義,可以改變)用戶自定義的標識符 格式合法,不能使用關(guān)鍵字,見名知意例1:(2010-03-13)以下C語言用戶標識符中,不合法的是(D)A)_1 B)AaBc C)a_b D)a-b4.知識點:數(shù)據(jù)類型例1:(2010-03-16)以下關(guān)于C語言數(shù)據(jù)類型使用的敘述中錯誤的是(D)A)若要準確無誤差的表示自然數(shù),應(yīng)使用整數(shù)類型B)若要保存帶有多位小數(shù)的數(shù)據(jù),應(yīng)使用雙精度類型C)若要處理如“人員信息”等含有不同類型的相關(guān)數(shù)據(jù),應(yīng)自定義結(jié)構(gòu)體類型D)若只處理“真”與“假”兩種邏輯值,應(yīng)使用邏輯類型【解析】結(jié)構(gòu)數(shù)據(jù)類型是根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的

6、方法來定義的,一個結(jié)構(gòu)類型的值可以分解成若干個“成員”或“元素”,每個“成員”都是一個基本數(shù)據(jù)類型或又是一個構(gòu)造類型,C項正確。C語言沒有邏輯類型,故D項錯誤。例2:(2011-03-26)定義無符號整數(shù)類為UInt,下面可以作為類UInt實例化值的是(B)A)-369 B)369 C)0.369 D)整數(shù)集合1,2,3,4,5【解析】無符號整數(shù)類型為只有正整數(shù)與0,所有選擇B。5.知識點:常量l 整型常量十進制整常數(shù):沒有前綴,其數(shù)碼為0-9。例如65535,-568八進制整常數(shù):以0開頭,其數(shù)碼為0-7。例如015十六進制整常數(shù):以0X或0x開頭,其數(shù)碼為0-9,A-F或a-f。例如0x2

7、A長整型數(shù):整型常數(shù)后綴為L或l。例如358000L無符號數(shù):整型常數(shù)后綴為U或u。例如158ul 實型常量的形式小數(shù)形式:必須有小數(shù)點,小數(shù)點前后不能同時沒有數(shù)字。指數(shù)形式:aEn(其中a表示十進制數(shù),E階碼標志,n階碼)。E前E后必須有數(shù)字,E后必為整數(shù),可以帶符號。例如2.1E-3、5E8例1:(2011-09-13)以下選項中關(guān)于C語言常量的敘述錯誤的是:(D)A.所謂常量,是指在程序運行過程中,其值不能被改變的量B.常量分為整型常量、實型常量、字符常量與字符串常量C.常量可分為數(shù)值型常量與非數(shù)值型常量D.經(jīng)常被使用的變量可定義成常量【解析】根據(jù)常量的基本概念,則不難判斷A、B、C均正

8、確。例1:(2009-04-13)以下選項中,能用作數(shù)據(jù)常量的是(D)A)o115 B)0118 C)1.5e1.5 D)115L【解析】八進制整常數(shù)以0開頭,A項錯誤;八進制整常數(shù)的數(shù)碼味0-7,B項錯誤;實型常量的指數(shù)形式E后必為整數(shù),故C項錯誤;長整型數(shù)后綴為L或l,故D項正確。例2:(2010-03-26)以下選項中可用作C程序合法實數(shù)的是( A)A).1e0 B)3.0e0.2 C)E9 D)9.12E【解析】實型指數(shù)表示方式“E前E后比有數(shù),E后必須是整數(shù)”,故選Al 字符常量:用單引號括起來的一個字符。包括普通字符常量與轉(zhuǎn)義字符。普通字符常量:如a、A、1。轉(zhuǎn)義字符:由一對單引號

9、引起來的以開頭的若干字符的組合。如n表示回車換行、表示反斜線符、表示單引號符、”表示雙引號、ddd表示八進制數(shù)、xhh表示十六進制數(shù)。例3:(2010-09-15)以下選項中能表示合法常量的是(C)A)整數(shù):1,200 B)實數(shù):1.5E2.0 C)字符斜杠: D)字符串:“007”【解析】表示整常量不能用逗號分隔,A項錯誤;實型常量的指數(shù)形式E后必為整數(shù),故B項錯誤;007是轉(zhuǎn)義字符,只能用單引號括起來,不能用雙引號或其他括號,故D項錯誤。例4:(2010-03-26)以下選項中不能用作C程序合法常量的是( B)A)1,234 B)'123' C)123 D)"x7

10、G"【解析】A中的,在編譯時會出錯的,直接寫成1234即可,B是一個三位八進制數(shù)代表的字符,C是一個數(shù)字常量,D是一個字符串,其中x7是一個一位十六進制數(shù)代表的字符,也即D中的字符串是兩個字符,如果sizeof的話是3,如果strlen的話是2。6.知識點:變量l 整型變量與實型變量以考試標準Viusalc+6.0為例,說明各類型變量所占的位數(shù)。 類型所占位數(shù)所占字節(jié)數(shù)類型所占位數(shù)所占字節(jié)數(shù)short162unsignedint324int324unsignedlong324long324float324unsignedshort162double648例1:(2010-09-38)

11、有以下程序#include <stdio.h>main(0)int s,t,A=100;double B=6;s=sizeof(A); t=sizeof(B);printf(“%d,%dn”,s,t);在VC6平臺上編譯運行,程序運行后的輸出結(jié)果是(C)A)2,4 B)4,4 C)4,8 D)10,6【解析】在VC6平臺上,int型占4個字節(jié),double型占8個字節(jié),故答案是C。l 字符變量:一個字符變量只能存放一個字符。字符串不能存放在字符變量中,只能用字符數(shù)組或指針存放字符串。例1:(2009-09-22)有以下定義語句,編譯時會出現(xiàn)編譯錯誤的是(C)A)char a=a;

12、B)char a=n; C)char a=aa; D)char a=x2d;【解析】一個字符變量只能存放一個字符,A項字符變量存放的是普通字符常量;B、D項字符變量存放的轉(zhuǎn)義字符;字符常量只能是單個字符,不能是字符串,aa不是單個字符,故C項錯誤。7.知識點:ASCII碼l 0的ASCII碼值為48;A的ASCII碼值為65;a的ASCII碼值為97。l 大寫字母及小寫字母的ASCII碼值相差32。例1:(2009-09-23)有以下程序#include <stdio.h>main()char c1,c2;c1=A+8-4;c2=A+8-5;printf(“%c,%dn”,c1,c

13、2);已知字母A的ASCII碼為65,程序運行后的輸出結(jié)果是(A)A)E,68 B)D,69 C)E,D D)輸出無定值【解析】A的ASCII碼值為65,8的ASCII碼值為56,4的ASCII碼值為52,65+56-52=69,對應(yīng)于字符E。5的ASCII碼值為53,65+56-53=68,對應(yīng)于字符D。字符變量c1以%c格式輸出,即E。字符變量c2以%d格式輸出,即68。故答案是A。8.知識點:進制轉(zhuǎn)換l 十進制轉(zhuǎn)換成二進制、八進制、十六進制:將十進制的數(shù)字除以2(8、16),得到的商數(shù)繼續(xù)除以2,直到商為0,然后將各次相除所得的余數(shù)從后往前排列。l 二進制、八進制、十六進制轉(zhuǎn)換成十進制:

14、將二(八、十六)進制數(shù)的每一位數(shù)從高位到低位乘以2的n-1次冪,n為該位所在的位數(shù)。l 二進制及八進制之間的轉(zhuǎn)換:每個八進制數(shù)字轉(zhuǎn)換成3位二進制數(shù)字。l 二進制及十六進制之間的轉(zhuǎn)換:每個十六進制數(shù)字轉(zhuǎn)換成4位二進制數(shù)字。例1:(2010-09)以下程序運行后的輸出結(jié)果是 2008 。#include <stdio.h>main()int a=200,b=010;printf(“%d%dn”,a,b);【解析】八進制數(shù)010轉(zhuǎn)換成十進制數(shù)為8,按“%d%d”格式分別輸出a、b,即2008。9.知識點:運算符的優(yōu)先級級別由大到小:(邏輯)非 >算(術(shù)運算符) >關(guān)(系運算符

15、) >(邏輯)及 >(邏輯)或 >條(件運算符) >賦(值運算符)10.知識點:強制類型轉(zhuǎn)換運算符l 一般形式:(類型說明符)(表達式)l 功能:把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型例1:(2009-04-06)表達式(int)(double)(5/2)+2.5)的值是4?!窘馕觥?int)(double)(5/2)+2.5)(int)(double)2)+2.5)(int)(2.000000+2.5)(int)(4.500000) 4。例2:以下程序運行后的輸出結(jié)果是 () 。main() int a;a=(int)(double)(3/2)+0.5+(

16、int)1.99*2);printf("%dn",a);答案:3【解析】(3/2)=1,(double)(3/2)+0.5=1.5,(int)1.99*2=2,所以(double)(3/2)+0.5+(int)1.99*2=3.5,故a=3。11.知識點:算術(shù)運算符: +、*、/、%:參及運算的量均為整型。/:當除號左右兩邊都是整數(shù)的時候,商也要是整數(shù),如果不是整數(shù)則舍棄小數(shù)部分。當參及運算量有一個為實型,則商為double型。例1:(2011-09-14)若有定義語句:int a=10;double b=3.14;,則表達式A+a+b值得類型是 (C)A.charB.in

17、tC.doubleD.float【解析】各種類型數(shù)據(jù)混合運算時,最終結(jié)果的類型可依據(jù)以下轉(zhuǎn)換規(guī)律:char -> short -> int -> long -> float -> double例1:(2011-09-15)如有定義語句:int x=12,y=8,z;,在其后執(zhí)行語句z=0.9+x/y,則z的值為 (B)A.1.9B.1C.2D.2.4【解析】x,y,z均為整型變量,因此x/y結(jié)果為1,即z=0.9+1=1.9,z最終結(jié)果為1例1:(2010-09-14)有以下定義:int a;long b;double x,y;則以下選項中正確的表達式是(A)A)

18、a%(int)(x-y) B)a=x!=y; C) (a*y)%b D)y=x+y=x【解析】參及%運算的左右操作數(shù)均為整型,故A項正確,C項錯誤。B項是賦值語句,不是表達式。賦值運算符左邊必須是變量,而不是表達式,而D項中x+y=x,錯誤。12.知識點:逗號表達式l 一般形式:表達式1,表達式2表達式nl 求值過程:自左向右依次求解,最后一個表達式的值為整個逗號表達式的值。例1:(2009-04-14)設(shè)有定義:int x=2;以下表達式中,值不為6的是()A)x*=x+1 B)x+,2*x C)x*=(1+x) D)2*x,x+=2【解析】A項x=x*(x+1)=2*(2+1)=6;B項x

19、+后,x的值為3,2*x的值為6,整個逗號表達式的值為6;C項x=x*(1+x)=2*3=6;D項x=x+2=2+2=4,整個逗號表達式的值為4。故答案是D。13.知識點:自增自減運算符+i i自加1后再參及運算 i+ i參及運算后再自加1-i i自減1后再參及運算 i- i參及運算后再自減1+與- -的運算對象只能為變量,不能是常量或表達式。例1:(2009-09-06)若有定義語句:int a=5;則表達式:a+的值是 5 。【解析】表達式a+的值是a未加1之前的值,即5。.l 當+或及printf語句結(jié)合時,若+/-x的形式,則先自增/自減,然后輸出;若x+/-的形式,則先輸出x原值,在

20、進行自增/自減操作。例2:(2011-03-26)有以下程序#include main() int x=011;printf("%dn",+x);程序運行后的輸出結(jié)果是(C)A)12 B)11 C)10 D)9【解析】011是一個八進制的數(shù),轉(zhuǎn)為十進制則為1*8+1=9;+x是x先自增1再參及其他運算,所以先x自增1為10再輸出即為10,故選C。14.知識點:賦值表達式l 一般形式:變量名=表達式l 賦值運算符左邊必須是變量,而不是表達式。例1:(2010-03-14)若有定義:double a=22;int i=0,k=18;則不符合C語言規(guī)定的賦值語句是( C)A)a=

21、a+,i+; B)i=(a+k)<=(i+k); C)i=a%11; D)i=!a;【解析】a為double型,參及%運算的操作數(shù)均為整型,故C項錯誤。例2:(2011-03-26)若有定義語句:int a=3,b=2,c=1;,以下選項中錯誤的賦值表達式是(A)A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4);【解析】賦值表達式的左邊必須是變量不能是表達式。而答案A中,(=4)是一個賦值表達式。l 復(fù)合賦值運算符與表達式例2:(2010-09-16)表達式a+=a-=a=9的值是(D)A)9 B)-9 C)18 D)0【解析】賦值運算

22、符的結(jié)合性是從右到左,a=9a=a-9=0a=a+0=0+0=0。故答案是D。15.知識點:位運算l 按位及運算&規(guī)則:0&0=0 0&1=0 1&0=0 1&1=1l 按位或運算|規(guī)則:0|0=0 0|1=1 1|0=1 1|1=1l 按位異或運算規(guī)則:00=0 01=1 10=1 11=0l 求反運算規(guī)則:0=1 1=0l 左移運算<<規(guī)則:把<<左邊的運算數(shù)的各二進位全部左移若干位,高位丟棄,低位補0。左移一位相當于該數(shù)乘以2。左移n位相當于該數(shù)乘以2n。例1:(2010-09-40)有以下程序#include <st

23、dio.h>main()short c=124;c=c_D_;printf(“%dn”,c);若要使程序的運行結(jié)果為248,應(yīng)在下劃線處填入的是A)>>2 B)|248 C)&0248 D)<<1【解析】左移一位相當于該數(shù)乘以2,124>>1相當于124乘以2,等于248。故答案是D。例2:(2009-04-39)有以下程序#include <stdio.h>main()int a=5,b=1,t;t=(a<<2)|b;printf(“%dn”,t);程序運行后的輸出結(jié)果是(A)A)21 B)11 C)6 D)1【解析】

24、左移2位相當于該數(shù)乘以22。5<<2相當于5乘以4等于20。20|1=21。故答案是A。l 右移運算>>把>>左邊的運算數(shù)的各二進位全部右移若干位。高位補0,低位丟棄。右移一位相當于該數(shù)除以2。右移n位相當于除以2n。例3:(2009-09-39)若有以下程序段int r=8;printf(“%dn”,r>>1);輸出結(jié)果是(C)A)16 B)8 C)4 D)2【解析】右移一位相當于該數(shù)除以2。8>>1相當于除以2,等于4,故答案是C。16.知識點:關(guān)系運算符與表達式例1:(2010-09-08)在C語言中,當表達式值為0時表示邏輯值

25、“假”,當表達式值為非0 時表示邏輯值“真”。例2:(2010-03-06)設(shè)x為int型變量,請寫出一個關(guān)系表達式 (x%3=0)&&(x%7=0) ,用以判斷x同時為3與7的倍數(shù)時,關(guān)系表達式的值為真。17.知識點:邏輯運算符與表達式l 邏輯運算符優(yōu)先級從高到低:!、&&、|l 邏輯運算的真值表aba&&ba|b!a真真真真假真假假真假假真假真真假假假假真l 進行邏輯運算時,若&&左邊的值為0,則不再對右邊的運算對象進行運算,整個表達式的值為0。例1:(2011-09-17)若有定義語句:int k1=10,k2=20;,執(zhí)行

26、表達式(k1=k1>k2)&&(k2=k2>k1)后,k1與k2的值分別為 (B)A.0與1B.0與20C.10與1D.10與20【解析】k1>k2為假,因此k1= k1>k2結(jié)果0,邏輯及左邊表達式為假,右邊表達式不再處理,因此k1結(jié)果為0,k2不變,仍為20例2:int a=2;則表達式(!a=1)&&(a+=2)的值為0,a的值為2?!窘馕觥浚為0,!a=1的值為0,&&左邊的值為0,則不再對右邊的運算對象進行運算,所以a的值為2。l 若|左邊的運算對象的值為1,則不再對右邊的運算對象進行運算,整個表達式的值為1。

27、例2:(2010-03-17)若a是數(shù)值類型,則邏輯表達式(a=1)|(a!=1)的值是(A)A)1 B)0 C)2 D)不知道a的值,不能確定【解析】a的值有兩種情況:a等于1或a不等于1。故邏輯表達式(a=1)|(a!=1)的值為1。18.知識點:格式輸入函數(shù)printf()(1)一般形式:printf(“格式控制字符串”,輸出列表);(2)遇到控制字符,按照控制字符的規(guī)定輸出,遇到非格式字符串按原樣輸出。例1:(2009-04-07)若變量x,y已定義為int類型且x的值為99,y的值為9,請將輸出語句printf(“ x/y=%d ”,x/y);補充完整,使其輸出的計算結(jié)果形式為:x/

28、y=11。例2:(2009-04-15)程序段:int x=12;double y=3.141593;printf(“%d%8.6f”,x,y);的輸出結(jié)果是(A)A)123.141593 B)12 3.141593 C)12,3.141593 D)123.1415930【解析】以%8.6f格式輸出,即輸出的總寬度為8,小數(shù)的位數(shù)為6。19.知識點:格式輸入函數(shù)scanf()(1)一般形式:scanf(“格式控制字符串”,地址列表);(2)若格式控制字符串中有非格式字符串,則按原樣輸入。若格式控制字符串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔,則可用空格、Tab、回車作間隔。例1:(2011-09

29、-16)若有定義:int a,b;,通過語句scanf(“%d;%d”,&a,&b);,能把整數(shù)3賦給變量a,5付給變量b的輸入數(shù)據(jù)是 A.3 5B.3,5C.3;5D.35【解析】scanf格式字符串中兩個%d之間帶有非格式字符分號,運行時應(yīng)原樣輸入。例1:(2005-04-19)有以下程序main()int m,n,p;scanf(“m=%dn=%dp=%d”,&m,&n,&p);printf(“%d%d%dn”,m,n,p);若想從鍵盤上輸入數(shù)據(jù),使變量m中的值為123,n中的值為456,p中的值為789,則正確的輸入是(A)A)m=123n=45

30、6p=789 B)m=123 n=456 p=789C)m=123,n=456,p=789 D)123 456 789【解析】scanf(“m=%dn=%dp=%d”,&m,&n,&p); 格式控制字符串中有非格式字符串,則按原樣輸入,故答案是A。例2:(2011-03-26)有以下程序段char name20;int num;scanf("name=%s num=%d",name;&num);當執(zhí)行上述程序,并從鍵盤輸入:name=Lili num=1001<回車>后,name的值(A)A)Lili B)name=Lili C)

31、Lili num= D)name=Lili num=1001【解析】scanf中格式字符串的非格式字符串原樣輸入,如其中的name=與num=,所以接受到的name值是后面的Lili,num值為1001。故選A。(3)在輸入字符數(shù)據(jù)時,若格式控制字符串中無非格式字符,則認為所有輸入的字符均為有效字符??崭駮划斪髯址x值給變量。例3:(2009-04-23)有以下程序#include <stdio.h>main()int a1,a2; char c1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);printf(“%d,%c

32、,%d,%c”,a1,c1,a2,c2);若想通過鍵盤輸入,使得a1的值為12,a2的值為34,c1的值為字符a,c2的值為字符b,程序輸出結(jié)果是:12,a,34,b則正確的輸入格式是(以下_代表空格,<CR>代表回車)A)12a34b<CR> B)12_a_34_b<CR> C)12,a,34,b<CR> D)12_a34_b<CR>【解析】空格會被當作字符賦值給變量,故B、D錯誤;C項中逗號會被當作字符賦值給變量,故C項錯誤。(4)格式字符串l 一般形式:%*輸入數(shù)據(jù)寬度長度類型l *表示該輸入項,讀入后不賦予相應(yīng)的變量。l 輸入

33、數(shù)據(jù)寬度:用十進制數(shù)指定輸入的字符數(shù)。例4:(2010-09-07)有以下程序#include <stdio.h>main()int x,y;scanf(“%2d%ld”,&x,&y); printf(“%dn”x+y);程序運行時輸入:1234567程序的運行結(jié)果是 34579 ?!窘馕觥?2d輸入的數(shù)據(jù)寬度為2,x的值為12,y的值為34567,x+y=34579。例5:(2009-04-16)若有定義語句:double x,y,*px,*py;執(zhí)行了px=&x;py=&y;之后,正確的輸入語句是(C)A) scanf(“%f%f”,x,y);

34、B)scanf(“%f%f”,&x,&y);C)scanf(“%lf%le”,px,py); D)scanf(“%lf%lf”,x,y);【解析】A、D項地址列表,應(yīng)為&x,&y;x、y為double型,格式控制字符串不是%f%f,故B項錯誤。l 當定義的變量類型與scanf中“格式符”類型不一致時(這里只限定在字符型與整型兩種類型,其他數(shù)據(jù)類型不可以。)整型與字符型之間通過ASCALL可以相互轉(zhuǎn)化。例6:(2011-03-12)有以下程序 (說明:字符0的ASCII碼值為48)main() char c1,c2;scanf("%d",&am

35、p;c1);c2=c1+9;printf("%c%cn",c1,c2);若程序運行時從鍵盤輸入48<回車>,則輸出結(jié)果為 (09)?!窘馕觥枯斎?8,則c1=48,c2=48+9,以字符輸出c1與c2,則為輸出ASCII碼為48與57對應(yīng)的字符,分別為0與9。20.知識點:字符輸出函數(shù)putchar()一般形式:putchar(a);putchar(101);21.知識點:字符輸入函數(shù)getchar()一般形式:getchar();或ch=getchar();例1:(2010-03-15)有以下程序#include <stdio.h>main()ch

36、ar a,b,c,d;scanf(“%c%c”,&a,&b);c=getchar(); d=getchar();printf(“%c%c%c%cn”,a,b,c,d);當執(zhí)行程序時,按下列方式輸入數(shù)據(jù)(從第1列開始,<CR>代表回車,注意:回車也是一個字符)12<CR>34<CR>則輸出結(jié)果是(B)A)1234 B)12 C)12 D)12 3 34【解析】以%c格式讀取一個字符,以getchar()形式也是讀取一個字符??崭駮划斪髯址x值給變量。所以,a=1,b=2,c=n,d=3。l getchar經(jīng)常作為while循環(huán)條件,判斷輸入哪

37、一個字符時,循環(huán)結(jié)束。例如,輸入字符串,直到輸入0,程序結(jié)束,則可寫成while( getchar()!='0')例2:(2011-03-26)有以下程序段main()while( getchar()!='n');以下敘述中正確的是(C)A)此while語句將無限循環(huán)B) getchar()不可以出現(xiàn)在while語句的條件表達式中C)當執(zhí)行此while語句時,只有按回車鍵程序才能繼續(xù)執(zhí)行D)當執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行【解析】while條件表達式getchar()!='n'只要輸入的字符不是回車,就一直執(zhí)行循環(huán),而循環(huán)內(nèi)是一

38、個空語句,所以按回車鍵程序才能繼續(xù)執(zhí)行,選擇C。第二課 選擇結(jié)構(gòu)及循環(huán)結(jié)構(gòu)本課重要知識點:1.知識點:if語句l if(表達式),其中表達式可以是任意合法的C語言表達式。例1:(2011-09-19)下列條件語句中輸出結(jié)果及其他語句不同的是(D)A.if(a) printf(“%dn”,x); else printf(“%dn”,y);B.if(a=0) printf(“%dn”,y); else printf(“%dn”,x);C.if(a!=0) printf(“%dn”,x); else printf(“%dn”,y);D.if(a=0) printf(“%dn”,x); else pr

39、intf(“%dn”,y);【解析】作為if語句的條件,a等價于a!=0,因此 A與C是等價的。例2:(2011-03-26)if語句的基本形式是:if(表達式)語句,以下關(guān)于“表達式”值的敘述中正確的是(D)A)必須是邏輯值 B)必須是整數(shù)值 C)必須是正數(shù) D)可以是任意合法的數(shù)值【解析】表達式不限于關(guān)系表達式、邏輯表達式,也可以是任意的數(shù)值類型,其中非0為真,0為假。故選D。l 對于單個if語句,其后跟隨的受if控制的只能是1個語句或者是1個復(fù)合語句。例1:(2009-09-17)設(shè)有定義:int a=1,b=2,c=3;以下語句中執(zhí)行效果及其它三個不同的是(C)A)if(a>b)

40、 c=a,a=b,b=c; B)if(a>b) c=a,a=b,b=c;C)if(a>b) c=a;a=b;b=c; D)if(a>b) c=a;a=b;b=c;【解析】對于單個if語句,其后跟隨的受if控制的只能是1個語句或者是1個復(fù)合語句。故C項,if(a>b)條件成立時,語句c=a;才被執(zhí)行,而無論if(a>b)條件成立及否,語句a=b;b=c;都會被執(zhí)行。A、B、D項,只有if(a>b)條件成立時,語句c=a; a=b;b=c; 才被執(zhí)行。例2:(2011-03-26)以下程序運行后的輸出結(jié)果是 200 main() int x=10,y=20,t=

41、0;if(x=y)t=x;x=y;y=t;printf("%d %dn",x,y);【解析】x=10,y=20,所以x=y為false,t=x;不執(zhí)行,直接執(zhí)行x=y;y=t;x為20,y為0。注意與if(x=y)t=x;x=y;y=t;區(qū)別。l 當多個if(表達式)單分支形式并行出現(xiàn)時,其執(zhí)行順序是:先判斷第一if單分支的條件,如果為真,執(zhí)行其后面的語句,執(zhí)行完后,繼續(xù)向下執(zhí)行。判斷第二個if單分支語句,依次類推。如果第一個if表達式的值為假,則不執(zhí)行其后的語句,而去判斷第二個if單分支條件。例1:(2011-03-26)有以下程序main() int x;scanf(&

42、quot;%d",&x);if(x>15) printf("%d",x-5);if(x>10) printf("%d",x);if(x>5) printf("%dn",x+5);若程序運行時從鍵盤輸入12<回車>,則輸出結(jié)果為 1217 【解析】輸入12,比較不大于15所以不執(zhí)行if(x>15)內(nèi)的語句;大于10執(zhí)行printf("%d",x);輸出12;大于5執(zhí)行printf("%d",x+5);輸出17。2.知識點:if語句的嵌套l 內(nèi)嵌

43、結(jié)構(gòu)中,else總是及前面最近的且未曾配對的if語句配對,組成一對if-else語句。例2:(2010-09-18)有以下程序#include <stdio.h>main()int a=1,b=0;if(!a) b+;else if(a=0) if(a) b+=2;else b+=3;printf(“%dn”,b);程序運行后的輸出結(jié)果是(A)A)0 B)1 C) 2 D)3【解析】else總是及前面最近的且未曾配對的if語句配對,組成一對if-else語句。即else b+=3;及if(a) b+=2;配對。if(!a)不成立,不執(zhí)行b+;else if(a=0)不成立,不執(zhí)行i

44、f(a) b+=2;else b+=3;故直接執(zhí)行printf(“%dn”,b);,輸出結(jié)果為0。3.知識點:條件表達式l 一般形式:表達式1?表達式2:表達式3l 執(zhí)行過程:表達式1的值為真,條件表達式取表達式2的值;表達式1的值為假,條件表達式取表達式3的值。例1:(2009-09-19)以下程序段中,及語句:k=a>b?(b>c?1:0):0;功能相同的是(A)A)if(a>b)&&(b>c) k=1; B) if(a>b)|(b>c) k=1;else k=0;else k=0;C) if(a<=b) k=0; D) if(a&

45、gt;b) k=1;else if(b<=c) k=1;else if(b>c) k=1;else k=0;【解析】條件運算符的結(jié)合性是從右至左。當b>c時,b>c?1:0的值為1,k=a>b?1:0,同時當a>b時,a>b?1:0的值為1,此時k=1。否則k=0。故答案為A。4.知識點:switch語句l switch語句的圓括號中的表達式的值必須是整型或字符型,不能為實型。l case后的表達式可以是求得整型與字符型的常量表達式,但不能含有變量。l default的位置對程序的執(zhí)行沒有影響。例1:(2010-09-19)若有定義語句int a,b;

46、double x;則下列選項中沒有錯誤是(C)A)switch(x%2) B) switch(int)x%2.0)case 0:a+;break; case 0:a+;break;case 1:b+;break;case 1:b+;break; default:a+;b+; default:a+;b+;C)switch(int)x%2) D)switch(int)(x)%2)case 0:a+;break; case 0.0:a+;break;case 1:b+;break;case 1.0:b+;break; default:a+;b+; default:a+;b+;【解析】switch語句

47、的圓括號中的表達式的值必須是整型或字符型,不能為實型。x是double型,x%2不合法,A項錯誤。(int)x%2.0不合法,B項錯誤。(int)x%2值為整型,故C項正確。case后面的表達式可以是求得整型量與字符型量的常量表達式,故D項錯誤。例2:(2009-09-18)有以下程序#include <stdio.h>main()int c=0,k;for(k=1;k<3;k+)switch(k)default:c+=k;case 2:c+;break;case 4:c+=2;break;printf(“%dn”,c);程序運行后的輸出結(jié)果是(A)A)3 B)5 C)7 D

48、)9【解析】當k=1時,沒有匹配的case,執(zhí)行default語句,c=c+k=0+1=1。繼續(xù)往下執(zhí)行case 2后邊的語句,c+,c變?yōu)?,遇到break語句,于是退出內(nèi)層switch結(jié)構(gòu)。當k=2時,找到匹配的case 2,執(zhí)行c+; c變?yōu)?,遇到break語句,于是退出內(nèi)層switch結(jié)構(gòu)。執(zhí)行外層循環(huán)for結(jié)構(gòu)的k+,k變?yōu)?,k<3不成立,跳出for語句。最后輸出結(jié)果為3。l 當switch語句與循環(huán)語句(for、while)時,要注意switch里面的break語句退出的位置。解決這一問題的方法是:首先劃分結(jié)構(gòu),確定循環(huán)的語句體包括哪些語句。然后,在繼續(xù)劃分循環(huán)體內(nèi)的語句

49、,如果循環(huán)體內(nèi)的語句只有一條switch語句,其內(nèi)部出現(xiàn)了break,遇到break,要結(jié)束當前switch語句的執(zhí)行,繼續(xù)執(zhí)行下一次循環(huán)。例1:(2011-03-26)有以下程序main() int s;scanf("%d",&s);while(s>0) switch(s) case1:printf("%d",s+5);case2:printf("%d",s+4); break;case3:printf("%d",s+3);default:printf("%d",s+1);bre

50、ak;scanf("%d",&s);運行時,若輸入1 2 3 4 5 0<回車>,則輸出結(jié)果是(A)A)6566456 B)66656 C)66666 D)6666656【解析】while循環(huán)s<=0時退出循環(huán),輸入1 2 3 4 5 0,只有當輸入0時退出循環(huán),switch中當s=1時,執(zhí)行case 1,case 2,由于case 1后面沒有break,會繼續(xù)執(zhí)行case 2,遇到break,退出switch;當s=2時,執(zhí)行case 2,退出switch;當s=3時,執(zhí)行case 3,default,由于case 3后面沒有break,會繼續(xù)執(zhí)

51、行default,遇到break,退出switch;當s=4與5時,執(zhí)行default,退出switch。所以輸入1時,輸出65;輸入2時,輸出6;輸入3時,輸出64;輸入4時,輸出5;輸入5時,輸出6。故選擇A。5.知識點:while,do-while,for三種循環(huán)結(jié)構(gòu)例1:(2011-09-20)有以下程序:#include <stdio.h>main() int a=7;while(a-);printf(“%dn”,a);程序運行后的輸出結(jié)果是 (B)A.- 1B.0C.1D.7【解析】此類題一定要注意標點符號的位置,while(a-);該行末尾的分號即為一條空語句,來作為

52、while的循環(huán)體。例1:(2010-09-20)有以下程序#include <stdio.h>main()int a=1,b=2;while(a<6) b+=a;a+=2;b%=10;printf(“%d,%dn”,a,b);程序運行后的輸出結(jié)果是(B)A)5,11 B)7,1 C)7,11 D)6,1例2:(2011-03)有以下程序段main()while( getchar()!='n');以下敘述中正確的是(C)A)此while語句將無限循環(huán)B) getchar()不可以出現(xiàn)在while語句的條件表達式中C)當執(zhí)行此while語句時,只有按回車鍵程序才

53、能繼續(xù)執(zhí)行D)當執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行【解析】while條件表達式getchar()!='n'只要輸入的字符不是回車,就一直執(zhí)行循環(huán),而循環(huán)內(nèi)是一個空語句,所以按回車鍵程序才能繼續(xù)執(zhí)行,選擇C。l 循環(huán)體部分可以只有一條空語句,不做任何操作。例3:(2010-09-21)有以下程序#include <stdio.h>main()int y=10;while(y-);printf(“y=%dn”,y);程序執(zhí)行后的輸出結(jié)果是(B)A)y=0 B)y=-1 C)y=1 D)while構(gòu)成無限循環(huán)【解析】while(y-)后面的分號是一個空語句,

54、當y-不等于0時執(zhí)行空語句,當y等于0時,執(zhí)行printf函數(shù)輸出y值,當y等于0時退出循環(huán),此時y值變成-1。l 如果第一次判斷表達式的值為0,則循環(huán)一次也不執(zhí)行。即while循環(huán)體最少執(zhí)行0次。例4:(2011-03)當執(zhí)行下列程序時,輸入1234567890<CR>,則其中while循環(huán)體將執(zhí)行 0 次。#include <stdio.h>main()char ch;while(ch=getchar()=0) printf(#);【解析】ch=getchar(),ch第一次讀入的值為1,故while(ch=getchar()=0)不成立,循環(huán)一次也不執(zhí)行。l while循環(huán)及switch結(jié)構(gòu)例5、(2011-03)有以下程序main()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論