C語言基本題解答_第1頁
C語言基本題解答_第2頁
C語言基本題解答_第3頁
C語言基本題解答_第4頁
C語言基本題解答_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言基本概念題解答選編 一、單項選擇題 1. 以下字符列中,能作為C程序自定義標識符的是 num(10)   file_bak   break   class+2【解】C語言規(guī)定,C程序的標識符的命名規(guī)則是要由英文字母或下線字符開頭,由英文字母、下線字符和數(shù)字符構(gòu)成的字符序列,并且不可以與C語言規(guī)定的保留字相同。在供選擇的答案中,選擇含有括號字符,不是標識符,它好象是函數(shù)調(diào)用表達式;選擇符合C語言關(guān)于標識符的構(gòu)成規(guī)則,所以它可以作為標識符;選擇是C語言的保留字,它不可以再被程序設(shè)定為標識符;選擇是一個加法運算算術(shù)

2、表達式,也不可以作為程序的標識符。所以解答是。 2下列字符列中,不是用來表達轉(zhuǎn)義字符是         074   0【解】轉(zhuǎn)義字符有三種書寫形式:反斜杠字符后接上某個規(guī)定的字符;反斜杠字符后接上1至3個八進制數(shù)字符;反斜杠字符和字符x之后接上1至2個十六進制數(shù)字符。后兩種分別以八進制數(shù)和十六進制數(shù)直接給出字符的ASCII代碼值。而074是八進制整數(shù),不是轉(zhuǎn)義字符。所以解答是。 3下列字符列中,可以作為“字符串常量”的是   ABC   ABC 

3、  abc   a【解】C程序中,一個字符串常量是表示一個字符序列,書寫時,用雙引號字符前后括住這個字符序列。所以只有ABC是一個正確的字符串常量,其余都不是。其中,ABC可作為標識符,字符列abc不能出現(xiàn)在C程序中,a是一個字符常量。所以解答是。 4在用一個字節(jié)存儲一個字符的系統(tǒng)中,n在內(nèi)存占用的字節(jié)數(shù)是   1   2   3   4【解】一般來說,一個字符在內(nèi)存中只占1個字節(jié),n是轉(zhuǎn)義字符,其意義是換行符,它作為一個字符存儲,在內(nèi)存也只占1個字節(jié)。所以解答是。 

4、;5字符串 xyz在內(nèi)存占用的字節(jié)數(shù)是   3  4   6   8【解】字符串中的每個字符占1個字節(jié),但C程序在存儲字符串時,要在最后一個有效字符后面接上1個字符串結(jié)束的標記符0。這樣,存儲字符串常量xyz需要4個字節(jié)。所以解答是。 6設(shè)變量m,n,a,b,c,d均為0,執(zhí)行(m = a=b)|(n=c=d)后,m,n的值是   0,0  0,1   1,0   1,1【解】計算(m = a=b)|(n=c=d)的過程是先計算邏輯或的左運算分量

5、(m = a=b)的值,由于賦值運算符的優(yōu)先級比關(guān)系運算符=的優(yōu)先級低,又先計算a=b。因a,b均為0后,所以比較結(jié)果值為1。將1賦給變量m,使變量m的值變?yōu)?。同時這個賦值運算的結(jié)果也是1,這樣邏輯運算的左運算分量的值為1。由于邏輯或運算的左運算分量值為1,按照C語言對邏輯或運算優(yōu)化計算的規(guī)定,不再計算邏輯或的右運算分量,而直接得到邏輯或運算的結(jié)果為1。由于邏輯或的右運算分量不曾計算過,所以變量n的值也不為變化。這樣,上述表達式計算后,變量m 的值為1,變量n的值為0。所以解答是。 7設(shè)a為5,執(zhí)行下列語句后,b的值不為2的是   b = a/2  b

6、 = 6-(-a)   b = a%2   b = a < 3 ? 3: 2【解】因兩個整型數(shù)據(jù)相除,結(jié)果是整數(shù),當(dāng)a的值為5時,計算表達式b = a/2后,使b的值為2。計算表達式b = 6 - (-a)是先計算子表達式(-a),先讓a的值減1變成4,并以減1后的a為子表達式的結(jié)果,所以子表達式的結(jié)果為4,最后使b的值為2。在計算表達式b =  a % 2時,求余運算a % 2的結(jié)果為1,最后使變量b的值為1。計算表達式b = a < 3 ? 3 : 2時,先計算條件表達式a < 3 ? 3 : 2,以2為結(jié)果,最后也使變量

7、b的值為2。所以解答是。 8執(zhí)行語句“x = (a = 3, b = a-);”后,x,a,b的值依次為   3,3,2  2, 3,2   3,2,3   2,3,3【解】計算表達式x = (a = 3, b = a-)時,先計算賦值號右端圓括號內(nèi)的逗號表達式。逗號表達式要求各子表達式順序計算,并以最后子表達式的值為整個逗號表達式的結(jié)果。所以該表達式計算時,先讓變量a的值為3,a-的值是a當(dāng)時的值,以該值為結(jié)果賦給變量b,并以該值為逗號表達式的值賦給變量x,然后a的值被減少1。所以計算該表達式后,使變量x,a,b

