C語言復習經(jīng)典習題及其答案_第1頁
C語言復習經(jīng)典習題及其答案_第2頁
C語言復習經(jīng)典習題及其答案_第3頁
C語言復習經(jīng)典習題及其答案_第4頁
C語言復習經(jīng)典習題及其答案_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 第一章 C 語言概述1.1 單項選擇題1.二進制語言是屬于( ) 面向機器語言 面向問題語言 面向過程語言 面向匯編語言 解人們研制了許許多多計算機程序設計語言,其中二進制語言直接來自計算機的指令系統(tǒng),與具體計算機緊密相關,所以是一種面向機器語言。面向問題語言是為了易于描述和求解某類特定領域的問題而專門設計的一種非過程語言。面向過程語言是一種能方便描述算法過程的計算機程序設計語言。有匯編語言,但沒有面向匯編語言。匯編語言也是一種面向機器的語言,與機器語言比較,匯編語言用有助于記憶的符號來代表二進制代碼。所以解答是。 2.下列語言中不屬于面向過程的語言是( ) 高級語言 低級語言 C 語言

2、PASCAL 語言 解 C 語言和 PASCAL 等程序設計語言都是高級語言,它們用于描述復雜加工的處理過程,所以也稱它們是面向過程語言。低級語言是指機器語言和匯編語言,低級語言是面向機器的語言,而不是面向問題的語言。所以解答是。 3.下列字符中屬于鍵盤符號的是( ) n t b 解鍵盤符號是指鍵盤上有標記,并能在顯示器上直接以其標記字樣顯示的字符。有許多鍵盤上有標記的符號,它們不是用于直接顯示的,鍵入這種字符用于表示特定的意義,如常用的回車符。為了能讓 C 程序標記這種符號,程序采用轉(zhuǎn)義字符的方式書寫這種字符。如n、t 、b都不是鍵盤字符,在 C 語言中,它們都得用轉(zhuǎn)義字符來表達。只有字符才

3、是鍵盤字符。所以解答是。但在 C程序中,反斜杠字符已特別用作轉(zhuǎn)義字符的引導符,它也得用轉(zhuǎn)義字符的表達形式書寫,將它寫成。 4.下列字符列中,不是用來表達轉(zhuǎn)義字符是 )( 074 0解轉(zhuǎn)義字符有三種書寫形式:反斜杠字符后接上某個規(guī)定的字符;反斜杠字符后接上 13 個八進制數(shù)字符;反斜社字符和字符 X 之后接上 1 至2 個十六進制數(shù)字符。后兩種分別八進制數(shù)和十六進制數(shù)直接給出字符的 ASCll 代碼值。而 074 是八進制整數(shù),不是轉(zhuǎn)義字。所以解答是。 5.不是 C 語言提供的合法關鍵字是() switch begin case default 解因 C 語言的關鍵字表中沒有 begin,它不是

4、 C 語言的關鍵字。所以解答是。 6.下列字符列中,能作為單個標識符是() ? a a2 a.3 a_3 解在 C 語言中,規(guī)定標識符是這樣一種字符序列,由英文字母或下線字符開始,后接任 1 個英文字母、下線字符和數(shù)字符組成。所以問題所列的字符列只有 a_3 是標識符,其余都不是標識符,一個是由字符?開頭、一個中間有字符,另一個有字符.。所以解答是。1.2 填充題 7.在 C 語言中,下列說法中錯誤的是() 函數(shù)定義可以分為兩個部分:函數(shù)說明部分和函數(shù)體 主函數(shù)可以調(diào)用任何非主函數(shù) 任何非主函數(shù)可以調(diào)用其它任何非主函數(shù) 程序可以從任何函數(shù)開始執(zhí)行 解每個 C 函數(shù)的定義分兩部分,函數(shù)說明部分和

5、函數(shù)體,所以敘述 是正確的敘述。 語言C中,函數(shù)可以遞歸調(diào)用,主函數(shù)可以調(diào)用程序中的任何函數(shù),當然可以調(diào)用任何非主教的其它函數(shù),所以敘述是一個正確的敘述。同樣理由,敘述也是正確的。C 語言規(guī),C 程序只有一個主函數(shù),并總是從主函數(shù)開始執(zhí)行,不能從非主函數(shù)開始執(zhí)行。所以,說程可以從任何函數(shù)開始執(zhí)行是錯誤的。所以解答是。1.匯編語言屬于面向_語言,高級語言屬于面向_語言。解匯編語言與具體計算機密切有關,是屬于面向機器的語言;而高級語言用來描述求解題的算法,所以是面向過程的語言。所以解答是:面向機器和面向過程。2.用高級語言編寫的程序稱為_程序,它可以通過_程序翻譯一句執(zhí)一句的方式執(zhí) 行 , 也 可

6、 以 通 過 _ 程 序 一 次 翻 譯 產(chǎn) 生_程序,然后執(zhí)行。 解用高級語言編寫的程序稱為源程序,源程序不能在計算機上直接運行,運行源程序有種方式:一種是通過解釋程序,對源程序逐句解釋執(zhí)行;另一種是先讓編譯程序?qū)⒃闯绦蛞环g產(chǎn)生目標程序(目標程序是計算機可直接執(zhí)行的機器語言程序,它是一種二進制代碼程),然后執(zhí)行目標程序。 3.轉(zhuǎn)義字符是由_符號開始,后接單個字符或若干字符組成。 4.C 語言詞類主要分為_、_、_和_等。 解語言的基本詞匯是指直接由字符序列組成,有確定意義的最基本單位,所以 C 語言詞匯有:字面形式常量、特殊符號(主要是運算符)、保留字和標識符等四類。而表達式、函數(shù)調(diào)用等是

