C語言歷年考題(真題解析)_第1頁
C語言歷年考題(真題解析)_第2頁
C語言歷年考題(真題解析)_第3頁
C語言歷年考題(真題解析)_第4頁
C語言歷年考題(真題解析)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..1.C語言規(guī)定,在一個源程序中main函數(shù)的位置______。<20XX春選擇題第21題>A.必須在最開始

B.必須在最后C.必須在預(yù)處理命令的后面

D.可以在其他函數(shù)之前或之后[解析]main函數(shù)也叫主函數(shù),是C語言編譯系統(tǒng)提供的特殊函數(shù),可以放在程序中的任何位置,但不能定義在其他函數(shù)體內(nèi)。C程序總是從main函數(shù)的第一條語句開始執(zhí)行。[答案]D2.以下敘述中正確的是________。<20XX秋選擇題第21題>A.C語言系統(tǒng)以函數(shù)為單位編譯源程序B.main函數(shù)必須放在程序開始C.用戶定義的函數(shù)可以被一個或多個函數(shù)調(diào)用任意多次D.在一個函數(shù)體內(nèi)可以定義另外一個函數(shù)[解析]C語言系統(tǒng)以程序為單位編譯源程序,程序由函數(shù)組成。main函數(shù)可以放在其他函數(shù)之前或之后。除了main函數(shù)外,函數(shù)可以被其他函數(shù)多次調(diào)用。函數(shù)不能定義在其他函數(shù)體內(nèi),即不能嵌套定義。[答案]C3.以下敘述中正確的是_________。<20XX秋選擇題第21題>A.在編譯時可以發(fā)現(xiàn)注釋中的拼寫錯誤B.C語言程序的每一行只能寫一條語句C.main<>{}必須位于程序的開始D.C語言程序可以由一個或多個函數(shù)組成[解析]C程序的注釋不產(chǎn)生編譯代碼,編譯時跳過去,發(fā)現(xiàn)不了其中錯誤。C程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在多行上。main函數(shù)可以放在程序中的任何位置。C程序可以由一個或多個函數(shù)組成,函數(shù)可以為空函數(shù),包括main函數(shù)。[答案]D4.以下關(guān)于C語言源程序的敘述中錯誤的是________。<20XX春選擇題第21題>A.一個C源程序由若干個函數(shù)定義組成,其中必須有且僅有一個名為main的函數(shù)定義B.函數(shù)定義由函數(shù)頭部和函數(shù)體兩部分組成C.在一個函數(shù)定義的函數(shù)體中允許定義另一個函數(shù)D.在一個函數(shù)定義的函數(shù)體中允許調(diào)用另一個函數(shù)或調(diào)用函數(shù)自身[解析]一個C語言源程序由若干個函數(shù)定義組成,其中必須有且僅有一個名為main的函數(shù)定義,函數(shù)定義由函數(shù)頭部和函數(shù)體兩部分組成。函數(shù)可以嵌套調(diào)用也可以遞歸調(diào)用,但不能嵌套定義。C的意思是嵌套定義,錯誤,D的意思是嵌套調(diào)用和遞歸調(diào)用,正確。[答案]C3.1.2基本數(shù)據(jù)類型1.以下選項中,___________是C語言關(guān)鍵字。<20XX春選擇題第22題>

A.printf

B.include

C.fun

D.default[解析]default是關(guān)鍵字,用在switch語句中。printf和include屬于預(yù)定義標(biāo)識符,其中printf是輸出函數(shù)名,include用在預(yù)編譯處理命令中。fun是用戶自定義標(biāo)識符。[答案]D2.在以下各組標(biāo)識符中,均可以用作變量名的一組是_____。<20XX秋選擇題第22題>A.a01,IntB.table_1,a*.1C.0_a,W12D.for,point[解析]選項A中兩個都符合標(biāo)識符的命令規(guī)則,Int與關(guān)鍵字int是不同的標(biāo)識符,選項B的第2個標(biāo)識符中有*號,不符合標(biāo)識符命名規(guī)則,選項C數(shù)字開頭,不允許,選項D中的for是關(guān)鍵字,不能做變量名。[答案]A3.以下定義和聲明中,語法均有錯誤的是___________。<20XX春選擇題第21題>①int_f<intx>{}②intf<intf>{}③int2x=1;④structfor{intx;};A.②③B.③④C.①④D.①②③④[解析]本題考的是標(biāo)識符的命名規(guī)則。③定義的整型變量名數(shù)字開頭,不符合命名規(guī)則。④中定義的結(jié)構(gòu)體類型名for屬于關(guān)鍵字,不能作為結(jié)構(gòu)體類型名。②中使用的函數(shù)名和形式參數(shù)名相同,在語法上可以,但在實際編程時不提倡使用。[答案]B4.在C語言系統(tǒng)中,如果一個變量能正確存儲的數(shù)據(jù)范圍為整數(shù)-32768~32767,則該變量在內(nèi)存中占________個字節(jié)。

<20XX春填空題第3題>[解析]表示范圍為整數(shù)-32768~32767的屬于int型或short型的變量,它們在內(nèi)存占2個字節(jié)。[答案]25.若有聲明"intx;"且sizeof<x>的值為2,則當(dāng)x值為___________時"x+1>x"為假。<20XX春填空題第2題>[解析]x為int型,其表示范圍為-32768~+32767,當(dāng)x為32767時,再加1就變成了-32768了,此時,就是x+1>x"為假的情況。這是由int型數(shù)據(jù)在內(nèi)存中的存儲情況決定的。int型數(shù)據(jù)在內(nèi)存中占2個字節(jié),以補碼的形式存放,32767的補碼為0111111111111111,加1以后就變成了1000000000000000,為-32768的補碼,這種情況為溢出,數(shù)處于邊界時會溢出。sizeof<x>是求字節(jié)數(shù)運算符。[答案]327676.已知sizeof<int>的值為2,為將10!的值存儲到變量f中<10!=3628800>,變量f的類型應(yīng)聲明為___________。<20XX秋選擇題第23題>A.longintB.intC.shortintD.unsignedint[解析]10!=3628800,超過了int的范圍-32768~+32767,而長整型在內(nèi)存占4個字節(jié),表示范圍大到-214748348~2147483647,應(yīng)該要用長整型才可以存放3628800。[答案]A7.以下常量表示中正確的是__________。<20XX春選擇題第22題>[解析]選項A若想表示成十六進制常量,正確的表示應(yīng)該是0xff,如果表示成轉(zhuǎn)義字符,應(yīng)該放在單引號內(nèi):'\0xff'。選項B表示的是長整型常量,選項C是一個標(biāo)識符,不能表示常量,選項D表示的是無符號整數(shù),但無符號整數(shù)不應(yīng)該有小數(shù)。[答案]B8.以下表示中不能用作C語言常量表示的是____。<20XX春選擇題第22題>A.0ULB.<long>123C.1e0D.'\x2a'[解析]0UL意為將0以無符號長整型存放,B為強制類型轉(zhuǎn)換,是表達式,表示長整型常量應(yīng)該在123后加字母l或L。C是實常量,指數(shù)表示法,意為1乘以10的0次方,e前面必須有數(shù)字,后面的數(shù)字必須是整數(shù)。D是轉(zhuǎn)義字符,表示十六進制數(shù)2a。[答案]B9.在C語言源程序中,不帶任何修飾的浮點數(shù)直接量〔例如:3.14都是按_________類型數(shù)據(jù)存儲的。<20XX春填空題第1題>[解析]實型常量的類型默認為double類型,在內(nèi)存中占8個字節(jié)。帶f修飾即3.14f或3.14F,則認為它是float型,在內(nèi)存中占4個字節(jié)。[答案]double10.已知有聲明"charch='g';",則表達式ch=ch-'a'+'A'的值為字符__________的編碼。<20XX春填空題第2題>[解析]本題的功能是將小寫字母轉(zhuǎn)換成大寫字母。-'a'+'A'實際上就是減去32,對于一個小寫字母來說,減去32就變成對應(yīng)的大寫字母。[答案]G11.若有程序段"charc=256;inta=c;",則執(zhí)行該程序段后a的值是______。<20XX秋選擇題第24題>A.256B.65536C.0D.-1[解析]將256轉(zhuǎn)換成二進制,為100000000,占9位,而char在內(nèi)存只占一個字節(jié),即8位,截取低8位賦給字符變量c,得c=0,將c的值賦給a,結(jié)果為0。[答案]C3.1.3運算符和表達式1.已知有聲明"inta=3,b=4,c;",則執(zhí)行語句"c=1/2*<a+b>;"后,c的值為_______。<20XX春選擇題第23題A.0

