計算機二級筆試寶典習題答案與詳解_第1頁
計算機二級筆試寶典習題答案與詳解_第2頁
計算機二級筆試寶典習題答案與詳解_第3頁
計算機二級筆試寶典習題答案與詳解_第4頁
計算機二級筆試寶典習題答案與詳解_第5頁
免費預覽已結束,剩余41頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章 C 語言基礎知識一、選擇題1 【A】分析:C語言中,標志符包括:關鍵字、預定義標識符、和用戶標識符。其中我們常用的關鍵字只有30來個,也就是說要學好 C語言,我們只需要記住30來個單詞就可以了。用戶標識符由字母、數字和 _ 組成標識符只能由字母、數字和下劃線組成;其第一個字符必須是字母或下劃線;標識符區分大 ZZ小寫字母。如 int 與 Int 是兩個完全不同的標識符。2 【 B】3 【 B】分析: if 為關鍵字, 肯定不能做為用戶標識符。預定義標識符可以作為“用戶標識符”使用,只是這將使這些標識符失去系統規定的原意,所以一般也不要將預定義標識符作為“用戶標識符”使用。4 【 D】分

2、析: sizeof 為關鍵字,不能做為用戶標識符。5 【 D】分析:用戶標識符命名規則里規定,不能以數字開頭。6 【 B】分析:與第5 題類似。7 【 C】分析:與第5 題類似。8 【 D】分析: int 為關鍵字,所以不能定義為用戶標識符,但是scanf 為預定義標識符,最好也不要用做用戶標識符。9 【 B】分析:A選項long為關鍵字;C選項以數字5開頭;D選項中包括非法的.。10 【A】分析: A 選項中包括非法的 。11 【C】分析:C選項中以數字開頭。12 【 A】分析:B選項中包含非法的一;C選項中以數字開頭;D選項中包含關鍵字。13 【D】分析:該題有誤,D) float USS

3、 應該為D) float U$ 。由于D選項包含非法字符$,所以答案為 D14 【 A】分析:B選項中賦值運算符的左邊不能是表達式;C選項中賦值運算符的左邊不能是表達式;D選項中C語言中強制類型轉換的正確格式應該為“(類型名)表達式”,即應該為(double)(x)/10 。15 【 A】分析:%運算符的運算對象必須是整型,=是和=的復合運算符,所以其運算對象也必須是整型。16 【C】分析:字符型變量可以被賦予單個字符和小于 128 的整型數據,當是整型數據時,相當于是對應字符的 ACSII 碼值。字符是用 ' ' 括起來的單個字符。17 【 B】分析:在C語言中無“:二”運算

4、符,故A錯誤,C選項中int 18.5%3應該為(int) 18.5%3 ; D選項中賦值運算符的左邊不能是表達式。18 【 B】19 【B】分析: B 選項中八進制中不能出現數字8。20 【 D】分析:十六進制數只能以 0X或0x開頭,不能以oX開頭。21 【 C】分析:本題考查指數的表示形式,選項 A中E后面只能是整數,0.5是小數;選項B中E后面不能為 空;選項D中E前面不能為空。22 【 C】分析:本題考查指數的表示形式,選項 A中E后面只能是整數,5.0是小數;選項B中E前面不能為 空;選項D中E后面不能為空。23 【 A】分析:選項B中八進制中不能出現數字 8,選項C中e后面不能是

5、小數,選項 D中e后面不能為空。24 【 B】分析:選項B 中 e 后面是小數0.4 ,所以非法。25 【 B】分析:字符是用''括起來的單個字符字符常量是,B選項其實是一個轉義字符。26 【 B】分析:選項B 中 e 后面只能是整數, 0.5 是小數。27 【 D】分析:選項D 中賦值運算符的左邊不能是表達式。28 【 C】分析:選項C中E后面只能是整數,0.5是小數。29 【 D】分析: 3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8 ,本題目考察算術運算符,需要注意整數除以整數結果只能是整數。30 【 C】分析: a+=a-=9a=3 a+=-6a=-6

6、a=a+(-6)a=-1231 【 A】分析: A 選項中最右邊的賦值符號的左邊不能為表達式,只能是變量,故A 不正確。32 【 A】分析:本題考查C語言中的注釋,程序中以“/* ”開頭并且以“ */ ”結尾的部分表示程序的注釋部分。計算機運行程序時, 完全不理會程序的注釋部分, 這部分將被完全忽略掉。 因此 /* 給 a 賦值 b=20;給b賦值*/不被運行,所以a =10 , b=0;答案為A33 【 B】分析:選項A中n2沒有定義,選項 C中在定義f之前不能使用它,選項 D中E后面必須是整數。34 【 C】分析:選項C 的強制類型轉換int(f) 應該為 (int)f 。35 【 D】分