7、更高級的語言成分,如表達式中還可分運算分量和運算符等;函數(shù)調(diào)用也是一種表達式,它有函數(shù)名標識符、圓括號和實際參數(shù)表等。利用基本詞匯,按照給定的 C 語言的句法規(guī)則,就可命名程序?qū)ο?,描述表達式計算、構造語句、函數(shù),直至整個程序。 5.C 語言的語句主要分為_語句、_語句、_語句_語句、_語句和_語句等。 解C 語言有多種不同功能的語句,有用于定義數(shù)據(jù)的,有用于各種存儲和計算的,有用于程序流程控制的,有多種分類方法。C 語言的語句主要有:數(shù)據(jù)定義語句、表達式語句、流程控制語句、復合語句、空語句和其它語句。程序中經(jīng)常使用的賦值表達式語句和函數(shù)調(diào)用表達式語句都是典型的表達式語句。 C 語言經(jīng)典習題及

8、其答案詳解 6.C 程序是由函數(shù)構成的。其中有并且只能有_個主函數(shù)。C 語言程序的執(zhí)行總是由_函數(shù)開始,并且在_函數(shù)中結(jié)束(如別的函數(shù)未調(diào)用終止程序執(zhí)行的庫函數(shù)) 解C 程序是由若干函數(shù)構成的。其中有并且只能有 1 個主函數(shù)(用 main 命名) 程序的執(zhí)。C行總是由主函數(shù)開始執(zhí)行,通常在主函數(shù)中結(jié)束(如沒有在別的函數(shù)中調(diào)用終止程序執(zhí)行的庫函數(shù)的話)。 第二章 基本數(shù)據(jù)類型和表達式 2.1 單項選擇題1.下列字符列中,可以作為“字符串常量”的是() ABC “ABC“ abc a解C 程序中,一個字符率常量是表示一個字符序列,書寫時,用雙引號字符前后括住這個字符序列。所以只有“ABC”是一個正

9、確的字符率常量,其余都不是。其中,ABC 可作為標識符,字符列abc不能出現(xiàn)在 C 程序中,a是一個字符常量。所以解答是。 2.在以字節(jié)存儲字符的系統(tǒng)中,n 在內(nèi)存占用的字節(jié)數(shù)是( ) 1 2 3 4 解一般來說,一個字符在內(nèi)存中只占 1 個字節(jié),n是轉(zhuǎn)義字符,其意義是換行符,它作為一個字符存儲,在內(nèi)存也只占 1 個字節(jié)。所以解答是。 3.字符串“xyz”在內(nèi)存占用的字節(jié)數(shù)是( ) 3 4 6 8 解字符串中的每個字符占 1 個字節(jié),但 C程序在存儲字符串時,要在最后一個有效字符后面接上 1 個字符串結(jié)束的標記符0。這樣,存儲字符串常量“xyz”需要 4 個字節(jié)。所以解答是。 4.在以下字符列

10、中,合法的長整型常數(shù)是( ) 0L 0. 2.1869el0 解為表示不同范圍的整數(shù),整型數(shù)據(jù)分短整型、基本型和長整型,并對三種整型內(nèi)部表示的最高位的不同理解,又分別分成無符號和帶符號兩種。若要明確指明一個整數(shù)是長整型的,必須在整數(shù)之后接上字符L。所以 0L 是一個長整型的整型常量,而 是基本整型數(shù)據(jù),而對于用 2 個字節(jié)表示一個基本整型數(shù)據(jù)的系統(tǒng)來說,該整數(shù)將因超出范圍而是一個錯誤的整數(shù);0. 和2.1869el0 都是 double 型的實數(shù)。所以解答是。 5.一個 char 型數(shù)據(jù),它的值在內(nèi)存中存放的是() ASCll 代碼值 BCD 代碼值 內(nèi)碼值 十進制代碼值 解計算機存儲字符,通

11、常是存儲字符的某種代碼值。有許多種字符編碼的方法,最流行的是ASCII 代碼。在 C 語言中,Char 型數(shù)據(jù)也用 ASCII 代碼表示。所以解答是。 6.設變量 m,n,a,b,c,d 的初值均為 0,執(zhí)行(mab)|(ncd)后,m,n 的值是() 0,0 0,1 l,0 1,1 解計算(mab)|(n=c=d)的過程是先計算邏輯或的左運算分量(m=a=b)的值,由于賦位運算符的優(yōu)先級比關系運算符=的優(yōu)先級 低,又先計算 a=b.因 a,b 均為 0 后,所以比較結(jié)果值為 1.將 1 賦給變量 m,使變量 m 的值變?yōu)?1 .同時這個賦值運算的結(jié)果也是 1,這樣邏輯運算的左運算分量的值為