B.3

C.3.5

D.4[解析]本題考查的是兩整數(shù)相除,結(jié)果為整數(shù),截取的是整數(shù)部分,不是四舍五入。1/2等于0,0乘于任何一個整數(shù)結(jié)果還是0,最后結(jié)果為0。[答案]A2.已知有聲明"longx,y;"且x中整數(shù)的十進制表示有n位數(shù)字<4<n<10>,若要求去掉整數(shù)x十進制表示中的最高位,用剩下的數(shù)字組成一個新的整數(shù)并保存到y(tǒng)中,則以下表達式中能正確實現(xiàn)這一功能的是________。〔20XX秋選擇題第25題A.y=x/<10*<n-1>>B.y=x%<10*<n-1>>C.y=x%<long>pow<10,n-1>D.y=x%<10ù<n-1>>[解析]本類型的題目,拿一個具體的數(shù),放到四個選項中去計算,就能得到正確答案。假設(shè)x為1234,代入A中,為1234/<10*3>,肯定不是234,代入B中,為1234%<10*3>也不對,代入C中為1234%<long>103,結(jié)果為234,正確,選C。而D中的"ù"在C語言中是指位運算中的"異或"運算,不是求指數(shù)。[答案]C3.若有聲明"floaty=3.14619;intx;",則計算表達式"x=y*100+0.5,y=x/100.0"后y的值是___________?!?0XX春填空題第3題[解析]x=y*100+0.5=3.14619*100+0.5=315,因為x為int,截取整數(shù)部分賦給x。然后計算y=x/100.0=315/100=3.15,y是浮點數(shù)。[答案]3.154.若有聲明"inta=32767,b;",則在TurboC2.0系統(tǒng)中執(zhí)行語句"printf<"%d",b=++a>;"后輸出結(jié)果是_________。<20XX秋填空題第3題>[解析]本題有4個知識點:一是printf語句,輸出%d格式,二是賦值運算及賦值表達式的值,三是++運算,四是int型數(shù)據(jù)的表示范圍及整數(shù)在內(nèi)存的存儲情況。b=++a是將a的值加1后賦給b,a、b是int型,處于-32768~32767范圍內(nèi),32767+1=-32768,整數(shù)在計算機中以補碼形式存儲,32767的補碼為0111111111111111,加1后為1000000000000000,是-32768的補碼。對于int數(shù)據(jù),32767+1等于-32768。若是long型,滿足32767+1等于32768。[答案]-327685.已知有聲明"inta=3,b=4;",下列表達式中合法的是______。<20XX春選擇題第25題>

A.a+b=7

B.a=|b|

C.a=b=0

D.<a++>++[解析]本題考查的是賦值運算符和"++"運算符的左值要求。左值必須是變量,不能是常量和表達式。選項A左邊是表達式,不允許,選項D括號中的a++也是表達式,不能進行++運算。選項B是一個代數(shù)式,必須轉(zhuǎn)換成C語言合法的表達式,表示成a=abs<b>。選項C正確,將0賦給b,再賦給a,a和b的值不再是初始化的值,而變成0了。[答案]C6.已知有聲明"intn;floatx,y;",則執(zhí)行語句"y=n=x=3.89;"后,y的值為

________。<20XX春選擇題第28題>

A.3

B.3.0

C.3.89D.4.0[解析]本題考查的是不同類型間的賦值。賦值運算符右結(jié)合。先將3.89賦給x,表達式的值也為3.89,再將3.89賦給n,n是int,自動截取整數(shù)部分,將3賦給n。最后將3賦給y,y是float,將整數(shù)3轉(zhuǎn)換成實數(shù)3.0后賦給y,y值為3.0。[答案]B7.以下程序運行時輸出到屏幕的結(jié)果是

___________

。<20XX春閱讀程序第7題>#include<stdio.h>voidmain<>

{inta=1,b=2;

a+=b;

b=a-b;

a-=b;printf<"%d,%d\n",a,b>;}[解析]本題的考點是復(fù)合賦值運算符,程序功能是不用臨時變量,實現(xiàn)兩個變量的值的交換。計算過程如下:a=a+b=1+2=3,b=a-b=3-2=1,a=a-b=3-1=2。最后結(jié)果是a為2,b為1。變量的值在程序運行過程中可能在不斷的變化,每次計算都要用最新得到的值。[答案]2,18.若有聲明"intx=2,y=1,z=0;",則下列關(guān)系表達式中有語法錯誤的是_______。<20XX春選擇題第25題>A.x>y=2B.z>y>xC.x>y==1D.x==<x=0,y=1,z=2>[解析]賦值表達式的運算數(shù)有左值要求,賦值號左邊必須是變量,不能是表達式,A錯。B沒有語法錯誤,z>y成立結(jié)果為1,不成立為0,再將1或0與x比較,判斷其是否成立。C先判斷x>y是否成立,得到0或1再與1比較是否相等,最后的結(jié)果要么是0要么是1。D先做括號中的逗號表達式,依次進行賦值,最后一個表達式的值2是整個逗號表達式的值,將其與x的值進行是否相等的比較。[答案]A9.已知有聲明"inta=12,b=15,c;",則執(zhí)行表達式"c=<a||<b-=a>>"后,變量b和c的值分別為____________。<20XX春選擇題第29題>

A.3,1

B.15,12

