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

下載本文檔

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

文檔簡介

國家二級(C語言)機試模擬試卷23(共9套)(共382題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共39題,每題1.0分,共39分。)1、設有定義:inta=1,b=2,C=3;,以下語句中執(zhí)行效果與其他三個不同的是()。A、if(a>b)c=a,a=b,b=c;B、if(a>b){c=a,a=b,b=c}C、if(a>b)c=a;a=b;bc;D、if(a>b){c=a;a=b.b=c}標準答案:C知識點解析:C語言中if語句后面只跟一條語句時,可以省略大括號。即if語句僅作用于緊隨其后的那條語句或者是復合語句的內(nèi)容,所以A項執(zhí)行三條語句組成的復合語句;BD兩項執(zhí)行大括號中的三條語句;而C項只執(zhí)行c=a;。2、若變量都已正確說明,則以下程序段輸出結(jié)果為()。#include<stdio.h>main(){chara=’a’;intb=2;printf(a>b?’’***a=%d’’:’’###b=%d’’,a,b);}A、***a=3B、###b=3C、***a=3###b=5D、全部錯誤標準答案:D知識點解析:本題考查printf函數(shù)的格式和三目運算符“?:”的使用。printf函數(shù)中格式說明符之前插入的任何字符都原樣輸出。本題中“a>b”為真,所以返回“***a=97”。3、設x和y都是int類型,且x=1,y=2,則printf("%d%d",x,y,(x,y))的輸出結(jié)果是()。A、12B、122C、1,2D、輸出值不確定標準答案:A知識點解析:本題考查printf函數(shù)的格式和逗號表達式。printf函數(shù)在輸出時,是根據(jù)格式說明符的個數(shù)輸出的,如果函數(shù)中有多余的項將不予輸出;如果有輸出項少于格式說明符,則出錯,不能輸出正確的結(jié)果。本題中逗號表達式(x,y)只返回y的值。此時格式說明的個數(shù)是2,而輸出項的個數(shù)是3,因此printf函數(shù)只輸出前兩項。4、設有定義:chars[81];inti=0;,以下不能將一行(不超過80個字符)帶有空格的字符串正確讀入的語句或語句組是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=‘\0’;C、seanf(“%s”,s);D、d0{seanf(“%c”,&s[i]);}while(s[i++]!=‘\n’);s[i]=‘\0’;標準答案:C知識點解析:字符串的輸入不能使用scanf(“%s”,s);而應該使用gets(s)。5、以下敘述錯誤的是()。A、C語言區(qū)分大小寫B(tài)、C程序中的一個變量,代表內(nèi)存中一個相應的存儲單元,變量的值可以根據(jù)需要隨時修改C、整數(shù)和實數(shù)都能用C語言準確無誤地表示出來D、在C程序中,正整數(shù)可以用十進制、八進制和十六進制的形式來表示標準答案:C知識點解析:本題涉及C語言最基本的3個概念:①C語言是區(qū)分大小寫的,q和Q是兩個不同的變量;②變量的實質(zhì)就是在內(nèi)存中占據(jù)一定的存儲單元,存儲單元里存放的是該變量的值,變量的值可以根據(jù)需要進行修改;③整數(shù)在允許的范圍內(nèi)可以準確的表示出來,但不可能表示無限度的實數(shù)。正整數(shù)可用二進制、十進制、八進制和十六進制表示。6、按照C語言規(guī)定的用戶標識符命名規(guī)則,不能出現(xiàn)在標識符中的是()。A、大寫字母B、下劃線C、數(shù)字字符D、連接符標準答案:D知識點解析:C語言中標識符由字母、下劃線、數(shù)字組成,且開頭必須是字母或下劃線。所以D選項中的連接符不合法。7、有以下程序段#includemain(){inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a-=%db=%dc=%d\n",a,b,c);}程序的輸出結(jié)果是()。A、a=10b=50c=30B、a=10b=50c=10C、a=10b=30c=10D、a=50b=30c=50標準答案:B知識點解析:C語言中使用分號來作為語句的結(jié)束,所以a=b,b=c;是一條含有逗號運算符語句。if條件不滿足,直接執(zhí)行c=a。8、在軟件設計中不使用的工具是()。A、系統(tǒng)結(jié)構圖B、PAD一圖C、數(shù)據(jù)流圖(DFD圖)D、程序流程圖標準答案:C知識點解析:系統(tǒng)結(jié)構圖是對軟件系統(tǒng)結(jié)構的總體設計的圖形顯示。在需求分析階段,已經(jīng)從系統(tǒng)開發(fā)的角度出發(fā),把系統(tǒng)按功能逐次分割成層次結(jié)構,是在概要設計階段用到的。PAD圖是在詳細設計階段用到的。程序流程圖是對程序流程的圖形表示,在詳細設計過程中用到。數(shù)據(jù)流圖是結(jié)構化分析方法中使用的工具,它以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動和處理的過程,由于它只反映系統(tǒng)必須完成的邏輯功能,所以它是一種功能模型,是在可行性研究階段用到的而非軟件設計時用到,所以選擇C。9、有以下程序:#inelude<stdio.h>#definePT3.5;#defineS(x)PT*x*x;mai.(){inta=1,b=2;printf("%4.1f\n",S(a+b));}程序運行后的輸出結(jié)果是()。A、7.5B、31.5C、程序有錯無輸出結(jié)果D、14.0標準答案:C知識點解析:宏定義不是C語句,末尾不需要有分號。所以語句printf("%4.1f\n",S(a+b));展開后為printf("%4.1f、n",3.5;*a+b*a+b;);所以程序會出現(xiàn)語法錯誤。10、以下數(shù)據(jù)結(jié)構中,屬于非線性數(shù)據(jù)結(jié)構的是()。A、棧B、線性表C、隊列D、二叉樹標準答案:D知識點解析:二叉樹屬于非線性結(jié)構。棧是一種特殊的線性表,這種線性表只能在固定的一端進行插入和刪除操作;隊列可看作是插入在一端進行,刪除在另一端進行的線性表。11、下列工具中,小屬于結(jié)構化分析的常用二L具的是()。A、數(shù)據(jù)流圖B、數(shù)據(jù)字典C、判定樹D、N—S圖標準答案:D知識點解析:結(jié)構化分析的常用工具有數(shù)據(jù)流圖、數(shù)據(jù)字典、判定樹和判定表。12、下面描述中,不屬于軟件危機表現(xiàn)的是()。A、軟件過程不規(guī)范B、軟件開發(fā)生產(chǎn)率低C、軟件質(zhì)量難以控制D、軟件成本不斷提高標準答案:A知識點解析:軟件危機主要表現(xiàn)在:軟件需求的增長得不到滿足;軟件開發(fā)成本和進度無法控制;軟件質(zhì)量難以保證;軟件不可維護或維護程度非常低;軟件的成本不斷提高;軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和應用需求的增長。所以選擇A。13、有兩個關系R、S如下:由關系R通過運算得到關系S,則所使用的運算為()。A、選擇B、投影C、插AD、連接標準答案:B知識點解析:投影運算是指對于關系內(nèi)的域指定可引入新的運算。本題中S是在原有關系R的內(nèi)部進行的,是由R中原有的耶些域的列所組成的關系。所以選擇B。14、關于C語言標識符,以下敘述中錯誤的是()。A、標識符可全部由數(shù)字組成B、標識符可全部由下畫線組成C、標識符可全部由小寫字母組成D、標識符可全部由大寫字母組成標準答案:A知識點解析:C語言標識符只能由字母、數(shù)字、下畫線構成,且只能以字母、下畫線開頭,故選項A不正確。15、有以下程序#include<stdio.h>voidmain(){intn=2,k=1;while(!(k>0||n++));printf(’’%d%d\n’’,k,n);}程序運行后的輸出結(jié)果是()。A、02B、13C、57D、12標準答案:D知識點解析:在程序中整型變量n的初始值等于2,整型變量k的初始值等于1,在執(zhí)行while語句時,由于表達式k的值大于0為真,所以不再需要判斷“n++’是否為真,“(k>0‖n++)”表達式的值為真?!?(k>0‖n++)”表達式的值為假,所以while語句中的條件不滿足,循環(huán)語句不會執(zhí)行,變量n的值也不會加1,所在輸出變量k和n的值是1和2。16、以下敘述中正確的是()。A、charc1,c2,*c3,c4[40];是合法的變量定義語句B、數(shù)組下標的下限由數(shù)組中第一個非零元素的位置決定C、數(shù)組下標的下限由數(shù)組中第一個被賦值元素的位置決定D、數(shù)組下標的下限是1標準答案:A知識點解析:A)正確,charc1,c2,*c3,c4[40]表示定義了兩個字符變量c1、c2,一個字符指針c3,一個字符數(shù)組c4。數(shù)組的下限永遠為0,選項B)、C)、D)錯,答案選A)。17、有以下程序段:structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};struetstc[2]={10,a,20,b};pt=c;以下選項中表達式的值為11的是()。A、++pt->xB、pt->xC、*pt->yD、(pt++)->X標準答案:A知識點解析:本題考查結(jié)構體數(shù)組初始化以及結(jié)構體變量的引用,題目中定義了一個結(jié)構體數(shù)組c并初始化,指針pt指向c的第一個元素,那么pt->x為10,++pt->x為11,*pt->y為1,(pt++)->x為20,所以答案為A。18、有以下程序段int*p;p=__________malloc(sizeof(int));若要求使p指向一個int型的動態(tài)存儲單元,在橫線處應填入的是()。A、(int*)B、intC、int*D、(*int)標準答案:A知識點解析:語句"malloc(sizeof(int))"為動態(tài)分配了一塊內(nèi)存,因為p為int型指針,所以需要使用強制轉(zhuǎn)換將該內(nèi)存地址轉(zhuǎn)換成int*類型后再指給p,填入的內(nèi)容為(int*),答案選A)。19、下列敘述中正確的是()。A、線性表的鏈式存儲結(jié)構與順序存儲結(jié)構所需要的存儲空間是相同的B、線性表的鏈式存儲結(jié)構所需要的存儲空間一般要多于順序存儲結(jié)構C、線性表的鏈式存儲結(jié)構所需要的存儲空間一般要少于順序存儲結(jié)構D、線性表的鏈式存儲結(jié)構與順序存儲結(jié)構在存儲空間的需求上沒有可比性標準答案:B知識點解析:線性鏈式存儲結(jié)構中每個結(jié)點都由數(shù)據(jù)域與指針域兩部分組成,增加了存儲空間,所以一般要多于順序存儲結(jié)構。20、設有定義#include<stdio.h>#include<stdlib.h>typedefstruet{intx,y;}T;typedefstruet{intx,y;}*USER;USERfun(){USERp;p=(USER)malloc(sizeof(T));p->x=1:p->y=2:returnp;}函數(shù)fun返回值的類型是()。A、T類型的結(jié)構體B、指向結(jié)構體類型的指針C、int類型的元素D、int類型的指針標準答案:B知識點解析:由題意可知:使用typeclef將類型:struet{intx,y;}*重命名為usER,所以函數(shù)fun的返回類型為struct{intx,y;}*,即指向結(jié)構體類型的指針,本題答案為B。21、下列選項中不屬于結(jié)構化程序設計原則的是()。A、可封裝B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:結(jié)構化程序設計的基本原則包括:①模塊化;②自頂向下;③逐步求精;④限制使用goto語句。可封裝是面向?qū)ο蟮脑O計思想。22、有以下程序#definer(X,Y)(X)*(Y)main(){inta=3,b=4;printf("%dLn",F(xiàn)(a++,b++));}程序運行后的輸出結(jié)果是()。A、12B、15C、16D、20標準答案:A知識點解析:此題考查的是編譯預處理命令以及自加運算符。F(a++,b++)先取a和b的值,、參加運算,再把a和b的值分別加1,所以F(a++,b++)=F(3,4)=3*4=12。23、閱讀下面程序,程序執(zhí)行后的結(jié)果為()。#include"stdioh"main(){char*str="abcdefghijklmnopq";while(*str++!=’e’);printf("%c\n",*str);}A、fB、aC、eD、q標準答案:A知識點解析:本題考查的是取內(nèi)容運算符“·”和自加運算符“++”的優(yōu)先級問題。由于“++”的優(yōu)先級高于“*”,所以題干中*str++!=’e’,即*(str++)!=’e’,當str指向字符’e’時,while循環(huán)的條件不成立,但str已經(jīng)進行了自加指向了字符’f’,所以*six輸出字符’f’。24、當變量c的值不為2、4、6時,值也為”真”的表達式是()。A、(c>=2&&c<=6)&&(c%21=1)B、(c:=2)||(c==4)||(c==6)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)||(c!=3)||(c!=5)標準答案:D知識點解析:邏輯或運算符中只要有一個運算量為真結(jié)果就是真,當c>=2&&c<=6條件不成立時c的值肯定不是2、3、4、5、6,所以c!=3,與c!=5均成立。所以D選項的結(jié)果一定為真。25、有以下程序:#includemain(){intx;scanf("%d",&x);if(x<=0);elseif(x!=5)printf("%d\n",x);}程序運行時,輸入的值在哪個范圍才會有輸出結(jié)果()。A、不等于5的整數(shù)B、大于0且不等5的整數(shù)C、大于0或等于5的整數(shù)D、小于5的整數(shù)標準答案:B知識點解析:題目中,雖然else和第二個if不在同一行上,但等價于在同一行上,因此,程序的意思是當x大于0且不等于5時將其打印出來。26、有以下程序:#include<stdio.h>Structord{intx,y;}dt[2]=;{1,2,3,4};main(){structord*p=dt:printf("%d,",++(p->x));printf("%d\n",++(p->y));程序運行后的輸出結(jié)果是()。A、3,4B、4,1C、2,3D、1.2標準答案:C知識點解析:本題考查結(jié)構體數(shù)組的相關操作,dt為結(jié)構體數(shù)組,那么指針p指向了結(jié)構體數(shù)組的一個元素,所以p->x為1,p->y為2,結(jié)果為2,3選項C正確。27、以下敘述中錯誤的是()。A、可以給指針變量賦一個整數(shù)作為地址值B、函數(shù)可以返回地址值C、改變函數(shù)形參的值,不會改變對應實參的值D、當在程序的開頭包含頭文件stdio.h時,可以給指針變量賦NULL標準答案:A知識點解析:不能將一個整數(shù)直接賦給指針變量作為地址,所以A選項是錯誤的。函數(shù)的返回值可以是地址,即指針。函數(shù)調(diào)用中形參值的變化不會傳遞給實參。28、有以下程序:#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i];}voidmain(){intx[][N]={{1,2,3},{4,3},{5,6,7,8},{9,10,11}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printf(’’\n’’);}程序運行后的輸出結(jié)果是()。A、1,3,5,9,B、1,2,3,4,C、1,3,7,0,D、3,4,8,10標準答案:C知識點解析:子函數(shù)的功能是將一個4*4的二維矩陣的對角線上的元素賦給另外一個有4個元素的一維數(shù)組。在主函數(shù)中定義數(shù)組時,沒有指定元素默認為零,因此,主函數(shù)中的數(shù)組x[4][4]={{1,2,3,0},{4,3,0,0},{5,6,7,8},{9,10,11,0},對角線上的元素為1,3,7,0。29、以下敘述中正確的是A、每個后綴為.C的C語言源程序都可以單獨進行編譯B、每個后綴為.C的C語言源程序都應該包含一個main函數(shù)C、在C語言程序中,main函數(shù)必須放在其他函數(shù)的最前面D、在C語言程序中,只有main函數(shù)才可單獨進行編譯標準答案:A知識點解析:一個普通的C函數(shù)可以單獨作為一個C的程序文件存在被包含到其他程序中,每個后綴為.C的C語言源程序都可以單獨進行編譯,所以B、D錯誤。main函數(shù)可以放在程序的開始,中間,最后,所以C錯誤。30、關系數(shù)據(jù)庫管理系統(tǒng)能實現(xiàn)的專門關系運算包括()。A、排序、索引、統(tǒng)計B、選擇、投影、連接C、關聯(lián)、更新、排序D、顯示、打印、制表標準答案:B知識點解析:關系數(shù)據(jù)庫管理系統(tǒng)的專門關系運算包括選擇運算、投影運算和連接運算。31、有以下程序(其中的strstr()函數(shù)頭部格式為:char*strstr(char*p1,char*p2)確定p2字符串是否在p1中出現(xiàn),并返回p2第一次出現(xiàn)的字符串首地址)#include<stdio.h>#include<string.h>char*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);}程序的運行結(jié)果是A、toBeijing!B、youtoBeijing!C、WelcomeyoutoBeijing!D、Beijing!標準答案:A知識點解析:調(diào)用strstr函數(shù),可知a指向的字符串在b指向的字符串中第一次出現(xiàn)的位置,并將此地址賦給指針p。strlen()函數(shù)是求字符串的實際長度(不包含結(jié)束標志),并且作為函數(shù)值返回。strstr函數(shù)返回的地址下標值為9,加上a長度3,再加1,此時p指向的地址下標值為13,輸出"toBeijing!",A選項正確。32、以下敘述正確的是A、不能在數(shù)組說明符的一對方括號中使用表達式B、charc1,*c2,**c3,c4[2];是C語言的合法語句C、數(shù)組下標的最小值可以是負值D、若有數(shù)組定義intarray[5];則語句printf("%d",array[1.23]);是合法的標準答案:B知識點解析:在B選項中,c1是字符型變量,c2是字符型指針變量,c3是指向字符型指針的指針變量,c4[2]是一個一維字符數(shù)組,這些都是C語言的合法語句,因此答案為B選項。33、有以下程序#include<stdio.h>#include<string.h>structS{charname[10];};main(){structSs1,s2;strcpy(,"XXX");strcpy(,"=");s1=s2;printf("%s\n",);}程序運行后的輸出結(jié)果是A、=B、XXXC、#NAME?D、X=標準答案:A知識點解析:主函數(shù)首先為結(jié)構體定義兩個變量s1,s2,分別使用字符串拷貝函數(shù)strcpy()為s1和s2的成員name賦值,再將s2中的成員信息賦值給s1,因此輸出為"=",答案為A選項。34、為了降低算法的空間復雜度,要求算法盡量采用原地工作(inplace)。所謂原地工作是指A、執(zhí)行算法時所使用的額外空間固定(即不隨算法所處理的數(shù)據(jù)空間大小的變化而變化)B、執(zhí)行算法時所使用的額外空間隨算法所處理的數(shù)據(jù)空間大小的變化而變化C、執(zhí)行算法時不使用額外空間D、執(zhí)行算法時不使用任何存儲空間標準答案:A知識點解析:算法的空間復雜度是指執(zhí)行這個算法所需要的內(nèi)存空間,包括輸入數(shù)據(jù)所占的存儲空間、程序本身所占的存儲空間、算法執(zhí)行過程中所需要的額外空間。如果額外空間量相對于問題規(guī)模(即輸入數(shù)據(jù)所占的存儲空間)來說是常數(shù),即額外空間量不隨問題規(guī)模的變化而變化,則稱該算法是原地工作的。故選A選項.35、設有以下程序段floata[8]={1.0,2.0};intb[1]={0};charc[]={"A","B"};chard=="1";以下敘述正確的是A、只有變量c的定義是合法的B、只有變量a,b,c的定義是完全合法的C、所有變量的定義都是完全合法的D、只有變量a,b的定義是完全合法的標準答案:D知識點解析:floata[8]={1.0,2.0};定義了一個包含8個float型元素的數(shù)組,并初始化了數(shù)組的前2項,其他項是隨機數(shù)。intb[1]={0},定義了只有一個int型元素的數(shù)組,并初始化為0。charc[]={"A","B"};定義一個char型數(shù)組,大小有初始化元素決定,但初始化值是字符串,類型不兼容,編譯出錯。chard="1";定義一個char型變量,但是初始化賦值字符串,類型不兼容,編譯出錯。因此只有a,b定義和初始化正確。故答案為D選項36、下面屬于面向?qū)ο蠓椒ㄖ袑ο蠡咎攸c的是A、多態(tài)性B、方法唯一性C、可修改性D、靈活性標準答案:A知識點解析:對象的基本特點如下:由上表可知,本題選A選項.37、設循環(huán)隊列的存儲空間為Q(1:50),初始狀態(tài)為front=rear=50。現(xiàn)經(jīng)過一系列入隊與退隊操作后,front=rear=1,此后又正常地插入了兩個元素。最后該隊列中的元素個數(shù)為A、2B、1C、3D、52標準答案:A知識點解析:循環(huán)隊列是隊列的一種順序存儲結(jié)構,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針指向排頭元素的前一個位置。循環(huán)隊列長度為50,由初始狀態(tài)為front=rear=50可知此時循環(huán)隊列為空。入隊運算時,首先隊尾指針進1(即rear+1),然后在rear指針指向的位置插入新元素。特別的,當隊尾指針rear=50+1時,置rear=1。退隊運算時,排頭指針進1(即front+1),然后刪除front指針指向的位置上的元素,當排頭指針front=50+1時,置front=1。若經(jīng)過運算,front=rear=1可知隊列空或者隊列滿。此后又正常地插入了兩個元素說明插入前隊列為空,則插入后隊列元素個數(shù)為2。故選A選項38、以下是while語句的基本形式:while(表達式){語句;>其中“表達式”()。A、必須是邏輯表達式B、必須是關系表達式C、必須是邏輯表達式或關系表達式D、可以是任意合法的表達式標準答案:D知識點解析:本題考查while表達式。while(表達式)中的表達式可以為任何合法的表達式,一般情況下為邏輯、條件表達式,需要注意的是,當?shù)忍?==)誤寫為賦值號(=)時不會報錯的,但是其值恒為1。39、有以下程序:#include<stdio.h>voidfun(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(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5):for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序運行的結(jié)果是()。A、3456787B、876543C、1098765D、321678標準答案:D知識點解析:由于數(shù)組名本身是一個地址,所以在用數(shù)組名作為實參傳遞時,對應的形參相當于一個指針變量,在函數(shù)中可以通過指針變量來引用數(shù)組元素,從而改變元素的值。本題中函數(shù)fun的作用是將數(shù)組A的前n個元素進行逆轉(zhuǎn),fun(k,5)的結(jié)果是數(shù)組k的前五個元素1、2、3、4、5變?yōu)?、4、3、2、1。逆轉(zhuǎn)后,輸出數(shù)組中第3個至第8個元素。二、程序填空題(本題共1題,每題1.0分,共1分。)40、給定程序中,函數(shù)fun的功能是:將形參n中,各位上為偶數(shù)的數(shù)取出,并按原來從高位到低位的順序組成一個新的數(shù),并作為函數(shù)值返回。例如,從主函數(shù)輸入一個整數(shù):27638496,函數(shù)返回值為:26846。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構!1#include<stdio.h>2unsignedlongfun(unsignedlongn)3{unsignedlongx=0,s,i;intt;4s=n;5/**********found**********/6i=__1__;7/**********found**********/8while(__2__)9{t=s%10;10if(t%2==0){11/**********found**********/12x=x+t*i;i=__3__;13}14s=s/10;15}16returnx;17}18main()19{unsignedlongn=-1;20while(n>99999999||n<0)21{printf(’’Pleaseinput(0<n<100000000):’’);scanf(’’%1d’’,&n);}22printf(’’\nTheresultis:%1d\n’’,fun(n));23}標準答案:(1)1(2)s(3)i*10知識點解析:函數(shù)fun的功能是將形參n中,各位上為偶數(shù)的數(shù)取出,組成新數(shù)。第一空:由“if(t%2==0){x=x+t*i;i=__3__;}”可知,如果t是偶數(shù),那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*1;下一次得到了t=4,那么此時x的值應該是2+2*10;再下一一次得到t=2,那么x=22+2*100,即x的值是在上一次值的基礎上加上新得到的值乘以其權值,因此i是代表權值。第一空處是初始化i,第一次進入if語句時市,x是個1位數(shù),此時權值i應為l,故第一空處應為“1”。第二空:第二空處是填循環(huán)的終止條件,在循環(huán)體內(nèi),s每次縮小10倍,在最后一次進入循環(huán)的時候,s是一個一位數(shù),s/10之后s變成0,下次就不應該進入while循環(huán),因此while循環(huán)的終止條件是s不為0,故第二空處為“s”或“s!=0”。第三空:由第一空的分析可知權值i是在上一次的基礎上增加10倍,故第三空處應為“i*10”。三、程序修改題(本題共1題,每題1.0分,共1分。)41、下列給定程序的功能是:讀入一個英文文本行,將其中每個單詞的第一個字母改成大寫,然后輸出此文本行(這里”單詞”是指由空格隔開的字符串)。例如,若輸入"Iamastudenttotaketheexamination",則應輸出"IAmAStudentToTakeTheExamination"。請改正程序中的錯誤,使程序能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構!試題程序:1#include<stdlib.h>2#include<string.h>3#include<conio.h>4#include<ctype.h>5#include<stdio.h>6#include<string.h>7/*********found*********/8voidupfst(charP)9{10intk=0;11for(;*P;P++)12if(k)13{14if(*P==’’)15k=0;16}17else18{19if(*P!=’’)20{21k=1;22*P=toupper(*P);23}24}25}26voidmain()27{28charchrstr[81]j29System("CLS");30printf("\nPleaseenteranEnglishtext;lihe:");31gets(chrstr);32printf("\nBoforechanging:\n%s",chrstr);33upfst(chrstr);34printf("\nAfterchanging:\n%s\n",chrstr);35}標準答案:voidupfst(char*p)知識點解析:主函數(shù)中fun函數(shù)的調(diào)用方式說明函數(shù)fun的參數(shù)應為指針類型。四、程序設計題(本題共1題,每題1.0分,共1分。)42、下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給主函數(shù)中的s。例如,若a數(shù)組中的值為:0127919745238314568259141則返回主程序后s的值應為3.375。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:1#include<stdio.h>2#include<conio.h>3#include<Stdlib.h>4#defineN55doublefun(intw[][N])6{78}9voidmain()10{11FILE*wf;12inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);13inti,j;14doubles;15system("CLS");16printf("***Thearray***\n");17for(i=0;i<N;i++)18{for(j=0;j<N;j++)19{printf("%4d",a[i][j]);)20print:f("\n");21}22s=fun(a);23printf("***THERESULT***\n");24printf("Thesumis:%lf\n",s);25/*****************/26wf=fopen("out.dat","w");27fprintf(wf,"%lf",s);28fclose(wf);29/*****************/30}標準答案:doublefun(intw[][N]){inti,j,k=0;doublesum=0.0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0‖i==N—1‖j==0‖j==N—1)/*只要下標中有一個為0或N—1,則它一定是周邊元素*/{sum=sum+w[i][j];/*將周邊元素求和*/k++;}returnsum/k;/*求周邊元素的平均值*/}知識點解析:本題要求計算二維數(shù)組周邊元素的平均值,for循環(huán)語句控制循環(huán)過程,if條件語句根據(jù)數(shù)組元素的下標判斷該元素是否為二維數(shù)組的周邊元素。本題采用逐一判斷的方式,周邊元素的規(guī)律為下標中有一個是0或N—1,所以只要下標中有一個為0或N—1,那么它一定是周邊元素。計算周邊元素個數(shù)的方式是當給sum累加一個值時,k也加1。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共39題,每題1.0分,共39分。)1、算法的時間復雜度是指()。A、算法的長度B、執(zhí)行算法所需要的時間C、算法中的指令條數(shù)D、算法執(zhí)行過程中所需要的基本運算次數(shù)標準答案:D知識點解析:算法的時間復雜度,是指執(zhí)行算法所需要的工作量,可以用算法在執(zhí)行過程中所需基本運算的執(zhí)行次數(shù)來度量算法的工作量。2、以下數(shù)據(jù)結(jié)構中,屬于非線性數(shù)據(jù)結(jié)構的是()。A、棧B、線性表C、隊列D、二叉樹標準答案:D知識點解析:二叉樹屬于非線性結(jié)構。棧是一種特殊的線性表,這種線性表只能在固定的一端進行插入和刪除操作;隊列可看作是插入在一端進行,刪除在另一端進行的線性表。3、數(shù)據(jù)結(jié)構中,與所使用的計算機無關的是數(shù)據(jù)的()。A、存儲結(jié)構B、物理結(jié)構C、邏輯結(jié)構D、線性結(jié)構標準答案:C知識點解析:數(shù)據(jù)的邏輯結(jié)構反映的是數(shù)據(jù)元素之間的邏輯關系,與使用的計算機無關。4、內(nèi)聚性是對模塊功能強度的衡量,下列選項中,內(nèi)聚性較弱的是()。A、順序內(nèi)聚B、偶然內(nèi)聚C、時間內(nèi)聚D、邏輯內(nèi)聚標準答案:B知識點解析:內(nèi)聚是從功能角度來衡量模塊的聯(lián)系,它描述的是模塊內(nèi)的功能聯(lián)系。內(nèi)聚有如下種類,它們之間的內(nèi)聚度由弱到強排列:偶然內(nèi)聚一一模塊中的代碼無法定義其不同功能的調(diào)用。但它使該模塊能執(zhí)行不同的功能,這種模塊為巧合強度模塊。邏輯內(nèi)聚一一這種模塊把幾種相關的功能組合在一起,每次被調(diào)用時,由傳送給模塊的參數(shù)來確定該模塊應完成那一種功能。時間內(nèi)聚一一這種模塊順序完成一類相關功能,比如初始化模塊,它順序地為變量置初值。過程內(nèi)聚一一如果一個模塊內(nèi)的處理元素是相關的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。通信內(nèi)聚一一這種模塊除了具有過程內(nèi)聚的特點外,還有另外一種關系,即它的所有功能都通過使用公用數(shù)據(jù)而發(fā)生關系。順序內(nèi)聚一一如果一個模塊內(nèi)各個處理元素和同一個功能密切相關,而且這些處理必須順序執(zhí)行,處理元素的輸出數(shù)據(jù)作為下一個處理元素的輸入數(shù)據(jù),則稱為順序內(nèi)聚。功能內(nèi)聚一一如果一個模塊包括為完成某一具體任務所必需的所有成分,或者說模塊中所有成分結(jié)合起來是為了完成一個具體的任務,此模塊則為功能內(nèi)聚模塊。5、在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有若干個鍵,它們稱為該表的()。A、連接碼B、關系碼C、外碼D、候選碼標準答案:D知識點解析:在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有若干個鍵,它們稱為該表的候選碼或候選鍵。從二維表的所有候選鍵中選取一個作為用戶使用的鍵稱為主鍵或主碼。6、檢查軟件產(chǎn)品是否符合需求定義的過程稱為()。A、確認測試B、需求測試C、驗證測試D、路徑測試標準答案:A知識點解析:確認測試的任務是驗證軟件的功能和性能,以及其他特性是否滿足需求規(guī)格說明中確定的各種需求。7、數(shù)據(jù)流圖用于抽象描述一個軟件的邏輯模型,數(shù)據(jù)流圖由一些特定的圖符構成。下列圖符名標識的圖符不屬于數(shù)據(jù)流圖合法圖符的是()。A、控制流B、加工C、存儲文件D、源和潭標準答案:A知識點解析:數(shù)據(jù)流圖用于抽象描述一個軟件的邏輯模型,它由一些特定的圖符構成,包括4個方面,即加工、數(shù)據(jù)流、存儲文件、源和潭。8、待排序的關鍵碼序列為(15,20,9,30,67,65,45,90),要按關鍵碼值遞增的順序排序,采取簡單選擇排序法,第一趟排序后關鍵碼15被放到第()個位置。A、2B、3C、4D、5標準答案:B知識點解析:選擇排序的基本思想是掃描整個線性表,從中選出最小的元素,將它交換到表的最前面,然后對剩下的子表采用同樣的方法,直到子表為空。所以第一趟排序后,將選出最小的元素9放在第一個位置,元素15則被交換放在第三個位置。9、對關系S和關系R進行集合運算,結(jié)果中既包含關系Sp的所有元組也包含關系R中的所有元組,這樣的集合運算稱為()。A、并運算B、交運算C、差運算D、除運算標準答案:A知識點解析:關系的并運算是指,由結(jié)構相同的兩個關系合并,形成一個新的關系,其中包含兩個關系中的所有元組。10、下列選項中,不屬于數(shù)據(jù)管理員(DBA)職責的是()。A、數(shù)據(jù)庫維護B、數(shù)據(jù)庫設計C、改善系統(tǒng)性能,提高系統(tǒng)效率D、數(shù)據(jù)類型轉(zhuǎn)換標準答案:D知識點解析:數(shù)據(jù)庫管理員(DataBaseAdminiswator,DBA)是指對數(shù)據(jù)庫的規(guī)劃、設計、維護、監(jiān)視等的人員,其主要工作如下:數(shù)據(jù)庫設計。DBA的主要任務之一是數(shù)據(jù)庫設計,具體地說是進行數(shù)據(jù)模式的設計;數(shù)據(jù)庫維護。DBA必須對數(shù)據(jù)庫中的數(shù)據(jù)安全性、完整性、并發(fā)控制及系統(tǒng)恢復、數(shù)據(jù)定期轉(zhuǎn)儲等進行實施與維護;改善系統(tǒng)性能,提高系統(tǒng)效率。DBA必須隨時監(jiān)視數(shù)據(jù)庫的運行狀態(tài),不斷調(diào)整內(nèi)部結(jié)構,使系統(tǒng)保持最佳狀態(tài)與效率。11、C語言規(guī)定,在一個C程序中,main()函數(shù)的位置()。A、必須在系統(tǒng)調(diào)用的庫函數(shù)之后B、必須在程序的開始C、必須在程序的最后D、可以在任意位置標準答案:D知識點解析:每個C程序有且只有一個主函數(shù)(main),且程序必須從“main()”函數(shù)開始執(zhí)行,而且“main()”函數(shù)可以放在程序中的任意位置。12、以下敘述中正確的是()。A、C語言比其他語言高級B、C語言可以不用編譯就能被計算機識別執(zhí)行C、C語言以接近英語國家的自然語言和數(shù)學語言作為語言的表達形式D、C語言出現(xiàn)的最晚,具有其他語言的一切優(yōu)點標準答案:C知識點解析:此題考查的是C語言的基本特點。C語言是一種高級編程語言,但并不是比其他語言高級;C語言源程序必須經(jīng)過編譯生成目標文件才能被計算機識別執(zhí)行;C語言出現(xiàn)比較晚,它既有優(yōu)點也有缺點,而并不是具有其他一切語言的優(yōu)點。13、下列敘述中錯誤的是()。A、C語句必須以分號結(jié)束B、復合語句在語法上被看作一條語句C、空語句出現(xiàn)在任何位置都不會影響程序運行D、賦值表達式末尾加分號就構成賦值語句標準答案:C知識點解析:C語言規(guī)定每條語句和數(shù)據(jù)定義的最后必須有一個分號,分號是C語句的必要組成部分。復合語句也稱為“語句塊”,其形式如下:{語句1;語句2;……”語句n;},即用一對大括號把若干語句括起來構成一個語句組。一個復合語句在語法上視為一條語句,在一對花括號內(nèi)的語句數(shù)量不限。一個賦值表達式的最后加一個分號就成為一條語句,即賦值語句??照Z句是只有一個分號的語句,它什么也不做,程序設計中有時需要加一個空語句來表示存在一條語句,但隨意加分號會導致邏輯上的錯誤,而且這種錯誤十分隱蔽,編輯器也不會提示邏輯錯誤,需要慎用。14、若有定義:inta=7;floatx=2.5,y=4.7;則表達式“x+a%3*(int)(x+y)%2/4”的值是()。A、2.500000B、2.750000C、3.500000D、0.000000標準答案:A知識點解析:此題考查的是變量的類型轉(zhuǎn)換。表達式中“(int)(x+y)把x+y=(7.2)”的值強制轉(zhuǎn)化成整型即得到7,那么“a%3*(int)(x+y)%2”的值為整型常量1,所以“a%3*(int)(x+y)%2/4”的值為0;因為變量x是浮點型變量,所以表達式“x+a%3*(int)(x+y)%2/4”的結(jié)果也是浮點型,得到2.500000。15、若下列選項中的各變量均為整型且已有值,其中不正確的賦值語句是()。A、++i;B、n1=(n2/(n3=2));C、k=-i=j;D、a=b+c=2;標準答案:D知識點解析:本題考查賦值表達式。賦值表達式的一般形式是:變量名=表達式。C語言規(guī)定,不能給變量表達式賦值。16、下列關于邏輯運算符兩側(cè)運算對象的敘述中正確的是()。A、只能是整數(shù)0或1B、只能是整數(shù)0或非0整數(shù)C、可以是結(jié)構體類型的數(shù)據(jù)D、可以是任意合法的表達式標準答案:D知識點解析:邏輯運算符兩側(cè)的運算對象可以是任意合法的表達式。邏輯表達式的運算結(jié)果或者為1(“真”),或者為0(“假”)。17、若有說明inta[3][4];則a數(shù)組元素的非法引用是()。A、a[0][2*1]B、a[1][3]C、a[4-2][0]D、a[0][4]標準答案:D知識點解析:此題考查的是數(shù)組元素的引用。對于已定義的數(shù)組a[M][N],數(shù)組元素的正確引用必須滿足行下標小于M,列下標小于N且為正整數(shù)。此題中,選項D)中列下標值出現(xiàn)溢出。18、下列說法不正確的是()。A、int*ptr;//指針指向整形數(shù)據(jù)B、char*ptr;//指針的類型是字符型指針C、int**ptr;//指針的類型是雙重指針D、int(*ptr)[3];//是一個指針數(shù)組,數(shù)組共有三個元素,而三個元素是int型指針標準答案:D知識點解析:血(*ptr)[3]是一個數(shù)組指針,指針指向一個有3個int型變量的數(shù)組。19、有以下程序#include<stdio.h>voidmain(){chars[]={"0laXy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]<=’a’&&s[i]>=’z’)n++;printf("%d\n",n);}程序運行后的輸出結(jié)果是()。A、0B、2C、3D、5標準答案:A知識點解析:這段程序的功能求出字符串s中字符的ASCII碼小于小寫字符a并且大于小寫字符z的字符的個數(shù)。因為小寫字符z的ASCII碼大于小寫字符a的ASCII碼,所以滿足a的ASCII碼并且大于z的ASCII碼的字符是不存在的,所以輸出0。20、有以下程序:#include<stdio.h>main()(inta[]={1,2,3,4),y,*p=&a[3];--p;y=*p;printf("y=%d\n",y);}程序的運行結(jié)果是()。A、y=0B、y=1C、y=2D、y=3標準答案:D知識點解析:程序首先定義了一個一維數(shù)組和指針,接著將數(shù)組第4個元素的地址賦給“*p”,進行-p使指針p指向了數(shù)組的第3個元素;通過“y=*p”,將數(shù)組第3個元素的值3賦給了y,所以選項D)正確。21、下面的for語句的循環(huán)次數(shù)為()。for(x=1,y=0;(y!=19)&&(x<6);x++);A、是無限循環(huán)B、循環(huán)次數(shù)不定C、最多執(zhí)行6次D、最多執(zhí)行5次標準答案:D知識點解析:本題考查for循環(huán)。只考慮x的取值變化,x從1取到5,可以循環(huán)5次,但是并不知道y是如何變化的,有可能出現(xiàn)y=19提前跳出循環(huán)的情況,所以是最多執(zhí)行了5次。22、下列程序的輸出結(jié)果是()。#include<stdio.h>voidmain(){inta=0,b=1,c=2;if(++a>0‖++b>0)++c;printf("%d,%d,%d",a,b,c);}A、0,1,2B、1,2,3C、1,1,3D、1,2,2標準答案:C知識點解析:本題考查if語句。先判斷if語句的條件是否成立,因為“++a=1>0”,所以條件成立,又因為是進行邏輯或運算,在己知其中一個運算對象為真的情況下,不必判斷另外一個運算對象的真假,即不進行抖b操作,就可以直接得出整個表達式的值為邏輯1,執(zhí)行下面的++c。23、有以下程序:#include<stdio.h>main(){intc;while((c=getchar())!=’\n’){switch(c-’3’){case0:case1:putchat(c+4);case2:putchar(c+4);break;case3:putchar(c+3);case4:putchar(c+3);break;}}printf("\n");}從第一列開始輸入數(shù)據(jù)(<CR>代表一個回車符):3845<CR>,則程序輸出結(jié)果為()。A、77889B、77868C、776810D、77886610標準答案:A知識點解析:題中while循環(huán)的條件是:當從鍵盤讀入的字符不是“\n”時,執(zhí)行while循環(huán)。輸入第一個字符3時:執(zhí)行case0,什么也不輸出;case1,輸出7;case2,輸出7;遇到break語句,跳出switch語句。輸入第二個字符8時“c-’3’=5”,不執(zhí)行任何語句。輸入第三個字符4時“c-’3’=1”,執(zhí)行case1輸出8:case2,輸出8;遇到break語句,跳出switch語句。輸入第四個字符5時“c-’3’=2”,執(zhí)行case2,輸出9;遇到break語句,跳出switch語句。24、C語言規(guī)定,函數(shù)返回值的類型是()。A、由調(diào)用該函數(shù)時的主調(diào)函數(shù)類型所決定B、由return語句中的表達式類型所決定C、由調(diào)用該函數(shù)時系統(tǒng)臨時決定D、由定義該函數(shù)時所指定的數(shù)值類型決定標準答案:D知識點解析:本題考查函數(shù)調(diào)用時的數(shù)值類型。函數(shù)調(diào)用時,函數(shù)返回值的類型既不由主調(diào)函數(shù)類型所決定,也不由return語句中的表達式類型所決定,更不是由系統(tǒng)臨時決定,而是由定義該函數(shù)時所指定的數(shù)值類型所決定。25、執(zhí)行下列程序時輸入“456<空格>789<空格>123<回車>”,輸出結(jié)果是()。#include<stdio.h>main(){charm[80];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}A、456,789,123B、4,789,123C、4,56,789,123D、4,56,789標準答案:D知識點解析:scanf函數(shù)中的“%c”表示通過鍵盤只讀入一個字符型的數(shù)據(jù),“&c”表示將該數(shù)據(jù)賦值給c,所以c=4。另外,以“%d”格式讀入數(shù)據(jù)時,只有遇到空格或者換行等間隔符時才停止讀入,所以i=56,m=789。26、已知下列函數(shù)定義:fun(int*b,intc,intd){intk;for(k=0;k<c*d;k++){*b=c+d;b++;}}則調(diào)用此函數(shù)的正確寫法是(假設變量a的說明為inta[10])()。A、fun(*a,6,14);B、fun(&a,6,8);C、fun(a,8,4);D、fun((int)a,8,6):標準答案:C知識點解析:本題考查函數(shù)調(diào)用時的參數(shù)傳遞。fun函數(shù)的調(diào)用形式為fun(int*b,intc,intd)。調(diào)用數(shù)組時,用數(shù)組名表示一個指向數(shù)組的第一個元素的指針,因此,調(diào)用時的形式為“fun(a,8,4)”。27、設Y為整型變量,A=1,A的地址為EF01;B=2,B的地址為EF02;執(zhí)行語句B=&A;Y=&B;后Y的值()。A、1B、2C、EF01D、EF02標準答案:D知識點解析:&是取地址運算符,“Y=&B”是將B的地址賦給Y,因此,Y值為EF02。28、有以下程序:#include<stdio.h>intf(intt[],intn);main(){inta[4]={1,2,3,4},s;s=f(a,2);printf("%d\n",s);}intf(intt[],intn){if((n>0)&&(n<5))returnt[n+1]+f(t,-1);elsereturn0;}程序運行后的輸出結(jié)果是()。A、4B、7C、10D、6標準答案:B知識點解析:本題主要考查的是函數(shù)的遞歸調(diào)用,子函數(shù)f是一個遞歸函數(shù),所以主函數(shù)中執(zhí)行“f(a,2)”時,其執(zhí)行過程是“a[3]+f(a,1)=a[3]+a[2]+f(a,0)=7”。29、以下語句定義正確的是()。A、inta[1][4]={1,2,3,4,5};B、floata[3][]={{1,2},{2,3),{3,1}};C、longa[2][3]={{1},{1,2},{1,2,3},{0,0}};D、doublea[][3]={8};標準答案:D知識點解析:本題考查如何對二維數(shù)組的元素賦值。選項A),數(shù)組第二維的大小是4,但是卻賦值了5個元素,數(shù)組溢出:選項B),C語言規(guī)定,對于二維數(shù)組,只可以省略第一個方括號中的常量表達式,而不能省略第二個方括號中的常量表達式;選項C),數(shù)組第一維的大小是2,但是賦值超過了2;選項D),在對二維數(shù)組元素賦初值時,可以只對部分元素賦初值,未賦初值的元素自動取0。30、下列一維數(shù)組說明中,不正確的是()。A、intN:scanf("%d",&N);intb[N];B、floata[]={1,6,6,0,2};C、#defineS10inta[S];D、#defineS10inta[S+5];標準答案:A知識點解析:本題考查一維數(shù)組的賦值。一維數(shù)組的一般定義格式為:類型說明符數(shù)組名[常量表達式]。其中,“[]”中的內(nèi)容可以是整型常量,也可以是整型表達式。選項A)中的N是一個變量,所以錯誤。31、下面函數(shù)的功能是()。sss(s,t)char*s,*t;{while((*s)&&(*t)&&(*t++==*s++));return(*s-*t);}A、將字符串s復制到字符串t中B、比較兩個字符串的大小C、求字符串的長度D、將字符串s接續(xù)到字符串t中標準答案:B知識點解析:“*s-*t”的輸出實際是比較兩個字符的ASCII碼值,比較兩個字符串的大小。32、有以下程序:#include<stdio-h>#include"string.h"voidfun(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的運行結(jié)果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc標準答案:A知識點解析:從main函數(shù)入手,定義了一個一維數(shù)組并賦初值,接著調(diào)用函數(shù)fun(),函數(shù)的功能是:比較數(shù)組中各元素的長度,按元素長度從小到大的順序排列元素,所以執(zhí)行“fun(ss,5)”函數(shù)后,“*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"}”,所以調(diào)用printf函數(shù)輸出ss[0],ss[4]的值分別為xy,aaaacc。33、若已定義:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,則對a數(shù)組元素不正確的引用是()。A、a[p-a]B、*(&a[i])C、p[i]D、a[10]標準答案:D知識點解析:此題考查對一維數(shù)組的引用。對于已定義的數(shù)組a[M],數(shù)組元素的正確引用必須滿足下標小于M且為正整數(shù)。選項D)中下標值出現(xiàn)溢出。34、以下選項中可用作C程序合法實數(shù)的是()。A、.1e0B、3.0e0.2C、E9D、9.12E標準答案:A知識點解析:C程序的合法實數(shù)有兩種表示形式,一種是小數(shù)形式,另一種是指數(shù)形式,對于用指數(shù)形式表示的實數(shù)來說,需要注意的是字母e或E之前必須要有數(shù)字,且字母e或E后面的指數(shù)必須為整數(shù),所以選項A)為正確答案。35、以下敘述中不正確的是()。A、預處理命令行都必須以#號開始,結(jié)尾不加分號B、在程序中凡是以#號開始的語句行都是預處理命令行C、C程序在執(zhí)行過程中對預處理命令進行處理D、預處理命令可以放在程序中的任何位置標準答案:C知識點解析:本題考查預處理命令的特點。編譯預處理命令的特點有:①為了區(qū)分一般的語句,預處理命令行都必須以≠}開始,結(jié)尾不加分號;②預處理命令可以放在程序中的任意位置;③在程序中凡是以#開始的語句都是預處理命令行。36、以下程序的輸出結(jié)果是()。#inelude<stdio.h>#defineF(x)2.84+x#definew(y)printf("%d",(int)(y))#defineP(y)w(y)main(){intx=2;P(F(5)*x);}A、12B、13C、14D、16標準答案:A知識點解析:本題考查帶參數(shù)的宏定義及相關運算?!癙(F(5)*x)=P(2.84+5*2)=P(12.84)”,調(diào)用“w(12.84)”,輸出“(int)(12.84)=12”。37、設有下面的定義:structst{inta;floatb;}d;int*p;要使P指向結(jié)構變量d中的a成員,正確的賦值語句是()。A、*p=d.a(chǎn);B、p=&a;C、p=d.a(chǎn);D、p=&d.a(chǎn);標準答案:D知識點解析:本題主要考查按結(jié)構數(shù)組元素方式引用結(jié)構成員。結(jié)構體變量的成員引用方法有3種:①結(jié)構體變量名.成員名;②指針變量名->成員名;③(*指針變量名).成員名。因為p是指針變量,所以應該將地址值賦給p。38、交換兩個變量的值,不允許用臨時變量,應該使用下列()位運算符。A、&B、^C、‖D、~標準答案:B知識點解析:按邏輯位運算的特定作用主要有3點:①用按位與運算將特定位清0或保留特定位:②用按位或運算將特定的位置設置為1;③用按位異或運算將某個變量的特定位翻轉(zhuǎn)或交換兩個變量的值。39、如果需要打開一個已經(jīng)存在的非空文件“FILE”并進行修改,正確的語句是()。A、fp=fopen("FILE","ftr");B、fp=fopen("FILE","a+");C、fp=fopen("FILE","w+");D、fp=fopen("FILE","r+");標準答案:D知識點解析:本題考查打開文件函數(shù)fopen(),打開文件函數(shù)fopen()的調(diào)用形式為:fp=fopen(文件名,文件使用方式)?!拔募褂梅绞健闭f明:方式“r”為以輸入方式打開一個文本文件;方式“a+”為以讀/寫方式打開一個文本文件,保留文件中原有的數(shù)據(jù);方式“w+”為以讀/寫方式建立一個新的文本文件;方式“r+”為以讀/寫方式打開一個文本文件。二、程序填空題(本題共1題,每題1.0分,共1分。)40、給定程序中,函數(shù)fun的作用是:不斷從終端讀入整數(shù),由變量a統(tǒng)計大于0的個數(shù),用變量C來統(tǒng)計小于0的個數(shù),當輸入0時結(jié)束輸入,并通過形參pa和pb把統(tǒng)計的數(shù)據(jù)傳回主函數(shù)進行輸出。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構!#include<stdio.h>voidfun(int*px,int*py){/**********found**********/int___1___;sCarlf("%d",&k);/**********found**********/while___2___{if(k>0)a++;if(k<0)c++;/**********found**********/___3___;}*px=a;*py=c;}main(){intx,y;fun(&x,&y);printf("x=%dy=%d\n",x,y);}標準答案:(1)a=0,c=0,k(2)(k!=0)(3)scanf("%d",&k);知識點解析:本題中函數(shù)fun的功能是不斷從終端讀入整數(shù),由變量a統(tǒng)計大于0的個數(shù),用變量c來統(tǒng)計小于0的個數(shù),當輸入0時結(jié)束輸入,然后通過形參pa和pb把統(tǒng)計的數(shù)據(jù)傳回主函數(shù)進行輸出。因為此函數(shù)對于數(shù)字的大小有不同的處理方式,所以根據(jù)題意首先要區(qū)別大于0、小于0和等于0的數(shù)字,然后進行統(tǒng)計和程序的進行。然后我們就能想到要使用條件語句來進行,while或者if都可,再利用自增運算符既可以統(tǒng)計,得到結(jié)果。三、程序修改題(本題共1題,每題1.0分,共1分。)41、給定程序MODI1.C中函數(shù)fun的功能是:將字符串中的字符按逆序輸出,但不改變字符串中的內(nèi)容。例如,若字符串為abed,則應輸出:dcba。請改正程序中的錯誤,使它能計算出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構!#include<stdio.h>/**********found**********/fun(chara){if(*a){fun(a+1);/**********found**********/printf("%c"*a);}}main(){chars[10]="abcd";printf(”處理前字符串=%s\n處理后字符串=",s);fun(s);printf("\n");}標準答案:(1)viidfun(char*a)(2)printf("%c",*a);知識點解析:本題中函數(shù)的功能是將字符串中的內(nèi)容逆序。題干中給出的fun函數(shù)通過遞歸調(diào)用自身,實現(xiàn)字符串的逆序。(1)主函數(shù)中“fun(s);”語句中的s是數(shù)組名,所以在fun函數(shù)中參數(shù)的定義應該是指針型,“fun(chara)”改為“voidfun(char*a)”。(2)printf函數(shù)的調(diào)用形式是:printf(格式字符串,輸出項表),在格式字符串和輸出項表之間有“,”,因此,第二個標識處應該是“printf("%c",*a);”。四、程序設計題(本題共1題,每題1.0分,共1分。)42、請編寫函數(shù)fun:在形參指針所指的4個整數(shù)中找出最大值和最小值,最大的放在a中,最小的放在d中。注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。#inolude<stdio.h>voidNONO();voidfun(int*a,int*b,int*c,int*d){}main(){inta,b,c,d;printf("請輸入4個整數(shù):");scanf("%d%d%d%d",&a,&b,&c,&d);printf("原始順序:%d,%d,%d,%d\n",a,b,c,d);fun(&a,&b,&C,&d);printf("處理后:%d,%d,%d,%d\n",a,b,c,d);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關閉文件。*/FILE*fp,*wf;inti,a,b,c,d;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++){facanf(fp,"%d%d%d%d",&a,&b,&c,&d);fun(&a,&b,&c,&d);fprintf(wf,"a=%d,d=%d\n",a,d);}fclose(fp);fclsee(wf);}標準答案:voidfun(int*a,int*b,int*c,int*d){intt;if(*a<*b){t=*a;*a=*b;*b=t;}if(*a<*c){t=*a;*a=*c;*c=t;}if(*a<*d){t=*a;*a=*d;*d=t;}if(*b<*c){t=*b;*b=*c;*c=t;}if(*b<*d){t=*b;*b=*d;*d=t;}if(*c<*d){t=*c;*c=*d;*d=t;}}知識點解析:本題中的函數(shù)功能主要是在形參指針所指的4個整數(shù)中找出最大值和最小值,最大的放在a中,最小的放在d中。這個題目類似于排序,但是又不是嚴格的排序,只要重新排序最大值和最小值的位置即可。所以類似于排序,這一題需要相互比較4個數(shù)字,然后進行位置的調(diào)換?;舅悸肪褪潜容^相鄰的兩個數(shù)字,如果靠近a的數(shù)字比靠近d的數(shù)字要大,就不用進行交換,如果靠近a的數(shù)字比靠近d的數(shù)字小,就進行交換,這樣的話最大的數(shù)字就會慢慢交換到a的位置,然后最小的數(shù)字就會慢慢交換到d的位置。所以根據(jù)分析我們就要用到if語句來進行判斷和處理,只要經(jīng)過幾輪的if判斷大小然后交換,就能實現(xiàn)題目條件所給出的位置的重置,得到要求的結(jié)果。首先在主函數(shù)main中我們需要的就是四個數(shù)字,這四個數(shù)字需要手動輸入,件程序代碼第13~15行,四個數(shù)字輸入完城后就可以進入fun函數(shù)進行數(shù)據(jù)處理了。進入到fun函數(shù)中,只要從a到d進行比較,按照一開始的規(guī)則即可,如果a大于b,不變,比較a與c,若a小b,a與b交換位置,交換過后a就大于b了,這樣就進行a與c的比較;a與c的比較同理,這樣的循環(huán)比較,就能發(fā)現(xiàn),每比較一次,較大的數(shù)字就能交換到a的位置,較小的數(shù)字就離a越來越遠,也就是到了d的位置,這樣就完成了題目所給出的要求了,最大的數(shù)字放在a中,最小的數(shù)字放在d中。當新的排序排好后,就可以返回主函數(shù)進行輸出了。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共39題,每題1.0分,共39分。)1、設已有定義:floatx;,則以下對指針變量p進行定義且賦初值的語句中正確的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;標準答案:B知識點解析:指針是用來存放地址的變量,用(類型名*指針變量名)的形式定義。賦值時應將某個變量地址即&x賦給指針變量,所以選擇B。2、設已有定義:floatx;,則以下對指針變量p進行定義且賦初值的語句中正確的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;標準答案:B知識點解析:指針是用來存放地址的變量,用(類型名*指針變量名)的形式定義。賦值時應將某個變量地址即&x賦給指針變量,所以選擇B。3、—棵二叉樹的前序遍歷結(jié)果是ABCEDF,中序遍歷結(jié)果是CBAEDF,則其后序遍歷的結(jié)果是()。A、DBACEFB、CBEFDAC、FDAEBCD、DFABEC標準答案:B知識點解析:由于該二叉樹的前序遍歷結(jié)果是ABCEDF,顯然A結(jié)點為根結(jié)點,所以后序遍歷時A結(jié)點是最后遍歷的,其后序遍歷的結(jié)果為CBEFDA。4、以下選項中,不合法的C語言用戶標識符是()。A、a_bB、AaBcC、a--bD、_1標準答案:C知識點解析:C語言規(guī)定,變量命名必須符合標識符的命名規(guī)則,C選項中包含了非法字符“一”,所以錯誤。標識符由字母、數(shù)字或下劃線組成,且第一個字符必須是大小寫英文字母或者下劃線,而不能是數(shù)字。5、設有定義:inta=1,b=2,c=3;,以下語句中執(zhí)行效果與其他三個不同的是()。A、if(a>b)c=a,a=b,b=c;B、if(a>b){c=a,a=b,b=c}C、if(a>b)c=a;a=b;b=c;D、if(a>b){c=a;a=b;b=c}標準答案:C知識點解析:C語言中if語句后面只跟一條語句時,可以省略大括號。即if語句僅作用于緊隨其后的那條語句或者是復合語句的內(nèi)容,所以A項執(zhí)行三條語句組成的復合語句;BD兩項執(zhí)行大括號中的三條語句;而C項只執(zhí)行c=a;。6、C語言中規(guī)定,程序中各函數(shù)之間()。A、既允許直接遞歸調(diào)用也允許間接遞歸調(diào)用B、不允許直接遞歸調(diào)用也不允許間接遞歸調(diào)用C、允許直接遞歸調(diào)用不允許間接遞歸調(diào)用D、不允許直接遞歸調(diào)用允許間接遞歸調(diào)用標準答案:A知識點解析:本題考查函數(shù)調(diào)用的基本概念。在函數(shù)調(diào)用時,只要符合函數(shù)的使用,程序中的各個函數(shù)間既可以直接調(diào)用其他函數(shù),也可以遞歸調(diào)用其自身。7、以下不構成無限循環(huán)的語句或語句組是()。A、n=0;do{++n;}while(n<=0);B、n=0;while(1){n++;}C、n=10;while(n);{n--;}D、for(n=0,i=1;;i++)n+=i;標準答案:A知識點解析:選項A中do后面的語句只執(zhí)行了一次便結(jié)束了循環(huán);B選項中條件while(1)永遠成立,所以是死循環(huán);C選項中n的值為10,而循環(huán)體為空語句,所以while(n)永遠為真,進入死循環(huán);D選項中for語句第二個表達式為空,所以沒有判別條件,進入死循環(huán)。8、有以下程序:#include<stdio.h>main(){FlLE*pf;char*s1="China",*s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf);/*文件位置指針回到文件開頭*/fwrite(s1,5,1,pf);fclose(pf);}以上程序執(zhí)行后abc.dat文件的內(nèi)容是()。A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina標準答案:B知識點解析:本題考查函數(shù)fwrite的使用。函數(shù)fwrite的調(diào)用形式為:intfwrite(char*pt,unsignedn,F(xiàn)ILE*fp):其功能是把pt所指向的n*size個字節(jié)輸出到fp所指文件中,第二次調(diào)用該函數(shù)時,從文件的第一個位置開始寫入,之前已有的會被覆蓋掉,如果第二次寫入的長度沒有第一次的長,則后面短出的部分保留原樣。9、關系模型允許定義3類數(shù)據(jù)約束,下列不屬于數(shù)據(jù)約束的是()。A、實體完整性約束B、參照完整性約束C、屬性完整性約束D、用戶自定義的完整性約束標準答案:C知識點解析:關系模型允許3類數(shù)據(jù)約束,它們是:實體完整性約束該約束要求關系的主鍵中屬性值不能為空值,這是數(shù)據(jù)庫完整性的最基本要求。參照完整性約束該約束是關系之間相關聯(lián)的基本約束,它不允許關系引用不存在的元組:即在關系中的外鍵要么是所關聯(lián)關系中實際存在的元組,要么就為空值。用戶定義的完整性約束用戶定義的完整性就是針對某一具體關系數(shù)據(jù)庫的約束條件,它反映某一具體應用所涉及的數(shù)據(jù)必

溫馨提示

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

評論

0/150

提交評論