12、1.由于邏輯或運算的左運算分量值為 1,按照 C 語言對邏輯或運算優(yōu)化計算的規(guī)定,不再計算邏輯或的右運算分量,而直接得到邏輯或運算的結(jié)果為 1 .由于邏輯或的右運算分量不曾計算過,所以變量 n 的值也不為變化。這樣,上述表達式計算后,變量 m 的情為 1,變量 n 的值為 0.所以解答是。 7.設 a 為 5,執(zhí)行下列計算后,b 的值不為 2 的是( ) ba2 b6-(-a) ba2 ba3?3:2 解因兩個整型數(shù)據(jù)相除,結(jié)果是整數(shù),當a 的值為 5 時,計算表達式 b=a2 后,使 b 的值為2.計算表達式 b6-(-a)是先計算子表達式(-a)的,先讓 a 的值減 1 變成 4,并以減

13、1 后的 a 為子表達式的結(jié)果,所以子表達式的結(jié)果為 4,最后使b 的值為 2.在計算表達式 b= a%2 時,求余運算 a2 的結(jié)果為 1,最后使變量 b 的值為 1.計算表達式 ba3?3:2 時,先計算條件表達式 a3?3:2,以 2 為結(jié)果,最后也使變量 b 的值為人所以解答是。 8.執(zhí)行語句“x(a3,ba-);”后,X,a,b 的值依次為( ) 3,3,2 2,3,2 3,2,3 2,3,3 解計算表達式 x(a=3,b=a-)時,先計算賦值號右端圓括號內(nèi)的逗號表達式。逗號表達式要求各子表達式順序計算,并以最后予表達式的值為整個逗號表達式的結(jié)果。所以該表達式計算時,先讓變量 a 的

14、值為 3,a-的值是 a 當時的值,以該值為結(jié)果賦給變量 b,并以該值為逗號表達式的值賦給變量 x,然后 a 的值被減少 1.所以計算該表達式后,使變量 x,a,b 的值依次為 3,2,3.所以解答是。 9.設整型變量 m, a, c, 均為 1,n, b, d執(zhí)行“ m(ab)(nab)”后 m,n 的值是( ) 0,0 0,l 1,0 1 ,l 解表達式(ma b)(na b)是一個邏輯表達式,它的計算過程是先計算邏輯與的左分量(mab,其中又是先計算 ab.因 ab不成立,結(jié)果為 0,將 0 賦給變量 m,最后邏輯與的左分量結(jié)果為 0.由于邏輯運算采用特別的優(yōu)化計算規(guī)則,當邏輯與的左分量

15、結(jié)果為 0 時,不再計算邏輯與的右分量,而直接以 0 為邏輯與的結(jié)果。所以,上述表達式計算使 m 的值變?yōu)?0,而 n 的值沒有變,依舊為 l.所以解答是。 10,設有代碼“int a3;”,則執(zhí)行了語句“a+=a-= a*a;”后,變量 a 的值是( ) 3 0 9 -12 解由于賦值運算符的結(jié)合性自右至左,語句“a+=a-=a*a;”的執(zhí)行是先計算 a*a,得到值 9,再計算 a-a*a,使 a 的值為-6,接著計算 a+a,使 a 的值為-12.所以解答是。 11.在以下一組運算符中,優(yōu)先級最高的運算符是( ) % 解常規(guī)運算符的優(yōu)先級自高到低的排列順序是算術運算符、移位運算符、關系運算

16、符。按位運算符、邏輯運算符、條件運算符、賦值運算符、逗號運算符。所以問題所給的四個運算符按優(yōu)先級自高到低的排列順序是,。所以解答是。2 12.設整型變量 i 的值為 3,則計算表達式 i-i后表達式的值為( ) 0 l 2 表達式出錯 解有些運算符只有一個字符,也有許多運算符由兩個字符組成。特別是有些字符既可是單個字符的運算符,又能組成雙字符的運算符。編譯系統(tǒng)在識別源程序時,通常是盡量多地讀八字符,能組成多字符單詞的先盡量組成多字符單詞。所以表達式 i-i,被編譯器理解為(i-)-i.另外,當表達式中某變量有后綴自增和自減運算時,先按變量的原值計算表達式,然后再對變量進行自增和自減運算。同樣地

17、,當表達式中某變量有前綴自增和自減運算時,先對變量進行自增和自減運算,然后再按變量的新值計算表達式。按這個約定,求表達式(i-)-i 是計算 i-i 的值為 0,然后再對 i 作自減運算。這樣,表達式(i-)-i 的值為 0.所以解答是。 13. 設 整 型 變 量 a 、 b 、 c 均 為 2 , 表 達 式a+b+c+ 的結(jié)果是( ) 6 9 8 表達式出錯 解與上一小題解答的理由相同,表達式a+b+c+被系統(tǒng)理解成: (a+)+(b+)()+c+)。表達式“變量+”的值是變量的原來值,所以在變量 a、 均為 2 的前題下,b.c執(zhí)行上述表達式,得到結(jié)果為 6.所以解答是。 14.若已定