7、析:本題考查自增(自減)運算符:自增運算符在變量之前時,變量的值加 1,表達式的值為變量的值加 1,自增運算符在變量之后時,變量的值加 1,表達式的值為原變量的值。自減運算符類似。 printf("%d%d",+m, n+);輸出的值為13 34m=13 n=35 printf("%d%dn",-n,-m);輸出的值為34 12n=34 m=1236 【 C】分析:A選項中的運算對象只能時整數;B選項的賦值運算符的左邊不能是表達式;D選項的賦值運算符的左邊不能是表達式。37 【 B】分析:語句必須以;結束,而A選項沒有;號;C選項沒有賦值符號二,因此不構

8、成賦值表達式;D選項的強制類型轉換應該為(int)(a+b)。38 【 B】分析:本題考查運算規則,*和/ 運算符的運算規則為從左到右運算。當 / 運算符的運算對象為整型時,結果一定為整型,所以 1/2=0 。39 【 D】分析: 自加、 自減運算符的運算對象可以是char 型變量、 int 型變量和 float 型變量, 但不能是常量。40 【 A】41 【 B】分析:當運算符/ 的運算對象都是整型時,結果一定是整型,所以 8/5=1 , 1+0.4 結果為 1.4 ,當 1.4賦值給 c 時, 因為 c 是整型,只能存儲整型數據,系統會自動將.14 轉換為整型數據1,再將 1 賦值給 c,

