




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級(C語言)機試模擬試卷8(共9套)(共344題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共40題,每題1.0分,共40分。)1、以下敘述中錯誤的是()。A、用戶定義的函數中可以沒有return語句B、用戶定義的函數中可以有多個return語句,以便可以調用一次返回多個函數值C、用戶定義的函數中若沒有return語句,則應當定義函數為void類型D、函數的return語句中可以沒有表達式標準答案:B知識點解析:用戶定義的函數有兩種:①void函數,可以沒有return語句,如果有return語句,也不可以返回任何表達式;②指定返回類型函數,至少有一個返回語句。在一個函數內,可以根據需要在多處出現return語句,但無論有多少個return語句,return語句只會被執行一次,然后退出函數,并且只能返回一個函數值。2、在數據庫設計中,將E-R圖轉換成關系數據模型的過程屬于()。A、需求分析階段B、概念設計階段C、邏輯設計階段D、物理設計階段標準答案:C知識點解析:邏輯結構設計的任務:概念結構是各種數據模型的共同基礎,為了能夠用某一DBMS實現用戶需求,還必須將概念結構進一步轉化為相應的數據模型,這正是數據庫邏輯結構設計所要完成的任務。它包括從E-R圖向關系模式轉換和邏輯模式規范化及調整、實現。3、下面程序的輸出結果是()。#includemain(){chara[]={’a’,’b’,’c’,’d’,’f’,’g’},*p;p=a;printf(“%c\n”,*p+4);}A、aB、bC、eD、f標準答案:C知識點解析:“*”號的優先級比“+”的優先級高,所以先執行“*p”;指針p指向的是數組的首地址,因此*p=a,再加4得‘e’。4、下列排序方法中,最壞情況下比較次數最少的是()。A、冒泡排序B、簡單選擇排序C、直接插人排序D、堆排序標準答案:D知識點解析:冒泡排序、簡單插入排序與簡單選擇排序法在最壞情況下均需要比較n(n-1)/2次,而堆排序在最壞情況下需要比較的次數是nlog2n。5、按照C語言規定的用戶標識符命名規則,不能出現在標識符中的是()。A、大寫字母B、下劃線C、數字字符D、連接符標準答案:D知識點解析:C語言中標識符由字母、下劃線、數字組成,且開頭必須是字母或下劃線。所以D選項中的連接符不合法。6、有以下程序,其中%u表示按無符號整數輸出()。main(){unsignedintx=0xFFFF;/*x的初值為十六進制數*/printf("%u\n",x);}程序運行后的輸出結果是()。A、-1B、65535C、32767D、0xFFFF標準答案:B知識點解析:因為%u表示按無符號整數輸出,而x用十六進制表示為0xFFFF,所以輸出無符號整數的最大值65535。7、運行下列程序時,若輸入數據為“321”,則輸出結果是()。main(){intnum,i,j,k,s;scanf("%d",&num);if(num>99)s=3;elseif(num>9)s=2;elses=l;i=num/100;j=(num—i*100)/10;k=(num—i*100—j*10);switch(s){case3:printf("%d%d%d\n",k,j,i);break;case2:printf("%d%d\n",k,j);casel:printf("%d\n",k);}}A、123B、1,2,3C、321D、3,2,1標準答案:A知識點解析:本題考查if…else語句和switch語句。scanf函數通過鍵盤讀入num的值。因為“num=321>99”,所以“s=3,i=3,j=2,k=1”。因為s=3,所以執行case3.輸出k,j,i的值,然后通過break結束程序。8、有以下程序:#include<stdio.h>#definePT3.5;#defineS(x)PT*x*x;main(){inta=1,b:2;printf("%4.1f\n",S(a+b));}程序運行后的輸出結果是()。A、7.5B、31.5C、程序有錯無輸出結果D、14.0標準答案:C知識點解析:宏定義不是C語句,末尾不需要有分號。所以語句printf("%4.1f\n",s(a+b));展開后為printf("%4.1f\n",3.5;*a+b*a+b;);所以程序會出現語法錯誤。9、數據庫系統的三級模式不包括()。A、概念模式B、內模式C、外模式D、數據模式標準答案:D知識點解析:數據庫系統的三級模式是概念模式、外模式和內模式,所以選擇D。10、在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有若干個鍵,它們稱為該表的()。A、連接碼B、關系碼C、外碼D、候選碼標準答案:D知識點解析:在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有若干個鍵,它們稱為該表的候選碼或候選鍵。從二維表的所有候選鍵中選取一個作為用戶使用的鍵稱為主鍵或主碼。11、若有定義語句:intx=10;,則表達式x-=x+x的值為()。A、0B、-20C、-10D、10標準答案:C知識點解析:算術運算符+的優先級高于-=,且-=的結合方向為自右向左,所以表達式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,選擇C。12、以下定義數組的語句中錯誤的是()。A、intnum[][3]={{1,2},3,4,5,6};B、intnum[2][4]={{1,2},{3,4},{5,6}};C、intnum[]={1,2,3,4,5,6};D、intnum[][4]={1,2,3,4,5,6};標準答案:B知識點解析:B選項中定義的數組為2行4列,而賦值時賦成了3行所以出錯。13、有以下程序:#include<stdio.h>voidfun1(char*p){char*q;q=p;while(*q!=’\0’){(*q)++;q++;}main(){chara[]={"Program"},*p;p=&a[3];fun1(p);printf("%s\n",a);}程序執行后的輸出結果是()。A、PrphsbnB、ProhsbnC、ProgsbnD、Program標準答案:B知識點解析:(*q)++是q所指的字符加1,q++就是指針移到下一個字符。因此B選項正確。14、有以下程序:#include#include“string.h”voidfun(char*s[],intn){char*t;inti.d;for(i=0;istrlen(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]);}程序的運行結果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc標準答案:A知識點解析:從main函數入手,定義了一個一維數組并賦初值,接著調用函數fun(),函數的功能是:比較數組中各元素的長度,按元素長度從小到大的順序排列元素,所以執行fun(SS,5)函數后,*ss[]={"xy","bcc","bbcc""aabcc""aaaacc"},所以調用printf函數輸出ss[0],ss[4]的值分別為xy,aaaacc。15、以下程序的輸出結果是()。#include<stdio.h>voidprt(int*x,int*y,int*z){printf(’’%d,%d,%d\n’’,++*x,++*y,*(z++));}main(){inta=10,b=40,c=20;prt(&a,&b,&c);prt(&a,&b,&c);}A、11,42,3112,22,41B、11,41,2012,42,20C、11,21,4011,21,21D、11,41,2112,42,22標準答案:B知識點解析:本題考查的是函數參數的傳遞及自加運算符。主函數中第一次調用函數“prt(&a,&b,&C;”,此函數中的輸出語句“printf(’’%d,%d,‰\n’’,++*x,++*y,*(z++));”使得a和b的值均加1,而“*(z++)”由于先執行“z++”所以c的值不變;第二次調用函數“pn(&a,&b,&c);”使得a和b在上一次的基礎上再各自加1(因為形參和實參進行的是地址傳遞),而c的值仍不變。16、對于循環隊列,下列敘述中正確的是()。A、隊頭指針是固定不變的B、隊頭指針一定大于隊尾指針C、隊頭指針一定小于隊尾指針D、隊頭指針可以大于隊尾指針,也可以小于隊尾指針標準答案:D知識點解析:循環隊列的隊頭指針與隊尾指針都不是固定的,隨著入隊與出隊操作要進行變化。因為是循環利用的隊列結構所以對頭指針有時可能大于隊尾指針有時也可能小于隊尾指針。17、若有代數式,(其中e僅代表自然對數的底數,不是變量),則下列能夠正確表示該代數式的C語言表達式是()。A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(X)))標準答案:C知識點解析:n和e的x冪次方,要分別調用C語言的數學庫函數doublepow(n,x)和doubleexp(x),因為這兩個函數的返回值都為double型,對兩者的和計算絕對值,調用庫函數doublefabs(pow(n,x)+exp(x)),求出和的絕對值,再調用開平方函數doublesqrt(fabs(pow(n,x)+exp(x))),這樣計算出的結果就是題干中表達式的值。18、設已有定義:floatx;則以下對指針變量p進行定義且賦初值的語句中正確的是()。A、float*p=&;x;B、int*p=(float)x;C、floatp=&;x;D、float*p=1024:標準答案:A知識點解析:考查指針變量的初始化。只能把對應類型的變量的地址賦值給指針,選項B錯誤;定義指針時要加上“*”標明該變量為一個指針變量,選項C錯誤;不能把一個整數直接賦值給指針變量,選項D錯誤;所以答案選A。19、if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是()。A、必須是邏輯值B、必須是整數值C、必須是正數D、可以是任意合法的數值標準答案:D知識點解析:if語句中的表達式可以是任意合法的數值,如常量、變量表達式。所以D選項正確。20、有以下程序:#includemain(){intk=5,n=0;do{switch(k){ease1:ease3:n+=1;k一一;break;default:n=0;k一一;case2:ease4:n+=2;k一一;break;}pfintf(“%d”,n);}while(k>0&&n<5);}程序運行后的輸出結果是()。A、02356B、0235C、235D、2356標準答案:C知識點解析:k的值為5,逐個對case語句進行匹配,均不匹配,執行default下的語句n=0;k一一。再執行case2:cased.:后面的語句n+=2;k一一;。執行break語句跳出switch判斷,打印n的值,即2。經過第一次循環后,k的值為3,然后進行k>0&&n<5條件判斷為真。第二次執行循環體,執行case3:后面的語句n+=1;k一一;。再執行break語句跳出循環,此時打印n的值3,此時k的值為2。第三次執行循環體k的值為2,滿足條件,執行case2:case4:后面的語句n+=2;k一一;執行break語句跳出循環體,打印n的值5。此時n不滿足條件k>0&&n<5,所以結束循環。整個程序的打印結果為235。21、下列方法中,不屬于軟件調試方法的是()。A、回溯法B、強行排錯法C、集成測試法D、原因排除法標準答案:C知識點解析:軟件調試主要采用以下三種方法:強行排錯法:作為傳統的調試方法,其過程可概括為設置斷點、程序暫停、觀察程序狀態、繼續運行程序。回溯法:該方法適合于小規模程序的排錯、即一旦發現了錯誤,先分析錯誤征兆,確定最先發現“癥狀”的位置。原因排除法:原因排除法是通過演繹和歸納,以及二分法來實現。22、設有如下類型說明語句typedefstruet{intnum;struet{inty,m,d;}date;}PER;則以下定義結構體數組并賦初值的語句中錯誤的是()。A、PERst[2]={{1001},2008,8,1,{1002},2006,5,20};B、PERst[2]={1001,{2008,8,1},1002,{2006,5,20}};C、PERst[2]={{1001,2008,8,1},{1002,2006,5,20}};D、PERst[2]={1001,2008,8,1,1002,2006,5,20};標準答案:A知識點解析:結構體PER類型定義了兩個成員:num為整型,date為嵌套的結構體類型,初始化時,成員值的順序必須與成員定義的順序相同,num必須是整數,date必須是小括號括起來的嵌套的三個整數,選項A中,{1001}和{1002}都不是整數,所以選項A錯誤,本題答案為A。23、設R是一個2元關系,有3個元組,S是一個3元關系,有3個元組。如T=R×S,則T的元組的個數為()。A、6B、8C、9D、12標準答案:C知識點解析:R為n元關系,有p個元組S為m元關系,有q個元組。兩個關系笛卡兒積是一個n+m元的關系,元組個數是q×p。所以T的元組的個數為9個。24、以下程序的輸出結果是()。#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標準答案:B知識點解析:本題考查switch語句。因為a=8,a%4=0,所以執行case0后面的語句,將m加1,遇到break語句跳出switch。25、閱讀以下程序#includemain(){IntCase;floatprintF;printf("請輸入2個數:");scanf("%d%f",&Case,&printF);printf("%d%f\n",Case,printF);}以下說法正確的是()。A、定義語句出錯,Case是關鍵字,不能用作用戶自定義標識符,printF不能用作用戶自定義標識符.B、定義語句出錯,Int無法被識別。C、定義語句無錯,scanf不能作為輸入函數使用D、定義語句無錯,printf不能輸出Case的值標準答案:B知識點解析:C語言是一種大小寫敏感的語言,因此Int應為int,而CaseprintF則可以使用。26、下面不屬于需求分析階段任務的是()。A、確定軟件系統的功能需求B、確定軟件系統的性能需求C、需求規格說明書評審D、制定軟件集成測試計劃標準答案:D知識點解析:需求分析階段的工作有:需求獲??;需求分析;編寫需求規格說明書;需求評審,所以選擇D。27、設文件指針fp已定義,執行語句fp=fopen(“file”,“w”);后,以下針對文本文件file操作敘述的選項中正確的是()。A、只能寫不能讀B、寫操作結束后可以從頭開始讀C、可以在原有內容后追加寫D、可以隨意讀和寫標準答案:A知識點解析:考查文件操作函數fopen的基礎知識,以”w”方式打開文件,只能寫不能讀。選項A正確。28、有以下程序#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的作用是跳出循環體中剩余的語句而進行下一次循環,第一次循環x的值為8,循環體中if條件成立,打印x的值8后將x減1,再執行continue語句,跳出本次循環,第二次判斷循環條件時,x的值變為6,不滿足循環體內if條件,執行打印--x的操作,即打印5后跳出循環,第三次判斷循環條件時x的值為4,滿足循環體中if條件,執行打印x--的操作,即打印4,后將x值減一,執行continue語句,跳出本次循環,第四次判斷循環條件時x的為2,滿足循環體中if條件,打印x--,即打印2后將x減一,執行continue語句,跳出本次循環,在進行for條件表達式中第三個表達式x--的操作后x的值為0,不滿足條件結束循環,所以打印結果為8,5,4,2,。29、有以下程序#includemain(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k:}k--;}printf("%d\n",n);}程序運行后的輸出結果是A、0B、4C、6D、7標準答案:D知識點解析:因為沒有break語句,當k=2的時候,會順序執行兩條語句,k=1的時候,會順序執行3條語句。30、設循環隊列的存儲空間為Q(1:35),初始狀態為front=rear=35?,F經過一系列入隊與退隊運算后,front=15,rear=15,則循環隊列中的元素個數為A、15B、16C、20D、0或35標準答案:D知識點解析:在循環隊列中,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針front指向排頭元素的前一個位置。在循環隊列中進行出隊、入隊操作時,頭尾指針仍要加1,朝前移動。只不過當頭尾指針指向向量上界時,其加1操作的結果是指向向量的下界0。由于入隊時尾指針向前追趕頭指針,出隊時頭指針向前追趕尾指針,故隊空和隊滿時,頭尾指針均相等。答案為D選項。31、設有定義:doublex=5.16894;,則語句printf("%lf\n",(int)(x*1000+0.5)/1000.);的輸出結果是()。A、5.16900B、5.16800C、0.00000D、輸出格式說明符與輸出項不匹配,產生錯誤信息標準答案:A知識點解析:(x*1000+0.5)表示x移動3位小數,加0.5,也就是小數第4位加5,若這位大于等于5,則進1到個位。因為“5.16894*10005168.94+0.55169.44”所以(int)(x*1000+0.5)強制轉換為整型結果為5169。(5169/1000.0)5.169,由于1000.0結果自動轉換為浮點數所以printf(“%lf\n”,5.169)結果是5.16900。故答案為A選項32、若有以下程序#include<stdio.h>main(){inta=0,b=0,c=0c=(a+=++b,b+=4);printf("%d,%d,%d\n",a,b,c);}則程序的輸出結果是A、1,5,1B、1,5,5C、-1,4,4D、-1,4,-1標準答案:B知識點解析:逗號運算符的結合性從左到右,因此逗號表達式將從左到右進行計算,且逗號運算符的優先級最低,先計算a+=++b,結果a為1,b為1,然后計算b+=4,b的值為5,逗號表達式的值為其中最后一個表達式的值,所以將5賦給變量c,即a為1,b為5,c為5,所以選擇B。33、有以下程序:#include#defineM6#defineg(x)(x*M)main(){intm,n,k=1;m=g(k+1);n=g(2);printf(’’%d,%d\n’’,m,n);}程序運行后的輸出結果是()。A、7,12B、12,12C、7,11D、7,7標準答案:A知識點解析:宏定義一定要先代入再計算表達式的值,m=(k+1*6)=(1+6)=7;n=(2*6)=12。34、假如下列選項中的變量已正確定義并成功賦值,其中正確的表達式是()。A、int(22.1%2)B、n=y+m+5,++yC、x=y*3=x+kD、x=21%7.0標準答案:B知識點解析:求余運算符的左右兩個數字都必須是整數,所以選項A和D錯誤,另外,進行整型強制轉化時正確的表達式是(int)x,而不是int(x);選項C中不能將x+k的值賦給y*3,所以選項C錯誤。選項B中涉及逗號運算符,它的級別最低,因此,選項B表達式的執行過程是先將y+m+5的值賦給n,y值自加一次。35、設有某函數的說明為int*func(inta[10],intn);則下列敘述中,正確的是A、形參a對應的實參只能是數組名B、說明中的a[10]寫成a[]或*a效果完全一樣C、func的函數體中不能對a進行移動指針(如a++)的操作D、只有指向10個整數內存單元的指針,才能作為實參傳給a標準答案:B知識點解析:本題重點考察返回指針值的函數相關知識,返回指針值的函數,一般定義形式為:類型名*函數名(參數列表)。func函數被定義為指針型函數,它的形參inta[10]和intn,分別指一維數組a[0]和整型變量n。36、有以下程序#include<stdio.h>structS{inta;int*b;};main(){intx1[]={3,4},x2[]={6,7};structSx[]={1,x1,2,x2};printf("%d,%d\n",*x[0].b,*x[1].b);}程序的運行結果是A、1,2B、3,6C、4,7D、變量的地址值標準答案:A知識點解析:程序的執行過程為:定義整型數組x1,x2并進行初始化,兩個數組長度均為2。定義結構體數組x,并為其初始化,則x[0].a=1,x[0].b=x1,x[1].a=2,x[0].b=x2。輸出x[0]的成員指針b指向的內存單元值,即數組x1的第一個元素3,輸出x[1]的成員指針b指向的內存單元值,即數組x2的第一個元6。程序的運行結果是3,6,B選項正確。37、以下對C語言函數的敘述中正確的是A、調用函數時,只能把實參的值傳給形參,形參的值不能傳給實參B、函數既能嵌套定義,又能遞歸定義C、函數必須有返回值,否則不能使用D、程序中有調用關系的所有函數必須放在同一個源程序中標準答案:A知識點解析:C語言不能嵌套定義函數,能遞歸定義函數,因此B選項錯誤;函數可以沒有返回值,沒有返回值的函數返回類型為void,C選項錯誤;程序有調用關系的所有函數可以不放在同一源程序中,D選項錯誤,答案為A選項。38、有以下程序#include<stdio.h>#include<string.h>main(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序運行后的輸出結果是A、10,One*Dream!B、9,One*Dream!C、9,One*WorldD、10,One*World標準答案:A知識點解析:unsignedintstrlen(char*s);計算字符串s的(unsignedint型)長度,不包括’\0’在內;p指向數組的第二個元素,因此strlen(p)=10,并打印,故答案為A選項39、軟件生命周期是指A、軟件的定義和開發階段B、軟件的需求分析、設計與實現階段C、軟件的開發階段D、軟件產品從提出、實現、使用維護到停止使用退役的過程標準答案:D知識點解析:通常把軟件產品從提出、實現、使用、維護到停止使用、退役的過程稱為軟件生命周期。選項A、B、C選項均為生命周期的一部分。故選D選項40、下列程序的運行結果是()。#include<stdio.h>voidfun(int*s,int*p){staticintt==3;*p=s[t];t--;}voidmain(){inta[]={2,3,4,5},k,x;for(k=0;k<,4;k++){fun(a,&x);printf("%d,",x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,標準答案:A知識點解析:分析fun函數程序段,可知fun函數要實現的功能是將s中第(t+1)個元素以前的元素“逆置”賦給數組p。由于fun函數定義了靜態變量t=3,因此,在主函數中調用函數fun(a,&x)時,就是要將數組a中前4個元素逆置賦給數組x,最后輸出x數組。二、程序填空題(本題共1題,每題1.0分,共1分。)41、下列給定程序中,函數fun的功能是:將形參a所指數組中的前半部分元素中的值與后半部分元素中的值對換。形參n中存放數組中數據的個數,若n為奇數,則中間的元素不動。例如,若a所指數組中的數據為:1,2,3,4,5,6,7,8,9,則調換后為:6,7,8,9,5,1,2,3,4。請在程序的下畫線處填入正確的內容并將下畫線刪除.使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>#defineN9voidfun(inta[],intn){inti,t,P;/**********found***********/P=(n%2==0)?n/2:n/2+【1】;for(i=0;i<n/2;i++){t=a[i];/**********found***********/a[i]=a[P+【2】];/**********found***********/【3】=t,}}main(){intb[N]={1,2,3,4,5,6,7,8,9),i;printf(“\nTheoriginaldata:\n”);for(i=0,i<N;i++)printf(“%4d”,b[i]);printf(“\n”);fun(b,N),printf(“\nThedataaftermoving:\n”);for(i=0;i<N;i++)printf(“%4d”,b[i]),printf(“\n”);}標準答案:(1)1(2)i(3)a[p+i]或*(a+p+i)知識點解析:填空1:該處是判斷數組元索的個數足奇數還是偶數,為奇數時要使當前位置加1,使p指向數組中間位置。填空2和填空3:這里是一個比較常見的數組位置調換程序,應填入i和a[p+i]或*(a+p+i)。三、程序修改題(本題共1題,每題1.0分,共1分。)42、給定程序MODll.C中函數fhn的功能是:將m(1≤m≤10)個字符串連接起來,組成一個新串,放入pt所指存儲區中。例如:把3個串:“abc”,“CD”,“EF”連接起來,結果是“abcCDEF”。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!#include#includevoidfun(charstr[][10],intm,char*pt){/**********found***********/Intk,q,i;for(k=0;k標準答案:(1)intk,q,i;(2)pt[i]=str[k][1i]j知識點解析:函數的功能是將m(1≤m≤10)個字符串連接起來。(1)第一標識下是整型變量k、q和i的定義,根據C語言中整型變量的定義方式,第一標識下應為“intk,q,i;”。(2)第二個標識下的“pt[i]=str[k,i];”語句應該將str中的字符依次拷貝到pt中,根據C語言中對二維數組每一位的取值,應該是str[k][i],所以“pt[i]=str[k,i];”改為“pt[i]=str[k][i];四、程序設計題(本題共1題,每題1.0分,共1分。)43、程序定義了NxN的二維數組,并在主函數中自動賦值。請編寫函數fun(inta[][N]),函數的功能是:使數組左下三角元素中的值全部置成0。例如:a數組中的值為則返回主程序后a數組中的值應為注意:部分源程序存在文件PROGl.C中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#inc2ude#inc2ude#defineN5voidfun(inta[][N]){}NONO(){/*本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。*/FILE*rf,*wf;inti,j,a[5][5];rf=fopen(“in.dat”,“r”);wf=fopen(“out.dat”,“w”);for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,“%d”,&a[i][j]);fun(a);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,“%4d”,a[i][j]);fprintf(wf,“\n”);}fclose(rf);fclose(wf);}main(){inta[N][N],i,j;printf("*****Thearray*****\n");for(i=0;i標準答案:inti,j;for(i=0;i知識點解析:程序功能是使數組左下半三角元素的值全部置成0。(1)對二維數組常用雙重循環結構來處理:外層循環控制二維數組的行處理,內層循環控制二維數組的列處理。(2)左下半三角元素的下標特點是列下標小于或等于行下標,即i<=i。(3)依次訪問二維數組,把符合以上條件的元素的值賦0。該題是對矩陣操作的考查。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、對于一個正常運行的C程序,下列敘述中正確的是()。A、程序的執行總是從main函數開始,在main函數結束B、程序的執行總是從程序的第一個函數開始,在main函數結束C、程序的執行總是從main函數開始,在程序的最后一個函數中結束D、程序的執行總是從程序中的第一個函數開始,在程序的最后一個函數中結束標準答案:A知識點解析:一個C語言源程序無論包括了多少函數,總是從main函數開始執行,從main函數結束。2、在一棵二叉樹上,第5層的結點數最多是()。A、8B、9C、15D、16標準答案:D知識點解析:根據二叉樹的性質:二叉樹第i(i≥1)層上至多有2i-1個結點。得到第5層的結點數最多是16個。3、設有定義:doublex=2.12;,則以下各項中不能完整輸出變量x值的語句是()。A、printf("x=%5.of\n",x);B、printf("x=%f\n",x);C、printf("x=%lf\n",x);D、printf("x=%O.5f\n",x);標準答案:A知識點解析:本題考查printf函數的格式輸出,“格式控制字符串”部分為“%f”表示按照浮點型輸出,選項B正確;加入長度格式符1即“%1”表示按照雙精度浮點型輸出,選項C正確;若要控制輸出精度,則需以“.”開頭,后跟十進制整數,如“%.2f”或“%O.2f”,選項D正確;控制輸出寬度則是用整數表示,如“%5f”,選項A中“%5.Of’’表示輸出寬度為5,右對齊,小數點后保留位數為0,所以結果輸出為2,不能完整輸出x,答案選A。4、有以下程序:#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");}程序運行后的輸出結果是()。A、321678B、876543C、1098765D、345678標準答案:A知識點解析:本題中的函數fun()的功能是將數組k中前5個元素倒序,所以返回后數組k中的元素排列是5,4,3,2,1,6,7,8,9,10。所以打印輸出k[2]到k[7]元素的值,即321678,所以選擇A。5、下列敘述中正確的是()。A、線性表鏈式存儲結構的存儲空間一般要少于順序存儲結構B、線性表鏈式存儲結構與順序存儲結構的存儲空間都是連續的C、線性表鏈式存儲結構的存儲空間可以是連續的,也可以是不連續的D、以上說法均錯誤標準答案:C知識點解析:線性表的順序存儲結構具備如下兩個基本特征:(1)線性表中的所有元素所占的存儲空間是連續的;(2)線性表中各數據元素在存儲空間中是按邏輯順序依次存放的。用一組任意的存儲單元來依次存放線性表的節點,這組存儲單元既可以是連續的,也可以是不連續的,甚至是零散分布在內存中的任意位置上的。因此C選項正確。6、以下對聯合類型敘述正確的是()。A、可以對聯合變量名直接賦值B、使用聯合變量的目的是為了節省內存C、任何一個聯合變量可以同時引用聯合中的不同成員D、聯合類型定義中不能同時出現結構類型的成員標準答案:B知識點解析:山于聯合體是同一存儲區域山不同類型的變量共享,所以不可以直接對聯合體變量名進行賦值,且聯合體中的空間在某一時刻只能保持某一成員的數據;另外合體中可以出現結構類型的成員。7、己知函數的調用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一個整型變量,代表要讀入的數據項總數B、一個文件指針,指向要讀的文件C、一個指針,是指向的輸入數據放在內存中的起始位置D、一個存儲區,存放要讀的數據項標準答案:C知識點解析:數據塊輸入/輸出函數的調用形式為:ffead(buffer,size,count,fp))。ffead函數參數說明:“buffer”是一個指針,對fread來說,它是讀入數據的存放地址;“size”是要讀寫的字節數;“count”是要進行讀寫多少個size字節的數據項;“fp”是指文件型指針。8、在數據庫系統的內部結構體系中,索引屬于()。A、模式B、內模式C、外模式D、概念模式標準答案:B知識點解析:內模式又稱物理模式,它給出了數據庫物理存儲結構與物理存取方法,如數據存儲的文件結構、索引、集簇及hash等存取方式與存取路徑,內模式的物理性主要體現在操作系統及文件級上,它還未深入到設備級上(如磁盤及磁盤操作)。9、有兩個關系R和T如下:則由關系R得到關系T的操作是()。A、選擇B、交C、投影D、并標準答案:C知識點解析:關系T是由關系R的第3、4行的元組組成的,很顯然這是對關系R進行選擇運算的結果??梢院唵卫斫鉃椋哼x擇運算是對行的操作,投影運算是對列的操作。選擇是從表中選出滿足給定條件的元組組成新表。故C選項正確。10、交換兩個變量的值,不允許用臨時變量,應該使用下列()位運算符。A、&B、^C、‖D、~標準答案:B知識點解析:按邏輯位運算的特定作用主要有3點:①用按位與運算將特定位清0或保留特定位;②用按位或運算將特定的位置設置為1;③用按位異或運算將某個變量的特定位翻轉或交換兩個變量的值。11、有以下程序:#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);}程序運行后的輸出結果是()。A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2標準答案:B知識點解析:程序中定義了兩個整型變量,然后用兩個指針分別指向這兩個整型變量,交換指針,那么原來指向第一個整數的指針將指向第二個整數,原來指向第二個整數的指針將指向第一個整數。12、下面程序運行后的輸出結果是()。#inc1udemain(){inta[5]={1,0,4,2,0},b[5]={1,2,3,4,5},i,s=0;for(i=0;i<5;i++)s=s+b[a[i]];printf("%d\n",s);}A、12B、15C、11D、8標準答案:A知識點解析:這道題目是計算一維數組b中某些元素的和。這些元素的下標值是一維數組a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]=2+1+5+3+1=12.13、以下敘述中錯誤的是()。A、gets函數用于從終端讀入字符串B、getchar函數用于從磁盤文件讀入字符C、fputs函數用于把字符串輸出到文件D、fwrite函數用于以二進制形式輸出數據到文件標準答案:B知識點解析:本題考查字符處理函數和文件操作函數,屬于基礎知識,其中B選項getchar函數是用于從終端讀入一個字符。14、下列敘述中正確的是()。A、棧是一種先進先出的線性表B、隊列是一種后進先出的線性表C、棧與隊列都是非線性結構D、以上三種說法都不對標準答案:D知識點解析:棧是一種先進后出的線性表,隊列是一種先進先出的線性表,棧與隊列都是線性結構。15、一般情況下,當對關系R和S進行自然連接時,要求R和S含有一個或者多個共有的()。A、記錄B、行C、屬性D、元組標準答案:C知識點解析:進行自然連接時要求兩個關系具有相同列,即屬性。16、以下各項中,當x為大于1的奇數時,值為0的表達式是()。A、x%2==0B、x/2C、x%21=0D、x%2==1標準答案:A知識點解析:當x為大于1的奇數時,x%2==0表達式為0,所以答案為A。17、若有定義語句: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)是字符串比較函數,比較規則是兩個字符串自左向右逐個字符相比(按照ASCII碼值大?。?,以第一個不相同的字符的大小作為比較結果。因為’OK’<’ok’,所以strcmp(s1,s2)為負值,只有B選項正確。18、有以下程序:#includeintfun(intx[],intf1){staticintsum=0,i;for(i=0;iA、55B、50C、45D、60標準答案:D知識點解析:內部靜態變量是始終存在的,當函數被調用退出后,內部靜態變量會保存數據,再次調用該函數時,以前調用時的數值仍然保留著。fun(a,5)的值是15,再次調用后sum=15,所以fun(b,4)=45,s=45+15=60。因此D選項正確。19、若x=4,y=5,則x&y的結果是()。A、0B、4C、3D、5標準答案:B知識點解析:本題主要考查按位與運算的知識點。按位與是對兩個運算量相應的位進行邏輯與,“&”的規則和邏輯與“&&”相同。x=4的二進制為00000100,v=5的二進制為00000101,x&y=00000100,轉化為十進制即為4。20、若有以下語句:typedefstructS{intg;charh;}T;以下敘述中正確的是()。A、可用s定義結構體變量B、可用T定義結構體變量C、S是struct類型的變量D、T是structS類型的變量標準答案:B知識點解析:本題考查typedef重新聲明一種結構體類型,那么T為結構體類型,而不是結構體變量,所以B選項正確。21、以下關于C語言的敘述中正確的是()。A、預處理命令通常位于函數體外面,但也可以位于函數體中間B、C語言中的變量定義須在其他語句之前C、在C語言程序的書寫中,一個語句必須單占一行D、—個C語言源程序可以由一個或多個源文件組成,每個源文件可由自己的ma1n函數標準答案:A知識點解析:源程序中可以有預處理命令(inc1ude命令僅為其中的一種)。C語言中的變量可以在使用之前的任何位置進行定義。C語言程序的書寫中,多個語句可以位于一行,但為了增強可讀性,一般每行只有一條語句。一個C語言源程序可以由一個或多個源文件組成,但僅可以有一個main函數。22、若有以下程序:#includemain(){inta=1,b=2,c=3,d:4;if((a=2)∣∣(b=1))c=2;if((c==3)&&(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d;則程序的輸出結果是()。A、1,2,3,4B、2,1,2,-1C、5,1,2,-1D、2,2,2,4標準答案:D知識點解析:第一個if語句的判斷條件是邏輯或表達式,所以只要有一個運算對象為真結果就為真,且如果前面的已經為真,后面的表達式不再進行執行判斷。執行第一個if判斷條件時a的值為2,整個表達式的值為真,b的值不變,c的值為2。判斷第二個if條件為邏輯與表達式,只有兩個運算對象均非零,才為真,第一個表達式c==3,不成立,不再判斷第二個運算對象,所以不執行d=一1操作和a=5操作。所以結果為選項D。23、有以下程序:#includemain(){intx;scanf(“%d“,&x);if(x<=0);elseif(x!=5)printf(“%d\n”,x);}程序運行時,輸入的值在哪個范圍才會有輸出結果()。A、不等于5的整數B、大于0且不等5的整數C、大于0或等于5的整數D、小于5的整數標準答案:B知識點解析:題目中,雖然else和第二個if不在同一行上,但等價于在同一行上,因此,程序的意思是當x大于0且不等于5時將其打印出來。24、下列程序的運行結果是()。#includevoidfun(int*S,int*P){staticintt=3;*p=s[t];t--;}voidmain(){inta[]={2,3,4,5),k,x;for(k=0;k<4;k++){fun(a,&x);printf(“%d,”,x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,標準答案:A知識點解析:分析fun函數程序段,可知fun函數要實現的功能是將s中第(t+1)個元素以前的元素逆置賦給數組p。由于fun函數定義了靜態變量t=3,因此,在主函數中調用函數fun(a,&x)時,就是要將數組a中前4個元素逆置賦給數組x,最后輸出x數組。25、判斷字符串s1是否大于字符串s2,應該使用()。A、if(strcmp(s1,s2)<0)B、if(s1>s2)C、if(strcmp(s2,s1)<0)D、if(strcmp(s1,s2))標準答案:C知識點解析:本題考查字符串比較函數strcmp(),調用形式:strcmp(str+1,str+2),其中str+1、str+2分別是字符串存儲區的首地址,函數功能:比較字符串str1和str2,當str1<str2時,返回值為負數:當str1=str2時,返回0;當str1>str2,返回值為正數。注意:不能使用關系運算符比較兩個字符串的大小。26、有以下程序:#include<stdio.h>main(){inta=7;while(a--);printf("%d\n",a);}程序運行后的輸出結果是()。A、0B、-1C、1D、7標準答案:B知識點解析:a--的含義是先用后減1,所以當a的值為0時,跳出循環,但是仍要執行a--,a的值變為-1。27、有以下程序:#include<stdio.h>main(){charb,c;inti:b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序運行后的輸出結果是()。A、abcdefB、ABCDEFC、aBcDeFD、AbCdEf標準答案:D知識點解析:函數的含義是如果i的值能被2整除,以字符格式打印輸出i+c的值,如果i的值不能被2整除,打印i+b的值。第一次i值為0,執行else語句打印字符‘A’,第二次i值為1,打印1+b的值即字符‘b’,第三次i值為2,打印字符‘C’,依此類推選擇D選項。28、下列敘述中正確的是A、程序執行的效率與數據的存儲結構密切相關B、程序執行的效率只取決于程序的控制結構C、程序執行的效率只取決于所處理的數據量D、以上說法均錯誤標準答案:A知識點解析:程序執行的效率與數據的存儲結構、數據的邏輯結構、程序的控制結構、所處理的數據量等有關。29、結構化程序設計的基本原則不包括()。A、多態性B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:結構化程序設計的思想包括:自頂向下、逐步求精、模塊化、限制使用goto語句,所以選擇A)。30、設有表示學生選課的三張表,學生S(學號,姓名,性別,年齡,身份證號),課程C(課號,課名),選課SC(學號,課號,成績),則表SC的關鍵字(鍵或碼)為()。A、課號,成績B、學號,成績C、學號,課號D、學號,姓名,成績標準答案:C知識點解析:學號是學生表S的主鍵,課號是課程表C的主鍵,所以選課表SC的關鍵字就應該是與前兩個表能夠直接聯系且能唯一定義的學號和課號,所以選擇C)。31、若要打印出字符A,以下語句不正確的是()。(注:字符A的ASCⅡ碼值為65,字符a的ASCⅡ碼值為97)A、printf(’’%c\n’’,’a’一32);B、printf(’’%c\n’’,’B’—1);C、printf(’’%c\n’’,65);D、printf(’’%d\n’’,’A’);標準答案:D知識點解析:要打印出A,輸出格式應該是%c,所以選項D錯誤;另外,字符是一種特殊的整型數,對應的是其ASCⅡ碼數值,所以選項A,B,C正確。32、有以下程序#include<stdio.h>voidfun(char**p){inti;for(i=0;i<4;i++)printf("%s",p[i]);}main(){char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};fun(s);printf("\n");}程序運行后的輸出結果是A、ABCDEFGHIJKLB、ABCDC、AEIMD、ABCDEFGHIJKLMNOP標準答案:D知識點解析:本題考查字符串數組,s表示指向字符數組的指針,s指向了第一個字符串,s++指向了第二個字符串,所以最后輸出結果為D選項。33、一個學生可選多門課程,一門課程也可由多個學生來選。則學生和課程間的聯系是()。A、1:1聯系B、1:m聯系C、m:1聯系D、m:n聯系標準答案:D知識點解析:一個學生可選多門課程,一門課程也可由多個學生來選,所以他們之間是多對多的關系。34、有以下程序#include<stdio.h>intk=5;voidf(int*s){*s=k;}main(){intm=3,*p=&m;f(p);printf("%d,%d",m,*p);}程序的運行結果是A、5,5B、3,3C、3,5D、5,3標準答案:A知識點解析:本題程序執行過程為:m=3,p指向m,調用函數f,將實參p中m的地址傳遞給形參s,s指向m,則k賦值給m,m=5,p依然指向m,故輸出5,5。A選項正確。35、有以下程序:#includemain(){inti=3,j=5,*p=&i,*q=&j,**r;r=&q;i++;(*q)++;printf(’’%d,%d,%d,%d,%d\n’’,i,j,*P,*q,**r);}執行后的輸出結果是()。A、4,6,4,6,6B、5,3,5,3,5C、4,6,4,6,4D、4,6,4,4,6標準答案:A知識點解析:此題考查指針及指針的指針,(*q)是對其指向的地址空間的存儲值的引用,所以(*q)++等同于j++;同時,r指向的具體數值也會發生變化。36、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");fprintf(fp,"%d\n",a[0]);for(i=1;i<6;i++){fseek(fp,0L,0);fscanf(fp,"%d",&k);fseek(fp,0L,0);fprintf(fp,"%d\n",a[i]+k);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}程序的運行結果是A、21B、6C、123456D、11標準答案:A知識點解析:fopen函數以一定方式打開指定文件,返回一個指向文件的文件指針,如果不能實現打開指定文件的操作,則返回一個空指針NULL。fscanf函數從文本文件中按格式輸入。fprintf函數按照格式向文本文件中輸出數據。文件定位函數fseek,將指針由文件開頭0、當前位置1、末尾2移動指定字節。rewind函數功能使文件的位置指針返回到文件頭。程序執行過程為:以讀/寫方式建立一個新的文本文件data.dat,將1寫入文件;執行for循環,將文件指針移到文件開頭,將文件第一個數值1賦給k,再將指針移動到開頭,向文件內輸入a[i]+k=3。for循環實現將a數組中元素累加,結果21存放在文件中。調用rewind將文件指針移動到開頭,調用fscanf函數從文件中讀出數值賦予k=21,調用fclose函數關閉文件,打印k值,A選項正確。37、有以下程序#include<stdio.h>main(){charc;while((c=getchar())!=’\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}printf("\n");}程序運行后從第一列開始輸入以下數據2473<回車>程序的輸出結果是A、668977B、4444C、6677877D、68766標準答案:A知識點解析:本題執行過程為:輸入c=’2’,c-’2’=0,首先匹配case0,依次輸出6,6,后執行break語句,跳出分支結構;輸入c=’4’,c-’2’=2,匹配case2,輸出8,執行break語句,跳出分支結構;輸入c=’7’,c-’2’=5,匹配default,輸出9,執行break語句,跳出分支結構;輸入c=’3’,c-’2’=1,匹配case1,依次輸出7,7,執行break語句,跳出分支結構。輸入回車,結束循環。A選項正確。38、設循環隊列為Q(1:m),其初始狀態為front=rear=m。經過一系列入隊與退隊運算后,front=15,rear=20。現要在該循環隊列中尋找最大值的元素,最壞情況下需要比較的次數為A、4B、6C、m-5D、m-6標準答案:A知識點解析:循環隊列是隊列的一種順序存儲結構,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針指向排頭元素的前一個位置,因此,從排頭指針front指向的后一個位置直到隊尾指針rear指向的位置之間所有的元素均為隊列中的元素,隊列初始狀態為front=rear=m,當front=15,rear=20時,隊列中有5個元素,比較次數為4次,A選項正確。39、有如下程序#include<stdio.h>intsum(inta,intb){returna+b-2;}main(){inti;for(i=0;i<5;i++)printf("%d",sum(i,3));printf("\n");}程序運行后的輸出結果是A、54321B、1234C、45678D、12345標準答案:D知識點解析:函數調用的一般形式為:函數名(實際參數表)對無參函數調用時,則無實際參數表。實際參數表中的參數可以是常數、變量或其它構造類型數據及表達式。各實參之間用逗號分隔。函數sum在main函數之前,所以在main函數中不需要聲明。本題程序執行過程為:在i=0,1,2,3,4時依次輸出sum(i,3),即調用sum函數后依次輸出1、2、3、4、5,D選項正確。40、以下敘述正確的是A、在C語言中分號是語句的組成部分B、C語言程序由C語句組成,可以省略main函數C、分號是C語句之間的分隔符D、所有程序行都必須用分號結束標準答案:A知識點解析:C語言C程序的入口函數是main(),因此C程序中有且只有一個main函數,故選項B錯誤。分號是C語言一條語句的結束標志,不是分隔符,C語言分隔符是用來分隔多個變量、數據項、表達式等的符號,包括逗號、空白符、分號和冒號等等,選項C錯誤。C語言的程序不是以分號結束的,分號是C語言一條語句的結束標志,C語言是面向過程的,從main函數開始在main函數里結束,選項D錯誤。故答案為A選項。二、程序填空題(本題共1題,每題1.0分,共1分。)41、給定程序的功能是:調用函數fun將指定源文件中的內容復制到指定的目標文件中,復制成功時函數返回值為1,失敗時返回值為0。在復制的過程中,把復制的內容輸出到終端屏幕。主函數中源文件名放在變量sfname中,目標文件名放在變量tfname中。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#include#includeintfun(char*source,char*target;)(FILE*fs,*ft;charch;/**********found**********/if((fs=fopen(source,______1______))==NULL)return0;if((ft=fopen(target,"w"))==NULL)return0;printf("\nThedatainfile:\n");ch=fgetc(fs);/**********found**********/while(!feof(______2______)){putchar(ch);/**********found**********/fputc(ch,______3______);ch=fgetc(fs);}fclose(fs);fclose(ft);printf("\n\n");return1;}main()(charsfname[20]="myfile1",tfname[20]="myfile2";FILE*myf;inti;chac;myf=fopen(sfname,"w");printf("\nTheoriginaldata:\n");for(i=1;i<30;i++){c=’A’+rand()%25;fprintf(myf,"%c",c);printf("%c",c);)fclose(myf);printf("\n\n");if(fun(sfname,tfname))printf("Succeed!");elseprintf("Fail!");}標準答案:(1)"r"(2)fs(3)ft知識點解析:第一空:將指定源文件中的內容復制到指定的目標文件中,源文件只需讀,因此以只讀方式打開即可,故第一空處應該是“if((fs=fopen(source,"r"))=NULL)”。第二空:“while(!feof(__2__))”循環的目的是不斷讀取源文件直至到達源文件的末尾,循環結束標志是已達到文件的末尾。用feof()函數來檢查是否已經到了文件末尾,文件狀態檢測函數feof()的調用形式是:feof(fs),如果已經到達文件尾函數返回非零值,否則返回0,故第二空處應該是“while(!feof(fs))”。第三空:考察fputc函數的使用方法,fputc函數的調用形式是:fputc(ch,ft),ch是要輸出的字符,由“ch=fgetc(fs)”從源文件讀到字符ch,然后將ch寫到目標文件中,故第三空處應該是“fputc(ch,ft);”。三、程序修改題(本題共1題,每題1.0分,共1分。)42、給定程序MODIl.C中函數fun的功能是:將長整型數s中每一位上為偶數的數依次取出,構成一個新數放在t中。高位仍在高位,低位仍在低位。例如,當s中的數為:87653142時,t中的數為:8642。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!#includevoidfun(longs,long*t){intd;longs1=1;*t=0;while(s>0){d=s%10;/************found************/if(d%2=0){*t=d*s1+*t;s1*=10;}/************found************/s\=10;}}main(){longs,t;printf("\nPleaseenters:");scanf("%1d",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}標準答案:(1)if(d%2==0)(2)s/=10;知識點解析:(1)第一個標識是判斷d是否是偶數,即比較d%2是否等于0,在C語言中,“==”表示的是“等于”,而“=”是賦值,因此第一個標識下“if(d%2=0)”應改為“if(d%2==0)”。(2)第二個標識下的“s\=10:”是對a的截取,這里的“\”本意應該是除號,但這個在C語言中是不可識別的,所以第二個標識下“s\=10;”應該改為“s/=10;”。四、程序設計題(本題共1題,每題1.0分,共1分。)43、函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在C中。合并的方式是:將a中的十位和個位數依次放在變量c的千位和十位上,b中的十位和個位數依次放在變量c的個位和百位上。例如,當a=45,b=12。調用該函數后,c=4251。注意:部分源程序存在文件PROGl.C中。數據文件IN.DAT中的數據不得修改。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。#includevoidfun(inta,intb,long*c){}voidNONO(){/+本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%1d\n",a,b,c);}fclose(rf);fclose(wf);}msin(){inta,b;longc;voidNONO();printf(”Inputa,b:”);scanf(”%d%d”,&a,&b);fun(a,b,&c);printf("Theresultis:%1d\n",c);NONO();}標準答案:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);知識點解析:(1)分解兩位數的正整數n的個位和十位數,可用n%10和n/10實現。(2)設x0、x1、x2、x3為一位數,則x0、x1×10、x2×100、x3×1000,可以分別使x0、x1、x2、x3構成個、十、百、下帶權數,而x0+x1×10+x2×100+x3×1000構成四位數。本題最多只考慮四位數。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列數據結構中,屬于非線性結構的是()。A、循環隊列B、帶鏈隊列C、二叉樹D、帶鏈棧標準答案:C知識點解析:線性結構的特點:①有且只有一個根結點;②每一個結點最多有一個前件,也最多有一個后件。不滿足線性結構條件的稱為非線性結構,二叉樹的非葉子結點最多可以有兩個后件,屬于非線性結構。2、算法的空間復雜度是指()。A、算法在執行過程中所需要的計算機存儲空間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執行過程中所需要的臨時工作單元數標準答案:A知識點解析:算法的空間復雜度是指算法在執行過程中所需要的內存空間,故本題答案為A選項。3、下列數據結構中,能夠按照“先進后出”原則存取數據的是()。A、循環隊列B、棧C、隊列D、二叉樹標準答案:B知識點解析:棧是按“先進后出”的原則組織數據的;隊列是按“先進先出”的原則組織數據的,故本題答案為B選項。4、某二叉樹共有12個結點,其中葉子結點只有1個。則該二叉樹的深度為(根結點在第1層)()。A、3B、6C、8D、12標準答案:D知識點解析:二叉樹中,度為0的結點數等于度為2的結點數加1,即n2=n0-1,葉子結點即度為0,n0=1,則n2=0,總結點數為12=n0+n1+n2=1+n1+0,則度為1的結點數n1=11,所以深度為12,故D選項正確。5、下面不能作為結構化方法軟件需求分析工具的是()。A、系統結構圖B、數據字典(DD)C、數據流程圖(DFD圖)D、判定表標準答案:A知識點解析:結構化方法軟件需求分析工具主要有數據流圖、數據字典、判定樹和判定表。6、下面不屬于軟件測試實施步驟的是()。A、集成測試B、回歸測試C、確認測試D、單元測試標準答案:B知識點解析:軟件測試主要包括單元測試、集成測試、確認測試和系統測試。7、下面描述中不屬于數據庫系統特點的是()。A、數據共享B、數據完整性C、數據冗余度高D、數據獨立性高標準答案:C知識點解析:數據庫系統的特點為高共享、低冗余、獨立性高、具有完整性等,故C選項錯誤。8、負責數據庫中查詢操作的數據庫語言是()。A、數據定義語言B、數據管理語言C、數據操縱語言D、數據控制語言標準答案:C知識點解析:數據定義語言負責數據的模式定義與數據的物理存取構建;數據操縱語言負責數據的操縱,包括查詢及增、刪、改等操作;數據控制語言負責數據完整性、安全性的定義與檢查以及并發控制、故障恢復等功能。9、設數據元素的集合D={1,2,3,4,5},則滿足下列關系R的數據結構中為線性結構的是()。A、R={(1,2),(3,2),(5,1),(4,5)}B、R={(1,3),(4,1),(3,2),(5,4))C、R={(1,2),(2,4),(4,5),(2,3)}D、R={(1,3),(2,4),(3,5),(1,2)}標準答案:B知識點解析:關系R中的每個結點由兩個部分構成,分別是數據域和指針域。B選項中可以看出,元素序列為5→4→1→3→2,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多人股份車合同協議書
- 因為遇見你離婚協議書
- 自行處理協議書
- 船舶改裝協議書
- 機械產品oem協議書
- 紙品經銷協議書
- 聯營合伙協議書
- 男女買房協議書
- 護理勞務合同和協議書
- 整形賠償及修復協議書
- DL∕T 5390-2014 發電廠和變電站照明設計技術規定
- 2024版民政局離婚協議書格式范文
- 安檢五步法的安檢流程
- 腫瘤學概論課件
- HJ 651-2013 礦山生態環境保護與恢復治理技術規范(試行)
- 關愛生命-急救與自救技能智慧樹知到期末考試答案章節答案2024年上海交通大學醫學院
- 2024年浙江省金華市東陽市中考二模語文試題(原卷版+解析版)
- 《酒店消防安全培訓》課件完整版
- 幼兒園高瞻課程
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
- 可打印的離婚協議書樣本
評論
0/150
提交評論