C.15,1D.3,12[解析]本題的考點是邏輯表達式的短路特性。a值為12,非零即為真,邏輯表達式的結(jié)果只能用1或者0表示,若為真則結(jié)果為1。只要有一個為真,邏輯或"||"的結(jié)果就為1,b-=a不用計算了,b的值不變,仍為15。而括號中邏輯表達式的值為1,1賦給c,故c的值為1。[答案]C10.已知有聲明"inta=3,b=4,c=5;",以下表達式中值為0的是________。<20XX秋選擇題第24題>A.a&&bB.a<=bC.a||b&&cD.!<!c||1>[解析]a&&b中a和b都是非0,A的結(jié)果為1。B中a<=b成立,結(jié)果為1。C中&&優(yōu)先級高于||,先做&&,b和c的值非0,b&&c的結(jié)果為1,因為是||運算,最后的結(jié)果肯定是1。D中c非0,!c為0,與1邏輯或為1,將括號中的1再邏輯非,結(jié)果為0。[答案]D11.C語言中有!、&&、||三個邏輯運算符,其中優(yōu)先級高于算術(shù)運算符的是________。<20XX秋填空題第1題>[解析]邏輯非"!"是單目運算符,優(yōu)先級為2級,高于3級的"*/%"和4級的"+"和"-"。"&&"的優(yōu)先級為11級,"||"的優(yōu)先級為12,低于算術(shù)運算符。[答案]!12.以下表示數(shù)學(xué)式"a<b<c"的邏輯表達式中,錯誤的是_______。<20XX春選擇題24題>A.a<b<cB.a<b&&b<cC.!<a>=b>&&!<b>=c>D.!<a>=b||b>=c>[解析]最好的答案是B,但C、D與B的功能相同。C中!<a>=b>就是a<b,而D中將!放到外面,"&&"就變成了"||"。選項A先判斷a<b,成立結(jié)果為1,不成立結(jié)果為0,再將結(jié)果與c比較。[答案]A1x>013.以下選項中,不能表示函數(shù)sign<x>=0x=0功能的表達式是________。-1x<0<20XX春選擇題第23題>A.s=<x>0>?1:<x<0>?-1:0B.s=x<0?-1:<x>0?1:0>C.s=x<=0?-1:<x==0?0:1>D.s=x>0?1:x==0?0:-1[解析]本題考點是嵌套的條件表達式。仔細分析它們的邏輯關(guān)系,選項C的功能是當(dāng)x<=0時值為-1,否則即x>0再判斷x=0是否成立決定值為0還是1,不合題意。[答案]C14.若有聲明"inta=5,b=2;",則表達式"b+=<float><a+b>/2"運算后b的值為________。<20XX秋填空題第1題>[解析]b+=<float><a+b>/2相當(dāng)于b=b+<<float><a+b>/2>。先執(zhí)行a+b得7,轉(zhuǎn)換成實數(shù)7.0除以2,得3.5,然后將原來的b=2加3.5得5.5,b是int,截取整數(shù)部分5賦給b。[答案]515.設(shè)指針變量占2個字節(jié)的內(nèi)存空間,若有聲明"char*p="123";intc;",則執(zhí)行語句"c=sizeof<p>;"后,c的值為_____。<20XX春選擇題第24題>

A.1

B.2

C.3D.4[解析]題目告訴我們指針變量占2個字節(jié),而sizeof的功能就是計算變量在內(nèi)存中所占的字節(jié)數(shù),c的值為指針變量p在內(nèi)存中占用的字節(jié)數(shù),為2。[答案]B16.若有聲明"intr=2;",則執(zhí)行語句"printf<"%d",sizeof<2*3.14*r>>;"時輸出________。<20XX秋填空題第2題>[解析]本題輸出表達式2*3.14*r的結(jié)果在內(nèi)存中占用的字節(jié)數(shù)。2*3.14*r的結(jié)果為實常量,其中有一個實常量3.14,C中實常量默認為double型。根據(jù)類型轉(zhuǎn)換規(guī)則,其他類型的數(shù)據(jù)也要轉(zhuǎn)換成double型,最后結(jié)果為double型,在內(nèi)存占8個字節(jié)。一般情況,只要表達式中有一個數(shù)據(jù)為double型,最后的結(jié)果就是double型。[答案]817.數(shù)學(xué)式所對應(yīng)的c語言表達式為pow<x,________>。<20XX春填空題第1題>[解析]pow<x,y>是求x的y次方的函數(shù)。就是x的三分之一次方。此處注意的是1/3=0,要將其中一個轉(zhuǎn)換為浮點數(shù)。[答案]1.0/3或者1/3.0或者<double>1/318.數(shù)學(xué)表達式所對應(yīng)的C語言表達式為________。<20XX秋填空題第3題>[解析]求平方根的函數(shù)為sqrt,求絕對值的函數(shù)為abs或fabs,abs求整數(shù)的絕對值,fabs求實數(shù)的絕對值。"≠"用"!="表示。4a要用4*a表示,*表示乘號,不能缺省。分母一定要加括號,若不加括號得用除"/"不是用乘"*"。加括號的表示方式看起來更直觀。[答案]sqrt<fabs<x>!=4*a/<b*c>或sqrt<fabs<x>!=4*a/b/c3.2.1實現(xiàn)順序結(jié)構(gòu)的語句1.以下關(guān)于C語言語句的敘述中正確的是_________?!?0XX秋選擇題第27題A.所有語句都包含關(guān)鍵字B.所有語句都包含表達式C.所有語句都可以出現(xiàn)在源程序中的任何位置D.除復(fù)合語句外的其他所有語句都以分號結(jié)束[解析]關(guān)鍵字只有32個,大多數(shù)用來進行變量類型說明以及實現(xiàn)條件選擇和循環(huán)結(jié)構(gòu)的控制語句。很多語句中沒有關(guān)鍵字的,如賦值語句。表達式也不一定在所有的語句中出現(xiàn)的,如函數(shù)調(diào)用語句。語句是程序的執(zhí)行部分,放在函數(shù)內(nèi)部,而且在說明部分之后。C語言中復(fù)合語句中的各條語句都必須有分號";",但在"}"外沒有分號。[答案]D2.已知int類型數(shù)據(jù)在內(nèi)存中存儲長度為2個字節(jié),以下語句中能正確輸出整數(shù)32768的是________?!?0XX秋選擇題第23題A.printf<"%d",32768>;B.printf<"%ld",32768>;C.printf<"%f",32768>;D.printf<"%c",32768>;[解析]本題考點是輸出格式。%d格式輸出int型整數(shù),范圍為-32768~32767,%f格式輸出浮點數(shù),%c格式輸出字符。%ld格式輸出長整型整數(shù),范圍為-21億~21億。[答案]B3.以下語句中有語法錯誤的是____________?!?0XX春選擇題第24題A.printf<"%d",0e>;B.printf<"%f",0e2>;C.printf<"%d",0x2>;D.printf<"%s","0x2">;[解析]本題考點為輸出格式及常量表示。A中的%d表示輸出int型整數(shù),0開頭為八進制數(shù),只能為0~7共8個數(shù)字,不能為e。B是%f格式,輸出實數(shù),0e2是指數(shù)形式,即為0*102。C輸出int型整數(shù),0x是十六進制形式,D用%s格式輸出字符串常量"0x2"。[答案]A4.已知有聲明和語句"inta;scanf<"a=%d",&a>;",欲從鍵盤上輸入數(shù)據(jù)使a中的值為3,則正確的輸入應(yīng)是_______