9、 答案為B。42 【 D】分析: (int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000 ,答案為D。43 【 D】分析:當 / 運算符的運算對象為整型時,結果一定為整型。 y=x+3/2=x+1=3.000000 。答案為D。44 【 A】分析:1.0/c2*c1=1.0/2*1=0.5*1=0.5,由于c3為整型,0.5轉換為0,再賦值給c3,所以c3的值為0。45 【 D】46 【 A】分析:本題考點與第 35 題類似, x+ * 1/3=11*1/3=3。47 【 D】分析:D選項中的$不是標識符的合法符號,標識符只能有字母、數字和下劃線組成

10、。48 【 A】分析:因為賦值運算符的左邊不能是表達式,B和C選項錯誤;D選項中的強制類型轉換int(x)應該為 (int)x 。49 【 C】50 【 A】分析:本題考查轉義字符。轉義字符是用“ ”后面跟八進制或十六制數來表示一個字符。51 【 C】分析:本題考查十進制和十六進制之間的轉換。52 【 D】分析:通過#define d 2, d 為一常量,由于自增(自減)運算符的運算對象不能是常量,所以答案為 D。53 【 C】分析:根據各進制數的規則很容易得出答案。54 【 A】分析: A 選項應該為'' ,具體查看書本上的轉義字符。55 【 D】分析:與第 54 題類似,具

11、體查看書本上的轉義字符。56 【 D】57 【C】分析:字符常量是''括起來的單個字符或轉義字符。二、填空題1 .%分析:7+3.8/2=7+1.9=8.92 .關鍵字預定義標識符用戶標識符3 . 84 .工L十六5 . int float double 6 . 16 1乙分析:本題考查自增運算符,a+表達式的值是a變化之前的值,a變量本身加1第二章 順序結構一、填空題1 【B】分析:A選項,printf函數可以沒有輸出項,當沒有輸出項時,函數輸出“”括起來的字符串;C選項,在C語言中,整數可以以十進制、八進制或十六進制的形式輸出,但不能以二進制的形式輸出; D 選項,調用 g

12、etchar 函數讀入字符時,只能從鍵盤上輸入字符。所以答案選B。2 【 C】分析:C選項錯誤:隨意使用空語句將會導致邏輯錯誤。3 【 D】分析:在C語言中,所有的變量都必須先定義后使用,而在本程序中,變量 式在使用之前沒有定義, 所以會出現編譯錯誤,答案為 Q該程序的修改有兩種方法:1、在定義變量s時,同時定義變量 支, 并初始化為3.14; 2、在程序最前面使用宏定義# definen3.14。4 【 D】分析:該printf函數的輸出項為逗號表達式,根據printf 函數的定義,沒有語法錯誤;在上一章,我們學習了,逗號表達式的值為最后一個表達式的值,所以表達式( x, y )的值為 y

13、的值,即 2003 , 因此答案為 D。5 【 A】分析:本題主要考查數據的表示方式,和 printf 函數的格式控制。 d 表示以十進制輸出數據, o 表示以八進制輸出數據,m 的值是以十進制表示的,所以以原樣輸出,n 的值是以八進制表示的,所以也以原樣輸出,答案為A。6 【 C】分析:同上題一樣,本題也是考查數據的表示方式,和 printf 函數的格式控制。 X 表示以十六進制輸出數據,通過計算,m的值為十六進制的0,所以答案為 G通過該題我們必須注意一點,不管以十進制、八進制還是以十六進制輸出數據時,數據前面不會有0、 0x 。7 【 B】分析:本題考查自增、自減運算符,以及printf

14、 函數的輸出項。從printf 函數的一定可以知道,當輸出項為表達式時,輸出該表達式的值;自加(自減)在變量之前時,表達式的值為變量加 1 以后的值,自加(自減)在變量之后時,表達式的值為變量的原始值,答案為 B。8 【 C】分析:本題考查點與第 5、 6 題類似,只是n 的值是以十進制表示的,但卻是以八進制輸出的,所以要先轉化為八進制,即為0400 ,所以答案為C。9 【 B】分析: printf 函數的定義:當輸出格式說明個數少于輸出項時,那么多余的輸出項不輸出。所以只輸 出 666,答案為B。10 【 C】分析: 012 轉為十進制為10,再以指定的兩位格式輸出為10;十進制 102 有

15、三位,指定位數是兩位。當指定格式的位數少于輸出數據的位數時,按實際數的位數輸出,即輸出102,答案為C。11 【B】分析: a=f/=c*=(x=6.5) a=f/=c*=6.5 x=6.5 a=f/=65c=65 a=100.0/65=1 f=100.0/65=1.5 a=1,c=65,f=1.5,x=6.512 【 B】分析:本題考查長整形變量的輸出格式。%和 d 中間必須加l ( L 的小寫) 。13 【C】分析: m=(k+=i*=k) m=(k+=i=2*2=4) i=4 m=(k=2+4=6)k=6 m=6答案為C。14 【 C】分析:同 10 題類似, 當指定格式的位數少于輸出數

16、據的位數時,按實際數的位數輸出,即輸出 1234 。答案為C。15 【D】分析:自加(自減)運算符,根據“符號在前,先加減后使用;符號在后,先使用后加減。”進行計算 x=-m+ x=-3,m=4 x=x+8/+n x=-3+8/5=-2 x=-2答案為 D。16 【D】分析:從 scanf 函數的定義可以得出答案。17 【A】分析:在scanf() 函數中,“”括起來的格式說明中,除了輸入格式控制之外,其它的都要原樣輸入,所以答案為 A。18 【A】分析:本題考查的與第 17 題一樣,在scanf() 函數中,“”括起來的格式說明中” , ”要原樣輸入,所以答案選 A。19 【C】分析:本題考

17、查運算符的優先級和簡單的編程思想,大家通過答案反過來推敲以知道如何形成解決一個問題的編程思想。20 【 A】分析:由getchar() 函數的定義可得知答案,請大家理解透該函數的定義。21 【 A】分析:用scanf() 函數輸入字符型數據,當輸入格式為d 時,等于輸入以該整型數據為 ASCII 碼值的字符,所以答案為A。22 【 B】分析:A: main()函數后面不能有;號;C:注釋以/* */成對括起來的;D:命令行必須以#號開始。所以答案為 B。23 【 C】分析:本題考查的知識點與第17、 18 題一樣,只不過時一種逆向思維。24 【 B】分析:輸入的是876 543.0, 由于輸入

18、格式說明中指定了 a 的位數為兩位, 所以計算機會把87 分配給a; 接著計算機繼續把6 分配給 b, 由于 6 后面輸入的是空格 , 計算機認為分配結束. 同時把 6 轉為6.000000(b 是實型變量)25 【 A】分析:本題與第 7、 15 題類似。26 【 D】分析:在prinf()函數的格式控制中,兩個連著寫的 %,計算機會輸出一個%,接下來的d 原樣輸出。所以答案為D。27 【 B】分析:該題是考查scanf() 函數的輸入格式控制,以及后面的數組的知識,將在后面詳細講解。28 【 A】分析:此題不好解析,大家只要記住這一點,并在以后學習過程中注意就可以了。29 【 A】分析:

19、scanf() 函數的定義:輸入項為變量的地址,所以選項A, B 錯誤;本題還牽涉到指針變量的概念,后面將會學習到,變量d 其實是一個指針變量,指針變量其實就是儲存一個變量的地址,所以選項 B 錯誤。30 【 D】分析:此題和第 7 題類似。31 【 D】分析:此題考查自減運算符、逗號運算符和 printf() 函數的概念,前兩個知識點,在前面的題目中,我們已經講述過了;當 printf() 函數的輸出項為表達式時,輸出的是該表達式的值,對于表達式z1 的值為3,所以答案為D。32 【 B】分析:本題只要很好地理解scanf() 函數的定義,很容易得出答案。33 【 A】分析:本題有誤:“不正

20、確的輸入形式”應該改為“正確的輸入形式”。只要很好地理解scanf() 函數的定義,很容易知道答案為A。本題還考查了一個知識點,那就是分隔符,在C語言中,有三類分隔符,分別是:回車、空格和 tab 鍵。34 【 D】分析: 先計算 a*a 的值為 9, 再計算 a-=9( 此時 a 的值是 3) , 計算后 a 的值為 6, 整個表達式 (a-=a*a)的值是 -6, 然后計算 a 加上表達式的值( 此時 a 的值為 -6) ,輸出結果為-1235 【 A】分析:表達式c-25 相當于字符c 的 ASCII 值減25,當以c 的格式輸出時,相當于輸出 ASCII 值為c-25 的字符,所以答案

21、為 A。36 【 B】分析: gets() 函數可以從鍵盤讀入含有空格字符的字符串,它以回車為輸入結束的標志。37 【 C】38 【 C】分析:由于x為int型變量,所以x=1.2后,x的實際值為1;由于y也是int型變量,所以y=(x+3.8)/5.0 后, y 的值為0。因此d*y 的值為 0,答案為 C。39 【 A】分析:此題考查算術運算符號“ / ”的使用,由于“ / ”的運算對象為整型,所以其結果只能是整型,20/3 = 6,答案為Ao40 【 A】分析:與第 35 題類似。41 【 B】分析:printf() 函數的定義:"”括起來的部分除了d之外其它的原樣輸出。42

22、【 C】分析:本題考查轉義字符, 'b' 是退格符,所以遇到 'b' ,就會把前面一個字符刪除掉, ' 、 為轉義字符,分別輸出 ' 和 ,所以答案為C。43 【C】分析:本題不好用文字表述,請大家通過編譯器調試看結果,并記住這個知識點。二、填空題1. 88分析:0210轉為十六進制為882. 1分析:本題涉及到第三章選擇結構的內容,將在第三章講述。3. 2 20.000000分析: x=f*=n/=(c=50)c=50 x=f*=n/=50 x=f*=2n=2 x=20.0f=20.0本題需要注意的地方,當以 f格式輸出的時候,小數點后保留6位

23、。4. 11分析:9轉為8進制是115. 25 21 37分析:本題考查十進制、八進制和十六進制之間的相互轉化,輸出格式中的空格對應輸出。6. 7分析:a='H'-'A'+'0' a=7+'0',所以以 c格式輸出時,i5構為字符 7。7. 1_B分析:運行a=getchar(); scanf("%d",&b); 后,a='B', b=33 ,其它的運算和第 6題類似。8. n1=%dnn2=%d分析:從輸出結果中可知:n1= n2=必須在相應位置輸入,并且輸出n1后要換行。這種題目在考

24、試時(筆試和機試)經常出現,大家一定要多加訓練。9. i=10,j=20 回車分析:scanf()函數中,除了 d之外,其它的都要原樣輸入。10. B66分析:字符A的ACSII碼值為65,所以字符B的ACSII碼值為66,當以 d格式軍出ch時,即輸出66。11. b分析:相同字符的小寫的 ACSII碼值比大寫的ACSII碼值大32。12. 261分析:177轉為8進制是26113. -3分析:%運算符的操作必須時整數(正整數和負整數)。14. 16分析:賦值運算符的運算規則為從左往右。 a+=(a=8) a+=8a=8 a=1615. 2, 1分析: a=a+ba=3b=2 b=a-ba=

25、3b=1 a=a-ba=2b=1該類題必須小心,千萬不能忘記”號,否則為 0分。16. 10300分析:*d表示忽略一個數的輸入,10賦值給i, 20被忽略,30賦值給j ,而k未獲得新的值,保持 原值0,所出輸出10300017. 12分析:輸入時,12分析作為字符1和2賦值給ch1和ch2。第三章 選擇結構一、選擇題1 【B】分析:此題主要考察邏輯運算。首先x=1, y=1 ,那么 !x 為 0, y- 是- 在后,則先使用后自減, y 的值就是表達式y- 的值,為 1 。因此!x|y-等價于 0|1 ,結果為 1。2 【 D】分析:此題主要是考語句的特征。一條語句只包含一個分號,D項有兩

26、個分號,應該是兩條語句,所以選D。if(b=0) m=1;是條if語句,n=2;是條賦值語句。3 【 D】分析:此題主要是考邏輯運算和關系運算的優先級別 . 掌握 ! 、算術運算符和&&的優先級別依次降低。4 【 A】分析:此題主要是考了邏輯、關系和算術運算,熟練掌握邏輯運算、關系運算和算術運算的優先級別后, 就不難了。 A 選項中 !a 為 0, 所以 !a=1 為假, 那么就不用計算&&后面的表達式了,因為0“與”任何數均為假;B項中先計算出a<b為假,則(a<b)&&!c也為假,而0|1二1 ; C項中a和b均為真,所以a&am

27、p;&b的值為1; D項中先計算出(b+b)&&(c-a)為1,又a=2,2|1=1 所以選 A5 【 D】分析:此題是考真假條件的轉換,其中 D項中只有k為0時,!k%2=1才成立,顯然和A、B、C三項 不同。6 【 A】分析: 此題主要是考邏輯運算符! 、 &&和 | 之間的優先級別。 ! 最高,&&次之,| 最低。先求得 !a 為 0,所以不必計算!b 的值,即 !a&&!b 的值為0,由c=0,!c=1, 而 0|1=1 ,所以選 A。7 【 C】分析:此題考到了關系運算和邏輯運算及一定數學知識。 |x-y|<

28、;10 可等價為 -10<x-y<10, 首先選項 A表示 x-y 的絕對值小于10,與題中的數學關系一樣;將-10<x-y<10 用邏輯表達式表示的話就是B 選項;而D選項只是數學變換,所以選擇Q8 【 C】分析:此題主要是考查邏輯運算符|, 當計算機碰到 a|b, 先計算表達式a 的值,若為假才會計算表達式 b 的值,否則將不會去計算b 的值,因為一旦a=1, 則 0|b 必為0。題中b>a 為真,所以 (n=b>a)為1,那么將不會去計算m=a<b的值,k被并賦值1,所以m依然為0。答案選G9 【 D】分析:此題考到if-else 語句。A B、

29、C三項都是表示a為真時輸出x,為假時輸出y,而D則是a為 假時輸出 x, 為真時輸出 y 。10 【 C】分析:此題主要是考查if-else-if 和 if 語句。A 選項,c<a 為假, b<a 也為假,所以最后執行x=3; 。B選項,a<3為真,執行x=3; o C選項,a<3為真,執行x=3;然后a<2也為真,執行x=2; a<1為假,所以最后x的值為2。D選項的分析同C選項。11 【A】分析:此題主要是考查if 語句和條件表達式的轉化。只要理解了 if 語句和條件表達式的運算規則的話,就很容易選出A。12 【 D】分析:見教材例題。13 【 B】分析

30、: 此題主要是考查if-else-if 以及關系表達式的運算。 首先判斷第一個條件a>b>c 的值為 0, 所以不執行其后的語句; 在判斷第二個條件, c-1>=d 表達式的結果為真,所以執行其下面的語句,那么將輸出d+1的值為3 ,所以選答案B。14 【D】分析:此題主要考查if , else的配對問題。這里在if后面跟了兩條語句,其中第一條是 if的子句, 第二條是條獨立的語句, 這樣第二條語句就夾在了 if和else之間,使得else找不到和它配對的if。 所以程序會出錯。15 【C】分析:請大家記住:else總是和之前與其最近的且不帶else的if配對。16 AJ分析

31、:此題考查的是條件表達式的求解順序。參照附錄可知,它的結合方向是自右至左,所以先求得 右邊一個條件表達式的值為2,再求得左邊一個的值為1,即選Ao17 B分析:此題考查的是條件表達式求解問題。先看第一個條件表達式語句,a<b為真,所以條件表達式等價于k=b;止匕日t k為2。再看第二個條件表達式語句,k>c為假,所以條件表達式等價于k=k;所以答案選Bo 18. Cl分析:此題考查的是真假條件的等價問題。x-y為真表示x-y是非0的,也即x-y<0或x-y>0。所以答案選C 19. C1分析:此題主要是考查條件表達式和條件運算符。首先求括號內條件表達式 a>c?a

32、:c的值為c,那么整個表達式就等價于d=a>b?c:b;求解這個條件表達式得 d=c,所以答案選C。20. D分析:此題主要是考查在 switch語句中break和default的作用及break的適用范圍。break語句可 以在switch語句中使用也可以在循環結構中使用,只能在這兩個地方使用。switch語句中可以有default也可以沒有。switch語句中可以有break語句也可以沒有。21. D分析:此題主要考查 switch語句的語法規則。A選項錯在swich(a+b); 這里多了一個分號。請大家 注意switch后圓括號中的表達式的值必須是整型或字符型,不能為實型。B選項錯

33、在有兩個case3。C選項case后面只能是常量表達式,而這里出現變量,所以錯誤。答案選 D 22. C 分析:同21題。 23. AJ 分析:此題主要考查if和else配對問題。此題關鍵就是 else是與第二個if配對組成一條if-else 語句。因此首先判斷a>b為假,那么跳過其子句,即if-else 語句,直接執行最后一條 printf 語句, 將d輸出。因此答案選Ao二、填空題 1. 10 20_0 _分析:此題多數同學會得到的答案是10201,顯然是沒有弄清楚第三條賦值語句:c=(a%b<1)|(a/b>1).這是將后面一個邏輯表達式的值給c。先計算第一個圓括號里面

34、的內容,a%b的值是10 (而不是0),所以10<1為假;a/b的值為0, 0>1為假。在邏輯或運算的時候,兩個運算對象 都為假,則結果為假。所以 c的值為。.答案是:10 20 0 2. 0分析:此題主要考查關系表達式。我們主要就是要計算a>b>c的值,首先a>b為真,其值為1,那么1>c為假,所以整個表達式為假,其值為 0o所以d為0。 3. 585858分析:此題考查if語句。首先scanf語句使a的值為58,接著執行后面三條if語句,這三個if結構是相互獨立的,是互不相關的,只要他們的條件成立,就要執行其子句。a>50、a>40、a>

35、;30、都為真,所以執行printf三次,a被輸出3次。4. yes分/1匕題考查if-else 語句。賦值表達式c=a+b的值就是左邊變量的值,為4,那么表達式為真,所以執行其后的printf 語句,將yes輸出。5. 20,0分題關鍵點if的子句只能是一條語句或一條復合語句,表達式x=y為假,跳過if子句t=x;,接著繼續執行x=y;y=t;,因此最后x為20, y為0。6. 4,5,99分析:同上題。7. -4分析:此題考查if語句。首先第一條if語句n=0那么!n為真,執行x-=1;使x值為1,接著第二條 if語句m為1條件為真,執行x-=2;使x值為-1 ,再執行第三條if語句,x為

36、-1條件為真,執行x-=3; 使x值為-4。最后執行printf 將-4輸出。8. 4分":從鍵盤得到x的值為5,那么判斷表達式x-<5 , x-的值為5,所以為假,判斷了之后 x的值 變為4。此時執行else子句,將x+輸出,為4。9. 3分析:此題主要考查條件運算符。程序要輸出(P/3>0?p/10:p%3)這個條件表達式的值。P為30,所以p/3=10,10>0顯然為真,所以整個表達式的值應該是p/10的值,p/10得3。10. 1分析:此題考查if-else 語句。因為a為5, a!=0為真,所以p=a!=0等價與p=1,整個表達式p=a!=0 為真,執行i

37、f子句,將p輸出,輸出為1。11. 2 1分析:此題考查 switch 語句的嵌套。x為1,則外層switch語句選擇case1 , case1又是一個switch 語句,y為0,執行case。的a+使a的值變為1,然后執行break語句跳出內層的switch的語句, 接著執行外層switch語句的case2, a+;b+;使a的值變為2, b的值變為1,然后執行break語句 跳出外層的switch語句。最后執行printf語句將a,b輸出,輸出為2 1。12. a+b>c&& a+c>b&& b+c>a分析:此題是邏輯預算和if語句的結合。

38、題目的提示很明顯,構成三角形的條件是需要同時滿足三條件:a+b>c,a+c>b,b+c>a,程序中的if的條件就是構成三角形的條件,所以我們填入a+b>c&&a+c>b&&b+c>a。這里大家注意同時滿足條件我們需要用與邏輯,任意滿足一個條件我們需要用或邏輯。第四章 循環結構一、 選 擇題1 【A】分析:此題考查while 循環。第一輪循環, k 的值為5,進入循環,( -k )表達式的值為4(真),同時 k 的值改變為4,輸出表達式 k-=3 的值 1,同時 k 的值為 1。第二輪循環, k 為 1, 表達式(-k )的值為

39、 0, 結束循環。所以選A。2 【 C】分析:此題是條件等價的問題。當 E不等于0是條件為真,E等于0時條件為假。因此只有 E=0不符合上述條件。所以答案選C。3 【 B】分析:此題考查while 循環。第一輪循環,n為9,n>6為真,執行n-;使n值變為8,接著執行printf語句輸出8 。第二輪循環,n為8,n>6為真,執行n-;使n值變為7,接著執行printf語句輸出7 。第三輪循環,n為7,n>6為真,執行n-;使n值變為6,接著執行printf語句輸出6 。此時 n 為 6, n>6 為假,結束循環。所以選B。4 【 D】分析:此題是while 循環和 sw

40、itch 語句的結合。第一輪循環,k 為 5,k>0 為真,執行switch語句,沒有case5 ,所以執行default的 break 語句跳出 switch 語句(注意是跳出 switch 語句) ,接著執行k-; 使 k 值變為4。第二輪循環,k 為 4,k>0 為真,執行switch語句,沒有case4 ,所以執行default的 break 語句跳出 switch 語句,接著執行k-; 使 k 值變為 3 。第三輪循環, k 為 3 , k>0 為真, 執行 switch 語句, 執行 case3 的 n+=k; 使 n 值變為 3, 接著執行 k-;使 k 值變為

41、 2 。第四輪循環, k 為 2, k>0 為真,執行switch 語句,執行case2 沒有任何語句,那么什么都不做,因為沒有 break 語句所以要繼續執行case3 的 n+=k; 使 n 值變為 5,接著執行k-; 使 k 值變為 1。第五輪循環, k 為 1, k>0 為真, 執行 switch 語句, 執行 case1 的 n+=k; 使 n 值變為 6, 因為沒有 break語句所以要繼續執行case2 (什么都不做) ,和 case3 的 n+=k; 使 n 值變為 7,接著執行k-; 使 k 值變為 0。此時 k 為 0, k>0 為假,跳出循環,執行pri

42、ntf 語句,將 n 輸出,為7。所以答案選D。5 【 A】分析:此題是考查while 循環。第一輪循環,x為0,y為5,z為3, (z>0&&x<4)為真,執行y=y-1;、z-;、x+;三條語句,y值為4,z值為 2, x 值為 1。第二輪循環,(z>0&&x<4)為真,執行y=y-1;、z-;、x+;三條語句,y值為3,z值為1, x值為2。第三輪循環, (z>0&&x<4) 為真,執行y=y-1; 、 z-; 、 x+; 三條語句, y 值為 2,z 值為 0, x 值為 3。此時 (z>0&am

43、p;&x<4) 為假,跳出循環,執行printf 語句,將 x,y,z 輸出,所以答案選A。6 【 D】分析: while 循環 ,do-while 循環 ,for 循環三種循環可以相互轉換。 do-while 循環 , 在 while 后的表達式為零時結束循環,使用 break 語句也可以強制結束。7 【 C】分析:此題考查do-while 循環。do-while 循環一定會先執行循環體一次,執行printf 語句, x-=2 的值為 1,輸出為 1 。此時-x 的值為 0 , x 的值變為0,所以!(-x) 為真。進入第二輪循環,執行printf 語句, x-=2 的值為-2

44、 ,輸出 -2 。此時-x 的值為 -3 ,所以!(-x)為假。跳出循環。所以答案選C。8 【 B】分析:此題考查do-while 循環。因為循環體中有語句 s+=1; , s 的初值為 0,若要使程序的輸出值為2, 那么循環體要執行兩次。 因此在第二輪循環結束后, a!=n 因該為假, 執行兩次循環就是執行a=a-2;兩次后 a 的值為 -3 ,所以 n 的值應為 -3 。答案選 B。9 【 C】分析:此題考查for 循環。i為1, i<6為真,執行sum+=i;,此時大家注意sum沒有初值,所以得到不確定的值,此后不論循環怎么執行 sum 的值都為不確定,所以答案選C。10 【 D】

45、分析:變量i 每次增量為2,變化過程為:1->3->5->7->9 ,語句 s+=i+1 每次執行使s 增加的數為:2,4,6,8,10, 所以 s 的值為自然數110 中偶數的值。11 【B】分析: B 選項每次進入循環體,都要先執行p=1; 即 1 賦值給 p. 所以不能求出 5! 的值。12 【 C】分析:。項s=s+1/n, 1/n首先運算,n為整型變量,1也是整型變量,當 n=2T0時,1/n的值都為整 數0,故C不正確。13 【 C】分析:本題考察點在for 循環的基本概念和 switch 語句的基本知識。構成for 循環的循環體的是一個 switch 語句

46、。首先 i 的值為0,進入第一輪循環。在switch 語句中,符合 case 0 的條件,輸出 i 的值,即輸出一個0。 根據 switch 語句的性質, 在 case 后面沒有 break 語句, 還要繼續完成下面的 case 后的各個語句,直到遇到 break 或者 switch 語句結束為止。因此還需要完成case 2 后面的輸出,再次輸出一個0,同理,default 后面的輸出 i 也要執行。第一輪循環輸出了 000。i自加為1,進入第二輪循環。沒有匹配的case,執行default后面的輸出。第二輪循環輸出了一個 1。1 自加為 2,進入第三輪循環,執行case 2 后面的輸出,并執

47、行default 后面的輸出。第三輪循環輸出了22。i 自加為3, i<3 為假,跳出 for 循環。因此,程序最后輸出的結果是000122。答案選擇C。14無分析:此題分析同 13 題。有印刷錯誤,最后答案為 41。沒有這個選項。15 【 D】分析: 變量 i 的值為0, 執行 while 循環, 表達式 (i<10 ) 為真, 進入循環體, 執行 if(i<1) continue;表達式( i<1 )為真,執行continue; 提前結束此輪循環體的執行(后面兩語句不執行) ,再判斷表達式(i<10)的值,為真,進入循環體,執行if(i<1) conti

48、nue;因為i的值為0,沒改變,表達式(i<1 )i<10)仍為真,執行continue; 提前結束此輪循環體的執行(后面兩語句不執行)的值,為真,進入循環體。就這樣程序一直執行循環,進入死循環。那么循環無條件執行 執行 執行 執行第一輪循環, i 為 0, i=3|i=5為假,i=6 也為假,執行第二輪循環, i 為 1, i=3|i=5為假,i=6 也為假,執行第三輪循環, i 為 2, i=3|i=5為假,i=6 也為假,執行第四輪循環, i 為 3, i=3|i=5 for 語句的執行。此后的分析同為真,15 題。執行 continue三個表達式都缺省,那么循環無條件執行。