18、義 x 和 y 為 double 類型,則表達式:xl, yx32 結(jié)果是( ) l 2 2.0 2.5解由于變量 x 和 y 都是 double 類型,表達式 xl, yx32 是先計算 x1,由于 1 是整型的,x 是 double 類型的,該計算先將整數(shù) 1 轉(zhuǎn)換成 double 類型的 1.0,并將 1.0 賦給變量 x.計算 yx32 是先求 32 的值,因是兩整數(shù)相除,結(jié)果是整型值 1,然后在計算 x1 時,也先將 1轉(zhuǎn)換成 1.0,然后求得 xl 的值為 2.0,最后將該值賦給變量 y,并得到整個表達式的值為 2.0.所以解答是。 15.設 a=1,b=2,c3,d4 則表達式

19、a b?a:c d?a:d 的結(jié)果為() 4 3 2 1 解條件運算符的優(yōu)先級比關系運算符的優(yōu)先級低,并且它的結(jié)合性是自右向左的,所以表達式 ab?a:cd?a:d 可用圓括號等價地寫成(ab?a:(cD)?A:D)(。因 AB 成立,計算結(jié)果為 A 的值 1.所以解答是。 16.設 a 為整型變量,下列 C 表達式中,不能表達數(shù)學關系式:10a15 的是( ) 10a15 a11|a12| a13| a14 a10a15 ?。╝10)!(a=15) 解數(shù)學關系式 10a 15 表示。只能是11, 12, 13, 14 四個值之 l. 用 C 表達式表示這個條件,可寫成 a10a15,或!(a

20、10)&!(a=15),或 a11|a12 | a=13|a14 等。若寫成 10a15,該算式的計算順序是先求出 10a 的結(jié)果 0 或 1,然后以這個結(jié)果與 15 比較,是否小于 15,顯然這與數(shù)學式子的意義是不一致的。所以解答是。17.下列表達式中,正確的 C 賦值表達式是 )( a7bca7 a7ba7 a(7b, b, a7) a 7b,ca7解賦值運算符是運算符之一,賦值運算也可以出現(xiàn)在一般表達式中。賦值運算時,出現(xiàn)在賦值運算符左邊的表達式應該是引用一個存儲對象,例如變量。不可以是一個數(shù)值計算表達式。如表達3式 a7bca7 因算術運算符比賦值運算符的優(yōu)先級高,要把 a7 的結(jié)果賦

21、給 7bc,這是錯誤的。同樣理由,表達式 a 7ba7也是錯誤的。而表達式 a(7b,b,a7)就是正確的賦值表達式,它是先計算賦值號左邊的括號內(nèi)的表達式,括號表達式內(nèi)是一個逗號表達式,遠號表達式要求順序逐一計算各子表達式,并以最后一個子表達式的值作為遠號表達式的結(jié)果,最后將該結(jié)果賦給變量 a.而表達式 a7b,ca7 則不是一個賦值表達式,而是一個逗號表達式,它由兩個賦值子表達式組成。所以解答是。 18.若有以下定義: char a;int b;float c; doubled;則表達式 a*b+d-c 值的類型為( ) float int char double 解基本類型的數(shù)據(jù)可以混合運

22、算,但運算時,對要求運算分量類型相同的運算來說,如運算分量的類型不是全相同,則會有自動類型轉(zhuǎn)換發(fā)生。類型自動轉(zhuǎn)換規(guī)則規(guī)定類型低(簡單)的向類型高(復雜)的轉(zhuǎn)換。各類型由高到低的排列順序是:long double、float、unsigned long、long、unsignedint、int 這樣,若有定義: char a; int b;float c;double d;則表達式 a*b+d-c 的值的類型是 double的。首先計算 a*b,得到 int 類型的值,接著計算a*b+d,得到 double 類型的值,最后計算 a*b+d-c,得到 double 類型的值。所以解答是。 19.表

23、達式“9!=7”的值是( ) true 非 0 值 0 1 解關系運算的結(jié)果只有 0 和 1,若關系成立,則結(jié)果為 1;若關系不成立,則結(jié)果為 0.因關系式 9!7 成立,所以表達式的結(jié)果為 1.雖然 1也是非 0 值,在供選擇的答案中有 1,所以最確切的解答是。 21.設字符型變量 a3,b6,計算表達式 C(ab) 2 后 C 的二進制值是( ) 解a 的值為 3,寫成 8 位二進制數(shù)形式是,b 的值為 6,寫成 8 位二進制數(shù)形式是.表達式 c(ab)2,先計算 a 與 b的按位加,得到結(jié)果 ,將這結(jié)果向左移 2位,得到二進位的位串信息是 .所以解答是。 22.設 a,b 和 c 都是

24、int 型變量,且 a3,b4,c5,則下面的表達式中值為 0 的是( ) ab ab a|b+cb-c !(aB)!|1)解對于表達式ab,兩個非 O 運算分量的邏輯與結(jié)果為 1.對于表達式 ab,由于關系式成立,結(jié)果也為此又由于變量 a 為非 0,表達式 a|b+cb-c 的結(jié)果也為 1.對于表達式?。╝b)!c|1),先是計算(ab)得到結(jié)果 1;計算!C 得到結(jié)果為 0;再計算它們的邏輯與,結(jié)果為 0.繼續(xù)與 1 求邏輯或,得到結(jié)果為 1.最后,對 1 求邏輯非,得到結(jié)果為 0.所以解答是。23.設 ch 是 char 型變量,其值為A,則下面表達式的值是( ) ch(chAchZ)?

