國家二級(C語言)機試模擬試卷20(共386題)_第1頁
國家二級(C語言)機試模擬試卷20(共386題)_第2頁
國家二級(C語言)機試模擬試卷20(共386題)_第3頁
國家二級(C語言)機試模擬試卷20(共386題)_第4頁
國家二級(C語言)機試模擬試卷20(共386題)_第5頁
已閱讀5頁,還剩112頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級(C語言)機試模擬試卷20(共9套)(共386題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共40題,每題1.0分,共40分。)1、在關(guān)系代數(shù)運算中,有5種基本運算,它們是()。A、并(∪)、差(-)、交(∩)、除(÷)和笛卡兒積(×)B、并(∪)、差(-)、交(∩)、投影(π)和選擇(σ)C、并(∪)、交(∩)、投影(π)、選擇(σ)和笛卡兒積(×)D、并(∪)、差(-)、投影(π)、選擇(σ)和笛卡兒積(×)標(biāo)準(zhǔn)答案:D知識點解析:并、差、笛卡兒積、投影和選擇是5種基本的運算,其他運算即交、連接和除,均可以通過5種基本的運算來表達。2、下列關(guān)于函數(shù)的敘述中正確的是()。A、每個函數(shù)都可以被其他函數(shù)調(diào)用(包括main函數(shù))B、每個函數(shù)都可以被單獨編譯C、每個函數(shù)都可以單獨運行D、在一個函數(shù)內(nèi)部可以定義另一個函數(shù)標(biāo)準(zhǔn)答案:B知識點解析:在C語言中,函數(shù)定義是平行的,函數(shù)不能嵌套定義,即函數(shù)之間沒有從屬關(guān)系。雖然函數(shù)之間可以相互調(diào)用,但main()函數(shù)不能被調(diào)用,選項A)錯誤;C程序從main()函數(shù)開始執(zhí)行,當(dāng)main()函數(shù)執(zhí)行完畢時,整個程序就結(jié)束了。C程序的執(zhí)行必須從main()函數(shù)開始,選項C)選項錯誤;函數(shù)不能嵌套定義,選項D)錯誤。3、若變量都已正確說明,則以下程序段()。#inchldemain(){inta=8;intb=6;printf(a>b?"&&&a=%d":"!!!b=%d",a,b);}A、輸出為:&&&a=8B、輸出為:!!Ib=8C、輸出為:&&&a=8!!!b=6D、全部錯誤標(biāo)準(zhǔn)答案:A知識點解析:本題考杳printf的輸出格式和條件表達式“?:”的使用。①printf函數(shù)輸出時,“&&&%d\n”和“!!!%d\n”中的“&&&”和“!!!”都是直接輸出。②條件表達式的基本格式為:a?b:c。其運算規(guī)則為:當(dāng)a為非0時,整個表達式的值取b的值,當(dāng)a為0時,整個表達式取c的值。pnntf函數(shù)中如果在格式說明符方前插入任何字符都將原樣輸出。本題中a>b為真,所以返回“&&&a=%d”。4、以下敘述正確的是()。A、只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用jbreak語句B、contiune語句的作用是結(jié)束整個循環(huán)的執(zhí)行C、在循環(huán)體內(nèi)使用break語句或continue浯句的作用相同D、從多層循環(huán)嵌套中退出時,只能使用goto語句標(biāo)準(zhǔn)答案:A知識點解析:本題考查循環(huán)的4個知識點:①break語句可以出現(xiàn)在循環(huán)體內(nèi)及switch語句體內(nèi),不能用于其他的語句;②continue語句的作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,而接著轉(zhuǎn)去判定循環(huán)條件是否成立,從而確定下一次循環(huán)是否繼續(xù)執(zhí)行,也就是說執(zhí)行contiune語句不會使整個循環(huán)終止;③在循環(huán)體內(nèi)使用break語句會使循環(huán)提前終止;④從多層循環(huán)嵌套中退出時,可以使用goto語句或者break語句。5、某二叉樹共有7個節(jié)點,其中葉子節(jié)點有1個,則該二叉樹的深度為(假設(shè)根節(jié)點在第1層)()。A、3B、4C、6D、7標(biāo)準(zhǔn)答案:D知識點解析:根據(jù)二叉樹的性質(zhì)3:在任意一棵二叉樹中,度為0的葉子節(jié)點總比度為2的節(jié)點多一個,所以本題中度為2的節(jié)點為1-1=0個,所以知道本題目中的二叉樹的每個節(jié)點都有一個分支,所以7個節(jié)點共7層,即度為7。6、有以下程序#includemain(){inta=1,b=0;printf("%d,",b=a+b);printf("%d\n",a=2*b);}程序運行后的輸出結(jié)果是()。A、1,2B、1,0C、3,2D、0,0標(biāo)準(zhǔn)答案:A知識點解析:考查數(shù)據(jù)的輸入,printf("%d,",b=a+b);先計算b=a+b,得出b=1,再輸出b值。語句printf("%d\n",a=2*b);先計算a=2*b,得出a=2,再輸出a值。所以輸出結(jié)果為A)。7、有以下程序:#include<stdio.h>voidfun(intp){intd=2;p=d++;printf("%d",p);}main(){inta=1:fun(a);printf("%d\n",a);}程序運行后的輸出結(jié)果是()。A、32B、12C、21D、22標(biāo)準(zhǔn)答案:C知識點解析:C語言中函數(shù)參數(shù)傳遞滿足“單向傳遞”,實現(xiàn)傳遞值的功能,實參能傳給形參,形參卻不能傳回給實參。fun函數(shù)體內(nèi)輸出p的值為2,并不影響到fun函數(shù)外a的值,a的值在main函數(shù)內(nèi)依然為1。8、下面不屬于需求分析階段任務(wù)的是()。A、確定軟件系統(tǒng)的功能需求B、確定軟件系統(tǒng)的性能需求C、需求規(guī)格說明書評審D、制定軟件集成測試計劃標(biāo)準(zhǔn)答案:D知識點解析:需求分析階段的工作有:需求獲??;需求分析;編寫需求規(guī)格說明書;需求評審,所以選擇D。9、以下程序運行后的輸出結(jié)果是()。#include<stdio.h>voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intb[10]={10,9,8,7,6,5,4,3,2,1};inti,s=0;reverse(b,10);for(i=0;i<3;i++)s+=b[i];printf("%d\n",s);}A、27B、6C、25D、30標(biāo)準(zhǔn)答案:B知識點解析:本題考查函數(shù)調(diào)用時的參數(shù)傳遞。函數(shù)reverse將數(shù)組b進行了逆置,此時b[10]={10,9,8,7,6,5,4,3,2,1},后面for語句的功能是將b中的后3個數(shù)累加,并將結(jié)果放在s中,最后將s輸出,結(jié)果s=1+2+3=6。10、設(shè)有以下說明,則不正確的敘述是()。Unionun{inta;charb;floatc;}arr;A、arr所占的內(nèi)存長度等于成員c的長度B、arr的地址和它的各成員的地址都是同一地址C、arr可以作為函數(shù)參數(shù)D、不能在定義arr時對它初始化標(biāo)準(zhǔn)答案:C知識點解析:本題主要考查聯(lián)合體的內(nèi)存使用:聯(lián)合體所占用的內(nèi)存空間為最長的成員所占用的空間,int占2個字節(jié),char占1個字節(jié),float占4個字節(jié),所以arr所占的內(nèi)存長度等于成員c的長度;arr的地址和它的各成員的地址都是同一地址;不能直接對arr賦值,即不能在定義arr時對它初始化;arr也不可以作為函數(shù)參數(shù)。11、下面屬于應(yīng)用軟件的是()。A、人事管理系統(tǒng)B、Oracle數(shù)據(jù)庫管理系統(tǒng)C、C++編譯系統(tǒng)D、ios操作系統(tǒng)標(biāo)準(zhǔn)答案:A知識點解析:系統(tǒng)軟件是管理計算機的資源,提高計算機的使用效率,為用戶提供各種服務(wù)的軟件,包括各種系統(tǒng)開發(fā)、維護工具軟件。應(yīng)用軟件是為了應(yīng)用于特定的領(lǐng)域而開發(fā)的軟件。人事管理系統(tǒng)屬于應(yīng)用軟件。Oracle數(shù)據(jù)庫管理系統(tǒng)、C++編譯系統(tǒng)、ios操作系統(tǒng)是系統(tǒng)軟件。故本題答案為A選項。12、有以下程序段:inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf(“%d\n”,n);break;case2:case4:printf(“%d\n”,n);continue;case0:exit(0);}printf(“%d\n”,n);}以下關(guān)于程序段執(zhí)行情況的敘述,正確的是()A、for循環(huán)語句固定執(zhí)行8次B、當(dāng)產(chǎn)生的隨機數(shù)n為4時結(jié)束循環(huán)操作C、當(dāng)產(chǎn)生的隨機數(shù)n為1和2時不做任何操作D、當(dāng)產(chǎn)生的隨機數(shù)n為0時結(jié)束程序運行標(biāo)準(zhǔn)答案:D知識點解析:當(dāng)產(chǎn)生的隨機數(shù)n為0時,執(zhí)行case0:exit(0)這條語句,結(jié)束程序的運行。13、C語言中允許用外部說明來指定變量、函數(shù)和其他標(biāo)識符的特征,這里所說的外部指的是()。A、冠以關(guān)鍵字externB、位置在函數(shù)體外部C、作用范圍是全程的D、位置在函數(shù)的外部標(biāo)準(zhǔn)答案:D知識點解析:C語言中允許用位置在函數(shù)外部的說明來指定變量、函數(shù)和其他標(biāo)識符的特征。14、有以下程序#include#defineS(x)x/xmain(){intk=5,j=2;printf("%d,%d\n",S(k+j),S(j+k));}程序的運行結(jié)果是()。A、7,9B、1,1C、7,7D、9,9標(biāo)準(zhǔn)答案:A知識點解析:宏定義不是C語句,結(jié)尾不加";",所以該程序會出現(xiàn)編譯錯誤,答案選A)。15、下列關(guān)于線性表的敘述中,不正確的是()。A、線性表可以是空表B、線性表是一種線性結(jié)構(gòu)C、線性表的所有結(jié)點有且僅有一個前件和后件D、線性表是由n個元素組成的一個有限序列標(biāo)準(zhǔn)答案:C知識點解析:線性表是一種線性結(jié)構(gòu),由n(n≥0)個元素組成,所以線性表可以是空表。但是在線性表中,第一個結(jié)點沒有前件,最后一個結(jié)點沒有后件,其他結(jié)點有且只有一個前件和后件,所以選項C是錯誤的。16、下列敘述中正確的是()。A、調(diào)用printf()函數(shù)時,必須要有輸出項B、使用putchar()函數(shù)時,必須在之前包含頭文件stdio.hC、在C語言中,整數(shù)可以以二進制、八進制或十六進制的形式輸出D、調(diào)節(jié)getchar()函數(shù)讀入字符時,可以從鍵盤上輸入字符所對應(yīng)的ASCII碼標(biāo)準(zhǔn)答案:B知識點解析:選項A),若printf函數(shù)沒有輸出項,且格式字符串中不含格式信息,則輸出的是格式字符串本身,若格式字符串含有格式信息,運行時則出現(xiàn)錯誤提示;選項C),在C語言中,整數(shù)可以十進制、八進制或十六進制的形式輸出;選項D),getchar函數(shù)是從標(biāo)準(zhǔn)輸入設(shè)備讀取一個字符。17、有以下程序#include<stdio.h>voidf(int*q){inti=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf("%d,",a[i]);}程序運行后的輸出結(jié)果是A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,標(biāo)準(zhǔn)答案:A知識點解析:本題考查的是函數(shù)的地址調(diào)用,將數(shù)組名作為數(shù)組首地址進行傳遞,然后取數(shù)據(jù)元素值進行加1運算。因此A選項正確。18、設(shè)有如下的程序段:charstr[1]="HelloWorld";char*ptr;ptr=str;執(zhí)行上面的程序段后,*(ptr+10)的值為()。A、’\0’B、’0’C、不確定的值D、’0’的地址標(biāo)準(zhǔn)答案:A知識點解析:本題涉及字符數(shù)組和指針兩個知識點:①在C語言中,字符數(shù)組在存放字符串時會自動在末尾加上’\0’,所以題中數(shù)組str有11個元素;②ptr指向數(shù)組str的首地址,ptr+10是指向s仃[10],*(ptr+10)是引用str[10]的值(即結(jié)束符’\0’)。19、若變量已正確定義為int型,要通過語句seanf("%d,%d,%d",&a,&b,&C;給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(注:口代表一個空格符)()。A、1,2,3<回車>B、口口口1,2,3<回車>C、1,口口口2,口口口3<回車>D、1口2口3<回車>標(biāo)準(zhǔn)答案:D知識點解析:scanf()的格式控制串可以使用其他非空白字符,如本題中的逗號,但在輸入時必須輸入這些字符,以保證匹配。所以逗號必須輸入。20、在下列關(guān)系運算中,不改變關(guān)系表中的屬性個數(shù)但能減少元組個數(shù)的是()。A、并B、交C、投影D、除標(biāo)準(zhǔn)答案:B知識點解析:關(guān)系R與s經(jīng)交運算后所得到的關(guān)系是由那些既在R內(nèi)又在S內(nèi)的有序組所組成,記為R∩S,交運算不改變關(guān)系表中的屬性個數(shù)但能減少元組個數(shù)。21、有以下定義語句,編譯時會出現(xiàn)編譯錯誤的是()。A、chara=‘\x2d’;B、chara=‘\n’;C、chara=‘a(chǎn)’;D、chara=“aa”;標(biāo)準(zhǔn)答案:D知識點解析:D選項中將字符串常量“aa”賦給字符變量a是錯誤的。22、有以下計算公式若程序前面已在命令行中包含math.h文件,不能夠正確計算上述公式的程序段是()。A、if(x>:0)y=sqrt(x);B、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(一x);elsey=sqrt(一x);C、y=sqrt(x);D、y=sqrt(x>=0?x=一x);if(x<0)y=sqrt(一x);標(biāo)準(zhǔn)答案:C知識點解析:本題重點考查的知識點是:sqrt()函數(shù)。sqrt()函數(shù)的作用是計算平方根,要求輸出的參數(shù)x必須大于等于0。題目公式的要求是無論x大于等于0還是小于0,y的值都為x絕對值的開方。選項C中淵用了sqrt(x)函數(shù),而沒有判斷x的正負(fù),則y=sqrt(x)會出錯。23、有以下程序#include<stdio.h>intf(intm){staticintn=0;n+=m;returnn;}main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序運行后的輸出結(jié)果是A、3,3B、1,1C、2,3D、1,2標(biāo)準(zhǔn)答案:D知識點解析:該題目中首先區(qū)別++n和n++,第一次調(diào)用f函數(shù)時,將++n(n自增1后再參與運算)作為參數(shù)進行傳遞,此時變量m的值為1,執(zhí)行n+=m;后,n=1,將1返回主函數(shù),并輸出。第二次調(diào)用f函數(shù)時,將n++(n參與運算后再自增1)作為參數(shù)進行傳遞,此時變量m的值為1,執(zhí)行語句n+=m;,由于n是靜態(tài)存儲變量,因此n=2,將2返回主函數(shù)并輸出。因此D選項正確。24、算法的有窮性是指()。A、算法程序的運行時間是有限的B、算法程序所處理的數(shù)據(jù)量是有限的C、算法程序的長度是有限的D、算法只能被有限的用戶使用標(biāo)準(zhǔn)答案:A知識點解析:暫無解析25、下列語句組中,不正確的是()。A、char*s;s="Olympic";B、chars[]="Olympic";C、char*s;s={"Olympic");D、chars[]={"Olympic"};標(biāo)準(zhǔn)答案:C知識點解析:s是一個字符指針變量,s代表其地址,C將字符串賦給地址,因此選項C)錯誤。26、設(shè)有定義:doublea[10],*s=a;以下能夠代表數(shù)組元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3標(biāo)準(zhǔn)答案:B知識點解析:語句*s=a;表示指針變量s指向一維數(shù)組a的首地址。a[3]表示引用數(shù)組a的第4個元素,*(s+i)表示引用指針s所指數(shù)組a的第i+1個元素,選項A、C、D的表示方法錯誤,只有B選項正確。27、下列敘述中正確的是()。A、線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)與順序存儲結(jié)構(gòu)所需要的存儲空間是相同的B、線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)所需要的存儲空間一般要多于順序存儲結(jié)構(gòu)C、線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)所需要的存儲空間一般要少于順序存儲結(jié)構(gòu)D、線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)與順序存儲結(jié)構(gòu)在存儲空間的需求上沒有可比性標(biāo)準(zhǔn)答案:B知識點解析:線性鏈?zhǔn)酱鎯Y(jié)構(gòu)中每個節(jié)點都由數(shù)據(jù)域與指針域兩部分組成,增加了存儲空間,所以一般要多于順序存儲結(jié)構(gòu)。28、有以下程序:#include#includemain(){charW[20],a[5][10]={"abcdef","ghijkl","mnopq",’rstuv","wxyz."};inti;for(i=0;i<5;i++)w[i]=a[i][strlen(a[i])-1];w[5]=’\0’;puts(w);}程序的運行結(jié)果是()。A、flqv.B、agmrwC、ekpuyD、flqvz標(biāo)準(zhǔn)答案:A知識點解析:puts()函數(shù)將數(shù)組中存放的字符串輸出,用"\n"取代字符串結(jié)束符"\0"。strlen()函數(shù)求字符串的實際長度(不包含結(jié)束標(biāo)志)。程序中for循環(huán)將第i個字符串最后一個字符放入w數(shù)組下標(biāo)值為i的位置。最后將數(shù)組最后一個字符賦值為“\0”,輸出字符串w為flqv.。29、程序中若有以下的說明定義和語句:#include#includestruetSTR{charnHm[10];intS;};main(){struetSTRt,*p;P=&t:}}則不能給變量t的s成員賦整數(shù)99,給num成員賦空串的語句組是()。A、(*P).s=99;(*p).RumRm.“”;B、P一>s=99;P一>num[0]=0;C、(*p).s=99;P一>num[0]:‘\0’;D、P一>s=99;strcpy((*p).num,“”);標(biāo)準(zhǔn)答案:A知識點解析:結(jié)構(gòu)體變量使用“.”運算符引用結(jié)構(gòu)體成員變量,結(jié)構(gòu)體指針使用“一>”運算符引川結(jié)構(gòu)體成員變量,main函數(shù)中聲明結(jié)構(gòu)體STR變量t,和結(jié)構(gòu)體STR指針*p,并將t的地址賦給p,所以使用p訪問成員變量時,使用“一>”運算符;使用*p訪問成員變量時,使用“.”運算符。另外,由于成員變量num是字符數(shù)組,所以不能直接進行賦值,若要對num賦空字符串值,可以把num中第一個元素賦值為0或‘\0’,或者使用strcpy復(fù)制函數(shù)將空字符串“”復(fù)制到num中,故選項B、c、D正確,選項A錯誤,因此答案為A。30、下列敘述中正確的是()。A、循環(huán)隊列是隊列的一種鏈?zhǔn)酱鎯Y(jié)構(gòu)B、循環(huán)隊列是隊列的一種順序存儲結(jié)構(gòu)C、循環(huán)隊列是非線性結(jié)構(gòu)D、循環(huán)隊列是一種邏輯結(jié)構(gòu)標(biāo)準(zhǔn)答案:B知識點解析:在實際應(yīng)用中,隊列的順序存儲結(jié)構(gòu)一般采用循環(huán)隊列的形式。31、有以下程序:#includemain(){ints;scanf(’’%d’’,&s);while(s>0){switch(s){case1:printf(’’%d’’,s+5)case2:printf(’’%d’’,s+4);break;case3:printf(’’%d’’,s+3);case4:printf(’’%d’’,s+2);default:printf(’’%d’’,s+1);break;}scanf(’’%d’’,&s)}}運行時,若輸入123450〈回車〉則輸出的結(jié)果是A、6.56655e+008B、6.56646e+006C、6.66665e+006D、6.66666e+006標(biāo)準(zhǔn)答案:A知識點解析:case語句執(zhí)行后若沒有break,則會繼續(xù)執(zhí)行后面的case語句,直到碰到break或switch結(jié)束。當(dāng)輸入1時輸出65,輸入2時輸出6,輸入3時輸出654,當(dāng)輸入4時輸出65,當(dāng)輸入5時輸出6,當(dāng)輸入0時while語句結(jié)束。32、下列程序的輸出結(jié)果是()。#include<stdio.h>voidfun(int*a,int*b){int*k;k=a;a:b;b=k;)main(){inta=l,b=2,*x=&a,*y=&b;fun(x,y);printf(’’%d%d’’,a,b);}A、21B、12C、編譯出錯D、0標(biāo)準(zhǔn)答案:B知識點解析:本題考查函數(shù)調(diào)用時的參數(shù)傳遞。分析題目可知‰函數(shù)的形參是指向?qū)崊⒌闹羔?,但main()函數(shù)中調(diào)用fun()函數(shù)時,實參是指針變量x、y(分別為指向a和b的指針),a、b的值在函數(shù)調(diào)用前后未發(fā)生變化,因而a=1,b=2,即輸出12。33、設(shè)x=021,y=012,則z=x|y的值是()。A、1B、0C、00011011D、1.1e+007標(biāo)準(zhǔn)答案:C知識點解析:本題主要考查按位或運算。按位或是對兩個運算對象相應(yīng)的位進行邏輯或運算,其運算規(guī)則和邏輯或相同,兩個運算對象只要有一個是1,則結(jié)果為1。34、下面對對象概念描述正確的是A、對象間的通信靠消息傳遞B、對象是名字和方法的封裝體C、任何對象必須有繼承性D、對象的多態(tài)性是指一個對象有多個操作標(biāo)準(zhǔn)答案:A知識點解析:對象之間進行通信的構(gòu)造叫做消息,A正確。多態(tài)性是指同一個操作可以是不同對象的行為,D錯誤。對象不一定必須有繼承性,C錯誤。封裝性是指從外面看只能看到對象的外部特征,而不知道也無須知道數(shù)據(jù)的具體結(jié)構(gòu)以及實現(xiàn)操作,B錯誤。35、已定義以下函數(shù):intfun(int*pt){retum*pt;}fun函數(shù)的返回值是()。A、不確定的值B、一個整數(shù)C、形參p中存放的值D、形參p的地址值標(biāo)準(zhǔn)答案:B知識點解析:函數(shù)類型定義為int所以返回值會強制轉(zhuǎn)換為一個整數(shù),*pt是提取指針pt中存放的數(shù)值的運算。所以B正確。36、數(shù)據(jù)獨立性是數(shù)據(jù)庫技術(shù)的重要特點之一。所謂數(shù)據(jù)獨立性是指()。A、數(shù)據(jù)與程序獨立存放B、不同的數(shù)據(jù)被存放在不同的文件中C、不同的數(shù)據(jù)只能被對應(yīng)的應(yīng)用程序所使用D、以上三種說法都不對標(biāo)準(zhǔn)答案:D知識點解析:數(shù)據(jù)獨立性是數(shù)據(jù)與程序間的互不依賴性,即數(shù)據(jù)庫中數(shù)據(jù)獨立于應(yīng)用程序而不依賴于應(yīng)用程序。所以選項A,選項B和選項C都不正確。37、以下對聯(lián)合類型敘述正確的是()。A、可以對聯(lián)合變量名直接賦值B、使用聯(lián)合變量的目的是為了節(jié)省內(nèi)存C、任何一個聯(lián)合變量可以同時引用聯(lián)合中的不同成員D、聯(lián)合類型定義中不能同時出現(xiàn)結(jié)構(gòu)類型的成員標(biāo)準(zhǔn)答案:B知識點解析:由于聯(lián)合體是同一存儲區(qū)域由不同類型的變量共享,所以不可以直接對聯(lián)合體變量名進行賦值,且聯(lián)合體中的空間在某一時刻只能保持某一成員的數(shù)據(jù);另外合體中可以出現(xiàn)結(jié)構(gòu)類型的成員。38、有以下程序#include<stdio.h>main(){charb[4][10];inti;for(i=0;i<4;i++)scanf("%s",b[i]);for(i=3;i>=0;i--)printf("%s",b[i]);printf("\n");}執(zhí)行時若輸入:Peachflowerispink.<回車>,則輸出結(jié)果是A、Peachflowerispink.B、pink.isflowerPeachC、Peachflowerispink.D、Pinkisflowerpeach.標(biāo)準(zhǔn)答案:B知識點解析:第一個for循環(huán)對字符串?dāng)?shù)組初始化,第二for循環(huán),從后向前打印字符串?dāng)?shù)組,因此,得到的答案是pink.isflowerPeach,故答案為B選項。39、有以下程序#include<stdio.h>voidfun(intn){staticintk=0;if(n<0){printf("-");n=-n;}k+=n%10;printf("%d,",k);if(n/10)fun(n/10);}main(){intx=-12;fun(x);printf("\n");}程序運行后的輸出結(jié)果是A、-2,3B、-1,-2,C、-2,-3,D、-2,1標(biāo)準(zhǔn)答案:A知識點解析:fun()函數(shù)使用了靜態(tài)變量,靜態(tài)變量只在聲明時初始化一次。首先實參的數(shù)值是-12,if判斷后輸出負(fù)號,并將n=12,計算k+=n%10-->k+=2-->2,因此輸出2,,后將數(shù)值除以10,結(jié)果為1,遞歸調(diào)用fun()函數(shù),第二次調(diào)用fun(),此時n=1,k=2,計算k+=n%10-->k+=1-->3,因此打印3,。故最后打印結(jié)果為-2,3,。故答案為A選項。40、下面對軟件工程描述正確的是A、軟件工程是用工程、科學(xué)和數(shù)學(xué)的原則與方法研制、維護計算機軟件的有關(guān)技術(shù)及管理方法B、軟件工程的三要素是方法、工具和進程C、軟件工程是用于軟件的定義、開發(fā)和維護的方法D、軟件工程是為了解決軟件生產(chǎn)率問題標(biāo)準(zhǔn)答案:A知識點解析:軟件工程是應(yīng)用于計算機軟件的定義、開發(fā)和維護的一整套方法、工具、文檔、實踐標(biāo)準(zhǔn)和工序。C選項敘述不全面。軟件工程包含3個要素:方法、工具和過程。B選項錯誤。軟件工程的目標(biāo)是:在給定成本、進度的前提下,開發(fā)出具有有效性、可靠性、可理解性、可維護性、可重用性、可適應(yīng)性、可移植性、可追蹤性和可互操作性且滿足用戶需求的產(chǎn)品,追求這些目標(biāo)有助于提高軟件產(chǎn)品的質(zhì)量和開發(fā)效率,減少維護的困難。D選項錯誤。軟件工程是用工程、科學(xué)和數(shù)學(xué)的原則與方法研制、維護計算機軟件的有關(guān)技術(shù)及管理方法。故本題選A選項二、程序填空題(本題共1題,每題1.0分,共1分。)41、給定程序中,函數(shù)fun的功能是:將參數(shù)給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符申轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點數(shù),然后將其顯示在屏幕上。請在程序的下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inClucle<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found***********/【1】fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen(“filel.txt”,“W”);fprintf(fp,“%S%d%f\n”,S,a,f);/**********found***********/【2】;fp=fopen(“filel.txt”,“r”);/**********found***********/fscanf(【3】,“%s%s%S”,str,str1,Str2),fclose(fp);a1=atoi(str1),f1=atof(str2),printf(“\nTheresult:\n\n%S%d%f\n”,str,a1,f1);}main(){chara[10]=“Hello!”;intb=12345;cloublec=98.76;fun(a,b,c);}標(biāo)準(zhǔn)答案:(1)FILE*(2)fclose(fp)(3)fp知識點解析:填空1:從使用fp=fopen(“filel.txt”,“w”)可知fp應(yīng)該是文件類型指針,因此本空應(yīng)該填寫FILE*。填空2:當(dāng)對fp作打開操作的時候,并進行不同的操作前,應(yīng)該對其關(guān)閉,因為在第一次打開時是對fp進行寫操作,而在第二次打開后進行的是讀操作,因此應(yīng)該先對fp進行關(guān)閉,本空填fclose(fp)。填空3:fscanf()是把文本文件輸出,因此本空只能填寫fp。三、程序修改題(本題共1題,每題1.0分,共1分。)42、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,規(guī)定輸入的字符串全部為字母,fun函數(shù)的功能是:統(tǒng)計a所指字符串中每個字母在字符串中出現(xiàn)的次數(shù)(統(tǒng)計時不區(qū)分大小寫),并將出現(xiàn)次數(shù)最高的字母輸出(如果有多個相同,輸出一個即可)。例如對于字符串:dadbedbabdb,對應(yīng)的輸出應(yīng)為:b或d。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<stdio.h>#include<string.h>voidfun(chara[]){intb[26],i,n,max;for(i=0;i<26;i++)/*********found*********/a[i]=0;n=strlen(a);for(i=0;i<n;i++)if(a[i]>=’a’&&a[i]<=’z’)/*********found*********/b[a[i]-’A’]++;elseif(a[i]>=’A’&&a[i]<=’Z’)b[a[i]-’A’]++;max=0;for(i=1;i<26;i++)/*********found*********/if(b[max]>b[i])max=i;printf("出現(xiàn)次數(shù)最多的字符是:%c\n’,max+’a’);}main(){chara[200];printf("請輸入一個待統(tǒng)計的字符串:");scanf("%s",a);fun(a);}標(biāo)準(zhǔn)答案:(1)b[i]=0;(2)b[a[i]-’a’]++;(3)if(b[max]<b[i])知識點解析:要統(tǒng)計字符串中每個字符在這個字符串中出現(xiàn)的次數(shù),可以設(shè)數(shù)組b中存放每個字符出現(xiàn)的次數(shù)b[0]存放字符a的次數(shù),b[1]存放字符b的次數(shù)……。統(tǒng)計之前為數(shù)組b各元素賦初值為0。然后依次取出字符串的每個字符進行判斷,使對應(yīng)數(shù)組b加1。max初始值為0,與數(shù)組b中的每個元素進行比較,如果小于,就把下標(biāo)進行交換。(1)數(shù)組a存放的是字符串,數(shù)組b為整型數(shù)組存放的是每個字符的個數(shù),應(yīng)將數(shù)組b每個元素初始化為0。(2)小寫字母的ASCII碼減去’a’的ASCII即為相應(yīng)字母的下標(biāo)值,相應(yīng)下標(biāo)值的數(shù)組元素的值增加1。(3)最大值小于被比較數(shù)時,把被比較數(shù)的下標(biāo)值賦給max,max中存放的總是當(dāng)前最大值。四、程序設(shè)計題(本題共1題,每題1.0分,共1分。)43、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編函數(shù)fun,其功能是將一個數(shù)字字符串轉(zhuǎn)換成與其面值相同的長整型整數(shù)。可調(diào)用strlen函數(shù)求字符串的長度。例如:在鍵盤輸入字符串2345210,函數(shù)返回長整型數(shù)2345210。注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun指定的部位填入所編寫的若干語句。試題程序:#include<stdio.h>#include<string.h>voidNONO();longfun(char*s){}main(){chars[10];longr;printf("請輸入一個長度不超過9個字符的數(shù)字字符串:");gets(s);r=fun(s);printf("r=%ld\n",r);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti;longr;chars[10],*p;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(s,10,fp);P=strchr(s,’\n’);if(p)*p=0;r=fun(s);fprintf(wf,"%ld\n",r);}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:longfun(char*s){inti,len;longsum=0;len=strlen(s);for(i=0;i<len;i++){sum=sum*10+*s-’0’;s++;}returnsum;}知識點解析:要把一個數(shù)字字符轉(zhuǎn)為相應(yīng)的數(shù)字,只要用它的ASCII碼減去48即可。要把數(shù)字字符串轉(zhuǎn)為相應(yīng)的數(shù)字,則要從左到右依次取出字符轉(zhuǎn)為相應(yīng)數(shù)字,乘10再加上下一位數(shù)字。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、有以下程序段:inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d",a,b,c);程序的輸出結(jié)果是()。A、a=10b=50c=10B、a=10b=50c=30C、a=10b=30c=10D、a=10b=30c=50標(biāo)準(zhǔn)答案:A知識點解析:因為a=10,b=50,所以a<b,if語句判斷條件不成立,于是執(zhí)行c=a,得到c=10,a和b的值不變。2、以下程序:#include<stdio.h>main(){charstr[10];scanf("%s",&str);printf("%s\n",str);}運行上面的程序,輸入字符串howareyou,則程序的執(zhí)行結(jié)果是()。A、howB、howareyouC、hD、howareyou標(biāo)準(zhǔn)答案:A知識點解析:當(dāng)從鍵盤輸入howareyou時,由于scanf輸入函數(shù)的特點是遇到空格時結(jié)束讀入字符,因此,該程序只將how這3個字符送到了字符數(shù)組str中,并在其后自動加上結(jié)束符“\0”。3、以下程序的輸出結(jié)果是()。#include<stdio.h>main(){inta=8,b=6,m=1;switch(a%4){case0;m++;break;case1:m++;switch(b%3){default:m++;case0:m++;break;}}printf("%d\n",m);)A、1B、2C、3D、4標(biāo)準(zhǔn)答案:B知識點解析:本題考查switch語句。因為a=8,a%4=0,所以執(zhí)行case0后面的語句,將m加1,遇到break語句跳出switch。4、有以下程序:#include<stdio.h>intf(intx);main(){intn=1,m;m=f(f(f(n)));printf("%d\n",m);}intf(intx){returnx*2;}程序運行后的輸出結(jié)果是()。A、8B、2C、4D、1標(biāo)準(zhǔn)答案:A知識點解析:第一次調(diào)用m=f(f(f(1))),第二次為m=f(f(2)),第三次為m=f(4),即返回值為8。5、若有定義:inta=1,b=2,c=3;,則執(zhí)行表達式(a=b+c)∥(++b)后,a,b,c的值依次為()。A、1,2,3B、5,3,2C、5,2,3D、5,3,3標(biāo)準(zhǔn)答案:C知識點解析:||表示或運算,當(dāng)?shù)谝粋€表達式為真時,第二個表達式不執(zhí)行。根據(jù)運算符的優(yōu)先級規(guī)則,先計算(a=b+c),將b+c的值賦值給a,則a=5,而||右邊的括號不會被執(zhí)行,所以b=2,c=3。6、在軟件開發(fā)中,需求分析階段可以使用的工具是()。A、N—S圖B、DFD圖C、PAD圖D、程序流程圖標(biāo)準(zhǔn)答案:B知識點解析:在需求分析階段可以使用的工具有數(shù)據(jù)流圖(DFD圖),數(shù)據(jù)字典(D),判定樹與判定表,所以選擇B。7、下列各項中不合法的常量是()。A、2.E8B、-28C、-028D、2e-8標(biāo)準(zhǔn)答案:C知識點解析:0開頭表示的是八進制整型常量,但八進制只能用0~7的數(shù)字表示。8、下列關(guān)于線性鏈表的敘述中,正確的是()。A、各數(shù)據(jù)結(jié)點的存儲空間可以不連續(xù),但它們的存儲順序與邏輯順序必須一致B、各數(shù)據(jù)結(jié)點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續(xù)C、進行插入與刪除時,不需要移動表中的元素D、以上三種說法都不對標(biāo)準(zhǔn)答案:C知識點解析:一般來說,在線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)中,各數(shù)據(jù)結(jié)點的存儲序號是不連續(xù)的,并且各節(jié)點在存儲空間中的位置關(guān)系與邏輯關(guān)系也不一致。線性鏈表中數(shù)據(jù)的插入和刪除都不需要移動表中的元素,只需改變節(jié)點的指針域即可。故C選項正確。9、以下不能正確表示代數(shù)式的C語言表達是()。A、2*a*b/c/dB、a*b/c/d*2C、a/c/d*b*2D、2*a*b/c*d標(biāo)準(zhǔn)答案:D知識點解析:*與/優(yōu)先級相同,所以采用左結(jié)合的方式。D項若改為:2*a*b/(c*d),則正確。10、有以下程序段:#include<stdio.h>intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);當(dāng)執(zhí)行上述程序段,從鍵盤上輸入555667777abc后,y的值為()。A、566.0B、55566C、7777D、566777標(biāo)準(zhǔn)答案:A知識點解析:它是格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。其中的格式命令可以說明最大域?qū)?。在百分?%)與格式碼之間的整數(shù)用于限制從對應(yīng)域讀入的最大字符數(shù)。所以j的值為55,y的值為566.0,字符數(shù)組name為7777abc。11、若x=4,y=5,則x&y的結(jié)果是()。A、0B、4C、3D、5標(biāo)準(zhǔn)答案:B知識點解析:本題主要考查按位與運算的知識點。按位與是對兩個運算量相應(yīng)的位進行邏輯與,“&”的規(guī)則和邏輯與“&&”相同。x=4的二進制為00000100,v=5的二進制為00000101,x&y=00000100,轉(zhuǎn)化為十進制即為4。12、以下選項中能表示合法常量的是()。A、1,200B、1.5E2.0C、’\’D、\007標(biāo)準(zhǔn)答案:D知識點解析:A選項中整型常量應(yīng)表示為1200,不能包含“,”。B選項中E后面的指數(shù)必須為整數(shù)。C選項中轉(zhuǎn)義字符以“\”開始,若要表示字符“\”,應(yīng)寫為“\\”。13、數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關(guān)的是數(shù)據(jù)的()。A、存儲結(jié)構(gòu)B、物理結(jié)構(gòu)C、邏輯結(jié)構(gòu)D、線性結(jié)構(gòu)標(biāo)準(zhǔn)答案:C知識點解析:數(shù)據(jù)的邏輯結(jié)構(gòu)反映的是數(shù)據(jù)元素之間的邏輯關(guān)系,與使用的計算機無關(guān)。14、有以下程序#include<stdi0.h>voidmain(){doublex=3.14159:printf("%f\n",(int)(x*1000+0.5)/(df}uble)1000);程序運行后的輸出結(jié)果是()。A、3.142000B、3.141000C、3.143000D、3.140000標(biāo)準(zhǔn)答案:A知識點解析:根據(jù)算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性,對于題意表達式:int(x*1000+0.5)/(double)1000,首先計算x*1000,由于x是double類型,1000是整型,所以x*1000的結(jié)果默認(rèn)是double類型:3141.59;再加0.5后執(zhí)行int的強制轉(zhuǎn)換,結(jié)果為3142;分母(double)1000強制轉(zhuǎn)換為double類型,此時3142/(double)1000中,3142需要轉(zhuǎn)換成double類型,然后除以1000,結(jié)果為3.142000,保留小數(shù)點后6位,本題答案為A。15、若有以下程序:#includemain(){intc;c=13|5;printf("%d\n",c);}則程序的輸出結(jié)果是()。A、13B、15C、18D、5標(biāo)準(zhǔn)答案:A知識點解析:本題考查位運算中的按位或運算符。或運算只要兩個比較的位中有一個為1,其結(jié)果是1,否則結(jié)果為D,13用二進制表示為00001101,5用二進制表示為00000101,或運算后結(jié)果為00001101,即13,選項A正確。16、以下選項中,當(dāng)x為大于1的奇數(shù)時,值為0的表達式是()。A、x%2==0B、x/2C、x%2!=0D、x%2==1標(biāo)準(zhǔn)答案:A知識點解析:算術(shù)運算符的優(yōu)先級高于關(guān)系運算符的優(yōu)先級,所以當(dāng)x為大于l的奇數(shù)時,A選項的值為假,即0。B選項的值為不定值,但絕對不是0。C選項的值為真,即1。D選項的值為真,即1。17、下列定義變量的語句中錯誤的是()。A、int_int;B、doubleint_;C、charFor;D、floatUS$;標(biāo)準(zhǔn)答案:D知識點解析:C語言規(guī)定,變量的標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且首字符必須為字母或下劃線。在C語言中大寫字母和小寫字母被認(rèn)為是兩個不同的字符。選項A定義的變量標(biāo)識符_int和選項B定義的變量標(biāo)識符_int與C語言的關(guān)鍵字int是不同的,是正確的變量標(biāo)識。選項C定義的變量標(biāo)識符For與C語言中的關(guān)鍵字for是兩個不同的標(biāo)識符,所以選項C是正確的,而選項D包含有特殊字符$,因而其不符合C語言的變量命名規(guī)定。18、以下敘述正確的是()。A、只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句B、contiune語句的作用是結(jié)束整個循環(huán)的執(zhí)行C、在循環(huán)體內(nèi)使用break語句或continue語句的作用相同D、從多層循環(huán)嵌套中退出時,只能使用goto語句標(biāo)準(zhǔn)答案:A知識點解析:本題考查循環(huán)的4個知識點:①break語句可以出現(xiàn)在循環(huán)體內(nèi)及switch語句體內(nèi),不能用于其他的語句;②continue語句的作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,而接著轉(zhuǎn)去判定循環(huán)條件是否成立,從而確定下一次循環(huán)是否繼續(xù)執(zhí)行,也就是說執(zhí)行contiune語句不會使整個循環(huán)終止;③在循環(huán)體內(nèi)使用break語句會使循環(huán)提前終止;④從多層循環(huán)嵌套中退出時,可以使用goto語句或者break語句。19、有以下程序:#include<stdio.h>voidfun(char*c){while(*c){if(*c>=’a’&&*c<=’z’)*c=*c-(’a’-’A’);c++:}}main(){chars[81];gets(s);fun(s);puts(s);}當(dāng)執(zhí)行程序時從鍵盤上輸入HelloBeijing<回車>,則程序運行后的輸出結(jié)果是()。A、hellobeijingB、HelloBeijingC、HELLOBEIJINGD、hELLOBeijing標(biāo)準(zhǔn)答案:C知識點解析:主程序讀取整個字符串存于s中,調(diào)用fun函數(shù),字符指針c指向數(shù)紺s。函數(shù)fun的功能是把指針c所指向的字符數(shù)組中的所有小寫字符轉(zhuǎn)換為大寫gets函數(shù)可以把空格作為字符串的一部分輸入,以回車作為輸入結(jié)束如果*c為小寫字符,則*c=*c-32(轉(zhuǎn)大寫),因此C選項正確。20、有以下程序:#includemain(){intm=1,n:2,*P=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序運行后的輸出結(jié)果是()。A、2,1,1,2B、1,2,l,2C、2,1,2,lD、1,2,2,1標(biāo)準(zhǔn)答案:D知識點解析:語句intm=1,n=2,*p=&m,*q=&n,*r;表示指針變量p指向m,指針變量q指向n;語句r=p;p=q;q=r;表示通過指針變量r,將指針p和指針q指向交換。因此最后輸出1,2,2,1。21、有以下程序:#includevoidfun(inta,intb,intc){a=b;b=c;c=a;}main(){inta=10,b:20,c=30;fun(a,b,c);printf("%d,%d,%d\n",c,b,a);}程序運行后的輸出結(jié)果是()。A、10,20,30B、30,20,10C、20,30,10D、0,0,0標(biāo)準(zhǔn)答案:B知識點解析:本題主要考查函數(shù)形參的值傳遞。函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的,即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。因此B選項正確。22、以下結(jié)構(gòu)體類型說明和變量定義中正確的是()。A、structREC;{intn;charC;};RECt1,t2;B、typedefstruct{int11;charc;}REC;RECt1,t2;C、typedefstructREC;{intn=0;charc=‘A’;}t1,t2;D、struct{intn;charC;}REC;RECt1,t2;標(biāo)準(zhǔn)答案:B知識點解析:本題考查結(jié)構(gòu)體的相關(guān)知識,選項A中structREC后面不能有分號,C選項中typedefstructREC的后面也不能有分號,選項D中REC已經(jīng)是結(jié)構(gòu)體變量,不能當(dāng)做結(jié)構(gòu)體類型來使用。23、對下列二叉樹進行前序遍歷的結(jié)果為A、DYBEAFCZXB、YDEBFZXCAC、ABDYECFXZD、ABCDEFXYZ標(biāo)準(zhǔn)答案:C知識點解析:前序遍歷是指在訪問根結(jié)點、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹;并且,在遍歷左右子樹時,仍然先訪問根結(jié)點,然后遍歷左子樹,最后遍歷右子樹。前序遍歷描述為:若二叉樹為空,則執(zhí)行空操作。否則:①訪問根結(jié)點;②前序遍歷左子樹;③前序遍歷右子樹,C正確。24、有以下程序:#includevoidfun(char*c){while(*c){if(*c>=’a’&&*c<=’z’)C++:}}main(){chars[81];gets(s);fun(s);puts(s);}當(dāng)執(zhí)行程序時從鍵盤上輸入HelloBeijing<回車>,則程序運行后的輸出結(jié)果是()。A、hellobe,ijingB、HelloBeijingC、HELLOBEIJINGD、hELLOBeijing標(biāo)準(zhǔn)答案:C知識點解析:主程序讀取整個字符串存于s中,調(diào)用fun函數(shù),字符指針c指向數(shù)組s。函數(shù)fun的功能是把指針c所指向的字符數(shù)組中的所有小寫字符轉(zhuǎn)換為大寫。gets函數(shù)可以把空格作為字符串的一部分輸入,以回車作為輸人結(jié)束。如果*c為小寫字符,則*c=*c一32(轉(zhuǎn)大寫)。因此C選項正確。25、有以下程序:#include<stdio.h>main(){charw[20],a[5][10]={"abcde","fghij","klmno","pqrst","uvwxy"};inti;for(i=0;i<5;i++)W[i]=a[i][i];w[5]=’\’;printf("%s\n",w);}程序運行后的輸出結(jié)果是()。A、ejotyB、afkpuC、agrasyD、eimqu標(biāo)準(zhǔn)答案:C知識點解析:數(shù)組a是二維數(shù)組,數(shù)組w存放二維數(shù)組a行列值相同位置的元素,由a[5][10]可得w[0]~w[4]的元素分別是agmsy,因此打印結(jié)果為agmsy。故答案為C選項。26、若有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4;printf("%d%d\n",a,b);}則程序的輸出結(jié)果是A、12B、-12C、-3D、2015/1/2標(biāo)準(zhǔn)答案:B知識點解析:先計算b%=4,即b=b%4,結(jié)果為2,然后計算a%=2,結(jié)果為-1,最后a的值為-1,b的值為2,所以選擇B選項。27、有以下程序#includetypedefstruct{intb,p;}A;voidf(Ac)/*注意:c是結(jié)構(gòu)變量名*/{intj;c.b+=1;c.p+=2;}main(){inti;Aa={1,2};f(a);printf("%d,%d\n",a.b,a.p);}程序運行后的輸出結(jié)果是()。A、1,2B、2,4C、1,4D、2,3標(biāo)準(zhǔn)答案:A知識點解析:暫無解析28、有以下程序:#includemain(){ints;scanf(’’%d’’,&s);while(s>0){switch(s){case1:printf(’’%d’’,s+5)case2:printf(’’%d’’,s+4);break;case3:printf(’’%d’’,s+3);case4:printf(’’%d’’,s+2);default:printf(’’%d’’,s+1);break;}scanf(’’%d’’,&s)}}運行時,若輸入123450〈回車〉則輸出的結(jié)果是A、6.56655e+008B、6.56646e+006C、6.66665e+006D、6.66666e+006標(biāo)準(zhǔn)答案:A知識點解析:case語句執(zhí)行后若沒有break,則會繼續(xù)執(zhí)行后面的case語句,直到碰到break或switch結(jié)束。當(dāng)輸入1時輸出65,輸入2時輸出6,輸入3時輸出654,當(dāng)輸入4時輸出65,當(dāng)輸入5時輸出6,當(dāng)輸入0時while語句結(jié)束。29、下列關(guān)于文件概念的敘述中正確的是()。A、文件由ASCⅡ碼組成,只能構(gòu)成二進制文件B、文件由結(jié)構(gòu)序列組成,可以構(gòu)成二進制文件或文本文件C、文件由字符序列組成,其類型只能是文本文件D、文件由數(shù)據(jù)序列組成,可以構(gòu)成二進制文件或文本文件標(biāo)準(zhǔn)答案:D知識點解析:文件由數(shù)據(jù)序列組成,可以構(gòu)成二進制文件或文本文件。30、語句’’printf(’’a\bhow\’are\’y\\\bou\n’’);’’的輸出結(jié)果是()。A、a\bhow\’are\’V\\boUB、a\bhow\’are\’y\bouC、how’are’youD、ahow’are’y\bou標(biāo)準(zhǔn)答案:C知識點解析:”\b”格式符表示退格,功能是將它后而的字*把它前面的字*覆蓋,導(dǎo)致”\b”格式符前面的字*不能輸出;”\’“格式符表示輸出單引號字符;”∥”格式符表示輸出反斜線字符。31、有以下程序段int*p;p=__________malloc(sizeof(int));若要求使p指向一個int型的動態(tài)存儲單元,在橫線處應(yīng)填入的是A、(int*)B、intC、int*D、(*int)標(biāo)準(zhǔn)答案:A知識點解析:本題考查malloc函數(shù),題目中要求p指向一個int型的動態(tài)存儲單元,那么就應(yīng)該將分配的存儲單元轉(zhuǎn)化為int,所以選項A正確。32、下列工具中,不屬于結(jié)構(gòu)化分析的常用工具的是()。A、數(shù)據(jù)流圖B、數(shù)據(jù)字典C、判定樹D、N—S圖標(biāo)準(zhǔn)答案:D知識點解析:結(jié)構(gòu)化分析的常用工具有數(shù)據(jù)流圖、數(shù)據(jù)字典、判定樹和判定表。33、關(guān)于switch語句的敘述正確的是()。A、在switch語句中,不一定使用break語句B、在switch語句中必須使用defaultC、break語句只能用于switch語句D、switch語句中,必須使用break語句標(biāo)準(zhǔn)答案:A知識點解析:break用于跳出switch分支語句,若不使用break語句將繼續(xù)執(zhí)行此分支語句后面的分支語句,因此,不使用break語句不會出現(xiàn)語法錯誤,也不一定必須使用break語句,break語句除了在switch語句中使用外,也可以用于跳出循環(huán)語句,所以A正確,C、D不正確。default語句也不是必需的。34、C語言中的標(biāo)識符分為關(guān)鍵字、預(yù)定義標(biāo)識符和用戶標(biāo)識符,以下敘述正確的是A、關(guān)鍵字可用作用戶標(biāo)識符,但失去原有含義B、預(yù)定義標(biāo)識符可用作用戶標(biāo)識符,但失去原有含義C、在標(biāo)識符中大寫字母和小寫字母被認(rèn)為是相同的字符D、用戶標(biāo)識符可以由字母和數(shù)字任意順序組成標(biāo)準(zhǔn)答案:B知識點解析:關(guān)鍵字不可用作C語言的標(biāo)識符,所以A錯誤,在標(biāo)識符中大寫字母與小寫字母作為不同字符處理,所以C錯誤,標(biāo)識符由下劃線,字母,數(shù)字組成,且必須以下劃線和字母開始,所以D錯誤。35、若有定義和語句:inta,b;scanf("%d,%d,",&a,&b);以下選項中的輸入數(shù)據(jù),不能把值3賦給變量a、5賦給變量b的是A、3,5,4B、3,5C、3,5,D、3,5標(biāo)準(zhǔn)答案:D知識點解析:scanf()的格式控制串可以使用其他非空白字符,如本題中的逗號,但在輸入時必須輸入這些字符,以保證匹配,所以在3和5之間必須輸入逗號,不能有其他符號,才能保證a和b的正確賦值,所以選擇D。36、數(shù)據(jù)獨立性是數(shù)據(jù)庫技術(shù)的重要特點之一。所謂數(shù)據(jù)獨立性是指()。A、數(shù)據(jù)與程序獨立存放B、不同的數(shù)據(jù)被存放在不同的文件中C、不同的數(shù)據(jù)只能被對應(yīng)的應(yīng)用程序所使用D、以上三種說法都不對標(biāo)準(zhǔn)答案:D知識點解析:數(shù)據(jù)獨立性是數(shù)據(jù)與程序間的互不依賴性,即數(shù)據(jù)庫中數(shù)據(jù)獨立于應(yīng)用程序而不依賴于應(yīng)用程序。所以選項A),選項B)和選項C)都不正確。37、以下程序的運行結(jié)果是()。#include<stdio.h>main(){inta=3,b=4,c=8,d=4,m=1,n=3;printf("%d\n",(m=a>b)&&(n=c>d));}A、0B、1C、2D、3標(biāo)準(zhǔn)答案:A知識點解析:邏輯與(&&)運算符的功能是:當(dāng)“&&”運算符兩邊的運算對象均為1時,整個表達式的值為1,否則為0。因為a=3<b=4,即m=0,所以整個表達式的值為0。38、下面對軟件測試和軟件調(diào)試有關(guān)概念敘述錯誤的是A、嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性B、程序調(diào)試通常也稱為DebugC、軟件測試的目的是發(fā)現(xiàn)錯誤和改正錯誤D、設(shè)計正確的測試用例標(biāo)準(zhǔn)答案:C知識點解析:軟件測試就是在軟件投入運行之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤,但改正錯誤又調(diào)試完成,C選項敘述錯誤。軟件測試應(yīng)在測試之前制定測試計劃,并嚴(yán)格執(zhí)行,排除測試隨意性,并且需要設(shè)計正確的測試用例,AD選項敘述正確。調(diào)試(也稱為Debug,排錯)是作為成功測試的后果出現(xiàn)的步驟而調(diào)試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程,B選項敘述正確。故選擇C選項。39、關(guān)于地址和指針,以下說法正確的是A、通過強制類型轉(zhuǎn)換可以將一種類型的指針變量賦值給另一種類型的指針變量B、可以取一個常數(shù)的地址賦值給同類型的指針變量C、可以取一個表達式的地址賦值給同類型的指針變量D、可以取一個指針變量的地址賦值給基類型相同的指針變量標(biāo)準(zhǔn)答案:A知識點解析:常數(shù)的地址存儲在內(nèi)存的常量區(qū),常量區(qū)存儲的都是常量,值都是不可修改的,所以直接取常量的地址賦給指針變量沒有任何意義,C語言也不允許這樣做,編譯會出錯,B選項錯誤;表達式的值存儲在臨時變量中,內(nèi)存中存在專門用來存儲臨時變量的區(qū)域,對這塊地址進行操作也是沒有意義的,C語言不允許這樣做,編譯會出錯,C選項錯誤;可以取一個指針變量的地址,但是指針變量的地址屬于指針,只能賦值給指針類型的指針變量,D選項錯誤。故答案為A選項。40、以下說法正確的是()。A、宏定義是C語句,要在行末加分號B、可以使用≠≠undefine提前結(jié)束宏名的使用C、在進行宏定義時,宏定義不能嵌套D、雙引號中出現(xiàn)的宏名也要進行替換標(biāo)準(zhǔn)答案:B知識點解析:本題考查宏的使用規(guī)則:①字符替換格式:#define標(biāo)識符字符串,行末不加分號;②雙引號中出現(xiàn)的宏名不替換;③如果提前結(jié)束宏名的使用,程序中可以使用#undefine;④在進行宏定義時,宏定義能層層置換,能夠嵌套。二、程序填空題(本題共1題,每題1.0分,共1分。)41、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:將一副撲克牌編號為1,2,3,…,53,54,以某種特定的方式洗牌,這種方式是將這副牌分成兩半,然后將它們交叉,并始終保持編號為1的牌在最上方,如第一次這樣洗牌后的結(jié)果為:1,28,2,29,…,53,27,54。兩次洗牌后的結(jié)果為:1,41,28,15,2,42…,53,40,27,14,54。程序的功能是:輸出經(jīng)過n次這樣洗牌后的結(jié)果。請在程序的下畫線處填入正確的內(nèi)容,并把下畫線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.c中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inclucte<stdio.h>voidfun(inta[55],intn){inti,k;/*********found*********/int【1】[55];for(i=0;i<n;i++){for(k=1;k<=27;k++){b[2*k-1]=a[k];/*********found*********/b[【2】*k]=a[k+27];}for(k=1;k<=54;k++)/*********found*********/a[k]=【3】;}}main(){intm,a[55],i;for(i=1;i<55;i++)a[i]=i;printf("請輸入洗牌次數(shù):");scarlf("%d",&m);fun(a,m);for(i=1;i<55;i++)printf("%d,",a[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)b(2)2(3)b[k]知識點解析:填空1:for循環(huán)中使用了一個數(shù)組b,用來臨時存放交換位置后的撲克牌,C語言中變量需要先聲明后使用,所以填空(1)處需要聲明一個數(shù)組b。答案為b。填空2:第二個for循環(huán)是將數(shù)組a中前一半元素(即1-27編號的撲克牌)放入數(shù)組b的奇數(shù)位置,將數(shù)組a中的后一半元素(即28~54編號的撲克牌)放入數(shù)組b的偶數(shù)位置,實現(xiàn)撲克牌的交叉洗牌。所以填空(2)處是數(shù)組b的起始值為2的偶數(shù)下標(biāo)2k,答案為2。填空3:由于數(shù)組b屬于函數(shù)中的臨時變量,所以將數(shù)組a的元素交叉存儲到數(shù)組b后,還需要將數(shù)組b的元素依次賦值給數(shù)組a,第三個for循環(huán)實現(xiàn)的功能是將數(shù)組b賦值給數(shù)組a,所以填空(3)處需要填入對應(yīng)下標(biāo)為k的數(shù)組b的元素,答案為b[k]。三、程序修改題(本題共1題,每題1.0分,共1分。)42、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:判斷輸入的任何一個正整數(shù)n,是否等于某個連續(xù)正整數(shù)序列之和。若是,則輸出所有可能的序列,否則輸出“不能分解”。例如:當(dāng)輸入100時,輸出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=1;b<=n/2;b++){/*********found*********/n=m;c=b;while(m!=0&&m>=c){/*********found*********/m=m-c;c++}/*********found*********/if(m!=0){printf("%d=",n);for(j=b;j<c-1;j++)printf("%d+",j);printf("%d\n",j);flag=1;}}if(flag=0)printf("不能分解\n");}main(){intn;printf("請輸入一個整數(shù):");scarlf("%d",&n);fun(n);}標(biāo)準(zhǔn)答案:(1)m=n;(2)m=m-c;c++;(3)if(m==0)知識點解析:(1)每次循環(huán),程序需要對n執(zhí)行減去連續(xù)的正整數(shù)序列來判斷n是否剛好為0,即n是否是連續(xù)的正整數(shù)序列之和,所以需要使用臨時變量m寄存n的值,每次循環(huán)對m執(zhí)行減運算操作,不滿足繼續(xù)下一輪。另外,程序聲明變量m時,未初始化它的值,所以此處應(yīng)該修改為:m=n。(2)語法錯誤。C語言中每個語句必須以分號結(jié)束,所以應(yīng)修改為:m=m-c;c++;。(3)題目判斷n是否是連續(xù)的正整數(shù)序列之和,若是,則輸出所有序列,程序中m依次減去連續(xù)的正整數(shù),當(dāng)m為0時,表示m(即n)滿足條件,再輸出當(dāng)前序列中的每個正整數(shù),所以此處判斷條件反了,應(yīng)修改為:if(m==0)。四、程序設(shè)計題(本題共1題,每題1.0分,共1分。)43、請編寫函數(shù)fun,函數(shù)的功能是:將放在字符串?dāng)?shù)組中的M個字符串(每串的長度不超過N),按順序合并組成一個新的字符串。例如,字符串?dāng)?shù)組中的M個字符串為AAAABBBBBBBCC則合并后的字符串的內(nèi)容應(yīng)是:AAAABBBBBBBCC。提示:strcat(a,b)的功能是將字符串b復(fù)制到字符串a(chǎn)的串尾上,成為一個新串。注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#include#defineM3#defitieN20VOidfun(chara[M][N],char*b){}main(){charw[M][N]={“AAAA”,“BBBBBBB”,“CC”),a[100];inti;voidNONO();printf(“TheString:\n”);for(i=0;i標(biāo)準(zhǔn)答案:inti,j,k=0;for(i=0;i知識點解析:(1)二維字符數(shù)組第i行j列元素a[i][j],就是指針形式的*(*(a+i)+j)。因此,如果字符水(*(*(a+i)+j)是串的結(jié)束符,則說明該字符串已經(jīng)結(jié)束。(2)當(dāng)一維字符數(shù)組存放完字符串中各字符后,必須在一維字符數(shù)組的尾字符處加一個結(jié)束符‘\0’,才能把字符數(shù)組變成字符串。否則,字符數(shù)組就只能是非字符串的一般字符數(shù)組。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、算法的有窮性是指()。A、算法程序的運行時間是有限的B、算法程序所處理的數(shù)據(jù)量是有限的C、算法程序的長度是有限的D、算法只能被有限的用戶使用標(biāo)準(zhǔn)答案:A知識點解析:算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。有窮性是指算法程序的運行時間是有限的。2、程序流程圖中帶有箭頭的線段表示的是()。A、圖元關(guān)系B、數(shù)據(jù)流C、控制流D、調(diào)用關(guān)系標(biāo)準(zhǔn)答案:C知識點解析:在數(shù)據(jù)流圖中,用標(biāo)有名字的箭頭表示數(shù)據(jù)流。在程序流程圖中,用標(biāo)有名字的箭頭表示控制流。所以選擇C.3、設(shè)R是一個2元關(guān)系,有3個元組,S是一個3元關(guān)系,有3個元組。如T=R×S,則T的元組的個數(shù)為()。A、6B、8C、9D、12標(biāo)準(zhǔn)答案:C知識點解析:R為n元關(guān)系,有p個元組S為m元關(guān)系,有q個元組。兩個關(guān)系笛卡兒積是一個n+m元的關(guān)系,元組個數(shù)是q×p。所以T的元組的個數(shù)為9個。4、下列不合法的用戶標(biāo)識符是()。A、j2_KEYB、DoubleC、4dD、_8_標(biāo)準(zhǔn)答案:C知識點解析:在C語言程序中,合法標(biāo)識符的命名規(guī)則是:標(biāo)識符可以由字母、數(shù)字和下劃線組成,并且第一個字符必須是字母或下劃線。5、以下關(guān)于C語言的敘述中正確的是()。A、預(yù)處理命令通常位于函數(shù)體外面,但也可以位于函數(shù)體中間B、C語言中的變量定義須在其他語句之前C、在C語言程序的書寫中,一個語句必須單占一行D、一個C語言源程序可以由一個或多個源文件組成,每個源文件可由自己的main函數(shù)標(biāo)準(zhǔn)答案:A知識點解析:源程序中可以有預(yù)處理命令(include命令僅為其中的一種)。C語言中的變量可以在使用之前的任何位置進行定義。C語言程序的書寫中,多個語句可以位于一行,但為了增強可讀性,一般每行只有一條語句。一個C語言源程序可以由一個或多個源文件組成,但僅可以有一個main函數(shù)。6、關(guān)于“while(條件表達式)循環(huán)體”,以下敘述中正確的是()。A、循環(huán)體的執(zhí)行次數(shù)總是比條件表達式的執(zhí)行次數(shù)多一次B、條件表達式的執(zhí)行次數(shù)總是比循環(huán)體的執(zhí)行次數(shù)多一次C、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)一樣D、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)無關(guān)標(biāo)準(zhǔn)答案:B知識點解析:考查while循環(huán)的執(zhí)行過程。先計算括號內(nèi)表達式的值,若不為0則執(zhí)行循環(huán)體語句,若為0則跳出wlaile循環(huán),所以條件表達式的執(zhí)行次數(shù)總是比循環(huán)體的執(zhí)行次數(shù)多一次.答案選B。7、語句“printf("a\bhow\’are\’y\\\bou\n");"的輸出結(jié)果是()。A、a\bhow\’are\’y\\bouB、a\bhow\’are\’y\bouC、how’are’youD、ahow’are’y\bou標(biāo)準(zhǔn)答案:C知識點解析:“\b”格式符表示退格,功能是將它后面的字母把它前面的字母覆蓋,導(dǎo)致“\b”格式符前面的字母不能輸出;“\’”格式符表示輸出單引號字符;“\\”格式符表示輸出反斜線字符。8、以下程序的輸出結(jié)果是()。#includemain(){inta=8,b=6,m=1;switch(a%4){case0:m++;break;case1:m++;switch(b%3){default:m++;case0:m++:break;}}printf(”%d\n”,m);}A、1B、2C、3D、4標(biāo)準(zhǔn)答案:B知識點解析:本題考查switch語句。因為a=8,a%4=0,所以執(zhí)行case0后面的語句,將m加1,遇到break語句跳出switch。9、有下列程序段:typedefstructNODE{intnum;stmctNODE*next;}OLD;下列敘述中正確的是(

溫馨提示

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

評論

0/150

提交評論