49、for (;)會提前結束此次循環體的執行,不會結束整個16 【 D】分析:首先i+ 使i+ 使i+ 使變為變為變為1,執行s+=i使 s變為12,執行s+=i使 s變為33,執行s+=i使 s變為617 . AJ分析:此題while循環嵌套了 for循環。第一輪循環,i為0, i<20為真,進入for循環無條件執行,i%10=0為真,執行break語句結束整 個for循環。接著執行i+=21使i變為21 ,執行a+=i使a變為21。第二輪循環,i為21, i<20為假,循環結束。所以答案選Ao18 .【C】分析:此題題目印刷有問題。應該是 i+%5=0, +i%8=0此題的分析思路

50、應該是只有當i+%5=0, +i%8=0都為真的時候才會將i輸出。我們對四個選項進行分析,如果A選項24正確,那么因為判斷的時候 i自加了兩次,所以i進入循環體的值為22,那 么i+%5=0就為假了。所以 A選項不對。分析 C選項32,那么進入循環時,i為30,則i+%5=0, +i%8=0都為真,所以答案選 Co19 .【B】分析:此題是for嵌套。每執行一次最外層的for(i=1;i<=4;i+) 這個循環就輸出一行,內層第一個for循環for(j=1;j<=4-i;j+)printf(" ");是輸出此行的空格,內層第二個for 循環for(j=1;j&l

51、t;=;j+) printf("*");是輸出此行的*號。第一行應I是先輸出3個空格,然后輸出一個*號,最后輸出換行符。那么分析第一行 for(j=1;j<=4-i;j+) 等價于 for(j=1;j<=3;j+) 進入第二個 for 循環 for(j=1;j<=;j+) 空白處值應分別為3、5、7。所以答案選Boi為1 ,進入內層第一個for循環,那么可以看出循環執行三次,輸出三個空格。它只執行一次,空白處值應為 1。依此分析后面三行,二、填空題1. y=-1分析:本題需要注意的是while(y-) 后面緊跟一個分號,它表示while循環的循環體部分是一