25、(ch32):ch A a Z z 解由于字符型變量 ch 的值為 A,計算表達式 chh Ach Z)?(ch32):ch,先計算其中條件表達式,由于條件(chAhZ)成立,該條件表達式以 ch3297為結(jié)果,將該值賦給變量 ch,以字符表達這個值為a。所以解答是。 2.2 填充題 1.在內(nèi)存中,存儲字符串“X”要占用_個字節(jié),存儲字符X要占用_個字節(jié)。 解計算機存儲一個字符用 1 個字節(jié),存儲字符串時,每個字符要占用 1 個字節(jié),另在字符串的有效字符之后存儲 1 個字符串的結(jié)束標記符。所以存儲字符率“X要占用 2 個字節(jié),存儲字符X只要 1 個字節(jié)。 2.在 C 程序中,判邏輯值時,用_表

26、示邏輯值“真”,又用_表示邏輯值假“。在求邏輯值時,用_表示邏輯表達式值為”真“,又用_表示邏輯表達式值為”假“。 解在 C 程序中,判邏輯值時,用非 0 值表示真;而判邏輯值時,用值 0 表示假。但邏輯表達式計算結(jié)果,邏輯表達式值為真是用 1 表示的,而邏輯表達式的值為假,則用 0 表示。 3.定義符號常量的一般形式是_. 解定義符號常量用預處理命令的宏定義,其定義的一般形式是: define 符號常量名 常量 4.在函數(shù)內(nèi),說明變量時,若省略存儲類型符,系統(tǒng)默認其為_存儲類別,該存儲類別的類型符為_. 解在函數(shù)內(nèi),說明變量時,若省略存儲類型符,系統(tǒng)就默認其為自動存儲類別,該存儲類別用 au

27、to 標識。 5.無符號基本整型的數(shù)據(jù)類型符為,雙精度實型數(shù)據(jù)類型符為,字符型數(shù)據(jù)類型符為。 解無符號的基本整型的類型符為 unsignedint,或簡寫成 unsigned. 雙精度實型數(shù)據(jù)類型符為double,字符型數(shù)據(jù)類型符為 char. 6.定義指定數(shù)據(jù)類型的變量時,較完整的一般形式是。 解要指定變量的存儲類型,定義指定類型的變量,其一般形式是:存儲類型符數(shù)據(jù)類型符 變量名 1,變量名 2,; 7.設有下列運算符:、,其中優(yōu)先級最高的是_,優(yōu)先級最低的是_. 解對運算符、,按它們的優(yōu)先級自高到低的順序排列為:、所以,優(yōu)先級最高的是+,優(yōu)先級最低的是。 8.設二進制數(shù) A 是 0A,若想

28、通過異或運算 AB 使 A 的高 4 位取反,低 4 位不變,則二進制數(shù) B 應_. 解按位加運算的一個重要應用是讓某個整型變量的二進位位串信息的某些位信息反向,0 變成 1,而 1 變成 0. 這只要設計這樣一個位串信息,讓要變反的位為 1,不要改變的位為 0,用這個位串信息與整型變量按位加就能得到希望的結(jié)果。要使字節(jié)的高 4 位取反,低 4 位不變,則需要位串信息是 ,寫成八進制數(shù)是 0360,寫成十六進制數(shù)為 0xF0.9.設 a3,b= 2,cl, cb 的值為_.,則a b c 的值為_. 解因 a 的值為 3,b 的值是 2,條件 ab為真,其值為 1.表達式 abc 的求值順序是

29、計算ab,結(jié)果為 1,接著計算 1c,因 c 的值為 1,條件 1c 為假,結(jié)果為 0. 10.已知 a10,b20,則表達式!ab 的值為_. 解計算表達式!ab,先計算!a ,因 a的值為 10, 的值為 0.關系表達式 020 為真,!a所以表達式!ab 的值為 1. 11.設 x 和 y 均為 int 型變量,且 xl,y2,則表達式 1.0xy 的值為_. 解計算表達式 1.0xy,先求 xy,因 x和 y 是整型變量,其中的除運算是整除, 12 的結(jié)果為 0.接著計算 1.00,計算時,先將右分量轉(zhuǎn)換成 0.0,最后得到結(jié)果 1.0. 12.設整型變量 x、y、z 均為 5: 執(zhí)“

