山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫_第1頁
山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫_第2頁
山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫_第3頁
山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫_第4頁
山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2017年山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫(一)說明:①本資料為VIP包過學(xué)員內(nèi)部使用資料。涵蓋了歷年考研常考題型和重點(diǎn)題型。一、選擇題I?若有代瞄加+e'!(其中e僅代表自然對數(shù)的底數(shù),不是變量),則以下能夠正確表示該代數(shù)式的C語言表達(dá)式是( )?A)sqrt(fabs(pow(n,x)+exp(x))) B)sqrt(fabs(pow(n,x)+pow(x,e)))C)gqrt(ab§(iTx+e"x)) D)sqrt(fahs(pow(x,n)+exp(x)))【答案】A[解析]math.h是數(shù)學(xué)運(yùn)算庫函數(shù)的頭文件名:doublesqn(double) 平方根函數(shù)doublefabs(double) 絕對值函數(shù)doublepow(doublex.doubley) 返回x>expfdoublex) 返回e*2.有以下程序:律include<stdio.h>main()inia=1.b=0;l<?r(;a<5;a++)iif(a%2==0)break:continue;b+=a;printf("%d\n",b);程序運(yùn)行后的輸出結(jié)果是(TOC\o"1-5"\h\zOl104【答案】A【解析】題for【解析】題for循環(huán)內(nèi)有break和continue語句,且均放在b+=a語句前面,無論江條件是否滿足,b+二/都不會被執(zhí)行,因此b值始終為0。3.若有定義語句:ima⑷[10],*P,*q[4]:且兇<4,則錯誤的賦值是( )。p=aq[i]=a[i]p=a[i]p=&a[2][I]【答案】A【解析】二維數(shù)組名是指向指針的指針,所以a和q都為指向指針的指針,而p為指向int類型的指針,P和a不同類型,故A項(xiàng)P=a賦值語句錯誤。其余選項(xiàng)可以正確賦值’其中D項(xiàng)是用&返回整數(shù)的地址,然后復(fù)賦值已4.有以下程序:#include<sldio.h>#include<siring,h>char?a="you";char?b="WelcomeyoutoBeijing!";main()Ichar*p;P=b;while(*p!=?a)p++;p+=strlen(a)+1;printf("%s\n”,p);I程序運(yùn)行后的輸出結(jié)果是( \Beijing!youtoBeijing!WelcomeyoutoBeijing!toBeijing!【答案】D【解析】while函數(shù)判斷p指針指向地址的內(nèi)容是否和a指針指向地址的內(nèi)容相等,如果不是,則移動指針P+1,當(dāng)P指向%字符串中的y時,和*a首地址元素相等,退出while語句后,p再向右移動a字符串長度+1個單位地址,此時p指向?t'?輸岀t及剩余的字符串,D項(xiàng)正確。.有如下定義:structstIinta;floatb;}x[10];FILE*fp;若文件已正確打開,且數(shù)組x的10個元素均已賦值,以下將數(shù)組元素寫到文件中的語句錯誤的是(Xfbr(i=O;i<10;i++)fwrite(x,sizeof(structst).1,fp);(write(x,10?sizeof(structsi).1Jp);fwrite(x,sizeof(structst),10.fp);for(i=0;i<10;i+4)fwrite(&x[i],sizeof(structst),1,fp);【答案】A[解析】A項(xiàng)中,因?yàn)閚=L即每次寫入I個結(jié)構(gòu)體數(shù)據(jù),x是數(shù)組的首地址,因此,每次寫入的數(shù)據(jù)都是數(shù)組的首個結(jié)構(gòu)體元素,沒有將整個數(shù)組寫入文件中去。.以下可以將任意一個兩位整數(shù)n的個位數(shù)與十位數(shù)對換的表達(dá)式為( )。(n-n/10X10)X](bn/10n-n/10X10+n/10n/10+(n-n/10)(n-n/10)X10+(n/10)【答案】A【解析】A項(xiàng)n/1。得到十位數(shù)字,n-n/10得到個位數(shù)字,將個位數(shù)乘以10加上十囈字,(nn-10X10)XIO+n/lO實(shí)現(xiàn)將任意一個兩位整數(shù)個位數(shù)與十位數(shù)對換,A項(xiàng)正確。B項(xiàng)n-n/10X10得到個位數(shù)字,n/10為十位數(shù)字,n-n/10X10+n/10實(shí)現(xiàn)兩德數(shù)個隣與十位數(shù)之和,B項(xiàng)錯誤。C項(xiàng)n/IB(n-n/10)=n.不能實(shí)現(xiàn)題目中要求,C項(xiàng)錯誤。D項(xiàng)n/10是十位數(shù)字,n-n/10為原兩位整數(shù)減去十位數(shù)字,不是個位數(shù)字,D項(xiàng)錯誤。有以下程序:以下聞:#include<stdio.h>#include〈string.h>main()Ichara[10]="abed";printf("%d,%d\n",strlen(a),sizeof(a));TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( \7,44,108,810,10【答案】B【解析】C語言中,strlen()用來統(tǒng)計字符串的字符個數(shù),sizeof()是求為數(shù)組分配的存儲空間大小。該題中字符串P的字符個數(shù)為4.字符數(shù)組a的大小為10。有以下程序#incJude<stdio.h>voidfun(intn,int*s)Iintf;if(n==l)*s=n+l:elseIfun(n-l.&f);*s二f:I)main()intx=0:fun(4,&x);printf("%TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( X3124【答案】B【解析】函數(shù)9dfun(inmim*s)有兩個形參,第一個形參是傳值,第二個形參是傳引用,在函數(shù)fun內(nèi)部改變、的值,貝IJ在函數(shù)I'un外部也會發(fā)生相應(yīng)改變。f是函數(shù)內(nèi)部的局部變量,遞歸調(diào)用時,把局部變量f以指針的形式傳入,在下一層函數(shù)中會對f進(jìn)行修改,當(dāng)下一層函數(shù)返回后,再把當(dāng)前局部變量I'賦值給形參s。函數(shù)調(diào)用過程如下表所示。函數(shù)調(diào)用f?sfun(4,&x)22fun(3,&D22fun(2,&f)22funs(1.&f)?2TOC\o"1-5"\h\z.若有定義語句:intx=10:,則表達(dá)式x-=x+x的值為( )。-20-10010【答案】B【解析】因?yàn)?的運(yùn)算優(yōu)先級高于賦值運(yùn)算符,所以先做x+x結(jié)果為20,再做x-20,結(jié)果為-10賦值給X。.設(shè)有以下定義:charsi(1=“0123”:chars2[]=(*0,,'1','2','3'):則以下敘述正確的是( \數(shù)組si的長度小于s2的長度數(shù)組si和s2的長度相同數(shù)組si的長度大于s2的長度數(shù)組si和s2完全等價【答案】C[解析】為字符數(shù)組si賦值字符串“0123”時,字符串中字符依次放人數(shù)組中后,在最后f字符后要添加一個結(jié)束字符*\0,?數(shù)組si長度為5。數(shù)組s2只需要4個單元即可放下所有初始化值’故數(shù)組長度為4。所以數(shù)組si的長度大于S2的長度,C項(xiàng)正確。兩個數(shù)組等價是指兩個數(shù)組長度和類型以及對應(yīng)每個元素值均相同’所以si和82不是完全等價,D項(xiàng)錯誤。11.有以下程序:^include<sldio.h>?include〈string.h>inain()Icharxf]="STRING”;k[0]=0;x[I]=:\0';x[2]='0I;printf("%d%d\n",sizeof(x),Mrlen(x))TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( 161706371【答案】B[解析]charx[]="STR]NG”,這時分配的內(nèi)存就是7個字節(jié),包括結(jié)束字符,0,無論之后如何賦值,都不會改變,sizeof是計算字符串所占存儲空間的大小,因此sizeof(x)=7,x[0]=0:x[l]='\0':[2]='0'.第一遇到結(jié)束字符’\0'結(jié)束賦值,這時char刈]為空,strlen(x)求的是字符串的個數(shù),為0。12.若有定義語句:charstrlO14string*.str2[8].*str3,sir4[10]="string":,庫函數(shù)strcpy的功能是復(fù)制字符串,以下選項(xiàng)中錯誤的函數(shù)調(diào)用是( )。strcpy<str3.strcpy(str2,strcpy<strl.strcpy(str4.“HELLO!”)“HELLO!”)“HELLO!”)“HELLO!M)【答案]A【解析]題目中字符指針str3,沒有為指針開辟內(nèi)存,能作為函數(shù)參數(shù)。13.關(guān)于C語言的變量名,以下敘述正確的是( )。變量名不可以與關(guān)鍵字同名變量名不可以與預(yù)定義標(biāo)識符同名變量名必須以字母開頭變量名是沒有長度限制的【答案】A【解析】合法的標(biāo)識符由字母(大、瀉均可\數(shù)字和下劃線組成,并且必須以字母或下劃線開頭。關(guān)鍵字是指被C語言保留的,不能用作其他用途的標(biāo)識符,它們在程序中都代表著固定的含義,用戶不可重新定義,A項(xiàng)正確。預(yù)定義標(biāo)識符是系統(tǒng)已經(jīng)有過定義的標(biāo)識符,用戶可以重新定義,所以可以作為變量名,B項(xiàng)錯誤。變量名除了以字母開頭以外,還可以以下劃線開頭,C項(xiàng)錯誤。變量名沒有長度限制,但不可超過編譯器可以辨識的范圍’D項(xiàng)錯誤。.有以下程序:#include<stdio.h>main(),char*mm[4j=t"abed”1234”mnop".”5678”;;char**|)m=mm;inti;for(i=0;i<4;i++)printf("%s",pm[i]+i);printf(”\n”);IITOC\o"1-5"\h\z程序的運(yùn)行結(jié)果是( Xabcdl234mnop5678abcd234op8a2o8alm5【答案】B[解析】程序執(zhí)行過程為:定義指針數(shù)組,長度為4,并為其初始化為4個字符串。定義指向指針的指針變量’并為其初始化為指針數(shù)組首地址。所循環(huán)依次輸岀4個字符串,第i個字符串從第i個下標(biāo)值處開始輸出到字符串結(jié)束,即第f字符串輸出abed,第二個字符串輸出234,第三個字符串輸出op,第四個字符串輸出8。程序的運(yùn)行結(jié)果是abcd2340p&故B項(xiàng)正確。.以下敘述中正確的是( )。C程序的基本組成單陳語句C程序中的每一行只能寫一條語句簡單C語句必須以分號結(jié)束C語言必須在一行內(nèi)寫完【答案】C[解析]c程序的基本組成單位是函數(shù),A項(xiàng)錯誤:C程序以分號作為每個語句結(jié)尾,一行能寫多條語句,也可以將f語句分幾行書寫,BD兩項(xiàng)錯誤:而簡單C語言語句必須以分號結(jié)束,所以C項(xiàng)正確。TOC\o"1-5"\h\z.以下選項(xiàng)中?合法的C語言實(shí)數(shù)是( )。3.lc0.4.2c0E137J2E【答案】B【解析】實(shí)型常朦數(shù)形式由十進(jìn)制數(shù)加階碼標(biāo)志飛”或“E”以及階碼(只能為整數(shù),可以帶符號)組成。?2。0為指數(shù)形式實(shí)數(shù),B項(xiàng)正確。3.1e0.4,階數(shù)不是整數(shù),A項(xiàng)錯誤。E13階碼標(biāo)志前缺少十進(jìn)制數(shù),C項(xiàng)錯誤。7.12E缺少階碼,D項(xiàng)錯誤。.以下敘述中正確的是( )。A在C語言程序中,main函數(shù)必須放在其他函數(shù)的最前面每個后綴為.C的C語言源程序都可以單獨(dú)進(jìn)行編譯C在C語言程序中,只有main函數(shù)才可以單獨(dú)進(jìn)行編譯D.每個后綴為.C的C語言源程序都應(yīng)該包含一個main函數(shù)【答案】B[解析】main是主函數(shù)的起始行,每一個可執(zhí)行的C程序都必須有一個且只能有一個主函數(shù)。后綴名為.C的C語言源程^都可以單獨(dú)進(jìn)行編譯。.若變量己正確定義并賦值,則錯誤的賦值語句是( )。a=a+1;a=sizeof(double);a=dllc;a+l=a:【答案】D【解析】賦值號的左邊必須是一代表某個存儲單元的變量名’賦值號的右邊必須是C語言中合法的表達(dá)式。賦值運(yùn)算的功能是先求岀右邊表達(dá)式的值,然后把此值賦給賦值號左邊的變量。.有以下程序:二include<stdio.h>structst: intx.y;)data[2]={1.10.2,20Hmain()structst*p=data;printf(*%d..p->y);printf("%d\n-.(++p)->x);TOC\o"1-5"\h\z新運(yùn)行的結(jié)果是( 110.I20,I10,220,2【答案】c【解析】題目在定義結(jié)構(gòu)體st的同時便定義了結(jié)構(gòu)體數(shù)組dala0可知. 結(jié)構(gòu)體指針P指向數(shù)組的首地址,指向' 貝脂向dataJ.所以輸出 即輸岀和而「X。.以下敘述中正確的是( )程序設(shè)計的任務(wù)就是編寫程序代碼并上機(jī)調(diào)試程序設(shè)計的任務(wù)就是確定所用數(shù)據(jù)結(jié)構(gòu)程序設(shè)計的任務(wù)就是確定所用算法。?心三種說法畔完整【答案】D【解析】程序設(shè)計是指設(shè)計、編程、調(diào)試程序的方法和過程。因?yàn)槌绦蚴擒浖闹黧w,軟件的質(zhì)量主要通過程序的質(zhì)量來體現(xiàn),在軟件研究中’程序設(shè)計的工作^常重要,內(nèi)容涉及相關(guān)的基本概念、工具、方法及方法學(xué)。二、設(shè)計題.請根據(jù)以下各小題的要求設(shè)計C應(yīng)用程序(包括界面和代碼)。請編寫函數(shù)fun( ),它的功能是:將3行4列矩陣x乘以4行3列矩陣y.結(jié)果放在3行3列矩陣xy中。矩陣相乘的基本方法是:矩陣xy中行列下標(biāo)分別為i,j的元素的值,是矩陣'中第i行上4個元素與矩陣y第j列上4個元素對應(yīng)相乘的和。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序如下:include#includevoidfun(inia[3][4],intb[4][3],intab[3][3])IIvoidmain()IIint43][4]^||.1,|2,l,0,l|,|lt2,0,3ll;inty[4][3]=||l.lj|.10,0,01,|2,1,1|,11,intxy[3][3]=|0;,i.j;clrecr();fun(x.y.xy)printf("axb=ab:(3,3):\n");for(i=0;i<3;i++)Ifor(j=0;j<3;j++)printf("%d-,xy[i][j]);printf("\n");>I【答案】voidfun(inta[3][4],intb[4][3],intah[3][3J)Iintj,k,l;for(k=0;k<3;k++)for(l=0;l<3;l++)

for(j=0;j<4;j++)ab[k][l]+=a[k][j]【解析】本題首先要明確矩陣xy中行列下標(biāo)分別為i,j的元素的值,是矩陣X中第i行上4個元素與矩陣y第j列上4個元素對應(yīng)相乘的和。因此,每個元素的求解是循環(huán)控制來實(shí)現(xiàn)的,即ab|k]|l]Mk)[jl*bUI[l]-矩陣ab的每個元素的表示可用一個二重循環(huán),整個函數(shù)是一個三重循環(huán)的嵌套。22.請編寫_個函數(shù)fun,它的功能是:將一個表示正整數(shù)的數(shù)字字符串轉(zhuǎn)換為一個整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。例如,若輸入字符串“1234”,則函數(shù)把它轉(zhuǎn)換為整數(shù)值1234。函數(shù)fun中給出的語句僅供參考。注意部分源程序存在文件PR0G1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入需要編寫的若干語句。給定源程序:#include<stdio.h>include<string.h>longfun(char*p)I/*以下代碼僅供參考*/intijen;/*ten%串長*/longx=0;len=strlen(p);/*以下完成數(shù)字字符串轉(zhuǎn)換為-個數(shù)字注意:字符。不是數(shù)字0*/returnx;)mainO/*主函數(shù)*/{chars[6];longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%l(i\n".n);)【答案】iRW-1iRW-1)Ipx;/?負(fù)數(shù)時暨flag為-1,/elseif(*p=='+,)/?正數(shù)時置flag為I?/I件+;iH;G?rt;i<len:i++)I'fUO-叩-療:/,將字符串轉(zhuǎn)成相應(yīng)的整數(shù)WX=X0flng:【解析】if( )語句的作用是判斷該字符串應(yīng)當(dāng)為正數(shù)還是負(fù)數(shù)。注意:*P是f字符(如9、4),并不是一個數(shù),要將其轉(zhuǎn)成相應(yīng)的數(shù)字需令其減去0(不是AO1).即*P-'O'就得到*P這個字符的相應(yīng)數(shù)字’如"OF、‘8'-仲8等?!敬鸢浮俊敬鸢浮緼2017年山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫(二)說明:①本資料為VIP包過學(xué)員內(nèi)部使用資料。涵蓋了歷年考研??碱}型和重點(diǎn)題型。一、選擇題I?有以下程序:#include<stdio.h>main()Iinta=3,b=3;printf("%d\n".a&b);JTOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( \6103【答案】D【解析】"&披位與運(yùn)算符。a=3=H8,b=3=118,按位與結(jié)果為11B=3,D項(xiàng)正確。有以下程序:main()#include<stdio.h>Iinta=Itb=1;while(a一)b一;printf("%d,%d\n",a,b);TOC\o"1-5"\h\z新的運(yùn)彳謁果是( \-l,00,0-l,-1l,1【答案】A【解析】本題執(zhí)彳5H程為:極a值為1,執(zhí)行循環(huán),a=0,執(zhí)行b--,b=0,再取a值為0,判斷條件不成立,退出循環(huán),再執(zhí)行卜得到a=-l,最后輸出a=-l,b=0o故A項(xiàng)正確。設(shè)有定義:inta=l.b=2,c=3:以下語句中執(zhí)行效果與其他三個不同的是( \if(a>b)c=a;a=b:b=c;if<a>b)(c=a,a=b,b=c:}if(a>b)ca.a=b.b=c:if(a〉b)(c=a:a=b:b=c:}【解析】執(zhí)行if語句時,首先計算緊跟在訂后面一對圓括號中的表達(dá)式的值。如果表達(dá)式的值為非零(“真”>則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下f語句:如果表達(dá)式的值為零("假“、貝螂過訂子句,直接執(zhí)行訂語句后的下f語句。A項(xiàng)中if子句只有。=4次0。三項(xiàng)中iI'子句包括c=a;a=b;b=c;4.有語句:k=x<y?(y<z?l:0):0:’以下選項(xiàng)中,與此語句功能相同的是( )。if(x<vIv<z)k=l:elsek=0:.if(x<y)k=O:elseif(y<z)k=l;.c.if(x<y)if(y<z)k=l:elsek=0;D.if(x<y&&y<z)k=l:elsek=O:【答案】D【解析】D項(xiàng)正確,題中,先判斷x<y?_如果為假,直接返回0.如果為真’再判斷y<z?如果為真返回為1,否則返回0,綜合所知,只有時返回1,否則返回0。5.程序中已構(gòu)成如下圖所示的不帶頭結(jié)點(diǎn)的單向鏈表結(jié)構(gòu)’指針變量s、P、q均已正確定義,并用于指向鏈表結(jié)點(diǎn).指針變量s總是作為頭指針指向鏈表的第一個結(jié)點(diǎn)。若有以下期段q=s;s=s->next;p=s;while(p->next)p=p->nexl;p->next=q:q->next=NULL;該程序段實(shí)現(xiàn)的功能是( \A刪除首結(jié)點(diǎn)尾結(jié)點(diǎn)成為首結(jié)點(diǎn)首結(jié)點(diǎn)成為尾結(jié)點(diǎn)刪除尾結(jié)點(diǎn)【答案】C【解析】進(jìn)過while循環(huán)后,p指向鏈表的尾結(jié)點(diǎn),P->next=q,是把q置為p的next結(jié)點(diǎn):q->next=NULL.q的next結(jié)點(diǎn)為空,此時q結(jié)點(diǎn)成為鏈表的尾結(jié)點(diǎn)。6.在源程序的開始處加上“#include<stdio.h>”進(jìn)行文件引用的原因以下敘述正確的是( XA.stdio.h文件中包含標(biāo)準(zhǔn)輸入輸出函數(shù)的函數(shù)說明’通過引用此文件以便能正確使用prinff、scanf等函數(shù)B將stdio.h中標(biāo)準(zhǔn)輸入輸出函數(shù)鏈接到編譯生成的可執(zhí)行文件中,以便能正確運(yùn)行C將stdio.h中標(biāo)準(zhǔn)輸入輸出函數(shù)的源程序插入到弓I用處,以便進(jìn)行編譯鏈接D將stdio.h中標(biāo)準(zhǔn)輸入輸出函數(shù)的二進(jìn)制代碼插入到弓I用處,以便進(jìn)行編譯鏈接【解析】Fdio.h-文件中包含標(biāo)準(zhǔn)輸入輸出函數(shù)的函數(shù)說明,預(yù)處理指令#include<stdio.h濃指程序可以在該文件中找到printf,scanf等函數(shù),因此答案為A選項(xiàng)。若有定義語句:doublex,y.*px.*py:執(zhí)行px=&x:py=&y;正確的輸入語句是( \A)scanf(”%lf%lf',px.py); B)gcanf(”%f%「&x,&y);C)Hcanf(,,%f%f\x,v); D)scanf(H%If【答案】A【解析】double類型,scanf函數(shù)中格式應(yīng)該使用%lf,px中存儲的是x的地址’可以直接在scanf函數(shù)中使用。有以下程序:#includc<stdio.h>main()iints[3][2]=11,2,3,4,5,6:.*ps[3],k;for(k=0;k<3;k++)Ips[k]=8(k];printf(M%dn.*(ps[k]+1));tf1TOC\o"1-5"\h\z程序的運(yùn)行結(jié)果是( 1246I35I23456【答案】A[解析】程序執(zhí)行過程為:定義二維數(shù)組s與指針數(shù)組ps,for循環(huán)實(shí)現(xiàn)將二維數(shù)組每一行的首地址賦值給對應(yīng)的指針數(shù)組元素,然后輸岀二維數(shù)組每行的第二個元素。程序的運(yùn)行結(jié)果是246。.下面選項(xiàng)中關(guān)于位運(yùn)算的敘述正確的是( )。典算符都需要兩個操作數(shù)位運(yùn)算的對象只能是整型或字符型數(shù)據(jù)左移運(yùn)算的結(jié)果總是原操作數(shù)據(jù)2倍右移fe算時,尚位總是補(bǔ)0【答案】B【解析】B項(xiàng)正確,C語言中,位運(yùn)算的對象只能是整型或字符型數(shù)據(jù),不能是其他類型的數(shù)據(jù)。A項(xiàng)錯誤,位運(yùn)算符中取反操作符只需要f操作符;C項(xiàng)錯誤,左移時,若左端移出的部分不包含有效二進(jìn)制數(shù)1,則每左移一位,相當(dāng)于移位對象乘以2,如果端移出的部分包含有效二進(jìn)制數(shù)1,結(jié)論不成立;D項(xiàng)錯誤,右移運(yùn)算時,對于無符號整數(shù)和正整數(shù),高位補(bǔ)0;對于負(fù)整數(shù),高位補(bǔ)I。.有以下程序#inclade<stdio.h>intf(intn){intt=0.a=5;if(n/2)(inta=6:t+=a++;)else{inta=7:t+=a++;}returnt+a++;Imain()(inis=0.i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);程序運(yùn)行后的輸出結(jié)果是( 1A.36B.28C.32D.24【答案】D【解析】函數(shù)f可以重寫為:Iintf(intn){2intt=0,a=5;3if(n/2!=0){4inta=6;//此時第2行中定義的a失效5t=t+a;〃t與第4行中定義的a相加6a++;〃第4行定義的a自增7}〃第4行定義的a失效8else(9inta=7;〃此時第2行中定義的a失效10t=t+a;〃t與第9行中定義的a相加IIa++;〃第9行定義的a自增121〃第9行定義的a失效13inttemp=t+a;與第2行定義的a相加,此時a=514a++;〃第2行定義的a相加15retunitemp:16}調(diào)用f(0>進(jìn)入第8行的else語句:第10行,t=7;第13行,兩5=12,返回12。調(diào)用f(丨),因?yàn)閍都是函數(shù)f中的局部變量,在f(0)結(jié)束時都己經(jīng)被銷毀,所以f(1)和f(0)的返回值相同,返回12。s=f(0)+f(l)=24,結(jié)果輸岀240.構(gòu)成C程序的三種基本結(jié)構(gòu)是( )序結(jié)構(gòu)、轉(zhuǎn)移結(jié)構(gòu)、遞歸結(jié)構(gòu)順序結(jié)構(gòu)、嵌套結(jié)構(gòu)、遞歸結(jié)構(gòu)CJ賄鋤勾、選擇結(jié)構(gòu)、循環(huán)鋤勾D蹈結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、鱈結(jié)構(gòu)【答案】C【解析】結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。已經(jīng)證明,由三種基本結(jié)構(gòu)組算法可以解決可復(fù)雜的問題。.以下選項(xiàng)中不能用作C程序合法常量的是( )o1,234"\123"123"\x7D"【答案】A【解析】常量分為數(shù)值常量和字符串常量,A項(xiàng)錯誤。BD兩項(xiàng)為字符常量;C項(xiàng)為數(shù)值常量。.有以下程序:#include<sldio.h>main()Ichara='H';a=(a>='A,&&<=,Z')?(a-'A,+'a'):a;prinlf(c\nM.a);TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( XAaHh【答案】D[解析】首先將H賦給變量a,問號前f表達(dá)式成立,問號后面減去—大寫字母A再加上小寫字母a實(shí)際是將原來的大寫字母轉(zhuǎn)換成小寫字母,即H轉(zhuǎn)換成h,再將結(jié)果賦給a。.以下敘述中錯誤的是( )。非零的數(shù)值型常量有正值和負(fù)值的區(qū)分常量是在程序運(yùn)行過程中值不能被改變的量定義符號常量必須用類型名來設(shè)定常量的類型用符號名表示的常量叫符號常量【答案】C【解析】在C語言程序中,可以用一個符號名來代表一個常量,稱為符號常量,符號常量在定義是不建’其本身就能表達(dá)其類型。15.若函數(shù)中有定義語句intk:.則( )。系統(tǒng)將自動給k賦初值。這時k中的值無定義系統(tǒng)將自動給k賦初值-I這時k中無任何值【答案】B[解析]intk;這條語句是定義一個整型變量k,這是動態(tài)定義,編譯程序僅為k開辟存儲單元,而沒有在存儲單元中存放任何初值,此時變量中的值時無意義的。若是靜態(tài)定義,則會自動初始化,其默認(rèn)值為0。.有以下程序:#include<stdio.h>#defineFNA(x)x?x#defineFNB(x)x+xmain()Iinta=2,b=4;printf(”%d,%d\n”,F(xiàn)NA(FNB(a)),FNB(FNA(b)));ITOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( 18,1616,328,32I6,16【答案】C【解析】帶參數(shù)的宏定義不是進(jìn)行簡單的字符串替換,而是要進(jìn)行參數(shù)替換不計算,只是進(jìn)行簡單的替換。替換過程是:用宏調(diào)用提供的實(shí)參字符串,直接置換宏定義命令行中相應(yīng)形參字符串,非形參字符保持不變。FNA(FNB(a))的替換過程為:FNA(2+2)替換為2+2X2+2,計算結(jié)果為8。FNB(FNA(b))的替換過程為:FNB(4*4)替換為4X4+4X4=32。程序運(yùn)行后的輸岀結(jié)果是8,32,故C項(xiàng)正確。.有以下程序#include<stdio.h>main(){inta=3;printf("%(l\n",(a+=a-=a*a));ITOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( 1-129OD.3【答案】A【解析】C語言中,表達(dá)式從右向左計算。a+=a-=a*a;可以寫成a-=a*a;a+=a:而心血等價于a=a-(a*a)=3-(3*3)=-6;a+=a都介于a=a+a=(-6)+(-6)=-12O.以下關(guān)于字符串的敘述中正確的是( )。C語言中有字符串類型的常量和變量兩個字符串中的字符個數(shù)相同時才能進(jìn)行字符串大小的比較可以用關(guān)系運(yùn)算符對字符串的大小進(jìn)行比較D左串比空格打頭的字符串小【答案】D【解析】字符串比較的方法是:依次對si和S2中對應(yīng)位置上的字符兩兩進(jìn)行比較’當(dāng)出現(xiàn)第一對不相同的字符時,即由這兩個字符決定所在串的大小(比較字符大小的依據(jù)是其ASCII碼值\空格是一種字符,所以空串肯定比空格打頭的字符串小。.設(shè)函數(shù)中有整型變量n,為保證其在未賦值的情況下初值為0.應(yīng)選擇的存儲類別是( )。autoregisterstaticauto或register【答案】c【解析】靜態(tài)存儲類型定義變量在未對其初始化時會對其初始化為默認(rèn)值’其中而型的默認(rèn)初始化是0,其他選項(xiàng)的存儲類型不能保證。.有以下程序:#include<stdio.h>main()Iintx=0,y=6;doIwhile(—y)x++;|while(y―);printf(”%d,%d\n”,x,y);ITOC\o"1-5"\h\z程序的運(yùn)行結(jié)果是( 15.06,05,-16,-I【答案】c【解析】程序執(zhí)行過程為:執(zhí)行do-while的循環(huán)體:y=5,判斷y為真,x=I;y=4,x=2;y=3,x=3;y=2,x=4;y=l.x=5;y=0,判斷y為假,退出循環(huán)體。判斷do???while條件y=o為假,y—1,退出循環(huán)。輸出x,y為5,-1,故C項(xiàng)正確。二、設(shè)計題21.請編寫一個函數(shù)曲,它的功能是將SS所指字符串中所有下標(biāo)為奇數(shù)位置的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換).例如,若輸入“abc4Efg”,則應(yīng)輸岀“aBc4EFg”。注意部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。鮑麝#include<conio.h>#include<stdio.h>#include<string,h>#include<stdlib.h>voidfiin(char*ss)IIvoidmain()IFILE?wf;chartt[81],s[81]="abc4Efg";system(”CLS");printf("\nPleaseenteranstringwithin80characters:\n"):gets(tt);printf("\n\nAfterchanging,thesiring\n%s".It);fun(tt);printf("\nbecomes\n%s\n",?);/******************************/wf=fopen("out.dat"w");fun(s);fprintf(wf,”%s”,s);fclose(wf);/*****************************/I【答案】voidfun(char?ss)if(ss=NULL)Ireturn;Iinii;for(i=0;8s[ij!='\0';i?+) 所指字符串中所有下標(biāo)為奇數(shù)位置的字號梏換為大寫*/Iif(i%2==l&Mi]>=,a,&&ss[i]<=V)說i】=Wi]-32;【解析】題目要求將給定字符串中奇數(shù)位置的字母轉(zhuǎn)換為大寫,需要先判斷奇數(shù)位置以及此位置的字符是否是/」瀉字母,如果是再通過其轉(zhuǎn)換方法進(jìn)行轉(zhuǎn)換。c語言中,只要將小寫字母減去32即轉(zhuǎn)成大寫字母,將大寫字母加上32即轉(zhuǎn)成小寫字母。程序用if語句實(shí)現(xiàn)轉(zhuǎn)換功能。22.請編寫一個函數(shù),用來刪除字符串中的所有空格。例如’輸入asdafaaz67,則輸岀為asdafaaz67。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。鮑新:#include<stdio.h>include<ctype.h>#include<conio.h>voidfun(char*slr)I)main()Icharstr(8l];charMsg[]="lnpulastring:";intn;printf(Msg);gets(str);puts(str):fun(str);printfC***str:%s\n'\str):I【答案】voidfun(char*str)(inti=0;char*p=str:while(*p)/*遍歷字符串*/I/*如果當(dāng)前元素不為空格*/if(*p!=*?)I/*將當(dāng)前元素保存到紀(jì)中*/il;Ip++:)岫W字符串最后加上結(jié)束標(biāo)記符?/【解析】題目要求刪除空格’也就是重新保存空格以外的其他字符。通過循環(huán)刪除字符串中的每f空格,將非空格字符進(jìn)行重新保存。2017年山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫(三)說明:①本資料為VIP包過學(xué)員內(nèi)部使用資料。涵蓋了歷年考研??碱}型和重點(diǎn)題型。一、選擇題-以下敘述正確的是( )。C程序總是以main( )作為程序執(zhí)行的起始行main( )函數(shù)若不帶參數(shù)’其后面的一對圓括號可省略函數(shù)體內(nèi)的定義語句和可執(zhí)行語句允許任意穿插出現(xiàn)C語言中的語句之間必須用分號作為分隔符【答案】A【解析】main( )函數(shù)后面的括號告訴編譯器這是f函數(shù),不可以省略,排除B選項(xiàng);在復(fù)合語句中’不僅可以有執(zhí)行語句,還可以有定義語句,定義語句應(yīng)該出現(xiàn)在執(zhí)行語句的前面’故排除C選項(xiàng);C語言中的某些語句可以不用分號’例如if語句,宏定義,故D選項(xiàng)錯誤;答案為A選項(xiàng)。.有以下程序(strcat函數(shù)用以連接兩個字符串):#include<stdio.h>#include<clype.h>main()chara[20]=”ABCD\0EFG\0”,b[]=”UK”;strcat(a,b);printf("%s\n",a);程序運(yùn)行后的輸出結(jié)果是( \ABCDE\0FG\0IJKABCDIJKUKEFGUK【答案】B[解析]在C語言中,系統(tǒng)在每個字符串的最后自動加入f字符’\0'作為字符串的結(jié)束標(biāo)志。chara[20]="ABCD\0EFG\0"中,當(dāng)遇到就結(jié)束初始化,因此a[]=”ABCD”.b[]=”IJK”.連接這兩個字符串strcaKa.'\0'b)得到ABCDUK。?若有定義doublea=22:inti=0.k=l8;.則不符合C語言規(guī)定的賦值語句是( )。a=a++.1++-i=(a+k)<=(i+k)i=a%lli=!a【答案】c【解析】C項(xiàng)錯誤,在C語言的算術(shù)運(yùn)算符中’取余運(yùn)算符“%”的左右兩側(cè)的兩個運(yùn)算分量必須題數(shù)。A項(xiàng),賦值運(yùn)算符的優(yōu)先級高于“,”運(yùn)算法,先進(jìn)行賦值;B項(xiàng),將農(nóng)”右邊的邏輯表達(dá)式的計算結(jié)果賦給變量i:D項(xiàng),首先對變量a求邏輯非操作,然后將結(jié)果賦值給變量i4.有如権序:#include<stdio.h>rnain()inta=0,*ptr;ptr=&a;*ptr=3;a=(*ptr)++;printf("%d,%d\n",a,*ptr);TOC\o"1-5"\h\z程序運(yùn)行后的輸岀結(jié)果是( X4,40,1l,40,4【答案】A【解析】程序執(zhí)行過程為:定義整型變量a=0與指針pt「,使指針指向變量a。對指針指向的變量進(jìn)行賦值a=3,將指針?biāo)赶蜃兞考?,并賦值給a=4,此時指針依然指向變量a,輸岀a與指針指向的變量值:4,4,故A項(xiàng)正確。5.下面是有關(guān)C語言字符數(shù)組的描述,其中錯誤的是( )。不可以用賦值語句給字符數(shù)組名賦字符串B可以用輸入語句把字符串整體輸入給字符數(shù)組字符數(shù)組中的內(nèi)容不一定是字符串字符數(shù)組只能存放字符串【答案】D[解析】字符數(shù)組可以用來存放單個的字符或者字符串。設(shè)a,b,C是整型變量,且已正確賦初值,以下選項(xiàng)中錯誤的賦值語句是( )。a=l%(b=c=2):a=(b=3)*c;a=b=c/10:a=2=(b=9)=1;【答案】D[解析]D項(xiàng),"( y具有最高優(yōu)先級,b先賦值9,再根據(jù)賦值運(yùn)算符號自右向左進(jìn)行賦值,再給b賦值為1,再計算2=b,賦值運(yùn)算符左邊必須是一個變量,但數(shù)值2是常量,語法錯誤。有以下程序:二incluae<stdio.h-voidfun(intp){intd=2;p=d++;printf(%d.p);}main(){inta=1;fun(a)sprintf(%d\n\a);TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( X32I22122【答案】C[解析】C語言中函數(shù)參數(shù)傳遞滿足“單向傳遞“,實(shí)現(xiàn)傳遞值的功能,實(shí)參能傳給形參,形參卻不能傳回給實(shí)參。fun函數(shù)體內(nèi)輸出p的值為2,并不影響到fun函數(shù)外a的值,a的值在main函數(shù)內(nèi)依然為I。.若有定義語句intkl=10,k2=20;,執(zhí)行表達(dá)式(klkl>k2)&&(k2k2>kl)后,kl和k2的值分別為()。0和10和2010和1I0和20【答案】B【解析】在C語言中,沒有專門的“邏輯值”,而是用非。表示“真”,用。表示“假”。根據(jù)優(yōu)先級,先計算括號內(nèi)的。括號內(nèi)先比較心和k2的大小,由于k2〉kl,,故左邊括號中的kl與k2比較的結(jié)果為假,值為0,再賦值給kl,可得kl的值為0,由于()與任何值相與結(jié)果都是。,故右邊f(xié)括號不需運(yùn)算,即k2的值不變,仍為20。.以下敘述中正確的是( )OA在scanf函數(shù)的格式串中,必須有與輸入項(xiàng)一對應(yīng)的格式轉(zhuǎn)換說明符只能在printf函數(shù)中指定輸入數(shù)據(jù)的寬度,而不能在scanf函數(shù)中指定輸入數(shù)據(jù)占的寬度C-scanf函數(shù)中的字符串是提示程序員的,輸入數(shù)據(jù)時不必管它D.復(fù)合語句也被稱為語句塊,它至少要包含兩條語句【答案】C【解析】c項(xiàng)正確,scanf函數(shù)中的字符串是為了増加程序的可讀性,并不影響數(shù)據(jù)的輸入。A項(xiàng)錯誤,可以在%和格式字符之間加入…號,作用是跳過對應(yīng)的輸入數(shù)據(jù):B項(xiàng)錯誤,可以在格式字符前加入一正整數(shù)指定輸入數(shù)據(jù)所占的寬度:D項(xiàng)錯誤,用一對花括號把若干語句括起來構(gòu)成一條復(fù)合語句。一個復(fù)合語句在語法上視為一條語句,在一對花括號內(nèi)的語句數(shù)量不限。10.以下選項(xiàng)中能表示合法常量的是( )?!癨007”1.5E2.0'\'1,200【答案】A【解析】A項(xiàng),表示的是字符串常量。B項(xiàng),浮點(diǎn)數(shù)的指數(shù)部分應(yīng)該是整型;C項(xiàng),單個轉(zhuǎn)義符沒有意義:D項(xiàng),整數(shù)常量中間不能岀現(xiàn)逗號。11.以下能正確定義字符串的語句是( )Ocharstr[]="\O":charstr=,'kx43";charslr=n;chars(r[]={'\064'!:【答案】A【解析】字符串末尾一定要有結(jié)束標(biāo)記,雙引號括起來的字符串系統(tǒng)會默認(rèn)添加結(jié)束標(biāo)記。A項(xiàng)正確,定義了空字符串str。B項(xiàng)錯誤,str是char類型變量,不能用字符串為其賦值;C項(xiàng)錯誤,字符串應(yīng)該用雙引號括起來;D項(xiàng)錯誤,如果一個字符數(shù)組用來作為字符串使用,一定要人為加入'\0',str字符串中str|0]='\064'='4‘,但是str缺少結(jié)束符。12.有以下程序#include<stdio.h>voidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;Imain()(char*sl=,,abc'\*s2=“123”;swap(sl,s2);printf("%s,%s\n'\sl,s2)I程序執(zhí)行后的輸出結(jié)果是( Xlbc,a23abc,123123,abc321,cba【答案】A【解析】字符串是一個特殊的數(shù)組,按照數(shù)組的規(guī)則,si應(yīng)該指向的是數(shù)組的首地址,即%bc"的第一個字符的地址。s2指向的是“123”的第一個字符的地址。調(diào)用swap函數(shù)之后交換的是兩個字符串的第—字符W和T的內(nèi)容,因此打印輸岀為A。有以下程序:#include<stdio.h>main()Ichara=4;printf("%d\nM,a=a<<l);tITOC\o"1-5"\h\z聞運(yùn)行的結(jié)果是( 1401684【答案】C【解析】左移T立相當(dāng)于原數(shù)乘以二,右移相當(dāng)于除以二,a?l結(jié)果為4X2=8。沒有超過char的類型表示范圍,所以輸出8。C語言中字符型變量可以用在任何整型變量可以使用的地方。C語言源程序名的后綴是( )Cexeobjcp【答案】A【解析】C語言源程序名的后綴為.C有以下程序:itincludeVstdio.h>voidfun(mt.intn)inti.t;for(i=0;i<n2;i-??)'t=a[,i':a[i*]=a[n-1-main(34 intk£10]=(1.2.3.4.5.6.7.8.9.10}.!:fun(k.5);for(i=2;i<8;i++)printf(%<f.ki]);printf;程序運(yùn)行的結(jié)果是( X34567878765431098765321678【答案】D【解析】由于數(shù)組名本身是一個地址,所以在用數(shù)組名作為實(shí)參傳遞時’對應(yīng)的形參相當(dāng)于一個指針變量,在函數(shù)中可以通過指針變量來弓I用數(shù)組元素,從而改變元素的值。本題中函數(shù)fun的作用是」隨組A的前n個元素進(jìn)行逆轉(zhuǎn),fun(k,5)的結(jié)果是數(shù)組k的前五個元素I、2、3、4、5變?yōu)?、4、3、2、1、逆轉(zhuǎn)后,輸出數(shù)組中第3個至第8個元素。.有以下程序:#include<stdio.h>#include〈string.h>typedefstructJcharname[9j;charsex;fioatscore[2];:STU;voidf(STUa)ISTUb=\"Zhao",*m?,85.0,90.01;inti;strcpy(a.name.b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];main()ISTUc=|,,Q>anM,'f',95.0,92.01;f(C);printf("%s,%c,%2.0f,%2.0f\n",c.name.c.sex.c.score[0j,c.scorefI]);I程序的運(yùn)行結(jié)果是( IQian,f,95,92Qian,m,85,90Zhao,f,95.92Zhao,m,85,90【答案】A【解析】結(jié)構(gòu)體作為函數(shù)參數(shù)時是傳值調(diào)用。本題中,函數(shù)傳遞的是實(shí)參結(jié)構(gòu)體變量中的值。函數(shù)體內(nèi)對形參結(jié)構(gòu)體變量中任何成員的操作都不會影響對應(yīng)實(shí)參中成員的值。因此門)沒有任何實(shí)際作用。.若有定義語句intx=12,y=8,z;,其后執(zhí)彳福句z=0.9+x/y,則z的值為。TOC\o"1-5"\h\zI.9122.4【答案】B【解析】根據(jù)優(yōu)先級先計算x/y,即12/8,由于是整型,故x/y的值為1,接著計算0.9+1=19由于z定義為整型’故最終結(jié)果為1。18.有以下程序:"include<stdio,h>main()Iinta=1.b=0:for(;a<5;a++)Iif(a%2==0)break;b+=a;printf("%d\n”,b);ITOC\o"1-5"\h\z程序的運(yùn)行結(jié)果是( Xl10O4【答案】A【解析】程序的執(zhí)行過程為:a=l時,a%2=l條件不成立,執(zhí)彳請句b+=a;得到b=l;a=2時,a%2=0條件成立,執(zhí)行語句break;跳出循環(huán)。輸岀b=l,故A項(xiàng)正確。.有以下程序:^include<sldio.h>intk=5;voidf(int*s)I8=&k;?s=7;I.Imain()Iintin=3;printf("%d,%d\n",m,k);ITOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( X3,57,75,73,7【答案】D【解析】函數(shù)f( )的功能是定義一個整型的指針變量s,指向全局變量k,然后修改S指向地址中的值為7,因此f( )函數(shù)只是修改全局變量k的值為7,與main( )函數(shù)中臨時變量m無關(guān),因此最后輸出為3,7。.有以下程序(注:字符a的ASCII碼值為97):^include<stdio.h>main()Ichar?s=I"abc"|doIprintf(H%d°.*s%l0);++a;|while(?s);TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( Xabc7897890979800【答案】B【解析】a、b、c的ASCII值分別為97、98、99。程序中執(zhí)行輸出S中的內(nèi)容與1()進(jìn)行模運(yùn)算后的值,s是一個指針,首先指向字符a,先執(zhí)行97%10,結(jié)果為7;然后++s,指針指向下一個字符b,執(zhí)行98%10,結(jié)果為8,直到s所指為空,故最后輸出的結(jié)果為789。二、設(shè)計題21.請根據(jù)以下各小題的要求設(shè)計C應(yīng)用程序(包括界面和代碼)。請編寫函數(shù)fun( ),該函數(shù)的功能是:計算并輸岀給定整數(shù)n的所有因子(不包括I和自身)之和。規(guī)定n的值不大于1000。例如,在主函數(shù)中從鍵盤給n輸入的值為856,則輸出為:sum二763。注意部分源新給出女嚇。請勿改動主函數(shù)main( )和其他函數(shù)中的任何內(nèi)容,僅在fun( )函數(shù)的花括號中填入所編寫的若干語句。試題程序如下:^include<sl(iio.h>ini(un(inin)Ivoidmain()Iintnt?um:printf(nInputn:n);scanf(”%d",&n);sum=fun(n);printf("sum=%d\n",sum);I【答案】intfun(intn)ints=0,i;for(i=2;i<=n-I;i++)if(n%i=0)s+=i;returns;【解析】本題的設(shè)計思路是:①遍歷從2到M的所有整數(shù);②用條件語句找出能被n整除的整數(shù)i,并累加求和;③用return語句返回因子的和。22.規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:使字符串中尾部的李號不多于n個若多于n個,則刪除多余的點(diǎn)號;若少于或等于n個,則不做任何操作,字符串中間和前面的*號不刪除。例如,字符串中的內(nèi)容為“****A+BC*DEF*G*******”,若n的值為4,刪除后,字符串中的內(nèi)容應(yīng);“****A*BC*DEF*G****”;若n的值為7,則字符串中的內(nèi)容仍為“****A*BC*DEF*G*******”n的值在:函數(shù)中輸入。編寫函數(shù)時不得使用C語言提供的字符串函數(shù)。注意:部分源程序給出如下。請勿改動主畫數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>voidfunfchar*a,intn)main()(chars[81];intn:printf("Entera^tring:\n");printlf"Entern:");sranf(',%(l".&n);fun(s,n);printi'C'Thestringafterdeleted:\n");puLs(s);)【答案】void(im(char*a.intn)Iinti=O.k=0;char*p,*1;p=l=a:while(*t)t++:while(*t=='**)if(k>n)[while(*p&&p<t+n+1)(a[i]=*p;i++:p++:I明迎:【解析】通過while循環(huán)統(tǒng)計字符串尾部號*的個數(shù),然后通過if語句比較尾部*號數(shù)是否多于n個,若大于則保留n個*號和其余字符。2017年山西大學(xué)數(shù)學(xué)科學(xué)學(xué)院834程序設(shè)計考研題庫(四)說明:①本資料為VIP包過學(xué)員內(nèi)部使用資料。涵蓋了歷年考研??碱}型和重點(diǎn)題型。一、選擇題?有以下程序段:charname[20::intnum:scanf("namc=%snum=%d”.name.&num):當(dāng)執(zhí)行上述程序段,并從鍵盤輸入:name=Lilinum=1001<回車〉后,name的值為( \Liliname=LiliLilinum=name=Lilinum=l001【答案】A【解析】在C語言中輸入多個字符串時,系統(tǒng)會把空格字符作為輸入的字符串之間的分隔符。本題中,由于輸入兩個變量,所以中間應(yīng)該以回車鍵為間隔,當(dāng)從鍵盤輸入name=Lilinum=IOOl只是輸入第f變量,并且只將Lili賦值給了name。.以下能夠?qū)崿F(xiàn)計算5!的程序段是( )O(A)intfac=1,k=0; (B)intfac=0,k=l;dolk;fac*=k;lwhile(k<5);do|fack;k++;Iwhile(k<5);(C)intfac=1.k=1; (D)intfac=1.k=0;do|k;fac*=^;|while(k<=5);do|fac*=k;k|while(k<5);【答案】A[解析】do-while循環(huán)語句形式為:do{循環(huán)體}while(表達(dá)式),執(zhí)行過程為:首先執(zhí)行循環(huán)體,之后判斷表達(dá)式,成立(非0.則再一次執(zhí)行循環(huán)體’不成立(0.則退出循環(huán)。A選項(xiàng):k=l,fac=1*I,判斷kv5,條件成立進(jìn)行下一次循環(huán),直到k=5,fac=l*2*3*4*5,版5不成立退出循環(huán),實(shí)現(xiàn)計算5!,A選項(xiàng)正確。B選項(xiàng):fae從()開始,做乘法一直都是0,無法實(shí)現(xiàn)5!,錯誤。C選項(xiàng):k=2,fac=l*2.循環(huán)條件成立,直到k=6,fac=l*2*3*4*5*6才因循環(huán)條件不成立退出循環(huán),實(shí)現(xiàn)6!,錯誤。D選項(xiàng):k=0,fae=l*0=0,之后做乘法一直為0,無法實(shí)現(xiàn)5!.錯誤。故選擇A選項(xiàng)。3.有以下程序:#include<stdio.h>voidf(intx[],intn)Iif(n>1))n-1);printf(rt%d,",x[O]);Ielseprintf("%d,”,x[0]);Imain()I =11,2,3.4.5,6};f(z.6);printf("\ntt);I程序的運(yùn)行結(jié)果是( X6,5,4,3,2,1,l,1l.1,1,1,1.1.l,2,3,4,5,6,【答案】A【解析】本題中遞歸函數(shù)調(diào)用執(zhí)行過程為:f(z.6)->f 5)>f(&z[2].4)->f(&z[3].3)->f (&z[4],2)->f(&z[5],I),輸岀x[Oh也即z[5〕=6,返回執(zhí)行f(&H4],2)之后的輸出x[0]語句,即5,同理再返回上一f函數(shù).依次輸出4,3,2,1。4.若要實(shí)現(xiàn)total=l+2+3+4+5求和,以下程序段錯誤的是( )。inti=1,total=1;while(i<5)Itotal+=i;i+=l;Iinti=1,total=0;while(i<=5)Itotal+=i;i+=l;iinti=0,total=0;while(i<5)ii+=I;total+=i;}inti=0,total=0;while(i<=5)Itotal+=i;i+=l;}【答案】A【解析】A項(xiàng)執(zhí)行過程為:i=l,total=L判斷while循環(huán)劉牛1<5成立,total=l+l,i=2;判斷循環(huán)條件執(zhí)行函數(shù)體,直到i=4,total=l+l+2+3+4,i=5;i=5循環(huán)條件不成立,退出循環(huán),A項(xiàng)不能實(shí)現(xiàn)題目要求,錯誤。B項(xiàng)執(zhí)行過程:i=l,total=0,1<=5成立,total=0+l=l,i=2;直到i=5,total=I+2+3+4+5,i=6;i=6條件不成立,退出循環(huán),程序正確。C項(xiàng)執(zhí)行過程:i=0.total=<).(R5成立,i=l,total=1i:直到i=5‘total=1+2+344+5:i=5劉牛不成立’退出循環(huán)’¥^^正確。D項(xiàng)執(zhí)彳5^;程:i=0.t()ial=0,0<=5成立?total=0,i=5,total=l+2+3+4+5.i=6;i=6條件不成立,退出循環(huán),程序正確。.以下敘述錯誤的是( )。未經(jīng)賦值的全局變量值不確定未經(jīng)賦值的auto變量值不確定未經(jīng)賦值的register變量值不確定未經(jīng)賦值的靜態(tài)局部變量值為0【答案】A【解析】C語言中,系統(tǒng)將未經(jīng)賦初值的全局變量默認(rèn)為0,答案為A選項(xiàng)。.有以下程序(程序中庫函數(shù)iMwench)用以判斷ch中的字符是否為小寫字母):#include<skiio.h>#includeVctype.h>voidfun(char*p)Iinti=0;while(p[ij)Iif(p[i]=="&&islower(p[i-l]))p[i-1]=p[i-1]-'a'+'A1;i++;IImain()IcharsiI100|="abcdEFG!”fun(si);printf("%s\n",sl);程序運(yùn)行后的輸出結(jié)果是( \abedEFG!AbCdEFg!aBcDEFG!abedEFg!【答案】c【解析】fun函數(shù)實(shí)現(xiàn)的功能是將字符串中空格前面的小寫字母轉(zhuǎn)換為對應(yīng)的大寫字母,“abedEFG!中需要改變的是b和d,因此為aBcDEFG!。.有如下程序:#include<stdio.h>structSIintx,y;I;main()structSdata[2]=}4,3,1,9};inti;for(i=0;i<2;i++)printf("%d,%d;",data[i].x,data[i].y?1);printf("\n");I程序運(yùn)行后的輸岀結(jié)果是( X4,1:1,4:4,1:2.4;4.3:1.9:4,3:2,3;【答案】A【解析】“>>”右移運(yùn)算符。程序執(zhí)行過程為:定義結(jié)構(gòu)體數(shù)組data,并且初始化,則data[O].x=4.data[O]?y=3.data[l].x=l,data[l].y=9.For循環(huán)依次輸出結(jié)構(gòu)體變量的成員與經(jīng)過位運(yùn)算之后的結(jié)果o3=llB,9=1001B.data[01.y?l=l,data[l],y>>1=4“程序運(yùn)行后輸出結(jié)果為:4,1,1,4。.有以下定義語句,編譯時會出現(xiàn)編譯錯誤的是( )。chara='a'chara=*\n*;D.chara='\x2d'chara=,aa*;【答案】c【解析】本題中a為f字符型變量,只能為其賦值一個字符常量。C項(xiàng)中Wa.不是字符常量,所以會編譯錯誤。BD兩項(xiàng)為轉(zhuǎn)義字符’編譯可以通過。.以下選項(xiàng)中敘述正確的是( )。C語言的標(biāo)識符可分為關(guān)鍵字、預(yù)定義標(biāo)識符和用戶標(biāo)識符三類C語言的標(biāo)識符可分為語句、變量和關(guān)鍵字三類C語言的標(biāo)識符可分為函數(shù)名、變量和預(yù)定義標(biāo)識符三類C語言的標(biāo)識符可分為運(yùn)算符、用戶標(biāo)識符和關(guān)鍵字三類【答案】A[解析]C語言的標(biāo)識符可分為關(guān)鍵字、預(yù)定義標(biāo)識符和用戶標(biāo)識符三類,A項(xiàng)正確,B、C、D項(xiàng)鮑.有以下程序:#include<stdio.h>main()IFILE?fp;inti,a[6]={1,2,3,4,5,6」;fp=fopen("d2.dat".Hw+H);for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);£or(i=0;i<6;i++)fscanf(fp,”%d”,&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);I程序運(yùn)行后的結(jié)果是( 14.5.6.1.2,3.1,2,3,3,2,).1.2,3.4.5.6.6,5.4,3,2.I,【答案】D【解析】main函數(shù)首先將數(shù)組a中的元素值寫入文件,再將文件中的元素倒序存放在數(shù)組a中,最后答應(yīng)數(shù)組a的值,最終輸出為6,5,4,3,2,1。11.有以下程序#include<stdio.h>main()(inta=7:while(a;printf("%d\n",a);)TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( X-lOl7【答案】A【解析】當(dāng)a為。時,a-表達(dá)式為0,條件為假,循環(huán)結(jié)束,執(zhí)行判斷條件后a為-1。'2.有以下程序:#include<stdio.h>main()Ichar*pl=0;ini?p2=0;float*p3=0;printf("%d,%d,%d\n",sizeof(pl),sizeof(p2).sizeof(p3));I程序運(yùn)行后的輸出結(jié)果是( 1l,4,84,4,4l,2.4l.1,4【答案】B【解析】sizeof( )函數(shù)表示求該變量所占字節(jié)空間,同時f指針變量占用4字節(jié)長度[在Win32系統(tǒng)中],因此輸出為4。.有以下程序#include<stdio.h>main()Iinii.s=O,i[]=fl,2.3.4.5.6.7.8.91;for(i=0;i<9:i+=2)fi+=*(t+i);printf("%d\n",s);)TOC\o"1-5"\h\z程序執(zhí)行后的輸出結(jié)果是( 125204536【答案】A【解析】%司.等價于臥依次訪問數(shù)組t中的偶數(shù)位元素,s=l(O|+t[2|+t|41+U61+t|81=1+3+5+7+9=25。.設(shè)有定義:in(k=0;TOC\o"1-5"\h\z以下選項(xiàng)的四個表達(dá)式中與其他三個表達(dá)式的值不相同的是( I++kk+=lk++k+1【答案】c【解析】I表達(dá)式值為k的值,其余為k,l的值。.設(shè)a,b,c是整型變量且均已賦值,則以下選項(xiàng)中錯誤的賦值語句是( )0a=<b=3)=1;a=(b=2)+c:a=b=c+10;a=1+(b=c=2):【答案】A【解析】賦值運(yùn)算結(jié)合性為由右向左結(jié)合,賦值運(yùn)算符左值為變量,右值為變量或常量,且左右兩邊數(shù)據(jù)類型相同才能實(shí)現(xiàn)賦值。A項(xiàng)中,賦值運(yùn)算(b=3)=1,左值為表達(dá)式,不是變量不能被賦值,A項(xiàng)錯誤。B項(xiàng)運(yùn)算過程為,先賦值陣2,再計算b+c,將結(jié)果賦給a,是正確的賦值語句。C項(xiàng)運(yùn)算過程為.先計算c+IO將結(jié)果賦給b,再將b賦給a,是正確的賦值語句。D項(xiàng)運(yùn)算過程為,先將2曜c,胡各c賦給b,然后計算l_b,將結(jié)果睽編証確的賦值語句。.下列敘述中正確的是( )。A每個C程序文件中都必須要有一個main函數(shù)B在C程序中main函數(shù)的位置是固定的C.C程序中所有函數(shù)之間都可以相互調(diào)用D在C程序的函數(shù)中不能定義另f函數(shù)【答案】D[解析]D項(xiàng)正確,C語言語法規(guī)定,在函數(shù)中不能定義其他函數(shù)。A項(xiàng)錯誤,C程序必須要有一個main函數(shù),但并不是每個文件中都要有;B項(xiàng)錯誤,main函數(shù)的位置沒有特殊要求;C項(xiàng)錯誤,從其他函數(shù)中不能調(diào)用main函數(shù)。.在以下程序:"include<stdio.h>main()Iinta=I.b=0:iff?a)bi:elseif(a==O)if(a)b+=2;elseb+=3;printf(”%d\iT.b)TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( \0I23【答案】A【解析】if(!a>不滿足跳出,if(a==O)不滿足,跳出if-&循環(huán),并沒有往下執(zhí)行,因此b值沒有改變。.以下敘述中正確的是( )。在算法設(shè)計時,可以把復(fù)雜彳琦分解成一些簡單的子任務(wù)B在C語言程序設(shè)計中,所有函數(shù)必須保存在—源文件中只要包含了三種基本結(jié)構(gòu)的算法就是結(jié)構(gòu)礎(chǔ)序結(jié)構(gòu)化程序必須包含所有的三種基本結(jié)構(gòu),缺一不可【答案】A【解析】A項(xiàng)正確,模塊化的程序設(shè)計方法;B項(xiàng)錯誤,C語言中,函數(shù)可以放在不同的源文件中:CD兩項(xiàng)錯誤,由三種基本結(jié)構(gòu)所構(gòu)成的程序稱為結(jié)構(gòu)化程序,三種基本結(jié)構(gòu)可以任意組合。TOC\o"1-5"\h\z.以下選項(xiàng)中合法的標(biāo)識符是( )o1_11-1111 【答案】C[解析]C語言中標(biāo)識符的命名規(guī)則是:標(biāo)識符由字母、數(shù)字和下畫線組成,并且第一個字符必須是字母或下畫線。C語言的標(biāo)識符是區(qū)分大/」瀉字母的。.有以下程序:#include<stdio.h>main()inia=1,b=2;while(a<6)ib+=a;a+=2;b%=10;Iprintf("%d.%d\n",a,b):TOC\o"1-5"\h\z程序運(yùn)行后的輸出結(jié)果是( \5,117,17,116,1【答案】B【解析】第—'次循環(huán),a=l,b=b+a=3,a=a+2=3,b=b%10=3;第二次循環(huán),a=3,b=b+a=6,a=a+2=5.b=b%10=6;第二次循環(huán),a=5,b=b+a=lha=a+2=7,b=b%10=1;結(jié)束循環(huán)。二、設(shè)計題.程序定義了NXN的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)訕(inla||[N|.ini2,該函數(shù)的功能是使數(shù)組左下半三角元素中的值乘以n。例如’若n的值為3,a數(shù)組中的值為:則返回主程序后a數(shù)組中的值應(yīng)為:(3 9 7'6 9 8J21518,注意:部分源程序給岀如下。請勿改動函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程*#include<stdio.h>#include<conio.h>"include<stdlib.h>#defineN5voidfun(inta[][NJ,intn)IImain()Iinta[N][N],n,i,j;printf(*******Thearray*****\nM):for(i=0;i<N;i++)Ifor(j=0;j<N;j++)Ia[j]=rand()%IO;printf("%4d\a[i][j]);Iprintf(”\nH);In=rand()%4;printf("n=%4d\n",n);fun(a.n);printf("*****THERESULT*****\n”);for(i=0;i<N;i++)for(j=O;j<N;j++)printf(”%4d”,a[i][j]);printf("\nM);I【答案】voidfun(inta[][N],intn)Iinti,j;if(a==NULL)return;for(i=0;i<N;i++)fbr(j=O;j<=i;j++)/*矩形的下三角時,積相乘*/a[i][j]=a[i][j]?n;I[解析】首先從數(shù)組中找出要被乘以n的元素,即找出將被挑出的元素在原數(shù)組中的分布規(guī)律。通過觀察得出’要被處理的元素下標(biāo)值的范圍是每行中從第一元素開始,直到列數(shù)等于該行行數(shù)時為止。找到這個規(guī)律后,依次從數(shù)組中取得符合要求的元素,然后乘以n。22.請根據(jù)以下各小題的要求設(shè)計C應(yīng)用程序(包括界面和代碼)0請編寫函數(shù)fun( ),它的功能是統(tǒng)計各年齡段的人數(shù)。N個年齡通過調(diào)用隨機(jī)函數(shù)獲得,并放在主函數(shù)的age數(shù)組中;要求函數(shù)把。至9歲年齡段的人數(shù)放在叩WP,把10至19歲年齡段的人數(shù)放在岫中,把20至29歲年齡段的人數(shù)放在d|2]中,其余依次類推,把100歲(含100歲)以上年齡的人數(shù)放在叩0]中。結(jié)果在主函數(shù)中輸出。注意:部分源程序給出如下。請勿改動主函數(shù)main( )和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫

溫馨提示

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

評論

0/150

提交評論