52、個空語句,而不是printf 語句。考察點在循環結束的標志,應特別加以注意。(1)程序首先將y的值初始化為10。進入while循環后,表達式y-的值為10,即為真,執行空循環體,此時y的值為9。第一輪循環結束。(2)進入第二輪循環,y-的值為9,表達式仍然為真,繼續執行空循環體,此時 y的值為8。第二輪循環結束。(3)如此反復,直到進入第十輪循環。y-的值為1,表達式為真,繼續執行空循環體,此時 y的值為0,第十輪循環結束。(4)進入第十一輪循環,y-的值為0,表達式為假,不執行空循環體,止匕時 y的值為-1 ,跳出 while循環。最后得到y的值為-1。2. 8921分析:從鍵盤上輸入 12

53、98, n2為1298,進入while循環n1=n2%10ffi n1 賦為 8,執行 n2=n2/10 使 n2 賦為 129,n1=n2%10ffi n1 賦為 9,執行 n2=n2/10 使 n2 賦為 12,n1=n2%10ffi n1 賦為 2,執行 n2=n2/10 使 n2 賦為 1,將n1=n2%10ffi n1 賦為 1,執行 n2=n2/10 使 n2 賦為 0,將第一輪循環,n2!=0為真,進入循環體,執行 將n1輸出,輸出8。第二輪循環,n2!=0為真,進入循環體,執行將n1輸出,輸出9。第三輪循環,n2!=0為真,進入循環體,執行n1輸出,輸出2。第四輪循環,n2!=