?!?0XX春填空題第5題[解析]"a="是原樣字符,要照輸。"%d"的位置輸入對應(yīng)的變量a的值3。就是將鍵盤輸入的值3存入變量a的地址單元,這樣a的值就為3。[答案]a=35.若有聲明"longa,b;"且變量a和b都需要通過鍵盤輸入獲得初值,則下列語句中正確的是________?!?0XX秋選擇題第23題A.scanf<"%ld%ld,&a,&b">;B.scanf<"%d%d",a,b>;C.scanf<"%d%d",&a,&b>;D.scanf<"%ld%ld",&a,&b>;[解析]a和b是long型,輸入時要用"%ld"格式。對于變量,scanf函數(shù)的地址表中必須有取地址運算符"&",而且只在格式控制串上有雙引號,地址表列上不應(yīng)有雙引號。滿足這些要求的只有選項D。[答案]D6.若有聲明"inti;floatx;chara[50];",為使i得到值1,x得到值3.1416,a得到值yz,當(dāng)執(zhí)行語句"scanf<"%3d%f%2s",&i,&x,a>;"時,正確的輸入形式是_________。<20XX秋選擇題第23題A.1,3.1416,yzB.13.1416yzC.0013.1416yzD.i=001,x=3.1416,a=yz[解析]第一個輸入格式"%3d"對應(yīng)變量i,要輸入3位,而i值為1,只占1位,補足3位,輸入時在前面加00,輸完"001"后用空格或回車或TAB鍵分隔。第二個輸入格式"%f",對應(yīng)的數(shù)為實數(shù)3.1416,輸完加分隔符。第三個輸入格式"%2s",是2個字符的字符串,a為數(shù)組名,本身就已表示地址了,前面無"&"。選項C滿足要求。A用逗號分隔,逗號不是有效的分隔符,只有當(dāng)格式控制串中有原樣字符逗號時才需輸入逗號,而且i不足3位。B在輸入數(shù)據(jù)時沒有分隔符,D在輸入時有"i="等字符,不需要。[答案]C7.已知有聲明"chars[80];",若需要將鍵盤輸入的一個不含空格的字符串保存到s數(shù)組中,則下列語句中正確的是________。〔20XX秋選擇題第28題A.scanf<"%s",s>;B.scanf<"%s",s[0]>;C.s=gets<>;D.s=getchar<>;[解析]A中的scanf函數(shù)中的s是數(shù)組名,本身就表示地址了,不用再加"&"。B中的s[0]表示一個元素,不是地址,C中應(yīng)該將s放入括號中作為gets函數(shù)的參數(shù),D中的getchar函數(shù)一次只能輸入一個字符。scanf函數(shù)不能輸入空格。[答案]A8.若有聲明"chars[l0]="remind";",執(zhí)行"puts<s+2>;"后的輸出結(jié)果是___________。〔20XX秋填空題第2題[解析]puts函數(shù)的功能是輸出一個字符串。s表示數(shù)組的起始地址,s+2表示數(shù)組元素的第2個元素的地址,所以從s[2]元素開始輸出,結(jié)果為mind。[答案]mind3.2.2實現(xiàn)選擇結(jié)構(gòu)的語句1.已知有聲明"intx,y;",若要求編寫一段程序?qū)崿F(xiàn)"當(dāng)x大于等于0時y取值1,否則y取值-1",則以下程序段中錯誤的是________。<20XX秋選擇題第26題>A.if<x>=0>y=1;elsey=-1;B.y=x>=0?1:-1;C.switch<>D.switch<x-abs<x>>{casex>=0:y=1;break;{case0:y=1;break;default:y=-1;default:y=-1;}}[解析]本題考點為if語句和switch語句。選項A用if語句表示,正確。選項B用條件表達式表示,x大于等于0成立將1賦值給y,否則將-1賦值給y。選項C用switch語句,但不符合switch的語法規(guī)則,switch的括號中必須有一常量或表達式,不能為空。case后是一個常量表達式,其中只能有常量和運算符,不能有變量。選項D中,當(dāng)x大于等于0時,x-abs<x>為0,執(zhí)行y=1,否則就不是為0,執(zhí)行y=-1。[答案]C2.以下程序運行時輸出到屏幕的結(jié)果是________。<20XX秋閱讀程序第7題>#include<stdio.h>voidmain<>{inti=1,m=0;switch<i>{case1:case2:m++;case3:m++;}printf<"%d",m>;}[解析]因為case后無break語句,switch中的m++都要執(zhí)行,m的初值為0,執(zhí)行2次m++后m的值為2。[答案]23.2.3實現(xiàn)循環(huán)結(jié)構(gòu)的語句1.程序段"intx=3;do{printf<"%d",x-->;}while<!x>;"的執(zhí)行結(jié)果是_________。<20XX秋選擇題第24題>A.321B.2C.3D.死循環(huán)[解析]本題的考點是do-while循環(huán)和自減運算符。先執(zhí)行輸出語句,輸出x的值,x--,先用x的值3,再減1,為2。輸出一個3,然后判斷!x看是否繼續(xù)循環(huán),x為2,非0,!x就為0,循環(huán)結(jié)束。[答案]C2.若有聲明"inti,k=1;unsignedj;",則下列語句執(zhí)行時會出現(xiàn)無限循環(huán)的語句是____。<20XX春選擇題第27題>A.for<j=15;j>0;j-=2>k++;B.for<j=0;j<15;j+=2>k++;C.for<i=0;i<15;i+=2>k++;D.for<i=15;i>0;i-=2>k++;[解析]本題的考點是for循環(huán)的結(jié)束條件與無符號整數(shù)。j是無符號整數(shù),永遠不會小于0,選項A中,j的初值為單數(shù),每次減2,還是單數(shù),j也不會等于0,即j>0永遠滿足,A是無限循環(huán)。[答案]A3.設(shè)有變量聲明"charc;",執(zhí)行"for<;c=<getchar<>!='\n'>;>printf<"%c",c>;"時,從鍵盤上輸入"ABCDEFG回車"之后,輸出的結(jié)果是_________。<20XX秋選擇題第28題>A.ABCDEFGB.AABBCCDDEEFFGGC.非字母數(shù)字字符D.語句不能執(zhí)行[解析]for語句中,先執(zhí)行條件判斷<getchar<>!='\n'>,若不是回車條件成立,結(jié)果為1,將之賦給變量c,輸出ASCII碼值為1的對應(yīng)的字符,肯定不是字母或者數(shù)字。[答案]C4.下面關(guān)于循環(huán)語句for、while、do_while的敘述中正確的是____。<20XX春選擇題26題>A.三種循環(huán)語句的循環(huán)體都必須放入一對花括號中B.三種循環(huán)語句中都可以缺省循環(huán)終止條件表達式C.三種循環(huán)語句的循環(huán)體都至少被無條件地執(zhí)行一次D.三種循環(huán)語句都可能出現(xiàn)無窮循環(huán)[解析]對于for和while循環(huán),當(dāng)循環(huán)體只有一個語句時可以不用花括號。只有for循環(huán)可以缺省循環(huán)終止條件表達式,其余兩種while<表達式>中的表達式不能缺省。do-while至少被無條件地執(zhí)行一次,其余兩種當(dāng)型循環(huán)條件為0時一次也不執(zhí)行。三種循環(huán)語句的無窮循環(huán)形式如下:while<1>{……}do{……}while<1>;for<;;>{……}[答案]D5.若在一個C語言源程序中"el"和"e3"是表達式,"s;"是語句,則下列選項中與語句"for<el;;e3>s;"功能等同的語句是_________。<20XX秋選擇題第25題>A.el;while<10>s;e3;B.el;while<10>{s;e3;}C.el;while<10>{e3;s;}D.while<10>{el;s;e3}[解析]本題主要考for循環(huán)的執(zhí)行過程,與while的比較。對于for,應(yīng)先執(zhí)行e1,只執(zhí)行一次,可以放在循環(huán)前面,不能放循環(huán)體內(nèi)。e3和s的執(zhí)行順序是先執(zhí)行循環(huán)體s,再執(zhí)行e3,C錯。若將e3放在循環(huán)體內(nèi),循環(huán)體就有2個語句,必須用花括號括起來,A錯。[答案]B6.以下程序運行時輸出結(jié)果是___________。<20XX秋閱讀程序第6題>#include<stdio.h>main<>{ints=1,n=235;do{s*=n%10;n/=10;}while<n>;printf<"%d\n",s>;}[解析]本程序求整數(shù)n的各位數(shù)字之乘積。s初值為1,s*=n%10即s=s*n%10,n%10得到n的最低位,與原來的s相乘。n/=10即n=n/10,取整,去掉用過的最低位。這是典型的數(shù)字分離方法。若求n的各位數(shù)字之和,將s的初值置為0,并將乘號改成加號。[答案]307.以下程序運行時輸出結(jié)果是___________。<20XX春閱讀程序第6題>#include<stdio.h>voidmain<>{intk=5,n=0;while<k>0>{switch<k>{case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf<"%3d",n>;}}[解析]本題的考點是while語句與switch語句。當(dāng)k>0時,執(zhí)行循環(huán)體中的語句。k初值為5,滿足>0的條件,執(zhí)行循環(huán)體。無匹配的case語句,執(zhí)行default后面的語句,n=0,k=4,因為無break,繼續(xù)執(zhí)行下面的case語句,n=0+2=2,k=3,輸出n的值2。第2次循環(huán),k=3,執(zhí)行n+=1;k--;n為3,k為2,有break,跳出switch,輸出n的值,為3。第3次循環(huán),k=2,執(zhí)行n+=2;k--;break;后n為5,k為1,輸出5。第4次循環(huán),k=1,執(zhí)行n+=1;k--;break;后n為6,k為0,輸出6。此時,k=0,不再滿足k>0的條件,循環(huán)結(jié)束。[答案]23568.以下程序運行后的輸出結(jié)果的第一行是______________,第二行是_______________。<20XX春閱讀程序第8題>#include<stdio.h>main<>{inti,a=0,c=2;for<i=0;i<2;i++>switch<++a,a*c>{case1:printf<"1">;case2:printf<"2">;case3:printf<"3\n">;break;default:printf<"other\n">;}}[解析]本題執(zhí)行2次循環(huán)。switch后的括號中是逗號表達式,依次執(zhí)行,并將后面的表達式的值與case后的常數(shù)進行匹配。第一次循環(huán):++a,值為1,a的值也為1,a*c為2,與case2匹配,輸出2,無break,接著輸出3并換行,遇break,跳出switch,進行下一次循環(huán)條件的判斷。第二次循環(huán):++a,值為2,a的值也為2,a*c為4,無匹配的case,執(zhí)行default后面的語句,輸出other。[答案]第一行是23,第二行是other3.2.4其他語句1.若程序中已有相應(yīng)的聲明,下列語句中錯誤的是_______。<20XX春選擇題第23題>A.printf<i==4?"%6d\n":"%6d",i>;B.i==4?printf<"%6d\n",i>:printf<"%6d",i>;C.for<i=10;;i-->if<i==1>break;D.for<i=10;;>if<i-->;break;[解析]本題的考點是條件表達式及break語句。選項A中輸出函數(shù)的參數(shù)是一個條件運算符,當(dāng)i為4時換行輸出i值。選項B的功能與A相同。選項C是for循環(huán),沒有循環(huán)結(jié)束條件,跳出循環(huán)由if語句和break語句實現(xiàn)。選項D中的if語句只執(zhí)行條件判斷與循環(huán)變量減1的操作,后面是空語句,break語句不在for循環(huán)中,是一個獨立的語句,這在C語言中是不允許的。break語句只能用在switch語句和循環(huán)語句中。[答案]D2.以下程序運行后輸出結(jié)果中第一行為____________,第二行為______________。<20XX春閱讀程序第9題>#include"stdio.h"voidmain<>{inti=5;do{switch<i%2>{case0:i--;break;case1:i--;continue;}i--;printf<"%d\n",i>;}while<i>0>;}[解析]本題的考點是do-while循環(huán)、switch語句、continue語句。直到型循環(huán),先執(zhí)行循環(huán)體內(nèi)的語句,循環(huán)體內(nèi)有三個語句:switch、i--、輸出。首先計算switch后括號中的i%2,為1,執(zhí)行case1后的i--,i變成4,接著continue結(jié)束本次循環(huán),繼續(xù)下次循環(huán)。再次計算switch后括號中的i%2,為0,執(zhí)行case0后的i--,i為3,break語句在switch中,跳出switch,不是跳出循環(huán),接著執(zhí)行循環(huán)內(nèi)switch下面的i--,i變成2,輸出i值,輸出的第一行為2。判斷i>0是否成立,成立,繼續(xù)下次循環(huán)。計算switch后括號中的i%2,為0,執(zhí)行case0后的i--,i=1,break后跳出switch,執(zhí)行i--,i為0,輸出i值,第二行的輸出為0。此時,不滿足i>0的條件,循環(huán)結(jié)束。[答案]第一行為2,第二行為0。3.3.1數(shù)組1.以下聲明中錯誤的是_________。<20XX秋選擇題第27題>A.inta[2]B.inta[]={0,1}C.inta[3]=0D.inta[3][4]={0}[解析]A定義了一個長度為2的數(shù)組a,B在定義數(shù)組a的同時進行了初始化,缺省長度系統(tǒng)默認為2。C在對數(shù)組初始化時沒有花括號。D只對二維數(shù)組中的第一個元素a[0][0]進行了初始化,其余元素的值都為0。若數(shù)組沒有初始化,數(shù)組元素的值是隨機數(shù)。[答案]C2.已知有聲明"intm[]={5,4,3,2,1},i=0;",下列對m數(shù)組元素的引用中,錯誤的是____。<20XX秋選擇題第27題>A.m[++i]B.m[5]C.m[2*2]D.m[m[4]][解析]定義數(shù)組m時進行初始化,大括號中有5個數(shù)據(jù),數(shù)組長度為5,其元素分別為m[0]~m[4],不存在m[5],B越界。選項A的m[++i]先將i加1,i為1,即m[1],選項C指m[4]。選項D中,m[4]的值為1,m[m[4]]就是m[1],數(shù)組的下標(biāo)可以為整型表達式,也可以為整型變量,但聲明的時候方括號中的表達式不能為變量。[答案]B3.下列C語言源程序的錯誤中,通常不能在編譯時發(fā)現(xiàn)的是_____。<20XX秋選擇題第21題>A.括號不匹配B.非法標(biāo)識符C.數(shù)組元素下標(biāo)值越界D.程序結(jié)構(gòu)不完整[解析]數(shù)組元素的下標(biāo)越界,系統(tǒng)是不能發(fā)現(xiàn)的,編譯時不提示錯誤,但運行結(jié)果會出錯。其余三種情況在編譯時系統(tǒng)會提示錯誤,等修改正確以后程序才能運行。[答案]C4.若有聲明"charss[8]="Red";",則sizeof<ss>的值是_______。<20XX秋選擇題第30題>A.8B.4C.3D.1[解析]sizeof是求字節(jié)數(shù)運算符,計算數(shù)組ss在內(nèi)存中的字節(jié)數(shù),數(shù)組在定義時長度為8,所占內(nèi)存為8個字節(jié),本題計算的不是字符串長度,而是數(shù)組的長度。若將聲明改為"charss[]="Red";",缺省數(shù)組長度,那么sizeof<ss>的值為字符個數(shù)3加1,字符串都有一個結(jié)束標(biāo)志'\0'。若初始化方式為"charss[]={'R','e','d'};",則sizeof<ss>的值為3。[答案]A5.以下程序運行時輸出結(jié)果中第一行是___________,第二行是___________,第三行是___________。<20XX秋閱讀程序第10題>#include<stdio.h>main<>{inti,j,a[3][3]={0};for<i=0;i<3;i++>for<j=0;j<3;j++>switch<i-j+2>{case0:case1:a[i][j]=1;break;case2:a[i][j]=2;break;case3:a[i][j]=3;break;case4:a[i][j]=5;break;}for<i=0;i<3;i++>{for<j=0;j<3;j++>printf<"%4d",a[i][j]>;printf<"\n">;}}[解析]本題通過switch語句對二維數(shù)組賦值。對于二維數(shù)組要注意行號與列號的變化,一般外循環(huán)表示行號的變化,內(nèi)循環(huán)表示列號的變化。每次循環(huán)要計算switch括號中表達式值,根據(jù)該值決定執(zhí)行哪個case,得出數(shù)組元素的值。最后輸出二維數(shù)組各元素值。i=0:j=0,i-j+2=2,a[0][0]=2;j=1,i-j+2=1,a[0][1]=1;j=2,i-j+2=0,a[0][2]=1i=1:j=0,i-j+2=3,a[1][0]=3;j=1,i-j+2=2,a[1][1]=2;j=2,i-j+2=1,a[1][3]=1i=2:j=0,i-j+2=4,a[2][0]=5;j=1,i-j+2=3,a[2][1]=3;j=2,i-j+2=2,a[2][2]=2[答案]第一行是211,第二行是321,第三行是5326.以下程序運行時輸出到屏幕的結(jié)果第二行是___________,第四行是