8、的值依次為3,2,3。所以解答是。 9設(shè)有語句“int a=3;”,則執(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。所以解答是。 10在以下一組運算符中,優(yōu)先級最高的運算符是   <=  =  %  &&【解】常規(guī)運

9、算符的優(yōu)先級自高到低的排列順序是算術(shù)運算符、移位運算符、關(guān)系運算符、按位運算符、邏輯運算符、條件運算符、賦值運算符、逗號運算符。所以問題所給的四個運算符按優(yōu)先級自高到低的排列順序是%,<=,&&,=。所以解答是。 11設(shè)整型變量i的值為3,則計算表達式i-i后表達式的值為   0  1  2  表達式出錯【解】有些運算符只有一個字符,也有許多運算符由兩個字符組成。特別是有些字符既可是單個字符的運算符,又能組成雙字符的運算符。編譯系統(tǒng)在識別源程序時,通常是盡量多地讀入字符,能組成多字符單詞的先盡量組成多字符單詞。所

10、以表達式i-i,被編譯器理解為(i-)-i。另外,當(dāng)表達式中某變量有后綴自增和自減運算時,先按變量的原值計算表達式,然后再對變量進行自增和自減運算。同樣地,當(dāng)表達式中某變量有前綴自增和自減運算時,先對變量進行自增和自減運算,然后再按變量的新值計算表達式。按這個約定,求表達式(i-)-i是計算i-i的值為0,然后再對i作自減運算。這樣,表達式(i-)-i的值為0。所以解答是。 12若已定義x和y為double類型,則表達式:x=1, y = x+3/2的結(jié)果是   1  2  2.0  2.5【解】由于變量x和y都是double類型,表

11、達式x=1, y = x+3/2是先計算x=1,由于1是整型的,x是double類型的,該計算先將整數(shù)1轉(zhuǎn)換成double類型的1.0,并將1.0賦給變量x。計算y = x+3/2是先求3/2的值,因是兩整數(shù)相除,結(jié)果是整型值1,然后在計算x+1時,也先將1轉(zhuǎn)換成1.0,然后求得x+1的值為2.0,最后將該值賦給變量y,并得到整個表達式的值為2.0,簡寫成2.0。所以解答是。 13設(shè)a=1,b=2,c=3,d=4,則表達式a < b ? a : c < d ? a : d的結(jié)果為   4  3  2  1【解】條件運算符的

12、優(yōu)先級比關(guān)系運算符的優(yōu)先級低,并且它的結(jié)合性是自右向左的,所以表達式a < b ? a : c < d ? a : d可用圓括號等價地寫成(a < b) ? a : (c < d) ? a : d)。因a<b成立,計算結(jié)果為a的值1。所以解答是。 14設(shè)a為整型變量,下列C表達式中,不能表達數(shù)學(xué)關(guān)系式:10<a<15的是   10<a<15         a = 11 | a = 12 | a = 13 | a = 14 

13、0;  a>10&&a<15      !(a<=10)&&!(a>=15)【解】數(shù)學(xué)關(guān)系式10<a<15表示a只能是11,12,13,14四個值之1。用C表達式表示這個條件,可寫成a >10&& a < 15,或!(a<=10)&&!(a>=15),或a = 11 | a = 12 | a = 13 | a = 14等。若寫成10<a<15,該算式的計算順序是先求出10<a的結(jié)果0或1,然后以

14、這個結(jié)果與15比較,是否小于15,顯然這與數(shù)學(xué)式子的意義是不一致的。所以解答是。 15若有以下定義:char a; int b; float c; double d;則表達式a*b+d-c值的類型為  float  int  char  double【解】基本類型的數(shù)據(jù)可以混合運算,但運算時,對要求運算分量類型相同的運算來說,如運算分量的類型不是全相同,則會有自動類型轉(zhuǎn)換發(fā)生。類型自動轉(zhuǎn)換規(guī)則規(guī)定類型低(簡單)的向類型高(復(fù)雜)的轉(zhuǎn)換。各類型由高到低的排列順序是:       long

15、 double 、double、float、unsigned long、long、unsigned int、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類型的值。所以解答是。  16設(shè)a,b和c都是int型變量,且a=3,b=4,c=5,則下面的表達式中值為0的是 a&&b  a<=b  a|b+c&&b-c&#

