




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級(C語言)機試模擬試卷2(共9套)(共338題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共38題,每題1.0分,共38分。)1、下列敘述中正確的是()。A、線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的B、線性表的鏈式存儲結構所需要的存儲空間一般要多于順序存儲結構C、線性表的鏈式存儲結構所需要的存儲空間一般要少于順序存儲結構D、線性表的鏈式存儲結構與順序存儲結構在存儲空間的需求上沒有可比性標準答案:B知識點解析:線性鏈式存儲結構中每個節(jié)點都由數據域與指針域兩部分組成,增加了存儲空間,所以一般要多于順序存儲結構。2、下列敘述中正確的是()。A、棧是一種先進先出的線性表B、隊列是一種后進先出的線性表C、棧與隊列都是非線性結構D、以上三種說法都不對標準答案:D知識點解析:棧是一種先進后出的線性表,隊列是一種先進先出的線性表,棧與隊列都是線性結構。3、軟件測試的目的是()。A、評估軟件可靠性B、發(fā)現并改正程序中的錯誤C、改正程序中的錯誤D、發(fā)現程序中的錯誤標準答案:D知識點解析:軟件測試是為了發(fā)現錯誤而執(zhí)行程序的過程,測試要以查找錯誤為中心,而不是為了演示軟件的正確功能。不是為了評估軟件或改正錯誤。4、在軟件開發(fā)中,需求分析階段產生的主要文檔是()。A、軟件集成測試計劃B、軟件詳細設計說明書C、用戶手冊D、軟件需求規(guī)格說明書標準答案:D知識點解析:需求分析階段的工作可以概括為:需求獲取、需求分析、編寫需求規(guī)格說明書、需求評審四個方面。所以選擇D。5、軟件生命周期是指()。A、軟件產品從提出、實現、使用維護到停止使用退役的過程B、軟件從需求分析、設計、實現到測試完成的過程C、軟件的開發(fā)過程D、軟件的運行維護過程標準答案:A知識點解析:通常,將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為軟件生命周期。也就是說,軟件產品從考慮其概念開始,到該軟件產品不能使用為止的整個時期都屬于軟件生命周期。6、面向對象方法中,繼承是指()。A、一組對象所具有的相似性質B、一個對象具有另一個對象的性質C、各對象之間的共同性質D、類之間共享屬性和操作的機制標準答案:D知識點解析:繼承是面向對象的方法的一個主要特征,是使用已有的類的定義作為基礎建立新類的定義技術。廣義地說,繼承是指能夠直接獲得已有的性質和特征,而不必重復定義它們,所以說繼承是指類之間共享屬性和操作的機制。7、層次型、網狀型和關系型數據庫劃分原則是()。A、記錄長度B、文件的大小C、聯系的復雜程度D、數據之間的聯系方式標準答案:D知識點解析:層次模型的基本結構是樹形結構,網狀模型是一個不加任何條件限制的無向圖,關系模型采用二維表來表示,所以三種數據庫的劃分原則是數據之間的聯系方式。8、一個工作人員可以使用多臺計算機,而一臺計算機可被多個人使用,則實體工作人員與實體計算機之間的聯系是()。A、一對一B、一對多C、多對多D、多對一標準答案:C知識點解析:因為一個人可以操作多個計算機,而一臺計算機又可以被多個人.用,所以兩個實體之間是多對多的關系。9、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、差C、交D、并標準答案:B知識點解析:關系T中的元組是R關系中有而S關系中沒有的元組的集合,所以進行的是差的運算。10、計算機能直接執(zhí)行的程序是()。A、源程序B、目標程序C、匯編程序D、可執(zhí)行程序標準答案:D知識點解析:計算機能直接執(zhí)行的程序是二進制的可執(zhí)行程序,擴展名為.exe。所以選擇D選項。11、以下敘述中正確的是()。A、C語言規(guī)定必須用main作為主函數名,程序將從此開始執(zhí)行B、可以在程序中由用戶指定任意一個函數作為主函數,程序將從此開始執(zhí)行C、C語言程序將從源程序中第一個函數開始執(zhí)行D、main的各種大小寫拼寫形式都可以作為主函數名,如MAIN,Main等標準答案:A知識點解析:C語言中的主函數只能是main()函數,不能任意指定,所以B選項錯誤。C語言從主函數main()開始,到主函數main()結束,所以C選項錯誤。主函數必須寫成小寫的main,不能混淆大小寫,所以D選項錯誤。12、以下選項中可用做C程序合法實數的是()。A、3.0e0.2B、.1e0C、E9D、9.12E標準答案:B知識點解析:A選項中e后面的指數必須為整數,所以錯誤。C語言規(guī)定,E之前必須要有數字,所以C選項錯誤。E后面必須要有數字,且必須為整數,所以D選項錯誤。13、下列定義變量的語句中錯誤的是()。A、int_int;B、doubleint_;C、charFor;D、noatUS$:標準答案:D知識點解析:C語言規(guī)定,變量命名必須符合標識符的命名規(guī)則。D選項中包含了非法字符“$”,所以錯誤。標識符由字母、數字或下劃線組成,且第一個字符必須是大小寫英文字母或者下劃線,而不能是數字。大寫字符與小寫字符被認為是兩個不同的字符,所以For不是關鍵字for。14、表達式:(int)((double)9/2)-9%2的值是()。A、0B、3C、4D、5標準答案:B知識點解析:先將整型數據9強制轉換成double型,然后除以2得到的結果與double型保持一致,即為4.5,然后將4.5強制轉換成整型數據4,然后計算9%2的值為1,最后計算4-1的值為3,所以選擇B選項。15、設變量均已正確定義,若要通過scanf(’’%d%c%d%c’’,&a1,&c1,&a2,&c2);語句為變量a1和a2賦數值10和20,為變量c1和c2賦字符x和y。以下所示的輸入形式中正確的是()。(注:□代表空格字符)A、10□X<回車>20□Y<回車>B、10□X20□Y<回車>C、10X<回車>20Y<回車>D、10□X□20□Y<回車>標準答案:C知識點解析:輸入數據的格式必須與scanf()的格式控制串完全匹配,如果A、B、C選項中在數字10后面均輸入了空格,則會將空格賦給變量c1,而不是把x賦給c1,所以選擇C選項。16、以下選項中不能作為C語言合法常量的是()。A、0.1e+6B、’cd’C、’’\a’’D、’\011’標準答案:B知識點解析:要想表示字符串常量應該用雙引號表示,即’’cd’’,單引號用于表示字符常量,所以B選項中的表示方法錯誤。17、if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是()。A、必須是邏輯值B、必須是整數值C、必須是正數D、可以是任意合法的數值標準答案:D知識點解析:if語句中的表達式可以是任意合法的數值,如常量、變量表達式。所以D選項正確。18、有如下嵌套的if語句:if(a<b)if(a<c)k=a;elsek=c;elseif(b<c)k=b;elsek=c;以下選項中與上述if語句等價的語句是()。A、k=(a<b)?((b<c)?a:b):((b>c)?b:c);B、k=(a<b)?((a<c)?a.c):((b<c)7.b:c);C、k=(a<b)?a:b;k=(b<c)?:b:c;D、k=(a<b)?a:b;k=(a<c)?a:c;標準答案:B知識點解析:題目中嵌套語句的含義是當a<b且a<c成立,則將a的值賦給k。如果a<b成立而a<c不成立將c的值賦給k。如果a<b不成立而b<c成立,將b的值賦給k。如果a<b不成立且b<c也不成立,將c的值賦給k。判斷條件表達式只有B選項可以表示這個含義。19、有以下程序:#include<stdio.h>main(){intk=5;while(--k)printf(’’%d’’,k-=3);printf(’’\n’’);}程序執(zhí)行后的輸出結果是()。A、1B、2C、4D、死循環(huán)標準答案:A知識點解析:一一k先自減再使用,所以第一次判斷條件即為while(4),條件為真,執(zhí)行打印k的值k=4-3,結果為1;第二次判斷條件即為while(0),條件為假,結束循環(huán),打印回車換行符。所以選擇A選項。20、有以下程序:#include<stdio.h>main(){inti,j;for(i=3;i>=1;i--){for(i=1;j<=2;j++)printf(’’%d’’,i+j);printf(’’\n’’);}}程序運行后的輸出結果是()。A、432543B、453423C、233445D、233423標準答案:B知識點解析:第一次執(zhí)行外循環(huán),i的值為3,第一次執(zhí)行內循環(huán)j的值為1,j<=2條件成立,打印i+j的值,即4;第二次執(zhí)行內循環(huán)j的值為2,j<=2條件成立,打印i+j的值,即5;再判斷條件不成立,打印回車換行符,跳出內循環(huán)。第二次執(zhí)行外循環(huán),i的值為2,內循環(huán)的執(zhí)行同第一次一樣,所以打印3和4,打印回車換行,結束內循環(huán)。第三次執(zhí)行外循環(huán)i的值為1,同理內循環(huán)中打印2和3,打印回車換行符,結束內循環(huán)。21、有以下程序:#include<stdio.h>main(){intk=5,n=0;do{switch(k){ease1:ease3:n+=1;k--;break;default:n=0;k--;ease2:ease4:n+=2;k--;break;}printf(’’%d’’,n);}while(k>0&&n<5);}程序運行后的輸出結果是()。A、02356B、0235C、235D、2356標準答案:C知識點解析:k的值為5,逐個對case語句進行匹配,均不匹配,執(zhí)行default下的語句n=0;k--。再執(zhí)行case2:case4:后面的語句n+=2;k--;。執(zhí)行break語句跳出switch判斷,打印n的值,即2。經過第一次循環(huán)后,k的值為3,然后進行k>0&&n<5條件判斷為真。第二次執(zhí)行循環(huán)體,執(zhí)行case3:后面的語句n+=1;k--;。再執(zhí)行break語句跳出循環(huán),此時打印n的值3,此時k的值為2。第三次執(zhí)行循環(huán)體k的值為2,滿足條件,執(zhí)行case2:case4:后面的語句n+=2;k--;。執(zhí)行break語句跳出循環(huán)體,打印n的值5。此時n不滿足條件k>0&&n<5,所以結束循環(huán)。整個程序的打印結果為235。22、以下關于return語句的敘述中正確的是()。A、一個自定義函數中必須有一條return語句B、一個自定義函數中可以根據不同情況設置多條return語句C、定義成void類型的函數中可以有帶返回值的return語句D、沒有return語句的自定義函數在執(zhí)行結束時不能返回到調用處標準答案:B知識點解析:在函數中允許有多個return語句,但每次調用只能有一個return語句被執(zhí)行,因此只能返回一個函數值。定義成void類型的函數,不允許從該函數取得返回值,也不允許使用return語句,C選項描述錯誤。沒有return語句的函數在執(zhí)行到函數的最后一條語句后會自動返回到調用處,A、D選項描述錯誤。因此B選項正確。23、以下程序段完全正確的是()。A、int*p;scanf(’’%d’’,&p);B、int*p;scanf(’’%d’’,p);C、intk,*p=&k;scanf(’’%d’’,p);D、intk,*p;*p=&k;scanf(’’%d’’,p);標準答案:C知識點解析:A選項中錯在沒有對指針進行初始化,是無效指針,并且在scanf(’’%d’’,&p)中無須再進行取地址操作;B選項中沒有對指針進行初始化,是無效指針;D選項中語句*p=&k;的左端*p是指針所指內存空間的值,&k是地址,應為p=&k。因此C選項正確。24、設有定義:doublea[10],*s=a;以下能夠代表數組元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3標準答案:B知識點解析:語句*s=a;表示指針變量s指向一維數組a的首地址。a[3]表示引用數組a的第4個元素,*(s+i)表示引用指針s所指數組a的第i+1個元素,選項A、C、D的表示方法錯誤,只有B選項正確。25、有以下程序:#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]);}程序運行后的輸出結果是()。A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,標準答案:A知識點解析:本題考查的是函數的地址調用,將數組名作為數組首地址進行傳遞,然后取首個數組元素值進行加1運算,循環(huán)5次。因此A選項正確。26、有以下程序:#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=l;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm:}main(){inta[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf(’’%d\n’’,fun(a,4,0));}程序運行后的輸出結果是()。A、4B、34C、31D、32標準答案:C知識點解析:本題重點考察二維數組名作為實參進行參數傳遞,在主函數中調用了fun函數,實參為二維數組名a和兩個整數4、0,這樣對應定義:fun函數首部有三種形式,這里采用了第一種形式——行指針,這樣在fun函數對s[i][j]進行操作實際上就是對主函數中的a[i][j]進行操作,再分析fun函數的作用便可知,是求二維數組第0列中最大的那個元素。因此C選項正確。27、以下選項中正確的語句組是()。A、char*s;s={’’BOOK!’’};B、char*s;s=’’BOOK!’’;C、chars[10];s=’’BOOK!’’;D、chars[];s=’’BOOK!’’;標準答案:B知識點解析:A選項去掉大括號就正確了;C選項和D選項應在定義時賦初值。因此B選項正確。28、若有定義語句:char*s1=’’OK’’,*s2=’’ok’’;以下選項中,能夠輸出“OK”的語句是()。A、if(strcmp(s1,s2)!=0)puts(s2);B、if(strcmp(s1,s2)!=0)puts(s1);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);標準答案:B知識點解析:strcmp(s1,s2)是字符串比較函數,比較規(guī)則是兩個字符串自左向右逐個字符相比(按照ASCII碼值大小),以第一個不相同的字符的大小作為比較結果。因為’0’<’o’,所以strcmp(s1,s2)為負值,只有B選項正確。29、有以下程序:#include<stdio.h>voidfun(char**p){++p:printf(’’%s\n’’,*p);}main(){char*a[]={’’Morning’’,’’Afternoon’’,’’Evening’’,’’Night’’};fun(a);}程序運行后的輸出結果是()。A、AfternoonB、fternoonC、MorningD、oming標準答案:A知識點解析:本題主函數中定義了一個指針數組a,可以將它看成一個以字符指針為元素的一維數組。和一般的一維數組名能賦給同類型指針變量一樣,該字符指針數組也可以賦給指向字符指針的指針,所以數組名a可以用做函數fun()的實參。在fun()函數中,++p操作使形參p往后移動一個字符指針的位置,即指針a[1]的位置。故最后通過printf()函數輸出的字符串為“Afternoon”。因此A選項正確。30、有以下程序,程序中庫函數islower(ch)用以判斷ch中的字母是否為小寫字母:#include<stdio.h>#include<ctype.h>voidfun(char*p){inti=0;while(p[i]){if(p[i]==’’&&islower(p[i-1]))p[i-1]=p[i-1]-’a’+’A’;i++;}}main(){chars1[100]=’’abcdEFG!’’;fun(s1);printf(’’%s\n’’,s1);}程序運行后的輸出結果是()。A、abcdEFg!B、AbCdEFg!C、abcdEFG!D、aBcDEFG!標準答案:D知識點解析:調用fun函數后,實參數組名s1傳給形參指針p,p也指向數組s1。fun函數的功能是遍歷字符數組中的所有字符,如果某一個字符是空格并且前一個字符是小寫字母的話,就把前一個字符轉換為大寫。程序中語句p[i-1]=p[i-]-’a’+’A’;即p[i-1]=p[i-1]-32,意思是將p[i-1]中的字符轉換為大寫。因此D選項正確。31、有以下程序:#include<stdio.h>intf(intx){inty;if(x==0||x==1)return(3);y=x*x-f(X-2);returny;}main(){intz;z=f(3);printf(’’%d\n’’,z);}程序運行后的輸出結果是()。A、0B、9C、6D、8標準答案:C知識點解析:主函數中調用f函數,同時將數值3傳遞給變量x,執(zhí)行條件不滿足條件if(x==0||x==1);跳過return(3);,直接執(zhí)行語句y=x*x-f(x-2);這里f(x-2)為函數的遞歸調用,再次調用f函數,此時x=1,判斷條件成立,返回3給f(1),y=3*3-3=6,最后將6返回主函數,并進行輸出。因此C選項正確。32、有以下程序:#include<stdio.h>intfun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf(’’%d\n’’,s);}程序執(zhí)行后的輸出結果是()。A、55B、50C、45D、60標準答案:D知識點解析:內部靜態(tài)變量是始終存在的,當函數被調用退出后,內部靜態(tài)變量會保存數據,再次調用該函數時,以前調用時的數值仍然保留著。fun(a,5)的值是15,再次調用后sum=15,所以fun(b,4)=45,s=45+15=60。因此D選項正確。33、有以下結構體說明、變量定義和賦值語句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則以下scanf函數調用語句有錯誤的是()。A、scanf(’’%s’’,s[0].name);B、scanf(’’%d’’,&s[0].age);C、scanf(’’%c’’,&(ps->SeX));D、scanf(’’%d’’,ps->age);標準答案:D知識點解析:本題考查結構體的相關知識,題目中需要輸入一個變量,scanf要求參數為指針,而D選項中ps->age為一個變量,不是指針,所以錯誤。34、若有以下語句:typedefstructS{intg;charh;}T;以下敘述中正確的是()。A、可用S定義結構體變量B、可用T定義結構體變量C、S是struct類型的變量D、T是structS類型的變量標準答案:B知識點解析:本題考查typedef重新聲明一種結構體類型,那么T為結構體類型,而不是結構體變量,所以B選項正確。35、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};structAf(structAt);main(){structAa={1001,’’ZhangDa’’,1098.0};a=f(a);printf(’’%d,%s,%6.1f\n’’,a.a,a.b,a.c);}structAf(structAt){t.a=1002:strcpy(t.b,’’ChangRong’’);t.c=1202.0:returnt;}程序運行后的輸出結果是()。A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0標準答案:B知識點解析:本題考查結構體變量的引用以及作為函數參數,題目雖然看似復雜,其實比較容易,f函數的參數是結構體變量,然后對參數重新賦值并返回,所以該題目的答案為B選項。36、設有宏定義:#defineIsDIV(k,n)((k%n==1)?1:0)且變量m已正確定義并賦值,則宏調用:IsDIV(m,5)&&IsD[V(m,7)為真時所要表達的是()。A、判斷m是否能被5和7整除B、判斷m被5和7整除是否都余1C、判斷m被5或者7整除是否余1D、判斷m是否能被5或者7整除標準答案:B知識點解析:本題考查邏輯運算符的相關概念,邏輯與若要為真,那么兩邊都要為真,即m都能被5和7整除都余1,所以選項B正確。37、有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3,x;X=(a∧b)&c;printf(’’%d\n’’,x);}程序運行后的輸出結果是()。A、3B、1C、2D、0標準答案:A知識點解析:本題考查位運算符以及相關運算,∧為按位或,&為按位與,那么a∧b為3,再與c按位與仍然為3,所以答案為A選項。38、有以下程序:#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen(’’d2.dat’’,’’w’’);fprintf(fp,’’%d%d%d\n’’,a[0],a[1],a[2]);fprintf(fp,’’%d%d%d\n’’,a[3],a[4],a[5]);fclose(fp);fp=fopen(’’d2.dat’’,’’r’’);fscanf(fp,’’%d%d’’,&k,&n);printf(’’%d%d\n’’,k,n);fclose(fp);}程序運行后的輸出結果是()。A、12B、14C、1234D、123456標準答案:D知識點解析:fprintf()函數向文本文件輸出數據,將輸出的內容按格式輸出到硬盤的文本文件中。執(zhí)行兩次fprintf后,文件中的內容為“123456”,所以D選項正確。二、程序填空題(本題共1題,每題1.0分,共1分。)39、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數fun的功能是:從形參ss所指字符串數組中,刪除所有串長超過k的字符串,函數返回剩余字符串的個數。ss所指字符串數組中共有N個字符串,且串長小于M。請在程序的下劃線處填入正確的內容并將下劃線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/**********found**********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/**********found**********/if(len<【2】)/**********found**********/strcpy(ss[j++],【3】);}returnj;}main(){charx[N][M]={’’Beijing’’,’’Shanghai’’,’’Tianjin’’,’’Nanjing’’,’’Wuhan’’};inti,f;printf(’’\nTheoriginalstring\n\n’’);for(i=0;i<N;i++)puts(x[i]);printf(’’\n’’);f=fun(x,7);printf(’’Thestringwitchlengthislessthanorequalto7:\n’’);for(i=0;i<f;i++)puts(x[i]);printf(’’\n’’);}標準答案:(1)N(2)k(3)ss[i]知識點解析:填空1:for循環(huán)語句作用是遍歷字符串數組中的每一個字符串,所以循環(huán)變量i的循環(huán)條件是i<N。填空2:題目要求刪除串長度小于k的字符串,所以if條件語句的條件表達式是:len<=k。填空3:通過字符串拷貝函數將串長不大于k的字符串另存,并記錄個數。字符串拷貝函數strcpy,其格式為:strcpy(字符數組名1,字符數組名2)功能:把字符數組2中的字符串拷貝到字符數組1中。字符串結束標識’\0’也一同拷貝。字符數名2,也可以是一個字符串常量。這時相當于把一個字符串賦予一個字符數組。三、程序修改題(本題共1題,每題1.0分,共1分。)40、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數fun的功能是:從整數10到55之間,查找能被3整除且有一位上的數值是5的數,把這些數放在b所指的數組中,這些數的個數作為函數值返回。規(guī)定函數中a1放個位數,a2放十位數。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不得增行或刪行,也不得更改程序的結構!#include<stdio.h>intfun(int*b){intk,a1,a2,i=0;for(k=10;k<=55;k++){/**********found**********/a2=k/10;al=k-a2*10:if((k%3==0&&a2==5)||(k%3==0&&a1==5)){b[i]=k;i++;}}/**********found**********/returnk:}main(){inta[100],k,m;m=fun(a);printf(’’Theresu]tis:\n’’);for(k=0;k<m;k++)printf(’’%4d’’,a[k]);printf(’’\n’’);}標準答案:(1)a2=k/10;(2)returni;知識點解析:(1)a2存放十位數,所以是a2=k/10,此處是一個書寫錯誤,程序中將數字0寫成字母0。(2)根據題意,要返回能被3整除的數的個數,從循環(huán)體中可以知道其個數是由i來計算的,所以返回的是i。四、程序設計題(本題共1題,每題1.0分,共1分。)41、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,編寫函數fun,其功能是:求ss所指字符串中指定字符的個數,并返回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3。注意:部分源程序在文件PROG1.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#include<stdio.h>#include<string.h>#defineM81intfun(char*ss,charc){}main(){chara[M],ch;voidNONO();printf(’’\nPleaseenterastring:’’);gets(a);printf(’’\nPleaseenterachar:’’);ch=getchar();printf(’’\nThenumberofthecharis:%d\n’’,fun(a,ch));NONO();}voidNONO(){/*本函數用于打開文件,輸入測試數據,調用fun函數,輸出數據,關閉文件。*/inti;FILE*rf,*wf;chara[M],b[M],ch;rf=fopen(’’in.dat’’,’’r’’);wf=fopen(’’out.dat’’,’’w’’);for(i=0;i<10;i++){fscanf(rf,’’%s’’,a);fscanf(rf,’’%s’’,b);ch=,lcb:fprintf(wf,’’%c=%d\n’’,ch,fun(a,ch));}fclose(rf);fclose(wf);}標準答案:intfun(char*ss,char*c){inti=0:for(;*ss!=’\0’;ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數*/returni;}知識點解析:從字符串中查找指定字符,需要使用循環(huán)判斷結構,循環(huán)語句用來遍歷字符串,循環(huán)條件為字符串沒有結束,即當前字符不是’\0’,判斷語句用來判斷當前字符是否為指定字符。最后返回指定字符的個數。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列不合法的用戶標識符是()。A、j2_KEYB、DoubleC、4dD、_8_標準答案:C知識點解析:在C語言程序中,合法標識符的命名規(guī)則是:標識符可以由字母、數字和下劃線組成,并且第一個字符必須是字母或下劃線。2、若變量都己正確說明,則以下程序段輸出結果為()。#inc1udemain(){chara=’a’;intb=2;printf(a>b?"***a=%d":"###b=%d",a,b);}A、***a=3B、###b=3C、***a=3##b=5D、全部錯誤標準答案:D知識點解析:本題考查printf函數的格式和三目運算符“?:”的使用。printf函數中格式說明符之前插入的任何字符都原樣輸出。本題中“a>b”為真,所以返回“***a=97”。3、有以下程序:#include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序運行后的輸出結果是()。A、3344B、2050C、3040D、0304標準答案:C知識點解析:main函數的函數體是一個for循環(huán)語句,for循環(huán)中包含一個switch語句,如果判斷條件為0,則進入第二個switch語句,如果判斷語句為1,則執(zhí)行“a[i]=0”,最后將數組按順序輸出。所以程序功能是將數組的偶數項設為O,奇數項如果為奇數則減1,為偶數就加1,最后得到結果。4、為了使模塊盡可能獨立,要求()。A、內聚程度要盡量高,耦合程度要盡量強B、內聚程度要盡量高,耦合程度要盡量弱C、內聚程度要盡量低,耦合程度要盡量弱D、內聚程度要盡量低,耦合程度要盡量強標準答案:B知識點解析:模塊獨立性是指每個模塊只完成系統(tǒng)要求的獨立的子功能,并且與其他模塊的聯系最少且接口簡單。耦合性與內聚性是模塊獨立性的兩個定性標準,耦合與內聚是相互關聯的。在程序結構中,各模塊的內聚性越強,則耦合性越弱。一般較優(yōu)秀的軟件設計,應盡量做到高內聚,低耦合,即減弱模塊之間的耦合性和提高模塊內的內聚性,有利于提高模塊的獨立性。5、以下敘述中正確的是()。A、C程序中注釋部分可以出現在程序中任意合適的地方B、C程序的書寫格式是固定的,每行只能寫一條語句C、構成C程序的基本單位是函數,所有函數名都可以由用戶命名D、在對C語言程序進行編譯時,可以發(fā)現注釋行中的拼寫錯誤標準答案:A知識點解析:本題考查的是C語言程序設計的初步知識。選項A),程序中/*……*/表示注釋部分,注釋只是給人看的,對程序的編譯和運行不起作用,可以在程序中的任何位置;選項B),C語言的書寫格式自由,一行可以寫多條語句,一條語句也可以寫在不同行上;選項C),一個C程序中必須有且只能有一個由“main”命名的主函數,其他函數由用戶自行命名;選項D),程序的注釋僅僅是提供閱讀之用,并不參與程序的編譯,所以編譯也就不會發(fā)現注釋行中的錯誤。6、以下選項中,能用作用戶標識符的是()。A、voidB、8_8C、_0_D、unsigned標準答案:C知識點解析:標識符是由若干個字符組成的字符序列,用來命名程序的一些實體。C語言定義標識符應遵循以下六種規(guī)則:①標識符由字母、數字或下畫線組成;②第一個字符必須是字母或下畫線;③標識符最多由274個字符組成;④在標識符中嚴格區(qū)分大小寫字母;⑥關鍵字不能作為自定義的標識符在程序中使用。7、若有以下定義:structtt{charname[10];charsex;}aa={"aaaa",,F,},*p=&aa;則錯誤的語句是()。A、scanf("%c",aa.sex);B、aa.sex=getchar();C、printf("%c\n",(p).sex);D、printf("%c\n",p->sex);標準答案:A知識點解析:sex是一個char類型變量,不是地址,A項應為scanf("%c",&aa.sex);。8、以下選項中正確的語句組是()。A、chars[];s="HELLO!";B、char*s:s={"HELLO!"}:C、chars[10];s="HELLO!";D、char*s:s="HELLO!";標準答案:D知識點解析:本題考查數組和字符串的賦值。選項A)中數組s沒有明確其大小就賦值是錯誤的。選項B)中不能有大括號,選項C)中的寫法應該為{’H’’E’’L’’L’’O’’!’}。9、C源程序中不能表示的數制是()。A、二進制B、八進制C、十進制D、十六進制標準答案:A知識點解析:C語言中整型常量可以用十進制數、八進制數、十六進制數來表示。雖然計算機只能識別二進制數,但二進制不能用來表示整型常量。10、以下選項中,當x為大于l的奇數時,值為0的表達式是()。A、x%2==0B、x/2C、x%2!1=0D、x%2==1標準答案:A知識點解析:算術運算符的優(yōu)先級高于關系運算符的優(yōu)先級,所以當x為大于1的奇數時,A選項的值為假,即0。B選項的值為不定值,但絕對不是0。C選項的值為真,即1。D選項的值為真,即1。11、設有條件表達式:(EXP)?i++;j--,則以下表達式中(EXP)完全等價的是()。A、(EXP==0)B、(EXP!=0)C、(EXP==1)D、(EXP!=1)標準答案:B知識點解析:條件表達式的形式為:“表達式1?表達式2:表達式3”。其含義為:當“表達式1”的值為非零時,求出“表達式2”的值,此時“表達式2”的值就是整個條件表達式的值;當“表達式1”的值為零時,求出“表達式3”的值,此時“表達式3”的值就是整個條件表達式的值。對于本題來說,當表達式EXP為非0值時條件成立,即執(zhí)行語句i++;當EXP等于0時,執(zhí)行語句j-;這等同于條件表達式“(EXP!=0)?i++j++;”。12、下列關于數據庫設計的敘述中,正確的是()。A、在需求分析階段建立數據字典B、在概念設計階段建立數據字典C、在邏輯設計階段建立數據字典D、在物理設計階段建立數據字典標準答案:A知識點解析:數據字典是在需求分析階段建立的,并在數據庫設計過程中不斷修改、充實和完善。13、如果進棧序列為A,B,C,D,則可能的出棧序列是()。A、C,A,D,BB、B,D,C,AC、C,D,A,BD、任意順序標準答案:B知識點解析:棧的操作原則為后進先出。選項B中出棧順序可按“A進,B進,B出,C進,D進,D出,C出,A出”實現。14、若有“doublea:”,則正確的輸入語句是()。A、scanf("%lf",a);B、scanf("%f",&a);C、scanf("%lf’,&a)D、scanf("%1e",a);標準答案:C知識點解析:scanf函數的調用形式是:scanfl”格式字符串”,輸入項地址表)。其中,“格式字符串”是要輸入的變量的格式符:“輸入項地址表”是要輸入的變量的地址。a是double型數據,格式字符串可以用“%lf”,“%f”是浮點型。題中定義變量a為雙精度型變量,雙精度變量的格式符為“%lf”;變量的地址用取地址符“&”加變量名表示,變量a的地址為“&a”。15、若有定義語句:intx=10;,則表達式x-=x+x的值為()。A、0B、-20C、-10D、10標準答案:C知識點解析:算術運算符+的優(yōu)先級高于-=,且-=的結合方向為自右向左,所以表達式x一=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,選擇C。16、若有定義: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知識點解析:此題考查的是變量的類型轉換。表達式中“(int)(x+y)把x+y=(7.2)”的值強制轉化成整型即得到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”的結果也是浮點型,得到2.500000。17、有以下程序:#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,n-1);elsereturn0;}程序運行后的輸出結果是()。A、4B、7C、10D、6標準答案:B知識點解析:本題主要考查的是函數的遞歸調用,子函數f是一個遞歸函數,所以主函數中執(zhí)行“f(a,2)”時,其執(zhí)行過程是“a[3]+f(a,1)=a[3]+a[2]+f(a,0)=7”。18、若有以下定義,則對數組元素的正確引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)標準答案:D知識點解析:本題考查通過指針引用數組元素。選項A)、C)沒有這種引用形式;選項B),(*a)+2與*a+2相同,表示第一一個元素的值加2:選項D),*(a+2)引用數組的第3個元素。19、下面程序的運行結果是()。#includemain(){inti:for(i=1;i<=5;i++){if(i%2)printf("*");elseprintf("≠");}}A、*#*#*B、#*#*#*C、*#*#D、#*#*標準答案:A知識點解析:分析程序可知,程序循環(huán)5次,然后利用if語句決定每次循環(huán)時輸出的字符。當i為奇數時,i%2=1,if(i%2)為真,輸出“*”;當i為偶數時,i%2=0,if(i%2)為假,執(zhí)行else語句,輸出“#”,所以當i取1、3、5值時輸出“*”,當i取2、4值時輸出“#”。20、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是()。A、(E>0||E<0)B、(E==0)C、(!E==0)D、(E!=0)標準答案:B知識點解析:while語句中條件表達式E的值不為0即為真,認為滿足條件,所以與B選項中表達式的含義正好相反,因此選擇B選項。21、若有以下程序:#includemain(){intc[6]={10,20,30,40,50,60},*P,*s;P=c;s=&c[5];printf("%d\n",s-P);}則程序運行后的輸出結果是()。A、5B、50C、6D、60標準答案:A知識點解析:本題主要考查數組和指針。首先初始化一維數組c[6],語句p=c;指將c[0]元素的地址賦給指針變量p,語句s=&c[5];指將c[5]元素的地址賦給指針變量s。程序最后輸出s—p,即結果為5。因此A選項正確。22、在下列選項中,沒有構成死循環(huán)的是()。A、inti=100;while(1){i=i()+1;if(i>100)break;}B、for(;;);C、intk=10000;do{k++;}while(k>10000);D、ints=36:while(s)--s:標準答案:D知識點解析:選項D)中,首先定義的變量s的值為36,因為語句--s;所以當s=0時循環(huán)會結束;選項A)由于while(1)永遠成立,循環(huán)構成死循環(huán);選項B)中for循環(huán)沒有使循環(huán)結束的限定條件,也構成死循環(huán);選項C)中由于k永遠大于10000,所以循環(huán)無法停止。23、以下敘述中錯誤的是()。A、使用三種基本結構構成的程序只能解決簡單問題B、結構化程序由順序、分支、循環(huán)三種基本結構組成C、C語言是一種結構化程序設計語言D、結構化程序設計提倡模塊化的設計方法標準答案:A知識點解析:暫無解析24、有以下程序:#include<stdio.h>#definef(x)x*x*xmain(){inta=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d\n",s,t);}程序運行后的輸出結果是()。A、10,64B、10,10C、64,10D、64,64標準答案:A知識點解析:本題考查宏定義的用法,宏定義只是做個簡單的替換,所以本題中執(zhí)行f(a+1)=a+1*a+1*a+l=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案為A選項。25、有以下程序:#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序運行后的輸出結果是()。A、7,4,2,B、8,7,5,2,C、9,7,6,4,D、8,5,4,2,標準答案:D知識點解析:coutinue的作用是跳出循環(huán)體中剩余的語句而進行下一次循環(huán)。第一次循環(huán)x的值為8,循環(huán)體中if條件成立,打印x的值8后將x減1,再執(zhí)行continue語句,跳出本次循環(huán)。第二次判斷循環(huán)條件時,x的值變?yōu)?,不滿足循環(huán)體內if條件,執(zhí)行打印--x的操作,即打印5后跳出循環(huán)。第三次判斷循環(huán)條件時x的值為4,滿足循環(huán)體中if條件,執(zhí)行打印x--的操作,即打印4,后將x值減一,執(zhí)行continue語句,跳出本次循環(huán)。第四次判斷循環(huán)條件時x的為2,滿足循環(huán)體中if條件,打印x--,即打印2后將x減一,執(zhí)行continue語句,跳出本次循環(huán)。在進行for條件表達式中第三個表達式x--的操作后x的值為0,不滿足條件結束循環(huán)。所以打印結果為8,5,4,2,。26、若有定義語句:inta[2][3],*p[3];則以下語句中正確的是()。A、p=a;B、p[0]=a;C、p[0]=&a[1][2];D、p[1]=&a;標準答案:C知識點解析:A選項錯誤,因為p是指向一個指針數組,作為數組名,不能指向別的地方。B選項錯誤,因為p[0]是一個int指針,也就是in*;而a是一個指向指針的指針int**。C選項正確,因為p[0]是一個int*,a[1][2]是int,&a[1][2]是int*,類型吻合。D選項錯誤,因為a作為數組名,不能取地址。即使能取,p[1]是int*,&a是int***,類型不對。因此C選項正確。27、設棧的存儲空間為S(1:m),初始狀態(tài)為top=m+1。經過一系列入棧與退棧操作后,top=1?,F又要將一個元素進棧,棧頂指針top值變?yōu)?)。A、發(fā)生棧滿的錯誤B、2C、mD、0標準答案:A知識點解析:棧是一種特殊的線性表,它所有的插入與刪除都限定在表的同一端進行。入棧運算即在棧頂位置插入一個新元素,退棧運算即是取出棧頂元素賦予指定變量。題目中初始狀態(tài)為top=m+1,可知入棧棧頂指針top=top-1,出棧棧頂指針top=top+1,由于棧長為m,當top=1時棧滿,不能再進行入棧操作。故選A選項。28、有以下程序:#include<stdio.h>#include<string.h>main(){chara[]="TEXT",*b="++",c[3]="1";printf("%d,%d,",strlen(a),sizeof(a));printf("%d,%d,",strlen(b),sizeof(b));printf("%d,%d,\n",strlen(c),sizeof(c));}程序運行后的輸出結果是()。A、4,5,2,4,1,3,B、4,4,2,2,1,1,C、5,5,3,3,2,2,D、4,4,2,2,1,3標準答案:A知識點解析:sizeof()是運算符,在頭文件中typedef為unsignedint,其值在編譯時即計算好了,參數可以是數組、指針、對象、函數等。它的功能是:獲得保證能容納實現所建立的最大對象的字節(jié)大小。strlen(*char)函數,要在運行時才能計算,參數必須是字符型指針(char*),當數組名作為參數傳人時,實際上數組就退化成指針了,它的功能是:返回字符串的長度。該字符串可能是自己定義的,也可能是內存中隨機的,該函數實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結束符NULL,返回的長度大小不包括NuLL。sizeof(a)求數組a所占空間的大小,包括字符串最后的’\0’,所以sizeof(a)=5,strlen()遇到’\0’就結束,strlen(a)=4。strlen(b)是指針指向的字符串長度,sizeof(b)是指針的大小。strlen(c)是字符串的長度,sizeof(c)是數組的長度。因此,輸出4,5,2,4,1,3。故答案為A選項。29、數據庫系統(tǒng)的三級模式不包括()。A、在需求分析階段建立數據字典B、在概念設計階段建立數據字典C、在邏輯設計階段建立數據字典D、在物理設計階段建立數據字典標準答案:A知識點解析:數據字典是在需求分析階段建立,在數據庫設計過程中不斷修改、充實和完善的。30、在C程序中已經定義三個整型變量x,y,z,要通過語句:scanf(’’%d,%d,%d’’,&x,&y,&z);給x賦值1、給y賦值2、給z賦值3,以下輸入形式中錯誤的是()。(注:口代表一個空格符)A、1,2,3<回車>B、口口口1,2,3<回車>C、1,口口口2,口口口3<回車>D、1口2口3<回車>標準答案:D知識點解析:scanf()的格式中指定了要用逗號分隔輸入的數值,所以在輸入時必須要有逗號來分隔輸入的內容,因此,選項D錯誤。31、程序中若有以下的說明定義和語句:#include<stdio.h>#include<string.h>structSTR{charhum[10];ints;};main(){structSTRt,*p;p=&t;則不能給變量t的s成員賦整數99,給num成員賦空串的語句組是()。A、(*p).s=99;(*p).num="";B、p->s=99;p->num[0]=0;C、(*p).s=99;p->num[0]=’\0’;D、p->s:99;strcpy((*p).num,"");標準答案:A知識點解析:結構體變量使用“.”運算符引用結構體成員變量,結構體指針使用“->”運算符引用結構體成員變量,main函數中聲明結構體STR變量t,和結構體STR指針*p,許將t的地址賦給p,所以使用p訪問成員變量時,使用“->”運算符;使用*p訪問成員變量時,使用“.”運算符。另外,由于成員變量num是字符數組,所以不能直接進行賦值,若要對num賦空字符串值,可以把num中第一個元素賦值為0或’\0’,或者使用strcpy復制函數將審字符串“”復制到num中,故選項B、C、D正確,選項A錯誤,因此答案為A。32、以下敘述中正確的是()。A、charc1,c2,*c3,c4[40];是合法的變量定義語句B、數組下標的下限由數組中第一個非零元素的位置決定C、數組下標的下限由數組中第一個被賦值元素的位置決定D、數組下標的下限是1標準答案:A知識點解析:暫無解析33、若有定義typedefint*T;Ta[10];則a的定義與下面哪個語句等價A、int(*a)[10];B、int*a[10];C、int*a;D、inta[10];標準答案:B知識點解析:本題考查typedef的使用方法,typedef對已存在的類型使用一個新的名字,其中本題中int*用T來代替,所以定義Ta[10];就相當于是int*a[10];選項B正確。34、在數據庫設計中,將E-R圖轉換成關系數據模型的過程屬于()。A、需求分析階段B、概念設計階段C、邏輯設計階段D、物理設計階段標準答案:C知識點解析:E-R圖轉換成關系模型數據則是把圖形分析出來的聯系反映到數據庫中,即設計出表,所以屬于邏輯設計階段。35、關于C語言中循環(huán)語句的敘述中正確的是()。A、for語句的循環(huán)體至少執(zhí)行一次B、while語句的循環(huán)體至少執(zhí)行一次C、do…while語句的循環(huán)體至少執(zhí)行一次D、上述說法均正確標準答案:C知識點解析:for(表達式1;表達式2;表達式3)語句,當表達式2為false時,循環(huán)體一次都不執(zhí)行,所以選項A錯;while(表達式)當表達式為false時,循環(huán)體一次都不執(zhí)行,所以選項B錯誤;do一while語句循環(huán)體至少執(zhí)行一次,所以C選項正確。36、有以下程序#include<stdio.h>#include<string.h>main(){chara[]="TEXT",*b="++",c[3]="1";printf("%d,%d,",strlen(a),sizeof(a));printf("%d,%d,",strlen(b),sizeof(b));printf("%d,%d,\n",strlen(c),sizeof(c));}程序運行后的輸出結果是A、4,5,2,4,1,3,B、4,4,2,2,1,1,C、5,5,3,3,2,2,D、4,4,2,2,1,3標準答案:A知識點解析:sizeof()是運算符,在頭文件中typedef為unsignedint,其值在編譯時即計算好了,參數可以是數組、指針、類型、對象、函數等。它的功能是:獲得保證能容納實現所建立的最大對象的字節(jié)大小。strlen(*char)是函數,要在運行時才能計算。參數必須是字符型指針(char*)。當數組名作為參數傳入時,實際上數組就退化成指針了。它的功能是:返回字符串的長度。該字符串可能是自己定義的,也可能是內存中隨機的,該函數實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結束符NULL,返回的長度大小不包括NULL。sizeof(a)求數組a所占空間的大小,包括字符串最后的'\0',所以sizeof(a)=5,strlen()遇到'\0'就結束,strlen(a)=4。strlen(b)是指針指向的字符串長度,sizeof(b)是指針的大小。strlen(c)是字符串的長度,sizeof(c)是數組的長度。因此,輸出4,5,2,4,1,3。故答案為A選項37、以下程序段中的變量已正確定義:for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");程序段的輸出結果是()。A、**B、****C、*D、********標準答案:C知識點解析:由于內層循環(huán)for(k=1;k<3;k++)后面直接跟了空語句";"所以在循環(huán)內部什么操作也不做,跳出外層循環(huán)后執(zhí)行打印語句,所以打印了一個"*",選擇C。38、下面程序的輸出結果是()。typedefunion{longx[1];inty[4];charz[10];}M;Mt;main(){printf("%d\n",sizeof(t));}A、32B、16C、10D、4標準答案:C知識點解析:“聯合體”所占用的內存空間為最長的成員所占用的空間。題中聯合體的z[10]成員是聯合體中占空間最長的成員。39、以下敘述中正確的是()。A、C程序中注釋部分可以出現在程序中任意合適的地方B、C程序的書寫格式是固定的,每行只能寫一條語句C、構成C程序的基本單位是函數,所有函數名都可以由用戶命名D、在對C語言程序進行編譯時,可以發(fā)現注釋行中的拼寫錯誤標準答案:A知識點解析:本題考查的是C語言程序設計的初步知識。選項A),程序中“/*……*/”表示注釋部分,注釋只是給人看的,對程序的編譯和運行不起作用,可以在程序中的任何位置;選項B),C語言的書寫格式自由,一行可以寫多條語句,一條語句也可以寫在不同行上;選項C),一個C程序中必須有且只能有一個由“main”命名的主函數,其他函數由用戶自行命名;選項D),程序的注釋僅僅是提供閱讀之用,并不參與程序的編譯,所以編譯也就不會發(fā)現注釋行中的錯誤。40、下列選項中,不屬于數據管理員(DBA)職責的是()。A、數據庫維護B、數據庫設計C、改善系統(tǒng)性能,提高系統(tǒng)效率D、數據類型轉換標準答案:D知識點解析:數據庫管理員(DataBaseAdminiswator,DBA)是指對數據庫的規(guī)劃、設計、維護、監(jiān)視等的人員,其主要工作如下:數據庫設計。DBA的主要任務之一是數據庫設計,具體地說是進行數據模式的設計;數據庫維護。DBA必須對數據庫中的數據安全性、完整性、并發(fā)控制及系統(tǒng)恢復、數據定期轉儲等進行實施與維護;改善系統(tǒng)性能,提高系統(tǒng)效率。DBA必須隨時監(jiān)視數據庫的運行狀態(tài),不斷調整內部結構,使系統(tǒng)保持最佳狀態(tài)與效率。二、程序填空題(本題共1題,每題1.0分,共1分。)41、給定程序的功能是:從鍵盤輸入若干行文本(每行不超過80個字符),寫到文件myfile4.txt中,用-1作為字符串輸入結束的標志。然后將文件的內容讀出顯示在屏幕上。文件的讀寫分別由自定義函數ReadText和WriteText實現。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!1#include<stdio.h>2#include<string.h>3#include<stdlib.h>4voidWriteText(FILE*);5voidReadText(FTLE*);6main()7{FILE*fp;8if((fp=fopen(’’myfile4.txt’’,’’w’’))==NULL)9{printf(’’openfail!!\n’’);exit(0);}10WriteText(fp);11fclose(fp);12if((fp=fopen(’’myfile4.txt’’,’’r’’))==NULL)13{printf(’’openfail!!\n’’);exit(0);}14ReadText(fp);15fclose(fp);16}17/**********found**********/18voidWriteText(FTLE__1__)19{charstr[81];20printf(’’\nEnterstringwith-1toend:\n’’);21gets(sir);22while(strcmp(str,’’-1’’)!=0){23/**********found**********/24fputs(__2__,fw);fputs(’’\n’’,fw);25gets(str);26}27}28voidReadText(FILE*fr)29{charstr[81];30printf(’’\nReadfileandoutputtoscreen:\n’’);31fgets(str,81,fr);32while(!feof(fr)){33/**********found**********/34printf(’’%s’’,__3__);35fgets(str,81,fr);36}37}標準答案:(1)*fw(2)str(3)str知識點解析:第一空:此處是補充函數參數名,參數類型已知是FILE文件指針,“fputs(’’\n’’,fw)”是將字符“\n”寫入文件,可知fw是文件指針名,因此第一空處應該是“voidWriteText(FILE*fw)”。第二空:“while(strcmp(str,”-1”)!=0)”循環(huán)的結束標志是str字符串等于“-1”時循環(huán)退出,如果str不等于“-1”,執(zhí)行循環(huán)體內容:用fputs函數將str字符串寫入文件。fputs函數的調用形式是:“fputs(s,fp)”,其中s是指向字符串的指針或字符串數組名,fp是指向將要被寫入的文件的文件指針,因此第二處應該是“fputs(str,fw)”。第三空:“while(!feof(fr))”循環(huán)的作用是不斷讀取文件直到到達文件尾,每次最多讀81個,將讀到的數據放在str字符串里,并用printf輸出到屏幕,因此第三處應該是“printf(’’%s’’,str)”。三、程序修改題(本題共1題,每題1.0分,共1分。)42、給定程序MODI1.C中函數fun的功能是:從低位開始取出長整型變量s中奇數位上的數,依次構成一個新數放在t中。高位仍在高位,低位仍在低位。例如,當s中的數為:7654321時,t中的數為:7531。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!1#include<stdio.h>2/**********found**********/3voidfun(longs,longt)4{longs1=10;5*t=s%10;6while(s>0)7{s=s/100;8*t=s%10*s1+*t,9/**********found**********/10s1=s1*100;11}12}13main()14{longs,t;15printf(’’\nPleaseenters:’’);scanf(’’%ld’’,&s);16fun(s,&t);17printf(’’Theresultis:%1d\n’’,t);18}標準答案:(1)voidfun(1ongs,long*t)(2)s1=s1*10;知識點解析:(1)根據“*t=s%10”判斷,t應該是個指針變量,所以“voidfun(longs,longt)”語句中的t只需改為“voidfun(10ngs,long*t)”。(2)分析函數內的循環(huán)過程可知s1的用途是每次將*t擴大,記錄每次得到的奇數位的數字的權值,s1的權值每次增加1位,因此第二個標識下應該是“s1=s1*10;”。四、程序設計題(本題共1題,每題1.0分,共1分。)43、請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,則返回第一個字符串。例如,輸入beijingshanghai(為回車鍵),函數將返回shanghai。注意:部分源程序存在文件PROG1.C中。請勿改動主函數maln和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#includechar*fun(char*s,char*t){}main(){chara[20],b[20];voidNONO();printf("Input1thstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s\n",fun(a,b));NONO();}voidNONO(){/*本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。*/FILE*fp,*wf;inti;chara[20],b[20];fp=fopen("in.dat","r");wf=fopen("out.dat"f"w");for(i=0;i<10,i++){fscanf(fp,"%s%s",a,b);fprintf(wf,"%s\n",fun(a,b));}fclose(fp);fclose(wf);}標準答案:1inti;2char*p=sr*q=t;3intn=0,m=0;4{while(*p)//計算串s的長度n,其中p為臨時指針5{n++;6p++;7}8nwhile(*q)//計算串t的長度m,其中q為臨時指針9{m++;10q++;11}12if(n>=m)//比較m和n的值,設置p指向較大的指針13p=s;14else15p=t;16returnp;知識點解析:該程序功能是比較兩個字符串的長度。解題過程是首先分別求得兩個字符串的長度,然后對這兩個值進行判斷,實現兩個字符串長度的比較。進入fun函數,根據前面的分析:(1)首先求得字符串的長度,設變量n和m分別用來求字符串的長度,初值設為0,把字符串中的字符逐個訪問,每訪問一個字符,n和m分別加1,直到字符串結束;(2)使用兩個臨時指針變量p、q分別作為訪問字符串的變量;(3)根據m和n的值返回串,設置指針p,指向返回串的開始地址。字符數組和字符串、指針作為函數的參數。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共38題,每題1.0分,共38分。)1、以下語句中存在語法錯誤的是()。A、charss[6][20];ss[1]="right?";B、charss[][20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss[]={"right?"};標準答案:A知識點解析:A項錯誤,數組定義后,不能對數組整體賦值,ss是二維數組,ss[1]是一維字符數組,即字符串,字符串賦值可以使用“strcpy(ss[1],”right”);”的形式,但不能使用賦值的形式。B、D兩項正確,在定義時對數組同時進行初始化;C項正確,將常量字符串在內存中的首地址賦給指針數組的一個元素。2、下述程序的輸出結果是()。#inc1udevoidmain(){chara=1,b=2;charc=a^.b<<2;printf("\n%d",c);}A、9B、10C、12D、2標準答案:A知識點解析:本題主要考查C語言最基本的算術運算“左移(<<)”和“異或(^)”?!白笠啤被颉坝乙啤边\算表達式的一般形式為:x<>n?!白笠?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房產投資顧問合作協(xié)議范本
- 二零二五年度海洋旅游船舶海域使用權租賃與航行管理協(xié)議
- 二零二五年度長沙個人租房押金退還及保險合同
- 二零二五年度地下車位使用權轉讓及車位增值服務協(xié)議
- 2025年度環(huán)保產業(yè)單位試用期勞動合同樣本
- 2025年度知識產權贈與及許可協(xié)議書范文
- 二零二五年度資料員招聘與知識產權保護與運用協(xié)議
- 2025年度電力設備安裝與檢修服務合同
- 二零二五年度科研機構實驗室年租房合同
- 二零二五年度廣告公司兼職設計師合作協(xié)議
- 零星工程(零星用工)簽認單
- 氬氣安全技術說明書MSDS
- 四年級數學下冊教案-練習一-北師大版
- 5G手機無線通訊濾波芯片產業(yè)化項目環(huán)境影響報告表
- 《對外援援助成套項目勘察設計取費標準內部暫行規(guī)定(稿)》
- 通用反應單元工藝
- 空冷塔施工方案
- 電飯煲的智能控制系統(tǒng)設計
- 儲罐玻璃鋼內防腐
- 2013-2015北京地鐵部分線路年客流量
- 機械設計說明書
評論
0/150
提交評論