___________。<20XX春閱讀程序第11題>#include<stdio.h>#defineN6voidmain<>{inti,j,a[N+1][N+1];for<i=1;i<=N;i++>

{a[i][i]=1;a[i][1]=1;}

for<i=3;i<=N;i++>

for<j=2;j<i;j++>

a[i][j]=a[i-1][j-1]+a[i-1][j];for<i=1;i<=N;i++>{

for<j=1;j<=i;j++>

printf<"%4d",a[i][j]>;

printf<"\n">;}}[解析]本題就是典型的楊輝三角形。注意本題只考慮從1開始的下標(biāo),下標(biāo)為0的不考慮,而且只求矩陣的一半,即斜三角形。第一個for循環(huán)給數(shù)組每行的最后一個元素即對角線元素賦值1,給數(shù)組的每行的第一個元素賦值1。第二個for循環(huán)從第三行起,除了第一個和最后一個元素,其余元素的值為上一行前一個元素和上一行同列元素之和。這是根據(jù)a[i][j]=a[i-1][j-1]+a[i-1][j]得出的。最后一個for循環(huán)輸出楊輝三角形。根據(jù)上述規(guī)律,很快寫出楊輝三角形:11211331寫四行就夠了,因為題目只問到第四行的輸出。[答案]第二行是11,第四行是