16、160; !(a<b)&& !c | 1)【解】對于表達式a&&b,兩個非0運算分量的邏輯與結(jié)果為1。對于表達式a<=b,由于關(guān)系式成立,結(jié)果也為1。又由于變量a為非0,表達式a|b+c&&b-c的結(jié)果也為1。對于表達式!(a<b)&&!c|1),先是計算(a<b)得到結(jié)果1;計算!c得到結(jié)果為0;再計算它們的邏輯與,結(jié)果為0。繼續(xù)與1求邏輯或,得到結(jié)果為1。最后,對1求邏輯非,得到結(jié)果為0。所以解答是。 17設(shè)a=3,b=4,執(zhí)行“printf(“%d, %d”, (a, b), (b, a);

17、”的輸出是 3,4  4,3  3,3  4,4【解】在調(diào)用格式輸出函數(shù)的語句中,其中每個格式符對應(yīng)一個輸出項,格式符d要求輸出項內(nèi)容以十進制整數(shù)形式輸出。語句中的第一個格式符對應(yīng)輸出項(a, b)是一個逗號表達式,該表達式的值是b 的值,所以先輸出4。接著輸出字符逗號。同樣輸出項(b,a)的值是a的值,輸出3。所以語句執(zhí)行將輸出4, 3。正解的選擇是。 18使用“scanf(“x=%f,y=%f”, &x, &y)”,要使x, y均為1.25,正確的輸入是  1.25,1.25  1.25  1.25

18、60; x=1.25,y=1.25  x=1.25  y=1.25【解】格式輸入函數(shù)的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉(zhuǎn)換說明。其中空格類字符用來自動跳過空格類字符,直至下一個非空格類字符。普通字符要求輸入字符與其完全相同。格式轉(zhuǎn)換說明對輸入字符列按格式轉(zhuǎn)換說明進行轉(zhuǎn)換,得到內(nèi)部值存儲到對應(yīng)輸入項所指定的存儲位置中。格式輸入函數(shù)調(diào)用scanf(“x=%f,y=%f”, &x, &y)以普通字符x=開頭,輸入時也要先輸入x=。接著是一個浮點數(shù)輸入格式,所有能構(gòu)成一個浮點數(shù)1.25的字符序列都能滿足要求。接著是普通字符列“,y=”,

19、在輸入的浮點數(shù)之后也要有字符列“,y=”。最后又是浮點數(shù)輸入格式,同樣所有能構(gòu)成一個浮點數(shù)1.25的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y=1.25是正確的輸入。所以選擇。    通常,格式輸入函數(shù)調(diào)用中,不在格式字符串插入普通字符,要求輸入與格式中的普通字符匹配的字符,而是簡潔地寫上輸入格式即可。 19設(shè)a,b為字符型變量,執(zhí)行“scanf(“a=%c,b=%c”, &a, &b)”后使a為A,b為B,從鍵盤上的正確輸入是  AB  A,B  A=A,B=B  a=A,b

20、=B【解】函數(shù)調(diào)用scanf(“a=%c,b=%c”, &a, &b)中,普通字符必須按格式字符串要求照原樣輸入,c格式對緊接的任何字符都輸入。所以實現(xiàn)問題的要求,輸入字符列應(yīng)為“a=A,b=B”。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號。但用字符格式輸入字符時,在要輸入字符前后不必另鍵入單引號。若鍵入單引號,則這個單引號也將作為字符被輸入。正確的解答是。 20設(shè)有int i=010, j=10;則執(zhí)行“printf(“%d, %dn”, +i, j-);”的輸出是  11,10  9,10  010,9 

21、10,9【解】變量i和j的初值分別為八進制數(shù)010和十進制數(shù)10,格式輸出函數(shù)調(diào)用printf(“%d, %dn”, +i, j-)中,+i的值是變量i增1后的值,原來值是八進制數(shù)010,等于十進制數(shù)8,輸出9。j-的值是變量j減1之前的值,輸出10。格式字符串中的逗號是普通字符照原樣輸出。所以問題給出的格式輸出函數(shù)調(diào)用將輸出9,10。正確的解答是 21假定所有變量均已正確定義,下列程序段運行后x的值是   a = b = c = 0; x = 35;      if(!a)x-;else if(b);if(c)x

22、 = 3;else x = 4; 34  4  35  3【解】以變量a,b,c的值均為0,變量x的值為35,語句:      if(!a)x-;else if(b);if(c)x = 3;else x = 4;由兩個if語句組成。首先執(zhí)行前一個if語句“if(!a)x-;else if(b);”,因變量a的值為0,條件!a成立,執(zhí)行x-使x的值變?yōu)?4。接著執(zhí)行后繼的if語句“if(c)x = 3;else x = 4;”,因變量c的值為0,條件不成立而執(zhí)行x = 4,最終使變量x的值為4。正確解答是。注意前一個

23、if語句的else部分的成分語句只有“if(b);”,這是一個單分支if語句,且其成分語句為空語句。 22下面的程序段所表示的數(shù)學(xué)函數(shù)關(guān)系是     y = -1;     if(x!=0) if(x>0) y = 1; else y = 0;      -1  (x<0)          1  (x < 0)

24、0;          0  (x<0)          -1  (x<0) y = 0  (x=0)   y = -1 (x = 0)   y = -1 (x = 0)  y = 1 (x = 0)       1  (x>0) 

25、0;        0  (x > 0)           1 (x > 0)         0 (x > 0)【解】程序段首先置變量y的值為-1,接著按變量x值的不同情況重置變量y的值。重置的首要條件是x!=0,若變量x的值為0,則不再重置變量y的值,所以在x值為0情況下,y的值是-1。在變量x的值不等于0的條下,

26、若x的值大于0,重置變量y的值為1;若變量x的值小于0,重置變量y的值為0。所以程序段實現(xiàn)當(dāng)變量x的值為0時,變量y的值為-1;當(dāng)變量x的值大于0時,置變量y的值為1;當(dāng)變量x的值小于0時,置變量y的值為0。正確解答為。 23設(shè)int a = 8, b = 7, c = 6, x = 1;執(zhí)行語句   if (a > 6) if (b > 7) if (c > 8) x = 2; else x = 3;后x的值是 0    1    2    3【解】將上述

27、語句寫成易讀的結(jié)構(gòu)化形式:   if (a > 6)      if(b > 7)         if (c > 8)           x = 2;        else   x = 3;該語句的執(zhí)行過程是,首先判定(a > 6),因a 的值是8,條件成立;