30、x-y-x”后,x_, 執(zhí)行“xyz”后,x=_. 執(zhí)行“x(yz)?x2:x2,3,2 后,x_. 解在變量 x、y、z 的值均為 5 的情況下,計算各表達式。由于表達式 x-yz 等價于表達式xx(yz)所以計算后 x 的值為 5.表達式 x%=y,z 等價于表達式 xx%(yz),所以計算后 x 的值也為 5.表達式 x(yz)? x2: x2,3,2 的計算過程用圓括號描述其計算順序是: (x=(yz)?x2:x2) ,2,3) 即這是一個逗號運算表達式,由一個賦值表達式和兩個數(shù)值構成,逗號表達式要求順序求各子表達式的值。表達式 x(yz)? x2:x2 的計算是先求賦值號右邊的條件表

31、達式,因條件(yz)為假,求出 x2 的值為 3,將該值賦給變量x,使 x 的值為 3. 13.能表述“20 x 30 或 x-100”的 C 語言表達式是_. 解首先表述 20x30 的 C 表達式可寫成20xx30.所以表述“20x30 或 x-100”的 C 表達式為 20x x 30|x-100. 14,請寫出數(shù)學式 x/y*z 的 C 語言表達式_. 解數(shù)學式子表述的是 x 除以 y 乘 z 的積,寫成 C 表達式可以寫為 x(y*z),或可等價地寫成 xyz. 15.C 語言中運算結(jié)果可以當成邏輯值使用的表達式有:_表達式、_.表達式、_表達式、_表達式、_表達式、_表達式。解在

32、C 語言中,邏輯判斷以非 0 值為真,以 0值為假。所以,幾乎所有的表達式的運算結(jié)果都可以當成邏輯值使用,如算術表達式、關系表達式、邏輯表達式、賦值表達式、逗號表達式、條件表達式等。4第三章 C 程序結(jié)構3.1 單項選擇題 1.設 a3,b4 執(zhí)行“printf(“d,d,(a,b)(b,a);”的輸出是( ),) 3,4 4,3 3, 3 4,4 解在調(diào)用格式輸出函數(shù)的語句中,其中每個格式符對應一個輸出項,格式符 d 要求輸出項內(nèi)容以十進制整數(shù)形式輸出。第一個輸出項(a,b)是一個逗號表達式,該表達式的值是 b 的值,輸出4.接著輸出字符逗號。第二個輸出項(b,a)的值是 a 的值,輸出 3

33、.所以語句執(zhí)行將輸出 4,3.正解的選擇是。2.使用“scanf(”x=%f,y%f“,x,&y)”,要使x,y 均為 1.25,正確的輸入是( ) 1.25,1.25 1.25 1.25 x1.25,y1.25X1.25 y1.25 解格式輸入函數(shù)的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉(zhuǎn)換說明。其中空格類字符用來跳過一個空格類字符序列,直至下一個非空格類字符。普通字符要求輸入字符與其完全相同。格式轉(zhuǎn)換說明對輸入字符列按格式轉(zhuǎn)換說明進行轉(zhuǎn)換,得到內(nèi)部值存儲到對應輸入項所指定的存儲位置中。函數(shù)調(diào)用 scanf(“x%f,y=%f,x,&y)以普通字符 x=開頭,輸入時也

34、要先輸入 x。接著是一個浮點數(shù)輸入格式,所有能構成一個浮點數(shù) 1.25 的字符序列都能滿足要求。接著是普通字符列”,y“,在輸入的浮點數(shù)之后也要有字符列”,y“。最后又是浮點數(shù)輸入格式,同樣所有能構成一個浮點數(shù) 1.25 的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y1.25 是能滿足上述要求的。所以正確選擇是。 3.設有 int i010,j=10;則執(zhí)行“printf(”%d,%dn“,+i,j-);”的輸出是( ) ll, 10 9,10 010, 9 10, 9 解變量 i 和 j 的初值分別為八進制數(shù) 010和十進制數(shù) 10,函數(shù)調(diào)用 Printf(“%d,%dn

35、”,+i,j)中,+i 的值是變量 i 增 1 后的值,原來值是八進制數(shù) 010,等于十進制數(shù) 8,輸出 9.j的值是變量 j 減 1 之前的值,輸出 10.格式字符申中的逗號是普通字符照原樣輸出。所以問題給出的格式輸出函數(shù)調(diào)用將輸出 9,10.正確的解答是。 4.設 a,b 為字符型變量,執(zhí)行“scanf(”a%c,b%c“,&a,&b)”后使 a 為A,b 為B,從鍵盤上的正確輸入是( ) A“B A,B AA,BB a=A, bB 解函數(shù)調(diào)用 scanf(“c%c,b%c”,&c,&b)中,普通字符必須按格式字符串要求照原樣輸入,c 格式對緊接的任何字符都輸入。所以實現(xiàn)問題的要求,輸入字