13317.以下程序運行后輸出結(jié)果中第一行為_____________,第二行為______________,第三行為________________。<20XX春閱讀程序第11題>#include"stdio.h"#defineN3main<>{inta[N][N],b[N*N]={1,1},i,j;for<i=2;i<N*N;i++>b[i]=b[i-1]+b[i-2];for<i=0;i<N;i++>for<j=0;j<N;j++>a[j][i]=b[i*N+j];for<i=0;i<N;I++>{for<j=0;j<N;j++>printf<"%5d",a[i][j]>;printf<"\n">;}}[解析]先生成數(shù)組b,b[i]的值為前2個元素之和,得到b各元素的值為1,1,2,3,5,8,13,21,34。再將b數(shù)組元素的值賦給數(shù)組a,注意,a是按列的順序進行賦值的。將b的前3個元素值1、1、2賦給a的第0列,接著的3個3、5、8賦給a的第1列,最后3個13、21、35賦給a的第2列,a的各元素值為1、3、13、1、5、21、2、8、34。[答案]第一行為1313,第二行為1521,第三行為28348.以下程序運行后,輸出結(jié)果的第一行為____________,第二行為_________。<20XX秋閱讀程序第10題>#include<stdio.h>voidmain<>{chars[]="efgefgef",t[]="efg";inti,j,k;for<i=strlen<s>-strlen<t>;i>=0;i-->{for<j=i,k=0;s[j]==t[k]&&t[k]!='\0';j++,k++>;if<t[k]=='\0'>printf<"%d\n",i>;}}[解析]本程序的功能是從后往前找子串。函數(shù)strlen求字符串實際長度,s的長度為8,t的長度為3,i的初值為8-3=5。從s的第5個字符開始,即倒數(shù)第3個開始,與t比較,若連續(xù)3個字符都相等,則輸出i的值。執(zhí)行下次循環(huán),i減1,即s往前移一個字符,繼續(xù)比較,找到相等的輸出s下標(biāo)i。本題當(dāng)i=3時和i=0時s的連續(xù)3個字符與t的字符相等。[答案]第一行為3,第二行為09.以下程序運行時輸出結(jié)果中第一行是___________,第三行是___________。<20XX春閱讀程序第9題>#include<stdio.h>defineN5voidmain<>{staticchara[N][N];inti,j,t,start=0,end=N-1;charstr[]="123",ch;for<t=0;t<=N/2;t++>{ch=str[t];for<i=j=start;i<end;i++>a[i][j]=ch;for<j=start;j<end;j++>a[i][j]=ch;for<i=end;i>start;i-->a[i][j]=ch;for<j=end;j>start;j-->a[i][j]=ch;if<start==end>a[start][end]=ch;start++,end--;}for<i=0;i<N;i++>{for<j=0;j<N;j++>printf<"%c",a[i][j]>;printf<"\n">;}}[解析]本程序?qū)⒁痪S數(shù)組str的三個元素值'1'、'2'、'3'中的一個賦給一個5*5的二維數(shù)組。最后輸出的二維數(shù)組是%c格式,字符'1'的輸出就是1。第1個外循環(huán)是將外圍元素置為'1':第1個內(nèi)循環(huán)置a[0][0],a[1][0],a[2][0],a[3][0]為'1'第2個內(nèi)循環(huán)置a[4][0],a[4][1],a[4][2],a[4][3]為'1'第3個內(nèi)循環(huán)置a[4][4],a[3][4],a[2][4],a[1][4]為'1'第4個內(nèi)循環(huán)置a[0][4],a[0][3],a[0][2],a[0][1]為'1'可見,是從a[0][0]開始按逆時針方向進行賦值。第2個外循環(huán)是將第二層元素置為'2':從a[1][1]開始也是按逆時針方向進行賦值。第3個外循環(huán)只執(zhí)行if語句,將最后一個中間的元素a[2][2]置為'3'。最后得到的數(shù)組為:"11111","12221","12321","12221","11111"。[答案]第一行是11111,第三行是123213.3.2結(jié)構(gòu)體變量和結(jié)構(gòu)體數(shù)組1.以下結(jié)構(gòu)變量stu1的聲明中,錯誤的是________。<20XX春選擇題第30題>A.typedefstructstu{charname[10];floatscore;}STU;STUstu1;B.#defineSTUstructstuSTU{charname[10];;floatscore;}stu1;C.structstu{charname[10];floatscore;}stu1;D.structstu{charname[10];floatscore;}STU;STUstu1;[解析]A用typedef給結(jié)構(gòu)體類型名起了一個別名STU,然后用類型名STU定義變量stu1,等價于structstustu1;。B用宏定義的方式將宏名STU替代字符串structstu,以后只要是STU全都用structstu替代。C在定義結(jié)構(gòu)體類型名的同時定義了結(jié)構(gòu)體變量名,是最常用的定義方式,其中的類型名stu也可缺省。D中定義結(jié)構(gòu)體類型stu的同時定義了一個結(jié)構(gòu)體變量STU,此處STU是變量名,不是類型名,后面的STUstu1;是錯誤的。[答案]D2.以下程序運行時輸出到屏幕的結(jié)果第一行是________,第二行是________。<20XX秋閱讀程序第14題>#include<stdio.h>typedefstructfact{intm,z;}FACT;FACTfun1<FACTt1,FACTt2>{FACTt3;t3.m=t1.m*t2.m;t3.z=t1.z*t2.m+t2.z*t1.m;returnt3;}FACTfun2<FACTt>{intm,n,k;m=t.m;n=t.z;while<k=m%n>{m=n;n=k;}t.m=t.m/n;t.z=t.z/n;returnt;}voidmain<>{FACTs,s1={8,4},s2={6,5};s=fun1<s1,s2>;printf<"%d,%d\n",s.z,s.m>;s=fun2<s>;printf<"%d,%d",s.z,s.m>;}[解析]函數(shù)fun1根據(jù)t1和t2的值計算結(jié)構(gòu)體變量t3的值并返回。函數(shù)fun2的功能是求最大公約數(shù)。注意輸出順序,將先計算得到的后輸出。t3.m=t1.m*t2.m=8*6=48t3.z=t1.z*t2.m+t2.z*t1.m;=4*6+5*8=64s={48,64},作為fun2的實際參數(shù)傳給t,求48與64的最大公約數(shù),為16,最后得到t.m=48/16=3,t.z=64/16=4。[答案]第一行是64,48,第二行是4,33.以下程序運行時輸出至到屏幕的結(jié)果第一行是_________,第二行是_________。<20XX春閱讀程序第13題>#include<stdio.h>typedefstruct{intx,y;}direction;intvisible<directions,directionA,directionB,directionC>{directionp1,p2;

