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

下載本文檔

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

文檔簡介

國家二級(C語言)機試模擬試卷36(共9套)(共27題)國家二級(C語言)機試模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序的功能是調(diào)用fun函數(shù)建立班級通訊錄。通訊錄中記錄每位學(xué)生的編號、姓名和電話號碼。班級的人數(shù)和學(xué)生的信息從鍵盤讀入,每個人的信息作為一個數(shù)據(jù)塊寫到名為myfile5.dat的二進制文件中。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN5typedefstruct{intnum;charname[10];chartel[10];}STYPE;voidcheck();/**********found**********/intfun(【1】*std){/**********found**********/【2】*fp;inti;if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);printf("\nOutputdatatofile!\n");for(i=0;i標(biāo)準答案:STYPEFILEfp知識點解析:第一空:在main()函數(shù)中,觀察fun()函數(shù)調(diào)用:k=fun(s),由s的定義可知s是STYPE結(jié)構(gòu)體數(shù)組,即傳入fun函數(shù)的參數(shù)是STYPE結(jié)構(gòu)體數(shù)組的首地址,因此fun()函數(shù)的參數(shù)是STYPE結(jié)構(gòu)體指針,故(1)處應(yīng)該為intfun(STYPE*std)。第二空:在C語言中,fopen函數(shù)的調(diào)用形式是:FILEfp=fopen(文件名,文件使用方式),在fun()函數(shù)體內(nèi)部,由if((fp=fopen("myfile5.dat","wb"))==NULL)可知,fp是一個指向FILE類型的指針變量,因此(2)處是指針變量fp的定義,即FILE*fp。第三空:fwrite函數(shù)的調(diào)用形式是:fwrite(buffer,size,count,fp),buffer是一個指針,指向輸入數(shù)據(jù)存放在內(nèi)存區(qū)的起始地址,size是要輸入的字節(jié)數(shù),count是要輸入大小為size個字節(jié)的數(shù)據(jù)塊的個數(shù),fp是文件指針。因此(3)處應(yīng)該添加文件指針,由前面的定義可知,fun函數(shù)內(nèi)的文件指針是fp,即(3)處是fwrite(&std[i],sizeof(STYPE),1,fp)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出:3628800。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(intk){/************found************/ifk>0return(k*fun(k-1));/************found************/elseif(k=0)return1L;}main(){intk=10;printf("%d!=%ld\n",k,fun(k));}標(biāo)準答案:if(k>0)elseif(k==0)知識點解析:(1)第一個標(biāo)識下的if語句的條件表達式,根據(jù)C語言的基本語法條件,表達式應(yīng)該用括號括起來,所以將“ifk>0”改為“if(k>0)”。(2)第二個標(biāo)識下“elseif(k=0)”判斷k是否等于0,在C語言中,“==”表示等于,而“=”表示賦值,故第二個標(biāo)識處應(yīng)為“elseif(k==0)”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,函數(shù)的功能是:判斷字符串是否為回文?若是,函數(shù)返回1,主函數(shù)中輸出:YES;否則返回0,主函數(shù)中輸出NO?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)min和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#include#defineN80intfun(char*str){}main(){chars[N];voidNONO();printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");NONO();}voidNONO(){/*請在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti;chars[N];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);if(fun(s))fprintf(wf,"%sYES\n",s);elsefprintf(wf,"%sNO\n",s);}fclose(rf);fclose(wf);}標(biāo)準答案:{inti,n=0,flag=1;//初始設(shè)置標(biāo)識位flag=1char*p=str;//設(shè)置工作指針while(*p)//取字符串大小{n++;p++;}for(i=0;i知識點解析:進入fun函數(shù),根據(jù)前面的分析:主要思路是:(1)首先用整型變量i表示所判斷的字符串中前面對應(yīng)元素的下標(biāo)。i初值為0,n是字符串的長度,通過循環(huán)來求得n。(2)然后,把下標(biāo)為i的字符與下標(biāo)為“n-1-i”的字符比較,如果相同,i加1,繼續(xù)進行一對一的字符比較。不斷重復(fù)此過程,直到i≥n/2為止。在此過程中,如果下標(biāo)為i的字符與下標(biāo)為“n-1-i”的字符不相同,則可以斷定字符串不是回文,立即退出函數(shù)。(3)如果正常結(jié)束循環(huán),就說明字符串符合回文條件。國家二級(C語言)機試模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充main函數(shù),該函數(shù)的功能是:計算兩個自然數(shù)n和m(m<10000)之間所有數(shù)的和(n和m從鍵盤輸入)。例如:當(dāng)n=1,m=100時,sum=5050:當(dāng)n=100,m=1000時,sum=495550。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#include<conio.h>main(){intn,m;longsum;【】clrscr();printf("\nInputn,m\n");scanf("%d,%d",&n,&m);while(n<=m){【】n++;}printf("sum=%【】\n",sum);}標(biāo)準答案:sum=0sum+=n1d知識點解析:第一空:變量sum進行了類型聲明,但沒有進行初始化,而后面的程序用sum來存放最后的結(jié)果,所以要在使用前將sum初始化為0。第三空:通過while循環(huán)將自然數(shù)n和m之間的數(shù)進行累加,結(jié)果存于sum中。第三空:由于sum為長整型,所以標(biāo)準輸出函數(shù)printf()中的格式控制符為“%1d”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是:從字符串s中,刪除所有小寫字母’c’。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).試題程序:#include<stdio.h>voidfun(char*s){inti,j;for(i=j=0;s[i]!=’\0’;i++)if(sill!=’c’)/********************************/s[j]=s[i];/**************found*************/s[i]=’\0’;}main(){chars[80];printf("\nEnterastring:");gets(s);printf("Theoriginalstring:")puts(s);fun(s);printf("Thestringafterdeleted:");puts(s);printf("\n\n"):}標(biāo)準答案:(1)錯誤:s[j]=s[i];正確:s[j++]=s[i];(2)錯誤:s[i]=‘\0’;正確:s[j]=‘\0’;知識點解析:由本題循環(huán)條件if(s[i]!=‘c’),可知,如果字符串中的字符不是‘c’,則執(zhí)行循環(huán),所以應(yīng)該是s[j++])=s[i],這樣錯三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun(),它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。S=1+x+x2/2!3/3!+…/xn/n!例如,當(dāng)n=10,x=0.3時,函數(shù)值為1349859。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<math.h>doublefun(doublex,intn){}main(){clrscr();printf("%f",fun(0,3,10));}標(biāo)準答案:doublefun(doublex,intn){inti;doubles=1.0.s1=1.0;for(i=1;i<=n;i++){s1=s1*i;/*各項中的階乘*/s=s+pow(x,i)/s1;/*按公式求出*/}returns;}知識點解析:本程序中用s1來表示每項的分母(即各項中的階乘),要注意本程序中s和s1的初值都為1。國家二級(C語言)機試模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:找出100~999之間(含100和999)所有整數(shù)中各位上數(shù)字之和為x(x為一正整數(shù))的整數(shù),然后輸出;符合條件的整數(shù)個數(shù)作為函數(shù)值返回。例如,當(dāng)x值為5時,100~999之間各位上數(shù)字之和為5的整數(shù)有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15個。當(dāng)x值為27時,各位數(shù)字之和為27的整數(shù)是:999。只有1個。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(intx){intn,s1,s2,s3,t;n=0;t=100;/************found*************/while(t<=【1】){/***********found*************/s1=t%10;s2=(【2】)%10;s3=t/100;/*************found**************/if(s1+s2+s3==【3】){printf("%d",t);n++;}t++;}returnn;}main()(intx=-1;while(x<0)(printf("Pleaseinput(x>0);");scanf("%d",&x);}printf("\nTheresultis:%d\n",fun(x));}標(biāo)準答案:【1】999【2】t/10【3】x知識點解析:第一空:第一處是補充while循環(huán)的終止條件,題干要求fun尋找100~999之間滿足條件的數(shù)x,因此循環(huán)終止條件是999,故第一空處應(yīng)填“999"。第二空:“s1=t%10;s2=(【2】)%10;s3=t/100;"可知s1求得t的個位數(shù),s3求得t的百位數(shù),因此s2是求t的十位數(shù)。(t/10)變量t變成兩位數(shù),再次對10取余便得到t的十位數(shù),因此第二空處應(yīng)為“t/10"。第三空:“if(s1+s2+s3==【3】)"是判斷t是否滿足題干條件:各位上數(shù)字之和為x,因此第三空處應(yīng)為“x"。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:為一個偶數(shù)尋找兩個素數(shù),這兩個素數(shù)之和等于該偶數(shù),并將這兩個素數(shù)通過形參指針傳回主函數(shù)。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includevoidfun(inta,int*b,int*c)(inti,j,d,y;for(i=3;i<=a/2;i=i+2){/**********found***********/Y=1;for(j=2;j<=Sqrt((double)i);j++)if(i%j==0)y=0;if(y==1){/***********found************/d==a-i;for(j=2;j<=sqrt((double)d);j++)if(d%j==0)y=0;if(y==1){*b=i;*c=d;}}}}main()(inta,b,c;do{printf("\nInputa:"),scanf("%d",&a);}while(a%2);fun(a,&b,&c);printf("\n\n%dl=%d+%d\n",a,b,c);}標(biāo)準答案:(1)y=1;(2)d=a—i;知識點解析:(1)第一標(biāo)識下“Y=1:"變量Y沒有定義,編譯時會提示出錯。題中用標(biāo)志y區(qū)別i是否是素數(shù),y=1是素數(shù),y=0不是素數(shù)。第一個標(biāo)識下當(dāng)i是素數(shù)時,y最后的值就是進入循環(huán)結(jié)構(gòu)前的初始化值0,標(biāo)識該值不是素數(shù),所以“Y=1;"應(yīng)該改為“y=1:"。(2)在語句“if[y=1)"中,應(yīng)該是判斷(a-i)是否是素數(shù),即d應(yīng)賦值“a-i"而不是“d==a-i:",所以第二個標(biāo)識下"d==a-i;"改為“d=a-i:"。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫一函數(shù)fun,它的功能是:計算并輸出給定整數(shù)n的所有因子(不包括l與n自身)之和。規(guī)定n的值不大于1000。例如,在主函數(shù)中從鍵盤給n輸入的值為856,則輸出為:sum=763。注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includeintfun(intn){}NONO(){/*請在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti,n,sum;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);sum=fun(n);fprintf(wf,"%d=%d\n",n,sum);}fclose(rf);fclose(wf);}main(){intn,sum;printf("Inputn:");scanf("%d",&n);sum=fun(n);printf("sum=%d\n",sum);NONO();}標(biāo)準答案:{ints=0,i;for(i=2;i知識點解析:(1)首先,在for循環(huán)過程中,利用if判斷語句判斷由2到n-1所有數(shù)字中,選擇為因子的數(shù)。(2)如果是因子,那么對其進行累計求和。國家二級(C語言)機試模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、用篩選法可得到2~n(n<10000)之間的所有素數(shù),方法是:首先從素數(shù)2開始,將所有2的倍數(shù)的數(shù)從數(shù)表中刪去(把數(shù)表中相應(yīng)位置的值置成0);接著從數(shù)表中找下一個非0數(shù),并從數(shù)表中刪去該數(shù)的所有倍數(shù);依此類推,直到所找的下一個數(shù)等于n為止。這樣會得到一個序列:2,3,5,7,11,13,17,19,23,……函數(shù)fun用篩選法找出所有小于等于n的素數(shù),并統(tǒng)計素數(shù)的個數(shù)作為函數(shù)值返回。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i標(biāo)準答案:(1)a[i](2)a[i](3)0知識點解析:第一空:循環(huán)“for(j=a[i]*2;j<=n;j+=【1】)"中,循環(huán)變量j的初始值從a[i]的2倍開始,下一次進入循環(huán)j就是a[i]的3倍,第一空處是補充j的變化情況,而j每次都增加一個a[i],即第一空處應(yīng)為“a[i]"。第二空:根據(jù)題意第二空處是從數(shù)表中找下一個非0數(shù),即在循環(huán)中比較a[i]是否為,如果為0的話,i++指向后一個數(shù)表元素,故第二空處應(yīng)為“a[i]"。第三空:根據(jù)語句“{count++;printf(count%15?"%5d":"\n%5d",a[i]);}"可知在滿足條件之后計數(shù)變量count自增,并且輸出a[i],可知a[i]是一個素數(shù),由審題分析可知,經(jīng)過篩選之后數(shù)表中非0的元素就是素數(shù),故第三空處應(yīng)為“0",即a[i]不為0的話就是素數(shù)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODII.C中函數(shù)fun的功能是:計算小于形參k的最大的10個能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳入,若k的值為500,則函數(shù)值為4622。請改正程序中的錯誤,使程序能輸出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(intk){intm=0,mc=0;while((k>=2)&&(mc<10)){/************found************/if((k%n=0)||(k%17=0)){m=m+ktmc++;}k--;}returnm;/************found************/main(){printf("%d\n",fun(500));}標(biāo)準答案:(1)if((k%13==0)||(k%17==0))(2)}知識點解析:(1)第一個標(biāo)識下的“if((k%13=0)||(k%17=0))"語句應(yīng)該是判斷k是否能被13或17整除,所以應(yīng)該用邏輯符號“=="而不是賦值符號“=",即“if((k%13==0)||(k%17==0))"。(2)第二個標(biāo)識下,“_______"明顯沒有函數(shù)結(jié)束括號,所以這里應(yīng)該填“}"。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun,函數(shù)的功能是:找出成績最低的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容。僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#include#defineN10typedefstructss{charnum[10];ints;}STU;voidfun(STUa[],STU*s){}main(){STUa[N]={{”A01”,81},{”A02”,89},{”A03”,66},{”A04”,87},{”A05”,77},{”A06”,90},{”A07”,79},{”A08”,61},{”A09”,80},{”A10”,71}},m;inti;voidNONO();printf(”****Theoriginaldata****\n”);for(i=0;i標(biāo)準答案:inti,min=a[0].s,j=0;for(i=1;ia[i].s){/*7如果最低分min仍大于當(dāng)前分*/j=i;/*記住位置*/min=a[i].s;/*把當(dāng)前分賦值給min*/}*s=a[j];知識點解析:(1)首先指定第一個成績?yōu)樽畹头謹?shù)。(2)再使用一個for循環(huán)把所有的成績進行比較,找出最低的分數(shù)來。國家二級(C語言)機試模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充main函數(shù),該函數(shù)的功能是:從鍵盤輸入一個字符串并保存在字符str1中,把字符串str1中下標(biāo)為偶數(shù)的字符保存在字符串str2中并輸出。例如,當(dāng)str1=“cdefghij”,則str2=“cegi”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#include<conio.h>#defineLEN80main(){charstr1[LEN],str2[LEN];char*p1=str1,*p2=str2;inti=0,j=0;clrscr();printf("Enterthestring:\n");scanf(【】);printf("***theorigialstring***\n");while(*(p1+j)){printf("【】",*(p1+j));j++;}for(i=0;i<j;i+=2)*p2++=*(str1+i);*p2=’\0’;printf("\nThenewstringis:%s\n",【】);}標(biāo)準答案:"%s",str1%cstr2知識點解析:第一空:本題考查對標(biāo)準輸入函數(shù)scanf()的調(diào)用格式,當(dāng)輸入字符串時,格式控制字符串為“%s”,題目要求輸入的字符串保存在str1中,所以地址表列應(yīng)為字符串的首地址,即為str1。第二空:本題考查對標(biāo)準輸出函數(shù)printf()的調(diào)用格式,當(dāng)輸出為字符型變量時,格式控制字符串為“%c”。第三空:題目要求將str1中下標(biāo)為偶數(shù)的字符保存在字符串str2中并輸出,所以ptintf()函數(shù)的輸出表列是str2。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是:讀入一個字符串(長度<20),將該字符串中的所有字符按ASCII碼降序排序后輸出。例如:輸入dafhc,則應(yīng)輸出hfdca。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,敢不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>/*************found**************/intfun(chart[]){charc;inti,j;for(i=0;i<strlen(t)-1;i++)for(j=i+1;i<strlen(t);j++)if(t[i]<t[j]){c=t[j];/*************found**************/t[i]=t[i++];t[i]=c;}}main(){chars[81];clrscr();printf("\nPleaseenteracharacterstring:");gets(s);printf("\n\nBeforesorting:\n%S",s);fun(s);printf("\nAftersortingdecendingly:\n%s",s);}標(biāo)準答案:(1)錯誤:intfun(chart[])正確:voidfun(chart[])(2)錯誤:t[j]=t[i++];正確:t[j]=t[i];知識點解析:錯誤1:該函數(shù)只是對一個字符串中的元素進行比較大小的操作,并沒有具體的返回值,因此,函數(shù)的返回值類型應(yīng)為void。錯誤2:本題的思路是利用選擇法對數(shù)組元素進行比較。所謂選擇法,是依次用當(dāng)前取得的元素和它后面的元素進行比較,在第一個元素和它后面的元素順次比較時,可以借助中間變量來對兩數(shù)進行交換,要保證這第一個元素始終存放數(shù)組中的最大數(shù),以后依次挑出次大數(shù),這樣最終的數(shù)組就是有序的。解答本題,只要理解了選擇法的思想,找到并改正錯誤就容易了。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun(),它的功能是:移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)從0到p(含p,p<n-1)的數(shù)組元素平移到數(shù)組的最后。例如:一維數(shù)組中的原始內(nèi)容為:1,2,3,4,5,6,7,8,9,10;p的值為3。移動后,一維數(shù)組中的內(nèi)容應(yīng)為:5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include<stdiO.h>#defineN80voidfun(int*w,intp,intn){}main(){in[a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theodginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\nEnterp:");scanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d”,a[i]);}標(biāo)準答案:voidfun(int*w,intp,intn){inti,J;inta[N];for(i=0;i<=p;i++)a[i]=w[i]for(i=p+1,j=0;i<n;i++,j++)w[j]=w[i];for(i=0;i<=p;i++)w[n-p-1+i]=a[i];}知識點解析:將數(shù)組后面的元素向前平移,肯定會將前面的元素覆蓋。因此,可以定義一個數(shù)組用來暫時存放前面的元素??梢韵葘[0]~w[p]依次賦給a[0]~a[p];然后將w[p]~w[n—1)移到數(shù)組的前面:再將a[0]~a[p)依次賦給w[n-p-1+i]~w[n—1]。國家二級(C語言)機試模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),作為函數(shù)值返回;并將大于平均值的數(shù)放在形參y所指數(shù)組中,在主函數(shù)中輸出。例如,有10個正數(shù):4630324061745154826,平均值為:30.500000主函數(shù)中輸出:4632404548請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!標(biāo)準答案:(1)0(2)x[i]/N(3)j++知識點解析:本題中函數(shù)fun的功能是計算形參x所指數(shù)組中N個數(shù)的平均值,并將大于平均值的數(shù)放在形參y所指數(shù)組中。計算平均值時,逐個對數(shù)組元素進行累加,得到累加和之后除以數(shù)組元素數(shù)量便得到平均值。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:計算正整數(shù)num的各位上的數(shù)字之積。例如,若輸入:252,則輸出應(yīng)該是:20。若輸入:202,則輸出應(yīng)該是:0。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(longnum){/************found************/longk;do{k*=num%10;/************found************/num\=10;}while(num);return(k);}main(){longn;printf("\nPleaseenteranumber:");scanf("%ld",&n);printf("\n%ld\n",fun(n));}標(biāo)準答案:longk=1;num/=10;知識點解析:(1)第一個錯誤標(biāo)識下的k是函數(shù)的返回值,子函數(shù)fun中在執(zhí)行“k*=num%10;”之前,只進行了定義,卻沒有賦初值,編譯時會警告變量在使用之前沒有初始化k。k代表了各個位上的數(shù)字之積,其初值應(yīng)為1。因此,第一個標(biāo)識下的“l(fā)ongk;”改為“l(fā)ongk=1;”。(2)第二個標(biāo)識下的符號“\”是非法字符,根據(jù)題意,這里應(yīng)該是進行除法運算,所以“num\=10;”應(yīng)該改為“num/=10;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、N名學(xué)生的成績已在主函數(shù)中放入一個帶頭節(jié)點的鏈表結(jié)構(gòu)中,h指向鏈表韻頭節(jié)點。請編寫函數(shù)fun,它的功能是。找出學(xué)生的最高分,由函數(shù)值返回。注意:部分源程序在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容。僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#include#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){}STREC*creat(double*s){STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(is=s[i];i++;p->next=q;p=q;}p->next=0;returnh;}outlist(STREC*h){STREC*p;p=h->next;printf("head");do{printf("->%2.0f",p->s);p=p->next;}while(p!=0);printf("\n\n");}main(){doubles[N]={85,76,69,85,91,72,64,87},max;voidNONO();STREC*h;h=creat(s);outlist(h);max=fun(h);printf("max=%6.1f\n",max);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*in,*out;inti,j;doubles[N],max;STREC*h;in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<N;j++)fscanf(in,"%lf,",&s[j]);h=creat(s);max=fun(h);fprintf(out,"%6.1lf\n",max);}fclose(in);fclose(out);}標(biāo)準答案:{doublemax=h->s;STREC*p;p=h->next;while(p){if(p->s>max)max=p->s;p=p->next;}returnmax;}知識點解析:進入fun函數(shù),根據(jù)前面的分析:(1)設(shè)置一個工作指針,指向頭節(jié)點。設(shè)置一個變量存放最大值,初值為頭節(jié)點數(shù)據(jù)域的值。(2)移動工作指針到后一個節(jié)點,并將數(shù)據(jù)域的值與max比較,將較大的值存入max。(3)移動工作指針,指向下一個節(jié)點,直到指針指向鏈表尾。國家二級(C語言)機試模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充函數(shù)proc(),該函數(shù)的功能是:從“a”到“z”統(tǒng)計一個字符串中所有字母字符各自出現(xiàn)的次數(shù),結(jié)果保存在數(shù)組buff中。注意:不區(qū)分大小寫,不能使用字符串庫函數(shù)。例如,若輸入:"A=abc+5*c",則輸出結(jié)果為:a=2b=1c=2,d以后所有字母字符出現(xiàn)的次數(shù)全為0。注意:部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的橫線上填入所編寫的若干表達式或語句。試題程序:#include#include#include#defineM100voidproc(char*str,intbuff[]){inti;char*p=str;for(i=0;i<26;i++)【1】;while(*p){if(*p>=’A’&&*p<=’Z’)【2】;if(*p>=’a’&&*p<=’z’)buff[*p-’a’]++;【3】;}}voidmain(){charstr[M];chara=’a’;intbuff[26],k;system("CLS");printf("\nPleaseenteracharstring:");scanf("%s",str);printf("\n**Theoriginalstring**\n");puts(str);proc(str,buff);printf("\n**Thenumberofletter**\n");for(k=0;k<26;k++){if(k%5==0)printf("\n");printf("%c=%d",a+k,buff[k]);}printf("\n");}標(biāo)準答案:【1】buff[i]=0【2】*p+=32【3】p++知識點解析:數(shù)組alf中存放各個字母出現(xiàn)的次數(shù),其各元素初始值為0,因此,【1】處填“alf[i]=0”;按題目中要求,不區(qū)分大小寫,應(yīng)將所有字母均轉(zhuǎn)換為小寫字母統(tǒng)一計算,因此,【2】處填“*p+=32”;要統(tǒng)計各個字母出現(xiàn)的次數(shù),應(yīng)檢查字符串中的每一個字符,每一次循環(huán)結(jié)束后,指針p應(yīng)向后移動一個位置,因此,【3】處填p++。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為:7654321時,t中的數(shù)為:7531。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/**********found***********/voidfun(longs,longt){longs1=10;*t=s%10;while(s>0){s=s/100;*t=s%10*s1+*t;/**********found************/s1=s1*100;}}main(){longs,t;printf("\nPleaseenters:");scanf("%id",&s);fun(s,&t);printf("Theresultis:%id\n",t);}標(biāo)準答案:(1)voidfun(10ngs,long*t)(2)sl=s1*10;知識點解析:(1)根據(jù)"t=s%10"判斷,t應(yīng)該是個指針變量,所以“voidfun(longs,longt)"語句中的t只需改為“voidfun(longs,long*t)"。(2)分析函數(shù)內(nèi)的循環(huán)過程可知s1的用途是每次將*t擴大,記錄每次得到的奇數(shù)位的數(shù)字的權(quán)值,s1的權(quán)值每次增加1位,因此第二個標(biāo)識下應(yīng)該是“s1=s1*10;"。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、函數(shù)fun的功能是:將兩個兩位數(shù)的正整數(shù)a、b合并形成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)的個位和百位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的千位和十位上。例如,當(dāng)a=45,b=12時,調(diào)用該函數(shù)后,c=1524。注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件in.dat中的數(shù)據(jù)不得修改。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/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=%ld\n",a,b,c);}fclose(rf);fclose(wf);}標(biāo)準答案:{*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);}知識點解析:(1)分解兩位數(shù)的正整數(shù)n的個位和十位數(shù),可用n%10和n/10實現(xiàn)。(2)設(shè)x0、x1、x2、x3為一位數(shù),則x0、x1×10、x2×100、x3×1000,可以分別使x0、x1、x2、x3構(gòu)成個、十、百、千帶權(quán)數(shù),而x0+x1×10+x2×100+x3×1000構(gòu)成四位數(shù)。本題最多只考慮四位數(shù)。國家二級(C語言)機試模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、從鍵盤輸入一組小寫字母,并保存在字符數(shù)組str中。請補充函數(shù)fun(),該函數(shù)的功能是:把字符數(shù)組str中ASCII碼為奇數(shù)的小寫字母轉(zhuǎn)換成對應(yīng)的大寫字母,結(jié)果仍保存在原數(shù)組中。例如,輸入“abcdefg”,輸出“AbCdEfG”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#defineN80voidfun(chars[]){inti;for(【】;【】;i++){if(【】)s[i]-=32;}}main(){charstr[N];clrscr();printf("\nlnputastring:\n");gets(str);printf("\n***originalstring***\n");puts(str);fun(str);printf("\n***newstring***\n");puts(str);}標(biāo)準答案:i=0s[i]!=’\0’s[i]%2!=0或s[i]%2==1知識點解析:第一空:變量i用作字符數(shù)組s的下標(biāo),所以在for循環(huán)中,i的初始值應(yīng)為0。第二空:for循環(huán)的執(zhí)行條件是當(dāng)前字符不為’\0’,即還沒有到字符串的最后一個字符’\0’第三空:如果當(dāng)前字符的ASCII碼對2求余,結(jié)果不為0,也就是等于1,則這個字符的ASCII碼為奇數(shù),要將這個小寫字母轉(zhuǎn)換成對應(yīng)的大寫字母。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為奇數(shù)的數(shù)依次取出,構(gòu)成一個新數(shù)放在沖。高位仍在高位,低位仍在低位。例如當(dāng)s中的數(shù)為87653142時,t中的數(shù)為7531。請改正函數(shù)fun()中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<conlo.h>voidfun(longs,long*t){intd;longs1=1;/*************found**************/t=0;while(s>0){d=s%10;/*************found**************/if(d%2==0){*t=d*s1+*t;s1*=10;}s/=10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}標(biāo)準答案:(1)錯誤:t=0;正確:*t=0;(2)錯誤:if(d%2==0)正確:if(d%2!=0)知識點解析:其實,本題的重點在考查兩個問題:第1個錯誤中出現(xiàn)了一個t=0,那么請看一下,t是從哪兒來的,第1次出現(xiàn)t的地方在哪兒?對,就這么簡單。那我們再來思考一下用C語言表達一個奇數(shù)的話應(yīng)該怎么表達?用數(shù)學(xué)的方法呢?偶數(shù)是能被2整除的,奇數(shù)剛好相反,那么if(d%2==0)是想表示奇數(shù)呢還是偶數(shù),看題目就明白了!三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫一個函數(shù),用來刪除字符串中的所有空格。例如:輸入asdafaaz67,則輸出為asdafaz67。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#include<ctype.h>#include<conio.h>intfun(char*str){}main(){charstr[81];intn;clrscr();printf("Inputastring:");gets(str);puts(str);fun(str);printf("***Str:%s\n",str);}標(biāo)準答案:intfun(char*str){inti,j=0;for(i=0;str[i]!=’\0’;i++)if(str[i]!=’’)/*將字符串中的空格刪去*/str[j++]=str[i];/*注意該程序中空格字符的表達方法*/str[j]=’\0’;/*在字符串最后加上結(jié)束標(biāo)記符*/}知識點解析:前面我們接觸到的題是刪除字符,但本題要求刪除所有空格,即除了空格以外的其他所有字符都要留下。由于C語言中沒有直接刪除字符的操作,所以我們對于刪除字符的操作都是采用“留下”字符的算法,以前的題目亦是如此。用str[i]從串頭到串尾逐一走動,每走到一個字符都判斷其是否為空格,若不是空格(注意在if()的單引號之間有一個空格),則將其保存str[j]中。注意j的下標(biāo)變化、初值及最后加串結(jié)束符’\0’。國家二級(C語言)機試模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充函數(shù)fun(),該函數(shù)的功能是:把從主函數(shù)中輸入的字符串str2接在字符串str1的后面。例如:str1=“Howdo”,str2=“youdo?”,結(jié)果輸出:Howdoyoudo?注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#include<conio.h>#defineN40voidfun(char*str1,char*str2){inti=0;char*pl=str1;char*p2=str2;while(【】)i++;for(;【】;i++)*(p1+i)=【】;*(p1+i)=’\0’;}main(){charstr1[N],str2[N);clrscr();printf("*****Inputthestringstr1&Str2*****\n");printf("\nstr1:");gets(str1);printf("\nstr2:");gets(str2);printf("**Thestringstr1&str2**\n");puts(str1);puts(str2);fun(str1,str2);printf("*****Thenewstring*****\n");puts(str1);}標(biāo)準答案:*(p1+i)*p2*p2+

溫馨提示

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

最新文檔

評論

0/150

提交評論