54、0為真,進入循環體,執行 n1輸出,輸出1。此時n2!=0為假,循環結束。輸出為 8921。3. 0分析:i的值從5變化到0時,for語句中的第二個表達式都為真。 t=5*4*3*2*1*0 =04. 5分析:for循環語句的循環體是空語句;第一輪循環,s為0,i為1, i<3為真,執行空語句,然后執行 i+使i變為2, s+=i使s變為2。 第二輪循環,s為2,i為2, i<3為真,執行空語句,然后執行 i+使i變為3, s+=i使s變為5。 此時i<3為假,循環結束。輸出 s為5。5. 6分加 此題屬于循環的嵌套。當 i=1時,j<=i為假,輸出0個#號,當i=2時

55、,j<=2,內存循環執行 一次輸出1個#號,依此分析,當i=3時,輸出2個#號,當i=,4時,輸出3個#號,共輸出6個 #號。大家特別注意每次進入內層循環 j都沒有賦初值為2。6. i<10 j%3( 或 j%3!=0)分析:從j=i*10+6可以看出當i從1變化9時,就把100以內個位數為6的所有整數都選出來了。if( )continue;這條if語句很明顯是判斷是否能被3整除,如果不能則執行continue ,去判斷下一個數。所以填入條件j%3(或j%3!=0)。7. 132分析:m=0,n=0,k=0,i=9第一輪循環,當i值為9時,i<=11為真,執行switch語句,(i/10)的值為0,匹配case 0,執行m+,n+, 再執行break語句,跳出switch體,再執行i+, i值為10;止匕日t m值為1, n的值為1, k的值為0。 第二輪循環,當i值為10時,i<=11為真,執行switch語句,(i/10)的值為1,匹配default,執行 k+,n+,結束switch體,執行i+,i值為11.此時m值為1, n的值為2, k的值為1。第三輪循環,當i值為11時,i<=11為真,執行switch語句,(i/10)的值為1,匹配default,執行 k+,n+,結束switch 體,執行i+,i值為

溫馨提示

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

評論

0/150

提交評論