intd;

p1.x=B.x-A.x;

p1.y=B.y-A.y;

p2.x=C.x-A.x;

p2.y=C.y-A.y;

d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;

printf<"%4d\n",d>;

returnd>0;}voidmain<>{char*ss[]={"invisible","visible"};

directions={1,1},T={1,1},A={0,0},B={2,1};

puts<ss[visible<s,T,A,B>]>;

}[解析]direction是結(jié)構(gòu)體類型名,屬于該結(jié)構(gòu)體類型的變量都有2個成員,主函數(shù)中初始化了4個結(jié)構(gòu)體變量,通過函數(shù)調(diào)用進行輸出。子函數(shù)中的return語句返回一個邏輯值,其值為0或1,返回的0或者1是數(shù)組ss的下標(biāo),決定最后輸出的是ss[0]還是ss[1]?,F(xiàn)在主要的任務(wù)是求visible<s,T,A,B>的值,將四個參數(shù)分別傳給子函數(shù)visible,得:s.x=1,s.y=1;A.x=1,A.y=1;B.x=0,B.y=0;C.x=2,C.y=1計算:p1.x=B.x-A.x=0-1=-1p1.y=B.y-A.y=0-1=-1p2.x=C.x-A.x=2-1=1

p2.y=C.y-A.y=1-1=0d=s.x*p1.x*p2.x+s.y*p1.y*p2.y=1*<-1>*1+1*<-1>*0=-1所以,輸出d的值為-1。返回d>0,因為d為-1故d>0不成立,返回的值為0。ss的下標(biāo)為子函數(shù)的返回值0。最后執(zhí)行puts<ss[0]>,輸出的是前面的那個字符串"invisible"。[答案]第一行是-1,第二行是invisible4.程序功能:選票統(tǒng)計。二維數(shù)組s中保存了投票后10張有效選票上所填寫的候選人姓名,結(jié)構(gòu)數(shù)組stat中保存統(tǒng)計結(jié)果。程序運行后的輸出結(jié)果是"liu:2wang:5zhao:3"。<20XX秋完善程序第15題>#include<stdio.h>#include<string.h>typedefstruct{charname[20];/*候選人姓名*/intcount;/*候選人得票數(shù)*/}COUNT;intcount<charx[][20],intn,_________________>{inti,j,k=0;/*k表示被選中的人數(shù)*/for<i=0;______________;i++>/*n張選票,循環(huán)n次*/{for<j=0;j<k;j++>if<strcmp<st[j].name,x[i]>==0>{__________________;break;}if<j>=k>{___________________;st[k].count++;k++;}}returnk;}main<>{chars[10][20]={"liu","wang","zhao","zhao","wang","liu","wang","zhao","wang","wang"};COUNTstat[5]={0};inti,n;n=count<s,10,stat>;for<i=0;i<n;i++>printf<"%s:%d\t",stat[i].name,stat[i].count>;}[解析]第一空填的是形式參數(shù),根據(jù)實際參數(shù)填,實際參數(shù)對應(yīng)位置為stat,是數(shù)組名,該數(shù)組屬于COUNT類型,第一空填數(shù)組類型及數(shù)組名,同時中括號不能漏掉。數(shù)組類型為COUNT,數(shù)組名是函數(shù)中用到的st。第二空填的是循環(huán)結(jié)束條件,i從0開始,i為多少結(jié)束,是循環(huán)次數(shù),本題是10次,這在main函數(shù)的實際參數(shù)的中間這個數(shù)體現(xiàn)出來,對應(yīng)的形式參數(shù)為n,填i<n。第三空是計數(shù),若為某個姓名,則相應(yīng)變量的值增1。第四空若票的姓名第一次出現(xiàn),用strcpy將該姓名復(fù)制到結(jié)構(gòu)體數(shù)組的一個成員中。[答案]第一空COUNTst[],第二空i<n,第三空st[j].count++,第四空strcpy<st[k].name,x[i]>3.4.1非遞歸函數(shù)的定義、聲明、調(diào)用及執(zhí)行過程1.以下選項均為fun函數(shù)定義的頭部,其中錯誤的是____。<20XX春選擇題第29題>A.intfun<intx,inty[]>B.intfun<intx,inty[x]>C.intfun<intx,inty[3]>D.intfun<intx,int*y>[解析]數(shù)組作為函數(shù)的參數(shù)時,可以只寫數(shù)組名及中括號,中括號中的下標(biāo)可以有也可以沒有,也可以將數(shù)組表示成指針的形式,所以A、C、D都是正確的形式。B的問題是y數(shù)組的下標(biāo)用了動態(tài)的變量。[答案]B2.若已定義一個有返回值的函數(shù),則以下關(guān)于調(diào)用該函數(shù)的敘述中錯誤的是_____。<20XX春選擇題第28題>A.函數(shù)調(diào)用可以作為獨立的語句存在B.函數(shù)調(diào)用可以出現(xiàn)在表達式中C.函數(shù)調(diào)用可以作為一個函數(shù)實參D.函數(shù)調(diào)用可以作為一個函數(shù)形參[解析]函數(shù)調(diào)用語句由函數(shù)名、實參加分號";"組成,A正確。函數(shù)有返回值,函數(shù)調(diào)用可以作為表達式的一部分,可以作為函數(shù)的實參但不能作為形參。[答案]D3.以下程序運行后輸出結(jié)果中第一行為_________,第二行為____________。<20XX春閱讀程序第10題>#include<stdio.h>intfun<inta[],intn,intb[]>{inti=0,j,m=0,c,x;for<i=0;i<n;i++>{x=a[i];c=1;for<j=i+1;j<n;j++>if<a[j]==x>c++;else{i=j-1;break;}if<j>=n>i=j;if<c==1>b[m++]=x;else{b[m++]=-c;b[m++]=x;}}returnm;}voidmain<>{intx[]={4,4,4,4,4,4,4,4,1,2},y[10],i,j,n=10;n=fun<x,n,y>;for<i=0;i<n;i++>{if<i%2==0>printf<"\n">;printf<"%5d",y[i]>;}}[解析]本題是求數(shù)組y,y根據(jù)數(shù)組x的情況得到,返回y的元素個數(shù)。本題要注意的是i的變化,i除了作為循環(huán)變量改變外還有在內(nèi)循環(huán)中對i的賦值語句。第1次外循環(huán):i=0,x=a[0]=4,c=1。內(nèi)循環(huán)是計算與a[0]元素相等的元素的個數(shù),共8個,c=8,j=8,接著的內(nèi)循環(huán)因為執(zhí)行else語句,i變?yōu)?,跳出內(nèi)循環(huán),執(zhí)行外循環(huán)下面的語句,將-c的值-8賦給b[0],x的值4賦給b[1],再執(zhí)行i++改變循環(huán)變量,i為8。第2次外循環(huán):i=8,x=a[8]=1,c=1,內(nèi)循環(huán)因為a[8]后面的a[9]不為1,所以執(zhí)行else語句,i=j-1=8,跳出內(nèi)循環(huán)。c為1,將x賦給b[3],b[3]為1。此時執(zhí)行i++,i=9,進行第3次循環(huán)是否執(zhí)行的判斷。第3次外循環(huán)與第2次類似,將a[9]的值2賦給b[4],循環(huán)結(jié)束。主函數(shù)輸出y數(shù)組各元素的值,輸2個換行。[答案]第一行為-84,第二行為124.以下程序運行時,若在鍵盤上輸入2<Enter>,則輸出是______________若在鍵盤輸入i<Enter>,則輸出是______________。<20XX春閱讀程序第13題>#include<stdio.h>#include<string.h>intstrch<char*s,charch>{inti;for<i=strlen<s>;i>=0;i-->if<s[i-1]==ch>returni;if<i<0>return0;}main<>{charch,s1[]="as123d2nfghjkm";intk;printf<"inputch:">;ch=getchar<>;k=strch<s1,ch>;if<k!=0>printf<"k=%d\n",k>;elseprintf<"notfound\n">;}[解析]本程序的功能是在字符串中查找字符,從字符串的末尾往前找某字符。如果鍵盤輸入2,將2與s1中的最后一個字符比較,不同,再往前一個,直到找到相同的為止,返回的i是從后往前數(shù)的字符數(shù),從0開始算,找到最后找不到返回0。子函數(shù)中的形參*s可以看做s[],strlen函數(shù)的功能是求字符串的實際長度。[答案]輸入2<Enter>則輸出k=7;輸入i<Enter>則輸出notfound。3.4.2函數(shù)調(diào)用時參數(shù)的傳遞1.若函數(shù)調(diào)用時的實參為變量,則以下關(guān)于函數(shù)形參和實參的敘述中正確的是____。<20XX秋選擇題第29題>A.實參和其對應(yīng)的形參占用同一存儲單元B.形參不占用存儲單元C.同名的實參和形參占用同一存儲單元D.形參和實參占用不同的存儲單元[解析]實參若為變量,傳遞的是值,與形參占用各自的內(nèi)存空間。就是同名的實參與形參也是占用不同的空間。形參在函數(shù)調(diào)用的時候給其分配內(nèi)存,調(diào)用結(jié)束系統(tǒng)收回內(nèi)存。實參若是數(shù)組,傳遞的是地址,實參和其對應(yīng)的形參共享內(nèi)存空間。[答案]D2.以下程序運行后的輸出結(jié)果是______________。<20XX春閱讀程序第7題>#include<stdio.h>intfun<intw1,intw2>{returnw2-w1;}main<>{intw=1,k;k=fun<fun<w+1,w>,w>;printf<"%d\n",k>;}[解析]本題是函數(shù)的嵌套調(diào)用,盡管嵌套調(diào)用了自己,但是不能算遞歸。因為遞歸調(diào)用有一個遞歸結(jié)束終止條件的,本調(diào)用不存在,只能算嵌套調(diào)用。先計算里面fun函數(shù)的參數(shù),fun<w+1,w>即fun<2,1>,將2傳給w1,1傳給w2,返回1-2=-1,所以外面的那個fun函數(shù)的參數(shù)fun<w+1,w>為-1,再次調(diào)用,即fun<-1,1>,返回1-<-1>=2。[答案]23.以下程序運行時輸出結(jié)果是___________。<20XX春閱讀程序第8題>#include<stdio.h>intf<intx,inty>{returnx+y;}voidmain<>{doublea=5.5,b=2.5;printf<"%d",f<a,b>>;}[解析]本題的考點是不同類型的參數(shù)傳遞。將實數(shù)5.5傳給形參x,截取整數(shù)部分,為5,同樣y為2,返回整數(shù)x、y的和,為5+2=7,主函數(shù)"%d"格式輸出返回值,為整數(shù)7。如果要求按"%f"格式輸出,則結(jié)果應(yīng)為7.0。[答案]74.以下程序運行時輸出到屏幕的結(jié)果是___________