28、接著判定(b > 7),因b的值是7,條件不成立。在上述語句中,沒有對應(yīng)if(b > 7)的else,上述語句就因(b > 7)的條件不成立而不執(zhí)行任何有意義的動作,結(jié)束該語句的執(zhí)行。這樣,變量a、b、c和x的值都不會因執(zhí)行上述語句而改變,所以變量x 的值依舊保持1。所以解答是。 24執(zhí)行下列程序段   x = 9;   while (x > 7)     printf(“*”); x-; 后輸出的結(jié)果是 *    *    *&#

29、160;   *【解】上述代碼以x的初值為9,在x>7成立的情況下循環(huán),每次循環(huán)輸出一個*字符,并讓x的值減1。共執(zhí)行2次循環(huán),也就共輸出了2個*字符。所以解答為。 25循環(huán)語句“for(x=0, y=0; (y!=123) | (x < 4); x+);”的循環(huán)執(zhí)行 無限次   不確定次  4次      3次【解】for循環(huán)語句的初始化部分置變量x和y的初值為0,循環(huán)條件是(y!=123) | (x < 4),每次循環(huán)后變量x的值增1。由于循環(huán)過程中變量y的值未被

30、修改過,循環(huán)條件又是一個邏輯或,其左分量(y!=123)永遠成立,也就是循環(huán)條件永遠成立。所以該循環(huán)語句將循環(huán)執(zhí)行無限次。正確解答是。 26設(shè)x和y為int型變量,則執(zhí)行下面的循環(huán)后,y的值為for(y=1, x=1; y <=50; y+)    if(x >= 10) break;   if(x%2 = 1) x += 5; continue;   x -= 3; 2  4  6  8【解】for循環(huán)語句的初始化部分置變量x和y的初值為1,循環(huán)條件是(y<=50),每次循環(huán)

31、后變量y的值增1,控制循環(huán)最多執(zhí)行50次。循環(huán)體有三個語句:首先在發(fā)現(xiàn)變量x的值大于等于10時,結(jié)束循環(huán);接著是當(dāng)變量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)后,變量x的值變成5。第五次循環(huán)后,變量x的值變成10。第六次循環(huán)時,因變量x的值大于等于10,直接跳出循環(huán),這次循環(huán)是非正常結(jié)束,對變量y的修正只執(zhí)行了5次。所以循環(huán)結(jié)束后,變量y的值增至

32、6。正確的解答是。 27在C語言中,下列說法中正確的是  編程時盡量不要使用“do 語句 while(條件)”的循環(huán) “do 語句 while(條件)”的循環(huán)中必須使用“break”語句退出循環(huán) “do 語句 while(條件)”的循環(huán)中,當(dāng)條件非0時將結(jié)束循環(huán) “do 語句 while(條件)”的循環(huán)中,當(dāng)條件為0時將結(jié)束循環(huán)【解】do-while語句的一般形式是:  do 語句  while (表達式);其語義是重復(fù)執(zhí)行其成分語句,直至表示條件的表達式值為0時結(jié)束。do-while語句是正常使用的一種循環(huán)結(jié)構(gòu)之一。do-while語句的循環(huán)結(jié)束條件由

33、while 后的表達式值為0所控制,并不一定要有break語句跳出循環(huán)來結(jié)束循環(huán)。do-while語句在條件值非0時,將繼續(xù)循環(huán),而不是結(jié)束循環(huán)。條件值為0時,才結(jié)束循環(huán)。所以正確的選擇是。 28若有下列說明,則數(shù)值為4的表達式是int a12 = 1,2,3,4,5,6,7,8,9,10,11,12;char  c = a, d, g;   ag-c  a4  ad-c  ad-c【解】數(shù)組元素的下標自0開始順序編號,值為4的元素是a3。所以只有下標表達式的值為3才是正確的。下標表達式g-c中的的變量g和c的值是還未被設(shè)定的,其值不

