版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
國家二級C語言機試(操作題)模擬試卷23(共9套)(共27題)國家二級C語言機試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:把形參s所指字符串中最右邊的n個字符復(fù)制到形參t所指字符數(shù)組中,形成一個新串。若s所指字符串的長度小于n,則將整個字符串復(fù)制到形參t所指字符數(shù)組中。例如,形參s所指的字符串為:abcdefgh,n的值為5,程序執(zhí)行后t所指字符數(shù)組中的字符串應(yīng)為:defgh。請在程序的下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>#defineN80voidfun(char*s,intn,char*t){intlen,i,j=0;len=strlen(s):/******found******/if(n>=len)strepy(____1____):else{for(i=len—n;i<=len—1;i++)/******found******/t[j++]=____2____;/******found******/t[j]=____3____;}}main(){chars[N],t[N];intn;printf(″Enterastring:″);gets(s);printf(″Entern″);scanf(″%d″,&n);fun(S,n,t);printf(″Thestringt:″);puts(t);標(biāo)準(zhǔn)答案:(1)t,s(2)s[i](3)0或′\0′知識點解析:本題考查:在矩陣中找出在行上最大、在列上最小的那個元素。填空1:當(dāng)給定的長度n大于該字符串s的長度,那么把該字符串直接復(fù)制到t就可以了,所以應(yīng)填t,s。填空2:使用for循環(huán)語句,把最右邊n個字符依次添加到t中,所以應(yīng)填s[i]。填空3:字符串操作結(jié)束,需要給t加一個字符串結(jié)束符,所以應(yīng)填0或′\0′。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序的功能是:讀入一個整數(shù)k(2≤k≤10000),輸出它的所有質(zhì)因子(即所有為素數(shù)的因子)。例如,若輸入整數(shù)2310,則應(yīng)輸出2,3,5,7,11。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>/******found******/IsPrime(intn);{inti,m;m=1for(i=2;i<n;i++)/******found******/if!(n%i){m=0;break;}return(m);}main(){intj,k;printf(″\nPleaseenteranintergernumberbetween2and10000:″);scanf(″%d″,&k);printf(″\nTheprimefactor(s)of%dis(are):″,k);for(j=2;j<k;j++)if((!(k%j))&&(IsPrime(j)))printf(″%4d,″,j);printf(″\n″);}標(biāo)準(zhǔn)答案:(1)IsPrime(intn)(2)if(!(n%i))知識點解析:本題考查:函數(shù)定義的格式;if條件的判斷語句。這些知識點必須掌握,因為經(jīng)??嫉?。(1)函數(shù)定義格式錯誤,函數(shù)定義時后面不能加“;”,所以應(yīng)該去掉分號。(2)根據(jù)題意可知,if條件語句判斷n是否可以整除i,如果不能整除則為質(zhì)因子,所以if!(n%i)應(yīng)改為if(!(n%i))。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編函數(shù)fun,其功能是將一個數(shù)字字符串轉(zhuǎn)換成與其面值相同的長整型整數(shù)??烧{(diào)用strlen函數(shù)求字符串的長度。例如,在鍵盤輸入字符串2345210,函數(shù)返回長整型數(shù)2345210。注意:請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun指定的部位填入所編寫的若干語句。試題程序:#include<stdio.h>#include<string.h>voidNONO();longfun(char*s){}main(){chars[10];longr;printf(″請輸入一個長度不超過9個字符的數(shù)字字符串:″);gets(s);r=fun(s);printf(″r=%ld\n″,r);NONO();}voidNONO()/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/{FILE*fp,*wf;inti;longr;chars[10],*P;fp=fopen(″in.dat″,″r″);wf=fopen(″out.dat″,″w″);for(i=0;i<10;i++){fgets(s,10,fp);p=strchr(s,′\n′);it(p)*p=0;r=fun(s);fprintf(wf,″%ld\n″,r);}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:longfun(char*s){inti,sum=0,len;len=strlen(s);for(i=0;i<len;i++){sum=sum*10+*s—48;s++;}returnsum:}知識點解析:要把一個數(shù)字字符轉(zhuǎn)為相應(yīng)的數(shù)字,只要用它的ASCⅡ碼減去48即可。要把數(shù)字字符串轉(zhuǎn)為相應(yīng)的數(shù)字,則要從左到右依次取出字符轉(zhuǎn)為相應(yīng)數(shù)字,乘10再加上下一位數(shù)字。國家二級C語言機試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:將形參s所指字符串中的所有字母字符順序前移,其他字符順序后移,處理后將新字符串的首地址作為函數(shù)值返回。例如,若s所指字符串為“asd123fgh543df”,處理后新字符串為“asdfghdfl23543”。請在程序的下劃線處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<stdlib.h>#include<string.h>char*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i<n;i++){if(((s[i]>=’a’)&&(s[i]<=’z’))‖((s[i]>=’A’)&&(s[i]<=’Z’))){/*********found*********/t[j]=【1】;j++;)else{P[k]=s[i];k++;))/*********found*********/for(i=0;i<【2】;i++)t[j+i]=p[i];/*********found*********/t[j+k]=【3】;returnt;}main(){chars[80];printf("Pleaseinput:");scanf("%s",s);printf{"\nTheresultis:%s\n",fun(s));}標(biāo)準(zhǔn)答案:(1)s[i](2)k(3)’\0’或0知識點解析:填空1:將字符串s中所有字母元素賦給數(shù)組t。填空2:字符串中所有非字母元素放到字母元素后面,所以i的取值范圍是0~k。填空3:最后給字符串加入結(jié)束標(biāo)識’\0’。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與t1所指字符串相同的子串替換成t2所指字符串,所形成的新串放在W所指的數(shù)組中。要求t1和t2所指字符串的長度相同。例如,當(dāng)s所指字符串中的內(nèi)容為“abcdabfabe”,t1所指串中的內(nèi)容為“ab”,t2所指子串中的內(nèi)容為“99”時,結(jié)果在W所指的數(shù)組中的內(nèi)容應(yīng)為“abcdabf99c”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);/*********found*********/while(w){p=w;r=t1;while(*r)/*********found*********/IF(*r==*p){r++;p++;}else{break;}if(*r==’\0’)a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],t1[100],t2[100],w[i00];printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt1l:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}else{printf("\nError:strlen(t1)!=strlen(t2)\n");}}標(biāo)準(zhǔn)答案:(1)while(*w)(2)if(*r==*p)知識點解析:(1)此處要判斷的是值的真假,而不是地址,所以改為while(*w)。(2)c語言中關(guān)鍵字區(qū)分大小寫,只需運行程序,就可以根據(jù)錯誤提示找到。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,編寫函數(shù)fun,其功能是:將S所指字符串中ASCII碼值為奇數(shù)的字符刪除,剩余字符形成的新串放在t所指數(shù)組中。例如,若s所指字符串中的內(nèi)容為“ABCDEFGl2345”,其中字符A的ASCII碼值為奇數(shù),字符1的ASCII碼值也為奇數(shù),都應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是“BDF24”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){charS[100],t[100],Msg[]="Pleaseenterstrings:";printf(Msg);Scanf(”"%s",s);fun(s,t);printf("”\nTheresuitis:%s\n",t);}標(biāo)準(zhǔn)答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);/*遍歷整個數(shù)組*/for(i=0;i<n;i++)/*如果元素的ASCII碼值為偶數(shù)*/if(s[i]%2==0){/*將元素保存到t中*/t[j]=s[i];j++;}t[j]=’\0’;}知識點解析:要刪除ASCII碼值為奇數(shù)的字符,也就是要保留ASCII碼值為偶數(shù)的字符,由于最終是要求出剩余字符形成的新串,所以本題的算法是對原字符串從頭到尾掃描,找出ASCII碼值為偶數(shù)的字符并依次存入數(shù)組。國家二級C語言機試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。程序的功能是調(diào)用fun函數(shù)建立班級通信錄。通信錄中記錄每位學(xué)生的編號、姓名和電話號碼。班級人數(shù)和學(xué)生信息從鍵盤讀入,每個人的信息作為一個數(shù)據(jù)塊寫到名為myfile5.dat的二進(jìn)制文件中。請在程序的下劃線處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<stdlib.h>#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<N;i++)/*********found*********/fwrite(&std[i],sizeof(STYPE),1,【3】);fclose(fp);return(1);}main(){STYPEs[10]={{1,"aaaaa","111111"},{1,”"bbbbb","222222"},{1,"ccccc","333333"},{1,"ddddd","444444"},{1,"eeeee","555555")};intk;k=fun(s);if(k==1){printf("Succeed!");check();}elseprintf("Fail!");}voidcheck(){FILE*fp;inti;STYPEs[10];if((fp=fopen("myfile5.dat","rb"))==NULL){printf("Fail!\n");exit(0);}printf("\nReadfileandoutputtoscreen:\n");printf("\nnumnametel\n");for(i=0;i<N;i++){fread(&s[i],sizeof(STYPE),1,fp);printf("%6d%s%s\n",s[i].num,s[i].name,s[i].tel);}fclose(fp);}標(biāo)準(zhǔn)答案:(1)STYPE(2)FILE(3)fp知識點解析:填空1:根據(jù)主函數(shù)中的調(diào)用函數(shù)可知,函數(shù)的形參應(yīng)為結(jié)構(gòu)體類型,因此填入STYPE。填空2:fp是指向文件類型的指針變量,因此填入FILE。填空3:函數(shù)fwrite調(diào)用的一般形式為“fwrite(buffer,size,count,fp);”。buffer:是一個指針變量,在fread函數(shù)中它存放輸入數(shù)據(jù)的首地址,在fwrite函數(shù)中,它存放輸出數(shù)據(jù)的首地址。size:表示數(shù)據(jù)塊的字節(jié)數(shù)。count:表示要讀寫的數(shù)據(jù)塊數(shù)。fp:表示文件指針。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:先將字符串s中的字符按正序存放到字符串t中,然后把s中的字符按逆序連接到字符串t的后面。例如,當(dāng)s中的字符串為“ABCDE”時,則t中的字符串應(yīng)為“ABCDEEDCBA”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){inti,sl;sl=strlen(s);/*********found*********/for(i=0;i<=s1;i++)t[i]=s[i];for(i=0;i<s1;i++)t[s1+i]=S[s1﹣i﹣1];/*********found*********/t[s1]=’\0’;}voidmain(){chars[100],t[i00];system("CLS");printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}標(biāo)準(zhǔn)答案:(1)for(i=0;i<s1;i++)(2)t[2*s1]=’\0’;知識點解析:(1)字符串長度為s1,但數(shù)組下標(biāo)從0~s1﹣1,因此不包括s1。(2)正序和逆序字符串都加入了t串中,此時t串中最后一個元素的下標(biāo)為2*s1﹣1,所以在2*s1下標(biāo)處加入字符串結(jié)束標(biāo)識‘\0’。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,函數(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=4152。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%d\n",c);}標(biāo)準(zhǔn)答案:voidfun(inta,intb,long*c){/*b%10獲取b的個位,a/10獲取a的十位,a%10獲取a的個位,b/10獲取b的十位*/*c=b%10+(a%10)*10+(b/10)*100+(a/10)*1000;}知識點解析:本題中主要的問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應(yīng)乘以1000、100、10、1,就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意使用c時要進(jìn)行指針運算。國家二級C語言機試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是將不帶頭節(jié)點的單向鏈表逆置,即若原鏈表中從頭至尾節(jié)點數(shù)據(jù)域依次為2、4、6、8、10,逆置后,從頭至尾節(jié)點數(shù)據(jù)域依次為10、8、6、4、2。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;/*********found*********/【1】*fun(NODE*h){NODE*p,*q,*r;p=h;if(p==NULL)returnNULL;q=p﹣>next;p﹣>next=NULL;while(q){/*********found*********/r=q﹣>【2】;q﹣>next=p;p=q;/*********found*********/q=【3】;}returnp;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q﹣>data=a[i];q﹣>next=NULL;if(h==NULL)h=p=q;else{p﹣>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;p=h;if(p==NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("﹣>%d",p﹣>data);p=p﹣>next;)while(p!=NULL);printf("﹣>End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);head=fun(head);printf("\nThelistafterinverting:\n");outlist(head);}標(biāo)準(zhǔn)答案:(1)NODE(2)next(3)r知識點解析:填空1:本題考查了函數(shù)指針變量的函數(shù)返回值的類型,*fun(NODE*h)的返回值為p,而p的數(shù)據(jù)類型為NODE,因此本空應(yīng)該填寫NODE。填空2:從此空的形式p﹣>可知本空應(yīng)該填寫next。填空3:本題要求將不帶頭節(jié)點的單向鏈表逆置,為了使q的指針向后移,此空應(yīng)該填寫r。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將S所指字符串中位于奇數(shù)位置的字符或ASCII碼值為偶數(shù)的字符依次放入t所指數(shù)組中。例如,字符串中的數(shù)據(jù)為“AABBCCDDEEFF”,則輸出應(yīng)當(dāng)是“ABBCDDEFF”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#defineN80voidfun(char*s,chart[]){inti,j=0;for(i=0;i<(int)strlen(s);i++)/*********found*********/if(i%2&&s[i]%2==0)t[j++]=s[i];/*********found*********/t[i]=’\0’;}main(){chars[N],t[N];printf("\nPleaseentherstrings:");gets(s);fun(s,t);printf("\nTheresultis:%s\n",t);}標(biāo)準(zhǔn)答案:(1)if(i%2||s[i]%2==0)或if(i%2!=0||s[i]%2==0)(2)t[j]=’\0’;或t[j]=0;知識點解析:(1)根據(jù)題意,將字符串s中位于奇數(shù)位置的字符或ASCII碼值為偶數(shù)的字符,依次放入字符串t中,所以if條件中要使用“或”運算。(2)變量j控制字符串t的下標(biāo),所以是t[j]。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編寫函數(shù)fun,其功能是:將M行N列的二維數(shù)組中的數(shù)據(jù),按列的順序依次放到一維數(shù)組中。一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形參n所指的存儲單元中。例如,若二維數(shù)組中的數(shù)據(jù)為333333334444444455555555則一維數(shù)組中的內(nèi)容應(yīng)是:334455334455334455334455注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",w[i][j]);printf("\n");}fun(w,a,&n,3,4);printf("TheAarray:\n");for(i=0;i<n;i++)printf("%3d",a[i]);}標(biāo)準(zhǔn)答案:voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j;for(j=0;j<nn;j++)/*將二維數(shù)組中的數(shù)據(jù)按列的順序依次放入一維數(shù)組中*/for(i=0;i<mm;i++){b[*n]=*(*(s+i)+j);*n=*n+1;/,*通過指針返回元素個數(shù)*/}}知識點解析:題目要求實現(xiàn)將二維數(shù)組元素存入一維數(shù)組,需使用for循環(huán)語句來控制二維數(shù)組元素的下標(biāo),同時使用指針變量配合操作??梢杂脙蓚€循環(huán)來處理問題,由于是按列的順序取出,所以第1個循環(huán)用于控制列下標(biāo),第2個循環(huán)用于控制行下標(biāo)。國家二級C語言機試(操作題)模擬試卷第5套一、程序填空題(本題共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é)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>intfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i<n){/******found******/for(j=a[i]*2;j<=n;j+=___1___)a[j]=0;i++;/******found******/while(___2___==0)i++;}printf(″\nTheprimenumberbetween2to%d\n″,n);for(i=2:i<=n:i++)/******found******/if(a[i]!=___3___){count++;printf(count%15?″%5d″:″\n%5d″,a[i]);}returncount;}main(){intn=20,r;r=fun(n);printf(″\nThenumberofprimeis:%d\n″,r);}標(biāo)準(zhǔn)答案:(1)a[i](2)a[i](3)0知識點解析:填空1:因為本題的方法是首先從素數(shù)2開始,將所有2的倍數(shù)的數(shù)從中刪去(把數(shù)表中相應(yīng)位置置零),可知本空應(yīng)填a[i]。填空2:while循環(huán)表示接著從數(shù)表中找下一個非零數(shù),并從表中刪去該數(shù)的所有倍數(shù),此空填a[i]。填空3:因為要統(tǒng)計表中素數(shù)個數(shù),因而只需把置零的數(shù)排除開來,此空填寫0。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:首先把b所指字符串中的字符按逆序存放,然后將a所指字符串中的字符和b所指字符串中的字符,按排列的順序交叉合并到c所指數(shù)組中,過長的剩余字符接在c所指的數(shù)組的尾部。例如,當(dāng)a所指字符串中的內(nèi)容為″abcdefg″,b所指字符串中的內(nèi)容為″1234″時,c所指數(shù)組中的內(nèi)容應(yīng)為″a4b3c2dlefg″;而當(dāng)a所指字符串中的內(nèi)容為″1234″,b所指字符串的內(nèi)容為″abcdefg″時,c所指數(shù)組中的內(nèi)容應(yīng)該為″1g2f3e4dcba″。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>voidfun(char*a,char*b,char*c){inti,j;charch;i=0;j=strlen(b)—1;/******found******/while(i>j){ch=b[i];b[i]=b[j];b[j]=ch;1++;j——;}while(*a||*b){/******found******/If(*a){*c=*a;c++;a++;}if(*b){*c=*b;c++;b++;}}*c=0;}main(){chars1[100],s2[100],t[200];printf(″\nEnters1string:″);scanf(″%s″,s1);printf(″\nEnters2string:″);scanf(″%s″,s2);fun(s1,s2,t);printf(″\nTheresultis:%s\n″,t);}標(biāo)準(zhǔn)答案:(1)while(i<j)(2)if(*a)知識點解析:(1)由i和j定義的初始值可知,此處應(yīng)該判斷i是否小于j,所以應(yīng)改為while(i<j)。(2)此處將if錯寫成If,這個錯誤比較簡單,但往往不容易發(fā)現(xiàn)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是:將一組得分中,去掉一個最高分和一個最低分,然后求平均值,并通過函數(shù)返回。函數(shù)形參a指向存放得分的數(shù)組,形參n中存放得分個數(shù)(n>2)。例如,若輸入9.98.57.68.59.39.58.97.88.68.4十個得分,則輸出結(jié)果為8.687500。注意:請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>voidNONO();doublefun(doublea[],intn){}main(){doubleb[10],r;inti;printf(″輸入10個數(shù)放入b數(shù)組中:″);for(i=0;i<10;i++)scanf(″%lf″,&b[i]);printf(″輸入的10個數(shù)是:″);for(i=0;i<10;i++)printf(″%4.1lf,b[i]);printf(″\n″);r=fun(b,10);printf(″去掉最高分和最低分后的平均分:%f\n″,r);NONO();}voidNONO()/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/{FILE*fp.*wf;inti,j;doubleb[10],r;fp=fopen(″in.dat″,″r″);wf=fopen(″out.dat″,″w″);for(i=0;i<10;i++){for(j=0;j<10;j++){fscanf(fp,″%lf″,&b[j]);}r=fun(b,10);fprintf(wf,″%f\n″,r);}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:doublefun(doublea[],intn){doublesum=0,max,min;inti;max=min=a[0];for(i=0;i<n;i++){sum=sum+a[i];if(max<a[i])max=a[i];if(min>a[i])min=a[i];}sum=sum—max—min;return(sum/(n—2));知識點解析:設(shè)定三個變量:sum存放和值,max存放最大值,min存放最小值。max和min都被賦予數(shù)組中第一個元素的值。利用循環(huán)將數(shù)組中元素累加到sum中,并找出最大值和最小值,sum值減去最大值和最小值,最后函數(shù)返回sum除以元素個數(shù)n—2的平均值。國家二級C語言機試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:統(tǒng)計形參s所指字符串中數(shù)字字符出現(xiàn)的次數(shù),并存放在形參t所指的變量中,最后在主函數(shù)中輸出。例如,形參s所指的字符串為:abcdef35adgh3kjsdt7。輸出結(jié)果為:4。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>voidfun(char*s,int*t){inti,n;n=0;/**********found**********/for(i=0;___1___!=0;i++)/**********found**********/if(s[i]>=’0’&&s[i]<=___2___)n++;/**********found**********/___3___;}main(){chars[80]="abcdef35adgh3kjsdf7";intt;printf("\nTheoriginalstringis:%s\n",s);fun(s,&t);printf("\nTheresultis:%d\n”,t);}標(biāo)準(zhǔn)答案:(1)s[i](2)’9’(3)*t=n知識點解析:搜索整個字符串,判斷s[i]>=’0’且s[i]<=’9’,滿足該條件后,計數(shù)變量加1,因此,第一空:循環(huán)終止條件是達(dá)到了字符串的尾部,字符串以“\0”(或NULL)結(jié)束,故第一空處應(yīng)為s[i]。第二空:數(shù)字字符的判斷是s嘲>=’0’且s[i]<=’9’,故第二空處應(yīng)為“’9’”。第三空:這里是將數(shù)字字符出現(xiàn)的次數(shù)存放在形參t里,n記錄了數(shù)字字符的個數(shù),而形參t是指針變量,故第三處應(yīng)為“*t=n”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:通過某種方式實現(xiàn)兩個變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如變量a中的值原為8,b中的值原為3,程序運行后a中的值為3,b中的值為8。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>intfun(int*x,inty){intt;/**********found**********/t=x;x=y;/**********found**********/return(y);}main(){inta=3,b=8;printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}標(biāo)準(zhǔn)答案:(1)t=*x;*x=y;(2)return(t);知識點解析:(1)根據(jù)fun中x變量的定義,x為指針型變量,所以第一個錯誤標(biāo)識下的“t=x;x=y;”改為“t=*x;*x=y;”。(2)交換之后t中存放原來x的值,x存放原來y的值,這里應(yīng)該是返回原來x的值,所以第二個標(biāo)識下的“return(y);”應(yīng)該改為“return(t);”或者“returnt;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,它的功能是:求出1到1000之間能被7或11整除、但不能同時被7和11整除的所有整數(shù)并將它們放在a所指的數(shù)組中,通過n返回這些數(shù)的個數(shù)。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include<stdio.h>voidfun(int*a,int*n){}main(){intaa[1000],n,k;voidNONO();fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)printf("\n");elseprintf("%5d",aa[k]);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/intaa[1000],n,k;FILE*fp;fp=fopen("out.dat","w");fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)fprintf(fp,"\n");elsefprintf(fp,"%5d",aa[k]);fclose(fp);}標(biāo)準(zhǔn)答案:inti;*n=0;for(i=7;i<1000;i++)if(((i%7)==0||(i%11)==0)&&(i%77)!=0)a((*n)++]=i;知識點解析:進(jìn)入fun函數(shù),判斷是否被7整除一判斷是否被11整除→并且不被77整除→按要求返回計算結(jié)果。首先,*n置0,設(shè)置為累計器,計算符合條件的數(shù)的個數(shù)。然后,通過循環(huán),判斷小于1000的每一個整數(shù)是否符合題干中的要求。其中的判斷條件能否被7或者被11整除為:i%7==0||i%11==0,不能被11和7同時整除為:i%77!=0,它們之間的并關(guān)系就用&&連接,最后結(jié)果即為:(i%7==0||%11==0)&&i%77!=0。最后,將符合條件的整數(shù)存入數(shù)組a中,同時對*n進(jìn)行自加,返回結(jié)果。國家二級C語言機試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blankl中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun()的功能是將a所指4×3矩陣中第k行的元素與第0行元素交換。例如,有下列矩陣:請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件blank1.c中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<stdio.h>2#defineN33#defineM44/*********found*********/5voidfun(int(*a)[N],int<u>【1】</u>)6{inti,temp;7/*********found*********/8for(i=0;i<<u>【2】</u>;i++)9{temp=a[0][i];10/*********found*********/11a[0][i]=<u>【3】</u>;12a[k][i]=temp;13}14}15main()16{intx[M][N]={{1,2,3},{4,5,6),{7,8,9},{10,11,12}},i,j;17printf("Thearraybeforemoving:\n\n");18for(i=0;i<M;i++)19{for(j=0;j<N;j++)20printf("%3d",x[i][j]);21printf("\n\n");22}23fun(x,2);24printf("Thearrayaftermoving:\n\n");25for(i=0;i<M;i++)26{for(j=0;j<N;j++)27printf("%3d",x[i][j]);28printf("\n\n");29}30}標(biāo)準(zhǔn)答案:(1)k(2)N(3)a[k][i]知識點解析:填空1:變量k在函數(shù)fun()中已經(jīng)使用,表示變量k已經(jīng)是定義過的變量。但在函數(shù)中沒有定義,表示變量k是函數(shù)fun()的形參k。故空1處應(yīng)該填k。填空2:函數(shù)fun()中,for循環(huán)完成第k行元素與第0行元素的交換,因為數(shù)組共N列,所以變量i小于N,空2處應(yīng)該填N。填空3:第0行的第i個元素與第k行的第k個元素交換,故空3處應(yīng)該填a[k][i]。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modil中的解決方案。此解決方案的項目中包含一個源程序文件modil.c。在此程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),將該字符串中的所有字符按ASCⅡ值升序排列后輸出。例如,若輸入"edcba",則應(yīng)輸出"abcde"。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件modil.c中,不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<string.h>2#include<stdio.h>3voidfun(chart[])4{5charc;6inti,j;7/*********found*********/8for(i=strlen(t);i;i--)9for(j=0;j<i;j++)10/*********found*********/11if(t[j]<t[j+1])12{13c=t[j];14t[j]=t[j+1];15t[j+1]=c;16}17}18main()19{20chars[81];21printf("\nPleaseenteracharacterstring:");22gets(s);23printf("\n\nBeforesorting:\n%s",s);24fun(s);25printf("\nAftersortingdecendingly:\n%s",s);26}標(biāo)準(zhǔn)答案:(1)for(i=strlen(t)-1;i;i--)或for(i=strlen(t)-1;i>0;i--)(2)if(t[j]>t[j+1])知識點解析:(1)本題利用選擇排序?qū)?shù)組元素進(jìn)行升序排列。選擇排序是一種簡單、直觀的排序算法。它的工作原理是第1次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然后從剩余的未排序元素中選出最小(大)元素,放到已排列的序列的末尾。以此類推,直到全部待排序的數(shù)據(jù)元素的個數(shù)為0。strlen()函數(shù)所求得的字符串長度要減1,因為數(shù)組最大下標(biāo)表示為字符串長度減1。(2)這里是一個邏輯分析錯誤,題中要求按升序排列,所以應(yīng)改為if(t[j]>t[j+1])。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案的項目中包含一個源程序文件progl.c。在此程序中,請編寫一個函數(shù)fun(),它的功能是將ss所指字符串中所有下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫字母(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入"abc4Efg",則應(yīng)輸出"aBc4EFg"。注意:部分源程序在文件progl.c中。請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題程序:1#include<conio.h>2#include<stdio.h>3#include<string.h>4#include<stdlib.h>5voidfun(char*ss)6{78}9voidmain()10{11FILE*wf;12chartt[81],s[81]="abc4Efq";13system("CLS");14printf("\nPleaseenteranstringwithin80characLers:\n");15gets(tt);16printf("\n\nAfterchanging,thestring\n%s",tt);17fun(tt);18printf("\nbecomes\n%s\n",tt);19/*********found*********/20wf=fopen("out.dat","w");21fun(s);22fprintf(wf,"%s",s);23fclose(wf);24/*********found*********/25}標(biāo)準(zhǔn)答案:1voidfun(char*ss)2{3inti;4for(i=0;ss[i]!=’\0’;i++)/*將ss所指字符串中所有下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫字母*/5if(i%2==1&&ss[i]>='a'&&ss[i]<=’z')6ss[i]=ss[i]-32;7}知識點解析:本題要求將給定字符串ss中下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫字母。需要先判斷下標(biāo)為奇數(shù)的字母是否是小寫字母,如果是再通過其轉(zhuǎn)換方法進(jìn)行轉(zhuǎn)換。從c語言的學(xué)習(xí)中知道,只要將小寫字母減去32即轉(zhuǎn)換成大寫字母,將大寫字母加上32即換轉(zhuǎn)成小寫字母。本程序用if語句實現(xiàn)轉(zhuǎn)換功能。國家二級C語言機試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將該學(xué)生的各科成績都乘以一個系數(shù)a。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>typedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}/*********found*********/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/*********found*********/ss一>【2】*=a;}main(){STUstd={1,"Zhanghua",76.5,78.0,82.0);floata;printf("\nTheoriginalnumberandnameandscores:\n");show(std);printf("\nInputanumber:");scanf("%f",&a);/*********found*********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}標(biāo)準(zhǔn)答案:(1)STU(2)score[i](3)&std知識點解析:是利用結(jié)構(gòu)體存儲學(xué)生記錄,對記錄進(jìn)行修改并由實參ss返回。填空1:實參ss是一個結(jié)構(gòu)型指針變量,所以應(yīng)填STU。填空2:該學(xué)生的各科成績都乘以一個系數(shù)a,所以應(yīng)填score[i]。填空3:函數(shù)的調(diào)用,由于函數(shù)定義時使用的指針結(jié)構(gòu)型變量,所以應(yīng)填&std。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如,若k=10,則應(yīng)輸出3628800。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>longfun(intk){/*********found*********/ifk>1return(k*fun(k-1));return1;}main(){intk=10;printf("%d!=%id\n",k,fun(k));}標(biāo)準(zhǔn)答案:if(k>1)知識點解析:語法錯誤,if條件表達(dá)式應(yīng)寫在小括號內(nèi)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。此程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(inta[][N],intn),該函數(shù)的功能是:使數(shù)組左下半三角元素中的值乘以n。例如,若n的值為3,a數(shù)組中的值為則返回主程序后a數(shù)組中的值應(yīng)為注意:部分源程序給出如下。請勿改動函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5voidfun(inta[][N],intn){}main(){inta[N][N],n,i,j;printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}n=rand()%4;printf("n=%4d\n",n);fun(a,n);printf("*****THERESULT*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}標(biāo)準(zhǔn)答案:voidfun(inta[][N],intn){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)/*矩形的下三角時,積相乘*/a[i][j]=a[i][j]*n;}知識點解析:首先從數(shù)組中找出要被乘以n的那部分元素,這一過程其實就是找出將被挑出的元素在原數(shù)組中的分布規(guī)律的過程。通過觀察得出,要被處理的元素下標(biāo)值的范圍是
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家校糾紛調(diào)查問卷題目及答案
- 通報報告制度
- 江蘇中煙面試題目及答案
- 運輸配送車輛清潔衛(wèi)生消毒記錄制度
- 物聯(lián)網(wǎng)安全防控措施詳解
- 車間混料制度
- 財務(wù)盤點制度
- 誠信計量承諾制度
- 醫(yī)學(xué)導(dǎo)論:肥胖癥干預(yù)課件
- 2025年沈陽口腔醫(yī)院護(hù)士筆試及答案
- 心力衰竭急性加重的危重監(jiān)護(hù)護(hù)理指南
- 堤防工程勘察設(shè)計方案
- 注冊監(jiān)理工程師(市政公用)繼續(xù)教育試題答案
- 2024年6月GESP編程能力認(rèn)證Scratch圖形化等級考試四級真題(含答案)
- 2025年水空調(diào)市場分析報告
- 質(zhì)量員考核評價大綱及習(xí)題集第二版
- 八年級上冊壓軸題數(shù)學(xué)考試試卷含詳細(xì)答案
- T/GFPU 1007-2022中小學(xué)幼兒園供餐潮汕牛肉丸
- 2024年攀枝花市中考英語試題(附答案)
- 人工智能通識教程第5章智能體
- 貨運險培訓(xùn)課件
評論
0/150
提交評論