。<20XX春閱讀程序第8題>#include<stdio.h>voidswap<inta,intb>{intt;

if<a>b>t=a,a=b,b=t;}voidmain<>{intx=13,y=11,z=12;

if<x>y>swap<x,y>;

if<x>z>swap<x,z>;

if<y>z>swap<y,z>;printf<"%d\t%d\t%d\n",x,y,z>;}[解析]函數(shù)swap的功能是當(dāng)a>b時,實現(xiàn)兩個變量的值的交換,if后面是逗號表達式,盡管沒有花括號,但認為是一個語句,依次執(zhí)行每個賦值語句。因為沒有返回語句,而且函數(shù)的值是單向傳遞的,主函數(shù)中的x,y,z的值沒有交換。[答案]1311125.以下程序運行后的輸出結(jié)果是______________。<20XX秋題閱讀程序第7題>#include<stdio.h>voidfun<intx,inty,int*z>{y=x*x;*z=x*x*x;}voidmain<>{inta=2,b=0,c=0;fun<a,b,&c>;printf<"%d%d%d",a,b,c>;}[解析]本題的考點是參數(shù)的傳遞。a和b的值不變,實參a和b傳給子函數(shù)的形參x和y,是值傳遞,單向的,x和y的值改變了,不影響主函數(shù)中a和b的值,它們分別占用自己的內(nèi)存空間。而c傳給z的是地址,是地址傳遞,雙向的,z指向的地址單元的值改變,c也改變,z為x*x*x=2*2*2=8,c是8。[答案]2086.以下程序運行時輸出到屏幕的結(jié)果中第一行是________,第二行是________。<20XX秋閱讀程序第8題>#

溫馨提示

  • 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

提交評論