36、符列應為“aA,bB”。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號。但用字符格式輸入字符時,在要輸入字符前后不必另鍵人單引號。若鍵人單引號,則這個單引號也將作為字符被輸入。正確的解答是。 5.設 x、y、z、t 均為 int 型變量,則執(zhí)行以下語句后,t 的值為( ) xyz1;t+x|+y+z; 不定值 2 l 0 解 語 句 序 列 “x y z l ; t +x|+y&+z;”使變量 x 的值為 1,變量 t 是賦一個邏輯表達式的值。在 C 語言中,由邏輯與和邏輯或構成的邏輯表達式有特別的計算規(guī)則,順序計算各邏輯子表達式,并當一旦能得到邏輯表達式的結(jié)果時,就立即結(jié)束邏輯

37、表達式的計算,不再計算后繼邏輯子表達式。本題的邏輯表達式是兩個運算分量的邏輯或,而且左運算分量+x 的值為非 0,立即得到邏輯或運算的結(jié)果為 1,并將 1 賦給變量t,所以變量 t 的值為 1.正確解答為。 6 設 x、y、z 均為 int 型變量,則執(zhí)行以下語句后,x、y, z 的值為( ) x1; y0; z2; yz |+ x; 2、l、3 2、0、3 2、l、3 2、1、2 解 語 句 序 列 “x l ; y 0 ; z 2 ;y+&+z|+x;”先使變量 x 的值為 1,變量 y 的值為 0,變量 z 的值為 2.由邏輯與和邏輯或構成的邏輯表達式的特別計算規(guī)則,順序計算各邏輯子表達

38、式,并當一旦能得到邏輯子表達式的結(jié)果時,就立即結(jié)束邏輯子表達式的計算,不再計算該邏輯子表達式。計算 y+因 y 的值為 0,使 y+&+z 的結(jié)果為 0,立即去計算+x,這次計算使變量 y 的值5變成 1,而變量 z 的值本改變。接著計算+x,使 x的值變?yōu)?2.所以經(jīng)上述語句執(zhí)行后,x、y、z 的值依次為 2、1、2. 正確解答為。 7.假定所有變量均已正確定義,下列程序段運行后 x 的值是( ) abc0; x35; if ! x-; else if b) if c)( a)( ; ( x3;else x=4; 34 4 35 3 解以變量 a,b,c 的值均為 0,變量 x 的值為 35

39、,語句: if(!a)x-;else if(b);if(c)x3;else x4; 由兩個 if 語句組成。首先執(zhí)行前一個 if 語句“if(!a)x-;else if(b);”,因變量 a 的值為 0,條件!a 成立,執(zhí)行 x-使 x 的值變?yōu)?34.接著執(zhí)行后繼的 if 語句“if(c)x3; else x4;”,因變量 c的值為 0,條件不成立而執(zhí)行 x4,最終使變量 x的值為 4.正確解答是。 注意前一個 if 語句的 else 部分的成分語句只有“if(b);”,這是一個單分支 if 語句,且其成分語句為空語句。 9.下列語句中,句法錯誤的是(不考慮語義)() while(xy)5

40、; do x+ while(x10) ; while(0) do 2;while(ab); 解 while 語句的一般形式是:while(表達式) 語句 這里的表達式可以是任何合理的表達式,語句可以是任何語句,包括空語句,或表達式語句??赡軙鴮懙?while 語句沒有任何意義,如供選擇的while(xy)5;和while(0) ,但這兩個語句;的句法沒有任何錯誤。do-while 語句的一般形式是: do 語句 while(表達式); 其中的成分語句也可以是任何語句,但供選擇答案do x+ while(x=10); 中的代碼 x+是一個表達式,不是語句,語句必須要以分號結(jié)束,所以是錯誤的。正確

41、解答是。 10,循環(huán)語句“for(x0, y0;(y!=123)|( x4);x);”的循環(huán)執(zhí)行( ) 無限次 不確定次 4 次 3 次 解for 循環(huán)語句的初始化部分置變量 x 和 y的初值為 0,循環(huán)條件是(y!123)|(x4),每次循環(huán)后變量 X 的值增 1.由于循環(huán)過程中變量 y的值未被修改過,循環(huán)條件又是一個邏輯或,其左分量(y!123)永遠成立,也就是循環(huán)條件永遠成立。所以該循環(huán)語句將循環(huán)執(zhí)行無限次。正確解答是。 11.若 i、j 已定義為 int 類型,則以下程序段中的內(nèi)循環(huán)體的執(zhí)行次數(shù)是( ) for( i5; i; i-) for(j 0; j4;j+) 20 24 25

42、30 解問題所給的程序段的外循環(huán)是一個階循環(huán)語句,它的初始化部分置變量 i 的初值為 5,循環(huán)條件簡寫成 i,即 i!0,每次循環(huán)后變量 i 的值減 1.所以外循環(huán)共控制 5 次循環(huán)。內(nèi)循環(huán)也是一個for 循環(huán)語句,它的初始化部分置變量 j 的初值為 0,循環(huán)條件是 j4,每次循環(huán)后變量 j 的值增 1.所以內(nèi)循環(huán)共控制 4 次循環(huán)。這樣,如內(nèi)循環(huán)的體內(nèi)未曾對變量 i 和 j 有修改,在內(nèi)、外循環(huán)一起控制下,內(nèi)循環(huán)體共被重復執(zhí)行 20 次。正確解答是。 12.假定 a 和 b 為 int 型變量,則執(zhí)行以下語句后 b 的值為( ) a1; b10; do b-a; a+; while(b-0)

43、; 9 -2 -1 8 解在這個程序段中,循環(huán)開始前變量 a 的值為 1,b 的值為 10,每次循環(huán)從變量 b 減去 a,并讓 a 增 1,并在循環(huán)條件判定時,又讓 b 減去 1.第一次循環(huán)后,變量 b 的值變成 9,變量 a 的值變?yōu)?2,循環(huán)判斷時,因 b 的值大于 0,循環(huán)條件不成立,結(jié)束循環(huán)。但在循環(huán)判斷時,讓 b 減去了 1,所以循環(huán)結(jié)束時,變量 b 的值為 8.正確的解答是。 13.設 x 和 y 為 int 型變量,則執(zhí)行下面的循環(huán)后,y 的值為( )for(yl, xl; y50; y) if(x10) break; if(x2=1) x5; continue; x - 3;

