版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
國家二級(C語言)機試模擬試卷20(共9套)(共27題)國家二級(C語言)機試模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、字符串str由數(shù)字字符‘0’和‘1’組成(長度不超過8個字符),可看作二進制數(shù),請補充函數(shù)fun(),該函數(shù)的功能是:把str字符串轉(zhuǎn)換成十進制數(shù),結(jié)果由函數(shù)返回。例如,輸入“1001”,結(jié)果輸出:9。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#include<stdlib.h>#include<string.h>intfun(char*str){intn;char*p=str;【】;p++;while(*p){n=【】;p++;}return【】;}main(){charstr[9];inti;intn;printf("Enterastringmadeupof’0’and’1’digitalcharacter:");gets(str);if(strlen(str)>8){printf("Error:stringtoolonger!pleaseinputagain!\n\n");exit(0);}for(i=0;str[i];i++)if(str[i]<’0’||str[i]>’1’){printf("Error:%cnotis’0’and’1’digitalcharacter!\n\n",str[i]);exit(0);}printf("Theoriginalstring:");puts(str);n=fun(str);printf("\n%sisconveredtodecimalnumber:%d\n\n",str,n);}標準答案:n=*p-’0’n*2+*p’0’n知識點解析:第一空:’0’和’1’是字符串中的數(shù)字字符,為了進行數(shù)字運算,必須要將數(shù)字字符轉(zhuǎn)換為數(shù)字,用數(shù)字字符減去字符’0’的ASCII碼,就得到對應(yīng)的數(shù)字。第二空:將二進制數(shù)轉(zhuǎn)換為十進制數(shù)的算法是:以1001為例,對應(yīng)的十進制數(shù)為1*23+0*22+0*2+1=2*(2*(2*1+0)+0)+1=9。明白了這一算法,此空就非常容易了。第三空:最后計算的結(jié)果存放在變量n中,所以函數(shù)的返回值為n。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序中,函數(shù)fun()的功能是:使數(shù)組中的元素的值縮小5倍。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<conio.h>floatm[10];/*************found**************/intfun(void){intj;printf("Insubfuncaftercalling\n");for(j=O;j<lO;j++){;/*************found**************/print("%f",m[j]%5);}}main(){inti;printf("Inmainbeforecalling\n");for(i=0;i<10;i++){m[i]=i+20;printf("%f",m[i]);}fun();printf("\nInmainaftercalling\n");for(i=O;i<10;i++)printf("%f",m[i]/5);}標準答案:(1)錯誤:intfun(void)正確:voidfun(void)(2)錯誤:printf("%f",m[j]%5);正確:printf("%f",m[j]/5);知識點解析:錯誤1:函數(shù)fun()沒有返回值,所以定義函數(shù)類型為void。錯誤2:此處考查的是除法運算符和取余運算符的區(qū)別。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun(),它的功能是:將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分數(shù)放在below所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10,20,30,40,50,60,70,80,90時,函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10,20,30,40。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>intfun(intscore[],intm,intbelow[]){}main(){ihti,n,below[9];intscore[9]={10,20,30,40,50,60,70,80,90};clrscr();n=fun(score,9,below);printf("\nBelowtheaveragescoreare:");for(i=0;i<n;i++)printf("%d",below[i]);}標準答案:intfun(intscore[],intm,intbelow[]){inti,j=0;floatav=0.0;for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]<av)/*如果分數(shù)低于平均分,則將此分數(shù)放入below數(shù)組中*/below[j++]=score[i];returnj;/*返回低于平均分的人數(shù)*/}知識點解析:該題第1個循環(huán)的作用是求出平均分av,第2個循環(huán)的作用是找出低于平均分的成績并存入below數(shù)組中。國家二級(C語言)機試模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:找出N×N矩陣中每列元素中的最大值,并按順序依次存放于形參b所指的一維數(shù)組中。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i標準答案:(1)a[0][i](2)<(3)x,y知識點解析:第一空:第二個循環(huán)是尋找每列的最大值,方法是用最大值變量b[i]標記第一個待找數(shù)據(jù),逐個把所有待找數(shù)據(jù)和b[i]進行比較,并用b[i]標記其當(dāng)前最大值,從而找出最大值。故第一空處為第一個待找數(shù)據(jù)“a[0][i]。第二空:由上述的分析可知,如果b[i]小于a[j][i],那么用b[i]標記其當(dāng)前最大值,故第二空處為“<"。第三空:fun函數(shù)的聲明為:voidfun(int(*a)[N],int*b),函數(shù)的兩個參數(shù)均是指針。故在主函數(shù)內(nèi)fun函數(shù)的調(diào)用形式為“fun(x,y)",x是二維數(shù)組首地址,y是一維數(shù)組首地址。二、程序修改題(本題共1題,每題1.0分,共1分。)2、數(shù)列中,第一項為3,后一項都比前一項的值增5。下列給定程序中,函數(shù)fun()的功能是:計算前n(4≤n≤50)項的累計和。在累加過程中把那些被4除后余2的當(dāng)前累加值放入數(shù)組中,符合此條件的累加值的個數(shù)作為函數(shù)值返回主函數(shù)里。如,當(dāng)n的值為20時,該數(shù)列為3,8,13,18,23,28,…,93,98。符合此條件的累加值應(yīng)為42,126,366,570,1010。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#defineN20intfun(ihtn,int*a)/*************found*************/{inti,j,k,sum;sum=0;for(k=3,i=0;i<n;i++,k+=5){sum=sum+k;/************found***************/if(sum%4=2)a[j++]=sum;}/*************found**************/returnj;}main(){inta[N],d,n,i;printf("\nEntern(4<=n<=50):");scanf("%d",&n);d=fun(n,a);printf("\n\nTheresult:\n");for(i=0;i<d;i++)printf("%6d",a[i]);printf("\n\n");}標準答案:(1)錯誤:inti,j,k,sum;正確:inti,j=0,k,sum;(2)錯誤:if(sum%4=2)正確:if(sum%4=2)(3)錯誤:returnj;正確:returnj++;知識點解析:按照老辦法,我們先看數(shù)學(xué)思路,該題是一個公差為5的等差數(shù)列,簡單吧,要是用數(shù)學(xué)的辦法解決也就是一個公式兩個符號,迎刃而解,所以這樣很有規(guī)律的等差數(shù)列前n項和用C語言來求的話,也相當(dāng)簡單,關(guān)鍵看細節(jié)!i,k,sum都分別定義了,那j呢?所以,正確的應(yīng)該是inti,j=0,k,sum;,再往下看,if(sum%4=2)是在說明題干中“在累加過程中把那些被4除后余2的當(dāng)前累加值放入數(shù)組中,符合此條件的累加值的個數(shù)作為函數(shù)值返回主函數(shù)”,那么“余2”的表示方法呢?不用看就知道應(yīng)該是if(sum%4==2),后面的返回錯誤就不提了吧,看看a[j++]=sum;語句,難道還能返回給j嗎?三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是:計算并輸出下列多項式的值:例如,在主函數(shù)中從鍵盤給n輸入8后,輸出為:s=0.662872。注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includedoublefun(intn){}NONO()(/*請在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen(”in.dat”,”r”);wf=fopen(”out.ctat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%d”,&n);S=fun(n);fprintf(wf,”%lf\n”,s);}fclose(rf);fclose(wf);}main(){intnjdoubles;printf("\nInputn:");scanf(”%d”,&n);s=fun(n);printf(”\ns=%f\n”,s);NONO();}標準答案:{inti;doublesum=0.0;if(n>1&&n<=100){for(i=1;i<=n;i++)sum+=1.0/(2*i-1)-1.0/(2*i);}returnsum;}知識點解析:(1)根據(jù)題干中給出的數(shù)列,推出每一項是(1.0/(2*i-1)-1.0/(2*i))。(2)在循環(huán)中求得每一項,然后對其進行累加求和。國家二級(C語言)機試模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:計算請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!標準答案:(1)x(2)n(3)t知識點解析:本題中函數(shù)的功能是計算級數(shù)和,級數(shù)項的變化規(guī)律是:后面一項是在前面一項的基礎(chǔ)上乘以x除以n。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:根據(jù)整型形參m,計算如下公式的值。例如,若m中的值為:5,則應(yīng)輸出:1.463611。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!標準答案:(1)for(i=2;i<=m;i++)(2)y+=1.O/(i*i);知識點解析:該題中函數(shù)功能是計算公式的值。其中,公式中涉及在循環(huán)中對各項的計算及累加求和。從已給定源程序的main主函數(shù)開始入手,“printf(〝\nTheresultis%1f\n〞,fun(n));”語句中調(diào)用fun函數(shù),計算公式的值。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編一個函數(shù)fun,函數(shù)的功能是使實型數(shù)保留2位小數(shù),并對第三位進行四舍五入(規(guī)定實型數(shù)為正數(shù))。例如:實型數(shù)為1234.567,則函數(shù)返回1234.572000;實型數(shù)為1234.564,則函數(shù)返回1234.562000。注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。標準答案:知識點解析:該程序功能是進行四舍五入。其中,通常求實數(shù)x保留m位小數(shù),首先將x擴大10(m+1)倍,擴大后的x加上5后,進行截取判斷,最后進行恢復(fù)。國家二級(C語言)機試模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:將形參sut所指結(jié)構(gòu)體數(shù)組中年齡最大者的數(shù)據(jù)作為函數(shù)值返回,并在main函數(shù)中輸出。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includetypedefstruct{charname[10];intage;}STD;STDfun(STDstcl[],int.n){STDmax;inti;/**************found***************/max=【1】;for(i=1;i標準答案:*stdstd[i].age知識點解析:第一空:max變量保存最大值,在循環(huán)開始之前,先給max賦值并假定這個值就是最大值,即“max=*std;”給max賦初值。第二空:“if(max.age<___2___)”比較max的age成員變量和std[i]的age成員變量,如果max的age變量小于std[i]的age成員變量,那么將std[i]賦給max,即第二空處應(yīng)為“if(max.age二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:計算整數(shù)n的階乘。請改正程序中的錯誤或在下劃線處填上適當(dāng)?shù)膬?nèi)容并把下劃線刪除,使它能計算出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includedoublefun(intn){doubleresult=1.0;while(n>1&&n<170)/******************found*******************/result*=--n;/******************found*******************/return__________;}main(){intn;printf(”EnLeraninteger:”);scanf(”%d”,&n);printf(”\n\n%d!=%lg\n\n”,i"1,fun(n));}標準答案:result*=n--;returnresult;知識點解析:(1)第一個標識下while循環(huán)過程實現(xiàn)n的階乘,根據(jù)階乘的算法n!=n*(n-1)*…*1,題干中的語句“result*=--n;”先對n進行減1操作,結(jié)果就少乘了n,所以將“result*=--n;”改為“result*=n--;”。(2)根據(jù)fun函數(shù)的定義,fun函數(shù)應(yīng)該返回階乘結(jié)果,所以第二個標識下填空為“returnresult;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫一個函數(shù)fun,它的功能是:計算n門課程的平均分,計算結(jié)果作為函數(shù)值返回。例如:若有5門課程的成績是:90.5,72,80,61.5,55則函數(shù)的值為:71.80。注意:部分源程序存在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includefloatfun(float*a,intn){}main(){floatscore[30]={90.5,72,80,61.5,55},aver;voidNONO();aver=fun(score,5);printf("\nAveragescoreis:%5.2f\n",aver);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,j;floataver,score[5];fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<5;j++)fscanf(fp,"%f,",&score[j]);aver=fun(score,5);fprintf(wf,"%5.2f\n",aver);}fclose(fp);fclose(wf);}標準答案:{inti;floatave=0.0;for(i=0;i知識點解析:(1)在函數(shù)中首先定義平均分的變量,并將其初始化值置為0。(2)然后在for循環(huán)中,求得所有成績的總分,并在總分的基礎(chǔ)上求得平均分。國家二級(C語言)機試模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:在3×4的矩陣中找出在行上最大、在列上最小的那個元素,若沒有符合條件的元素則輸出相應(yīng)信息。例如,有下列矩陣:[*]程序執(zhí)行結(jié)果為:find:a[2][2]=9請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#defineM3#defineN4voidfun(int(*a)[N]){inti=0,j,find=0,rmax,c,k;while((i標準答案:(1)j(2)0(3)i++知識點解析:第一空:“rmax=a[i]啪;c=【1】;}"ramx存放行上最大值,根據(jù)下面一個循環(huán)體內(nèi)“if(k!=i&&a[k][c]<=rmax)"可知,c存放rmax所在的列的位置,故第一空處應(yīng)為“i"。第二空:“if(k!=i&&a[k][c]<=rmax)find=【2】;"如果列上的元素a[k][c]比rmax還小,說明rmax不是列上最小值,那么標識變量find應(yīng)該為假,下次就無須進入while(k二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:用遞歸算法計算斐波拉契數(shù)列中第n項的值。從第1項起,斐波拉契數(shù)列為:1、1、2、3、5、8、13、21、……例如,若給n輸入7,該項的斐波拉契數(shù)值為:13。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#includelongfun(intg){/**********found**********/switch(g);/*switch語句*/{case0:return0;/**********found**********/case1;case2:return1;}return(fun(g-1)+fun(g-2));}main(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d\n",n);fib=fun(n);printf("fib=%d\n\n",fib);}標準答案:switch(g)case1:return1知識點解析:(1)第一個標識下的switch后用括號括起來的表達式的標準語法后面是沒有“;”的,所以“switch(g);”應(yīng)該改為“switch(g)”。(2)第二個標識下的case加常量表達式的后面用冒號連接選擇語句,所以“case1;”改為“case1:”?!癱ase1:”和“case2:”都是返回1,應(yīng)該寫兩個“return1”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫一個函數(shù)fun,它的功能是:將一個數(shù)字字符串轉(zhuǎn)換為一個整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。例如,若輸入字符串"-1234",則函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#includelongfun(char*p){}main()/*主函數(shù)*/{chars[6];voidNONO();longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%ld\n",n);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti;chars[20];longn;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%s",s);n=fun(s);fprintf(wf,"%ld\n",n);}fclose(fp);fclose(wf);}標準答案:longs=0,t;inti=0,j,n=strlen(p),k,s1;//求得字符串長度nif(p[0]==’-’)i++;for(j=i;j<=n一1;j++){t=p[j]一’0’;//把字符變成數(shù)值s1=10;for(k=j;k知識點解析:進入fun函數(shù),根據(jù)前面的分析:從左到右移動指針p。利用上一步不斷把t中的數(shù)據(jù)左移一位,把p當(dāng)前所指字符轉(zhuǎn)換成數(shù)字再加上低位,從而把數(shù)字字符串轉(zhuǎn)換成一個整數(shù)。國家二級(C語言)機試模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:求ss所指字符串?dāng)?shù)組中長度最長的字符串所在的行下標,作為函數(shù)值返回,并把其串長放在形參n所指變量中。ss所指字符串?dāng)?shù)組中共有M個字符串,且串長#include#defineM5#defineN20/**********found**********/intfun(char(*ss)【1】,int*n){inti,k=0,len=0;for(i=0;i*n){/**********found**********/【3】;k=i;}}return(k);}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};intn,k,i;printf("\nTheoriginalstringsare:\n");for(i=0;i標準答案:[N]len*n=len知識點解析:第一空:在主函數(shù)內(nèi)fun函數(shù)調(diào)用“k=fun(ss,&n);”可知,fun函數(shù)的第一個參數(shù)為數(shù)組首地址,是指針變量,故第一空處的fun函數(shù)定義應(yīng)為“[N]”。第二空:由審題分析可知,i=0時,記錄長度的變量*n應(yīng)該賦初值len,故第二空處應(yīng)為“l(fā)en”。第三空:由審題分析可知,如果len比*n大,那么*n記錄這個大的值,故第三空處應(yīng)為“*n=len;”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對調(diào)、次最大數(shù)和a[1]中的數(shù)對調(diào)。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#defineN20intfun(int*a,intn){inti,m,t,k;for(i=0;i<2;i++){/**********found**********/m=0;for(k=i+1;ka[m])t=a[i];a[i]=a[m];a[m]=t;}}main(){intx,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;for(i=0;i標準答案:m=i;if(a[k]>a[m])m=k;知識點解析:(1)第二個標識符下for循環(huán)逐個對m個數(shù)據(jù)進行選擇判斷,原題中“m=0;”語句將m值設(shè)置為0,在循環(huán)中m值始終是0,不會改變,根據(jù)“for(i=0;i<2;i++)”語句中的循環(huán)條件,“m=0;”改為“m=i;”。(2)如果“if(a[k]>a[m])”,a[k]比a[m]大,m記錄下下標值k,內(nèi)層循環(huán)結(jié)束的時候a[m]值就是本次循環(huán)找到的最大值(如果m=0,a[m]是數(shù)組中的最大值;如果m=1,a[m]數(shù)組中的次最大值),即m記錄最大值的下標值,因此第二標識下應(yīng)該是“if(a[k]>a[m])m=k;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun,函數(shù)的功能是:根據(jù)以下公式計算s,計算結(jié)果作為函數(shù)值返回;n通過形參傳入。例如:若n的值為11時,函數(shù)的值為:1.833333注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includedoublefun(intn){}returnstr;}main(){intn;doubles;voidNONO();printf("\nPleaseenterN:");scanf("%d",&n);s=fun(n);printf("theresultis:%f\n",s);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}標準答案:{intk;floatstr=1.0,sum=1.0;for(k=2;k<=n;k++){sum=sum+k;//求得每一項的分母str=str+1/sum;//級數(shù)累加求和}知識點解析:進入fun函數(shù),根據(jù)前面的分析:首先,求得每一項分母的值sum,即利用上一項來表示“sum=sum+k;”。然后,對每一項進行累加“str=str+1/sum;”。最后,返回運算結(jié)果“str”。國家二級(C語言)機試模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、請補充函數(shù)fun(),該函數(shù)的功能是:把一個字符串中的字符(字母)按從小到大排序,并把這個全部由字母組成的字符串保存在原串中,函數(shù)返回這個字符串的長度。例如;輸入“cixbr2.3”,如果為bcirx,字符串長度為5。注意:部分源程序給出如下.請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。#include<stdio.h>#defineN20intfun(char*str){inti=0,j=0,k=-0,m=0;chart;char*p=str;while(*p){if((*p>=’A’&&*p<=’Z’)||(*p>=’a’&&*p<=’z’))【】p++;}*(str+i)=’\0’;【】;while(*(p+j)){k=j;【】;while(*(p+k)){if(*(p+k)<*(str+m){t=*(str+m);*(str+m)=*(p+k);*(p+k)=t;}k++;}j++;}returni;}main(){charstr[81];ihtn;clrscr();printf("Inputtheoriginalstring");gets(str);printf("***TheOriginalstring***In");puts(str);printf("***Thenwestring***\n");n=fun(str);puts(str);printf("***Thelengthofnewstringis:%d***\n",n);}標準答案:*(str+i++)=*pp=strm=j知識點解析:第一空:將字符串中的字母字符存入原字符串str中,通過變量i的自加逐一向后移動字符串指針。第二空:從后面的程序中可以看出,通過指針p對字符串進行排序,所以應(yīng)使指針p指向字符串str的首部,即將字符串str的首地址賦給p。第三空:本題采用選擇法對字符串進行排序,選擇法的思路是,假設(shè)從小到大排序,依次用當(dāng)前取得的元素和它后面的所有元素進行比較,在第一個元素和它后面的元素順次比較時,可以借助中間變量來對兩數(shù)進行交換,要保證這第一個元素始終存放數(shù)組中的最小數(shù),以后依次挑出次小數(shù),這樣最終的數(shù)組就是按從小到大的順序排列。此處要將變量j的值賦給m。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參m的值,計算如下公式的值。t=1-1/(2×2)-1/(3×3)-…-l/(m×m)請改正函數(shù)fun()中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>doublefun(intm){doubley=1.O;inti;/*************found**************/for(i=2;i<m;i++)/************found**************/y-=1/(i*i);return(y);}main(){intn=5;clrscr();printf("\nTheresultis%1f\n",fun(n));}標準答案:(1)錯誤:for(i=2;i<m;i++)正確:for(i=2;i<=m;i++)(2)錯誤:y-=1/(i*i);正確:y-=1.0/(i*i);知識點解析:該題是一道簡單的計算題,循環(huán)條件for(i=2;i<m;i++)中忽略了i=m時的一種情況,因為題目中i是從2到m的一個計算公式,y-=1/(i*i);的錯誤很明顯,是語法錯誤,由定義doubley=1.0可知,應(yīng)該是y-=1.0/(i*i);,而非y-=1/(i*i);。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫一個函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個素數(shù)存入所指的數(shù)組中。例如,若輸入17,5,則應(yīng)輸出19,23,29,3l,37。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(intm,intk,intxx[]){}main(){intm,n,zz[1000];clrscr();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=O;m<n;m++)printf("%d",zz[m]);printf("\n");}標準答案:voidfun(intm,intk,intxx[]){inti,j,n;for(i=m+1,n=0;n<k;i++)/*找大于m的素數(shù),循環(huán)k次,即找出緊靠m的k個素數(shù)*/{for(j=2;j<i;j++)/*判斷一個數(shù)是否為素數(shù),如果不是,跳出此循環(huán),判斷下一個數(shù)*/if(i%j==O)break;if(j>=i)/*如果是素數(shù),放入數(shù)組xx中*/xx[n++]=i;}}知識點解析:本題只要掌握了判斷素數(shù)的算法即不難完成了,其實程序缺少部分也正是這部分。國家二級(C語言)機試模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:把形參s所指字符串中下標為奇數(shù)的字符右移到下一個奇數(shù)位置,最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,下標為偶數(shù)的字符不動(注:字符串的長度大于等于2)。例如,形參s所指的字符串為:abcdefgh,執(zhí)行結(jié)果為:ahcbedgf。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=’\0’;i++)n++;/**********found**********/if(n%2==0)k=n-【1】;elsek=n-2;/**********found**********/c=【2】;for(i=k-2;i>=1;i=i-2)s[i+2]=s[i];/**********found**********/s[1]=【3】;}main(){chars[80]="abcdefgh";printf("\nTheoriginalstringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}標準答案:1s[k]c知識點解析:第一空:“for(i=0;s[i]!=’\0’;i++)n++;”n記錄了數(shù)組s的長度,“if(n%2==0)”如果長度n是偶數(shù),那么最右邊被移出的字符的下標是在n-1,如果n是奇數(shù),那么最右邊被移出的字符的下標是n-2,因此第一空處應(yīng)為“1”。第二空:題目要求最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,因此最右邊被移出的字符是s[k],在s[k]被替換之前必須先把s[k]保存在其他變量中,故第二空處應(yīng)為“s[k]”,將s[k]保存在c中。第三空:此處是把最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,最右邊被移出字符保存在c,第一奇數(shù)位置是s[1],故第三處應(yīng)為“c”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun()的功能是;將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(但Z轉(zhuǎn)化為A,z轉(zhuǎn)化為a),其他字符不變。請改正函數(shù)fun()中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<ctype.h>#include<conio.h>voidfun(char*s)/*************found**************/{while(*s!=’@’){if(*s>=’A’&*s<=’z’||*s>=’a’&&*s<=’z’){if(*s==’Z’)*S=’A’;elseif(*S==’z’)*s=’a’;else*s+=1;}/*************found**************/(*s)++;}}main(){chars[80];clrscr();printf("\nEnterastringwithlength<80:\n\n");gets(s);printf("\nThestring:\n\n");puts(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}標準答案:(1)錯誤:while(*s!=’@’)正確:while(*s)(2)錯誤:(*s)++;正確:s++;知識點解析:根據(jù)題目要求,可對字符串所有字母進行遍歷。對每一個字母,若該字母為’z’或’Z’,將該字母改成’a’或’A’,即ASCII碼值減25,當(dāng)然也可以用題目中的if語句來實現(xiàn)轉(zhuǎn)換。若該字母不是’z’或’Z’,則該字母的ASCII碼值加1;對字符串所有字符重復(fù)以上過程即可得到題目要求的結(jié)果,可用循環(huán)語句和條件語句來實現(xiàn)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、下列程序定義了NXN的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)fun(),函數(shù)的功能是求出數(shù)組周邊元素的平方和并作為函數(shù)值返回給主函數(shù)中的S。例如:若a數(shù)組中的值為a=012791112155221611197910254141則返回主程序后s的值應(yīng)為310。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5intfun(intw[][N]){}main(){inta[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};inti,j;intS;clrscr();printf("*****Thearray***+*\n");for(i=0;i<N;i++){for(j=0;j<N;i++){printf(“%4d”,a[i][j]);}printf("\n");}s=fun(a);printf(“*****THERESULT*****\n”);printf("Thesumis:%d\n",s);}標準答案:intfun(intw[])[N]){inti,j,k=0;ints=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,則它一定是周邊元素*/{s=s+w[i][j]*w[i][j];/*將周邊元素求平方和*/}returns;/+返回周邊元素的平方和*/}知識點解析:該題采用逐一判斷的方式,周邊元素的下標一定有一個是0或N-1,且只要下標中有一個為0或N-1,則它一定是周邊元素。國家二級(C語言)機試模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、字符串str由數(shù)字字符組成(長度不超過5個字符),可看作任意進制的數(shù),請補充函數(shù)fun(),該函數(shù)的功能是:把str字符串轉(zhuǎn)換成任意進制的數(shù),結(jié)果保存在數(shù)組xx中,由函數(shù)返回轉(zhuǎn)換后數(shù)組腆的實際長度。其中x表示str原來的進制,y表示要轉(zhuǎn)換成的進制。例如,輸入str=“1111”,x=2,y=10,結(jié)果輸出:15。如果輸入str=“15”,x=10,Y=2,結(jié)果輸出:1111。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN8intxx[N];intfun(char*str,intx,inty){intsum;inti=0;char*p=str;for(i=0;i<N;i++)xx[i]=0;sum=*p-’0’;p++;while(*p){sum=【】;p++;}i=0;while(sum!=0){xx[i]=【】;【】;i++;}returni;}main(){charstr[6];inti;intn;intx;inty;printf("Enterastringmadeupof’0’to’9’digitscharacter:");gets(str);if(strlen(str)>5){
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微流控芯片應(yīng)用研究-洞察分析
- 概率圖模型課程設(shè)計
- 牙簽盒課程設(shè)計
- 柴油預(yù)熱器課程設(shè)計
- 2024年度抵押式電力供應(yīng)與維護服務(wù)合同3篇
- 文件加解密 課程設(shè)計
- 微信洗襪機課程設(shè)計
- 2024年度滴滴代駕專項補貼扶持合同范本3篇
- 2024年混合料快速物流合同
- 應(yīng)急照明課程設(shè)計
- 老年人合理用藥新進展課件
- 工程經(jīng)濟學(xué)案例分析課程設(shè)計
- 公司投產(chǎn)慶典策劃方案
- 服務(wù)管理的價值創(chuàng)造
- 內(nèi)科醫(yī)生如何與患者建立有效的溝通
- 植物生長與環(huán)境課程教案
- 歌廳消防安全管理制度
- 獨立基礎(chǔ)計算(帶公式)
- 基站電力維護管理制度
- 《雪地尋蹤》選擇題及答案
- 2023年NPI產(chǎn)品工程師年度總結(jié)及下年工作展望
評論
0/150
提交評論