34、確定。a4的值為5,下標為4是不對的。d-c的值為1,a1的值是2,所以也是不對的。變量c的值為a,d-c=3,所以正確解答是。 29設(shè)有定義:“char s12=“string”;”,則printf(“%dn”, strlen(s);的輸出是 6  7  11  12【解】在C語言中,字符串是指在有效字符之后有字符串結(jié)束標記符的字符列,并約定字符串的長度是指字符串中有效字符個數(shù),不包括字符串的結(jié)束標記符。存于字符數(shù)組s中的字符串是”string”,該字符串的長度為6,所以輸出該字符串的長度應(yīng)是6。正確的解答是。 30下列C代碼中,合法的數(shù)組定

35、義是   int a = “string”;   int a5 = 0, 1, 2, 3, 4, 5;   char a = “string”;     char a = 0, 1, 2, 3, 4, 5;【解】錯誤的原因是整數(shù)數(shù)組不可以用字符串對其初始化。錯誤的原因是,數(shù)組初始化時,初始化指定的值的個數(shù)不能多于數(shù)組的元素個數(shù)。錯誤的原因是,能用字符串初始化的只有字符指針變量,或字符數(shù)組。字符串不能對其它類型的變量初始化,包括字符變量。是正確的,因為字符數(shù)組可以用小整數(shù)(作為字符的ASCII代碼

36、值)對其元素初始化。 31字符串”mx43np102q”的長度是 7     9   15   16【解】字符串的長度是指字符串中有效字符的個數(shù)。在C程序中,組成字符串的字符可以是一般的普通字符,也可以是轉(zhuǎn)義字符。其中轉(zhuǎn)義字符又可以用多種不同形式來表達:反斜杠字符之后接上預(yù)先規(guī)定的字符,用來表示特殊字符或特定意義的控制字符。如單引號字符、雙引號字符、反斜杠字符等特殊字符,換行、回車、退格等控制字符。反斜杠字符之后接上1至3位八進制數(shù)字符,這是直接用八進制數(shù)字表示字符的ASCII代碼的方式。反斜杠字符之后接上字符x,

37、并后接1至2個十六進制數(shù)字符,這是直接用十六進制數(shù)字表示字符的ASCII代碼的方式。后二種能表示C語言允許的任何字符。在本小題給出的字符串中,字符x43是用十六進制數(shù)表示的一個字符,字符表示一個反斜杠字符,字符n表示一個換行字符,字符102是用八進制數(shù)表示的一個字符。這樣,所給字符串只有7個有效字符。所以,該字符串的長度是7,解答為。 32設(shè)有如下定義,則正確的敘述為char x = “abcdefg”, y = a, b, c, d, e, f, g;  數(shù)組x和數(shù)組y等價        &#

38、160;       數(shù)組x和數(shù)組y長度相同  數(shù)組x的長度大于數(shù)組y的長度      數(shù)組x的長度小于數(shù)組y的長度【解】不指定數(shù)組長度的字符數(shù)組定義,其所需要的字節(jié)數(shù)可由初始化中給出的值的個數(shù)確定。字符數(shù)組可以用字符串初始化,也可用字符逐個給字符數(shù)組的元素初始化。但盡管用字符初始化時,給出了字符串中的全部字符,但字符串自動會含有字符串的結(jié)束標記符,字符串初始化所需要的字節(jié)個數(shù)會比用同樣多的字符初始化多1個字節(jié)。所以只有才是正確的。 33 設(shè)有定義“int a = 3, b, *p =

39、 &a;”,則下列語句中使b不為3的語句是   b = *&a;  b = *p;  b = a;  b = *a;【解】定義有int a = 3, b, *p = &a;對b賦值的表達式有*&a、*p、a、*a。引用變量a 的值有兩種方法,一是直接引用a ,二是通過a 的指針間接引用a。對于后者,又有多種表達方法,通過指向a 的指針p,間接引用a 的內(nèi)容,如*p?;蛲ㄟ^求地址運算符由變量a得到其指針&a,再由這指針表達式間接引用a 的內(nèi)容,如*&a。所以表達式*&a、*p和a都能引用變量

40、a的值,而使b的值為3。而表達式*a是錯誤的,因為a不是指針變量,不能對它施行取內(nèi)容運算符*。所以解答是。 34設(shè)char str110 = “ABCDE”, str210 = “xyz”;則執(zhí)行語句  printf(“%d”, strlen(strcpy(str1, str2); 后的輸出結(jié)果是  9    8    5    3【解】上述代碼是輸出表達式strlen(strcpy(str1, str2)的值,該表達式的求值 順序是先執(zhí)行函數(shù)調(diào)用strcpy(str1, s

41、tr2),該函數(shù)調(diào)用將str2 所指字符串內(nèi)容復(fù)制到str1所指的字符數(shù)組中,并返回存放于str1中的字符串的首字符的指針。經(jīng)函數(shù)調(diào)用strcpy(str1, str2)后,str1中的內(nèi)容變成字符串“xyz”。接著求更新成字符串“xyz”的str1中的字符串的長度,并輸出。這樣,代碼將輸出整數(shù)3。所以解答為。 35設(shè)int x = 1, 3, 5, 7, 9, 11, 13, *p = x;則不能正確引用數(shù)組元素的表達式是  *(p-)  *(-p)   *(p+)    *(+p)【解】根據(jù)C語言關(guān)于數(shù)組變量名

42、表達式就是數(shù)組首元素的指針的約定,上述指針變量p的初值是指向數(shù)組x的首元素x0。表達式*(p-)的求值順序是先求p-,它的值是p 的原先值,即x0的指針&x0。這樣,表達式*(p-)引用的是數(shù)組x的首元素x0,是對數(shù)組x的一個有意義元素的引用。但這里要指出的是在該表達式求值后,變量p 的值將要減去一個單位,使p 指向x0的前一個位置,這是一個在程序中沒有確定意義的位置。表達式*(-p)的求值順序是先求-p,它首先讓變量p 的值減去一個單位,使p 指向x0的前一個位置,這是一個在程序中沒有確定意義的位置。表達式*(-p)引用的不再是數(shù)組x的一個有意義的元素。表達式*(p+)的求值順序是先

43、求p+,它的值是p 的原先值&x0。這樣,表達式*(p+)引用的是數(shù)組x的首元素x0,是對數(shù)組x的一個有意義元素的引用。在該表達式求值后,變量p 的值將要增加一個單位,使p 是x0的后一個元素的指針,即&x1。表達式*(+p)的求值順序是先求+p,它首先讓變量p 的值增加一個單位,使p的值是x0的后一個元素的指針,即&x1。這樣,表達式*(+p)引用的是數(shù)組x的元素x1,也是一個有意義的引用。所以解答為。 36設(shè) int x = 1, 2, 3, 4, y, *p = &x1;則執(zhí)行語句   y = (*-p)+;  后變

44、量y的值為  1    2     3      4【解】上述指針變量p的初值是指向數(shù)組x的元素x1。表達式y(tǒng) = (*-p)+的求值順序是先求-p,它首先讓變量p 的值減去一個單位,使p 指向x0。接著求表達式*-p,這是對x0的引用。表達式(*-p)+也就是x0+,它的值是 x0的原來值1。最后,表達式y(tǒng) = (*-p)+將1賦給變量y,使y的值為1。經(jīng)上述表達式求值后,x0的值變成2。所以解答為。 37在C語言中,下列說法中,錯誤的敘述是 

45、 函數(shù)定義可以分為兩個部分:函數(shù)說明部分和函數(shù)體  主函數(shù)可以調(diào)用任何非主函數(shù)  任何非主函數(shù)可以調(diào)用其它任何非主函數(shù)  程序可以從任何函數(shù)開始執(zhí)行【解】每個C函數(shù)的定義分兩部分,函數(shù)說明部分和函數(shù)體,所以敘述是正確的敘述。在C語言中,函數(shù)可以遞歸調(diào)用,主函數(shù)可以調(diào)用程序中的任何函數(shù),當(dāng)然可以調(diào)用任何非主函數(shù)的其它函數(shù),所以敘述是一個正確的敘述。同樣理由,敘述也是正確的。C語言規(guī)定,C程序只有一個主函數(shù),并總是從主函數(shù)開始執(zhí)行,不能從非主函數(shù)開始執(zhí)行。所以,說程序可以從任何函數(shù)開始執(zhí)行是錯誤的。所以解答是。 38執(zhí)行下列程序   in

46、t fun(int x1, int x2)     int x;   x1 > x2 ? (x = 3) : (x = 4); return x + x1;       main()     printf(“%dn”, fun(7, 8);   后輸出結(jié)果是  9    10     11      12【解】上述程序中,

47、主函數(shù)以實際參數(shù)7和8調(diào)用函數(shù)fun,并輸出函數(shù)的返回值。函數(shù)fun被調(diào)用時,形式參數(shù)x1的初值是7,x2的初值是8。函數(shù)執(zhí)行表達式語句x1 > x2 ? (x = 3) : (x = 4)這是一個條件表達式,因條件x1 > x2不成立,條件表達式求(x = 4),該表達式的求值使函數(shù)的局部變量x的值為4。最后,函數(shù)返回x + x1的值11。所以解答為。 39函數(shù)調(diào)用語句“f(e1, e2), (e3, e4, e5);”中參數(shù)的個數(shù)是。      1     2    

48、4     5  【解】上述函數(shù)調(diào)用中,(e1, e2)和(e3, e4, e5)是兩個帶括號的表達式,所以函數(shù)調(diào)用只提供兩個實參,其中第一個實參先計算e1的值,然后計算e2,并以e2的值為實參。第二個實參順序計算e3,e4,e5,并以e5的值為實參。所以解答是。 40以下程序中的for循環(huán)執(zhí)行的次數(shù)是   #include  <stdio.h>   #define  N  2   #define  M  N+1 

49、  #define  NUM  (M+1)*M/2   main()     int i, n = 0;      for(i = 1; i <=NUM;i+) n+; printf(“%d”, n);         printf(“n”);          5     6    

50、; 8     9  【解】代碼NUM被替換成(2+1+1)* 2+1/2,所以其值是8。所以程序中的for循環(huán)執(zhí)行的次數(shù)是8次。正確解答是。  二、填充題 1用高級語言編寫的程序稱為程序,它可以通過程序翻譯一句執(zhí)行一句的方式執(zhí)行,也可以通過程序一次翻譯產(chǎn)生程序,然后執(zhí)行。【解】用高級語言編寫的程序稱為源程序,源程序不能在計算機上直接運行,運行源程序有兩種方式:一種是通過解釋程序,對源程序逐句解釋執(zhí)行;另一種是先讓編譯程序?qū)⒃闯绦蛞淮畏g產(chǎn)生目標程序(目標程序是計算機可直接執(zhí)行的機器語言程序,它是一種二進制代碼程序),然后執(zhí)

51、行目標程序。  2C程序是由函數(shù)構(gòu)成的。其中有并且只能有個主函數(shù)。C語言程序的執(zhí)行總是由函數(shù)開始,并且在函數(shù)中結(jié)束(如別的函數(shù)未調(diào)用終止程序執(zhí)行的庫函數(shù))?!窘狻緾程序是由若干函數(shù)構(gòu)成的。其中有并且只能有1個主函數(shù)(用main命名)。C程序的執(zhí)行總是由主函數(shù)開始執(zhí)行,通常在主函數(shù)中結(jié)束(如沒有在別的函數(shù)中調(diào)用終止程序執(zhí)行的庫函數(shù)的話)。  3在C程序中,判邏輯值時,用表示邏輯值“真”, 又用表示邏輯值“假”。 在求邏輯值時,用表示邏輯表達式值為“真”, 又用表示邏輯表達式值為“假”?!窘狻吭贑程序中,判邏輯值時,用非0表示真;而判邏輯值時,用數(shù)0表示假。

52、邏輯表達式計算時,邏輯表達式值為真是用1表示的,若邏輯表達式的值為假,則用0表示。  4無符號基本整型的數(shù)據(jù)類型符為,雙精度實型數(shù)據(jù)類型符為,字符型數(shù)據(jù)類型符為。【解】無符號的基本整型的類型符為unsigned int,或簡寫成unsigned。雙精度實型數(shù)據(jù)類型符為double,字符型數(shù)據(jù)類型符為char。  5設(shè)有下列運算符:<<、+、+、&&、<=,其中優(yōu)先級最高的是,優(yōu)先級最低的是?!窘狻繉\算符<<、+、+、&&、<=,按它們的優(yōu)先級自高到低的順序排列為:+、+、<<

53、;、<=、&&所以,優(yōu)先級最高的是+,優(yōu)先級最低的是&&。 6設(shè)整型變量x、y、z均為5: 執(zhí)行“x -= y-x”后,x = , 執(zhí)行“x %= y+z”后,x = , 執(zhí)行“x = (y>z)?x+2:x-2,3,2”后,x = ?!窘狻吭谧兞縳、y、z的值均為5的情況下,計算各表達式。由于表達式x-=y-z等價于表達式x = x (y-z),所以計算后x的值為5。表達式x%=y+z等價于表達式x = x % (y+z),所以計算后x的值也為5。表達式x =(y>z)? x+2 : x-2,3,2的計算過程用圓括號描述其計算順序是

54、:       (x =(y>z)?x+2:x-2),3),2即這是一個逗號運算表達式,由一個賦值表達式和兩個數(shù)值構(gòu)成,逗號表達式要求順序求各子表達式的值。表達式x =(y>z)?x+2:x-2的計算是先求賦值號右邊的條件表達式,因條件(y>z)為假,求出x-2的值為3,將該值賦給變量x,使x的值為3。 7能表述“20<x<30或x<-100”的C語言表達式是。【解】首先表述20<x<30的C表達式可寫成20<x && x < 30。所以表述“20&

55、lt;x<30或x<-100”的C表達式為20<x && x < 30 | x < -100。  8結(jié)構(gòu)化程序設(shè)計規(guī)定的三種基本結(jié)構(gòu)是結(jié)構(gòu),選擇結(jié)構(gòu)和結(jié)構(gòu)?!窘狻拷Y(jié)構(gòu)化程序設(shè)計的三種基本控制結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。 9若有定義語句“int a = 25, b = 14, c = 19;”,以下語句的執(zhí)行結(jié)果是。if(a+<=25 && b- <= 2 && c+)   printf(“*a=%d,b=%d,c=%dn”, a, b, c); e

56、lse printf(“#a=%d,b=%d,c=%dn”, a, b, c);【解】問題所給的if語句中,條件a+ <= 25 && b- <= 2 && c+是先求邏輯與的第一個運算分量,它是一個關(guān)系式,關(guān)系成立。接著判定第二個邏輯與運算分量,又是一個關(guān)系式,由于變量b的值是14,b不小于等于2,運算分量的關(guān)系式不成立,導(dǎo)致if語句的條件為假,執(zhí)行else部分。在求if語句的條件時,計算了2個邏輯與分量,使變量a 的值增了1,變量b的值被減了1。所以輸出內(nèi)容是:#a=26,b=13,c=19。 10以下兩條if語句可合并成一條if語句為

57、。if (a <= b) x = 1; else y = 2;if(a > b) printf(“*y = %dn”, y); else printf(“#x = %dn”, x);【解】在以上兩條if語句中,兩個條件剛巧相反。若將前一個if語句的第一個成分語句與第二個if語句的第二個成分語句合并;第一個if語句的第二個成分語句與第二個if語句的第一個成分語句合并,寫成一條if語句如下:if (a <= b)  x = 1; printf(“#x = %dn”, x); else y = 2; printf(“*y = %dn”, y);  11

58、下列程序的功能是輸入一個整數(shù),判斷是否是素數(shù),若為素數(shù)輸出1,否則輸出0,請為程序填空。main()  int i, x, y = 1;   scanf(“%d”, &x);   for(i = 2; i<=x/2; i+)      if y = 0; break;   printf(“%dn”, y);【解】為判數(shù)x是否是素數(shù),預(yù)置變量y的值為1(x可能是素數(shù)),然后用循環(huán),用2至x/2的整數(shù)i測試對x的整除性,若能被其中的某個整數(shù)整除,則x是合數(shù),置y的值

59、為0(x不是素數(shù)),結(jié)束測試循環(huán)。若都不能整除,則x為素數(shù)。i能否整除x,可用求余運算x%i等于0來判定。所以程序中的空框可填x%i = 0。測試x為素數(shù)的代碼可寫成:y = 1;for(i=2; i <=x/2; i+)   if(x%i = 0) y = 0; break;  12根據(jù)變量定義“static int b5, a3=1,2,3,4,5,6;”,b4=,a12= ?!窘狻肯到y(tǒng)規(guī)定,靜態(tài)變量定義時,若未初始化,系統(tǒng)自動給定二進制代碼全0的值。所以靜態(tài)數(shù)組b的元素全為0,當(dāng)然包括b4也為0。靜態(tài)數(shù)組a是兩維數(shù)組,每行有三個元素,在初始化中給出了六

60、個初值,所以數(shù)組a有2行。由于數(shù)組的元素按行順序存儲,并按行順序初始化。前三個值是第一行,后三個值是第二行。a12是第二行的第三列元素,也是a的最后一個元素,所以其值是6。 13若在程序中用到“putchar()”函數(shù)時,應(yīng)在程序開頭寫上包含命令,若在程序中用到“strlen()”函數(shù)時,應(yīng)在程序開頭寫上包含命令?!窘狻縫utchar()是系統(tǒng)提供的頭文件stdio.h中定義的宏,所以程序要使用它,必須寫上包含命令:#include <stdio.h>。函數(shù)strlen()是系統(tǒng)提供的字符串處理函數(shù)之一,字符串處理函數(shù)的函數(shù)原型說明和它們用到的有關(guān)常量、數(shù)據(jù)結(jié)構(gòu)等,在系統(tǒng)

61、提供的頭文件string.h中定義,所以使用該函數(shù)的程序應(yīng)在程序開頭寫上包含命令#include <string.h>。 14下面程序的功能是輸出數(shù)組s中最大元素的下標,請?zhí)羁?。main()  int k, p,s = 1, -9, 7, 2, -10, 3;   for(p = 0, k = p; p < 6; p+)      if(sp > sk)    printf(“%dn”, k);【解】為要尋找數(shù)組中的最大元素的下標,需先預(yù)設(shè)1個臨時最大元素的下標

62、,并順序逐一考察數(shù)組的元素,當(dāng)發(fā)現(xiàn)當(dāng)前元素比臨時最大元素更大時,就用當(dāng)前元素的下標更新臨時最大元素下標。直至考察了數(shù)組的全部元素后,這臨時最大元素下標就是數(shù)組的最大元素下標。通常預(yù)設(shè)的最大元素下標是數(shù)組的首元素下標,考察是從首元素開始順序向后繼元素考察。程序中,存儲臨時最大元素下標的變量是k,變量p控制順序考察的循環(huán)控制變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素sp比臨時最大元素sk更大時,應(yīng)該用p更新k。所以在空框處應(yīng)填入代碼“k=p;”。 15下面程序的功能是將一個字符串str的內(nèi)容顛倒過來,請?zhí)羁铡?include <string.h>main()  int i, j, ;&#

63、160; char str = “1234567”;   for(i = 0, j = strlen(str) ; i < j; i+, j+)   k = stri; stri = strj; strj = k;   printf(“%sn”, str);【解】顛倒一個字符串中的字符,就是首尾對應(yīng)的元素兩兩交換。簡單地可用兩個游標變量i和j,i是前端元素的下標,j是后端元素的下標,交換以這兩個變量值為下標的元素stri和strj。開始時,i的值為0,j的值為字符串末元素的下標(字符串長度減1)。每次交換后,i增1,j減1。繼續(xù)

64、交換的條件是stri還位于strj的前面,即i<j。字符串末元素的下標是它的長度減1,所以在第二個空框處應(yīng)填入-1。程序為了交換stri和strj,使用了變量k,該變量應(yīng)在程序的變量定義部分中一起定義,所以在第一個空框處應(yīng)填入k。 16“*”稱為運算符,“&”稱為運算符?!窘狻繂文窟\算符“*”稱為取內(nèi)容運算符,單目運算符“&”稱為取地址運算符。 17&后跟變量名,表示該變量的;*后跟指針變量名,表示該指針變量;&后跟的是指針變量名,表示該指針變量的?!窘狻繂文窟\算符&是取地址運算符,&后跟變量名,就表示該變量的地址。單目

65、運算符*是取內(nèi)容運算符,*后跟指針變量名,表示該指針變量所指變量的內(nèi)容。若&后跟的是指針變量名,就表示該指針變量的地址。若知道指針變量的地址,欲通過指針變量的地址引用指針變量所指變量的內(nèi)容,需要兩次取內(nèi)容運算。 18 函數(shù)的形式參數(shù)的作用域為,全局的外部變量和函數(shù)體內(nèi)定義的局部變量重名時,變量優(yōu)先?!窘狻亢瘮?shù)將它的形參當(dāng)作它的局部變量,所以函數(shù)形參的作用域為定義它的函數(shù)。當(dāng)函數(shù)的形參或函數(shù)內(nèi)的局部變量與函數(shù)外的全局變量同名時,函數(shù)的局部變量優(yōu)先。 19 若自定義函數(shù)要求返回一個值,則應(yīng)在該函數(shù)體中有一條語句;若自定義函數(shù)要求不返回一個值,則應(yīng)在該函數(shù)說明時加一個類型

66、符。 【解】若自定義的函數(shù)有返回值,則函數(shù)返回時應(yīng)執(zhí)行帶表達式的return語句返回,該表達式的值將作為函數(shù)調(diào)用的結(jié)果。為了強調(diào)函數(shù)是一個不返回值的函數(shù),應(yīng)在該函數(shù)說明時,加上一個void類型說明符。  20將一字符串中的小寫英文字母改成大寫。main()  int i = 0; char str80;   scanf(“%s”, str);   while (_)     if(_) stri -= a A;      _ ;      printf(“%sn”, str);【解】為了改寫字符串中的小寫英文字母,需要順序地考察字符串的每一個字符

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論