44、2 4 6 8 解 for 循環(huán)語句的初始化部分置變量 x 和y 的初值為 1,循環(huán)條件是(y50),每次循環(huán)后變量 y 的值增 1,控制循環(huán)最多執(zhí)行 50 次。循環(huán)體有三個語句:首先在發(fā)現(xiàn)變量 x 的值大于等于 10時,結(jié)束循環(huán);接著是當變量 x 除 2 的余數(shù)為 1(即變量 x 是奇數(shù))時,讓變量 X 值增 5,讓 x 變成偶數(shù),并直接進入下一輪循環(huán);如變量 x 是偶數(shù),則從變量 x 減去 3,讓變量 x 變成奇數(shù)。由上述分析知,每兩次循環(huán)使變量 x 的值增加 2.第一次循環(huán)后,變量 x 的值變成 6.第二次循環(huán)后,變量 x 的值變成3. 第三次循環(huán)后,變量 x 的位變成 8.第四次循環(huán)后

45、,變量 x 的值變成 5.第五次循環(huán)后,變量 x 的值變成10.第六次循環(huán)時,因變量 x 的位大于等于 10,直接跳出循環(huán),這次循環(huán)是非正常結(jié)束,對變量 y 的修正只執(zhí)行了 5 次。所以循環(huán)結(jié)束后,變量 y 的值增至 6.正確的解答是。 14.在 C 語言中,下列說法中正確的是( ) 不能使用“do 語句 while(條件)”的循環(huán) “do 語句 While(條件)”的循環(huán)中必須使用“break”語句退出循環(huán) “do 語句 while(條件)”的循環(huán)中,當條件非 0 時將結(jié)束循環(huán) “do 語句 while(條件)”的循環(huán)中,當條件為 0 時將結(jié)束循環(huán) 解 do-while 語句的一般形式是:

46、do 語句 while(表達式); 其語義是重復執(zhí)行其成分語句,直至表示條件的表達式值為 0 時結(jié)束。do-while 語句是正常使用的一種循環(huán)結(jié)構之一。do-while 語句的循環(huán)結(jié)束條件由 while 后的表達式值為 0 所控制,并不一定要有 break 語句跳出循環(huán)來結(jié)束循環(huán)。do-while 語句在條件值非 0 時,將繼續(xù)循環(huán),而不是結(jié)束循環(huán)。條件值為 0 時,才結(jié)束循環(huán)。所以正確的選擇是。63.2 填充題 1. 結(jié) 構 化 程 序 設 計 規(guī) 定 的 三 種 基 本 結(jié) 構 是_結(jié)構,選擇結(jié)構和_結(jié)構。 解結(jié)構化程序設計的三種基本控制結(jié)構是順序結(jié)構、選擇結(jié)構和循環(huán)結(jié)構。 2.若有定義

47、“int a25,b14, c19;”,以下語句的執(zhí)行結(jié)果是_. if ( a+25b-2c+) prinif(“*ad,bd,cdn”, a,b,c); else printf(“#ad,bd,cdn”,a, b,c); 解問題所給的 if 語句中,條件 a+25b-2c+是先求邏輯與的第一個運算分量,它是一個關系式,關系成立。接著判定第二個邏輯與運算分量,又是一個關系式,由于變量 b的值是 14,b 不小于等于 2,運算分量的關系式不成立,導致 if 語句的條件為假,執(zhí)行 else 部分。在求且語句的條件時,計算了 2 個邏輯與分量,使變量 a 的值增了 1,變量 b 的值被減了 1.所以輸出內(nèi)容是:a=26,b13,c19. 3.以下兩條 if 語句可合并成一條 if 語句為_. if(ab) x1; else y2; if(ab)printf(“*y=%dn” ,y); else printf( “#x%dn” ,x); 解在以上兩條 if 語句中,兩個條件剛巧相反。若將前一個 if 語句的第一個成分語句與第二個if 語句的第二個成分語句合并;第一個 if 語句的第二個成分語句與第二個 if 語句的第一個成分語句合并,寫成一條 if 語句如下: if ab)(x1;printf “#x

溫馨提示

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

評論

0/150

提交評論