版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷2(共9套)(共27題)國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件blank1.c。在此程序中,通過定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)學(xué)生的學(xué)號(hào)、姓名和三門課的成績(jī)。函數(shù)fun的功能是:將形參a中的數(shù)據(jù)進(jìn)行修改,把修改后的數(shù)據(jù)作為函數(shù)值返回主函數(shù)進(jìn)行輸出。例如,若傳給形參a的數(shù)據(jù)中學(xué)號(hào)、姓名和三門課的成績(jī)依次是:10001、“ZhangSan”、95、80、88,修改后的數(shù)據(jù)應(yīng)為:10002、“LiSi”、96、81、89。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>structstudent{longsno;charname[10];floatscore[3];};/*********found*********/【1】fun(structstudenta){inti;a.sno=10002;/*********found*********/strcpy(【2】,"LiSi");/*********found*********/for(i=0;i<3;i++)【3】+=1;returna;}main(){structstudents={10001,"ZhangSan",95,80,88},t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%ldName:%s\nScores:",s.sno,s.name);for(i=0;i<3;i++)printf("%6.2f",s.score[i]);printf("\n");t=fun(s);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nScores:",t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)structstudent(2)a.name(3)a.score[i]知識(shí)點(diǎn)解析:填空1:函數(shù)定義時(shí),類型標(biāo)識(shí)符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。本題中,用結(jié)構(gòu)類型定義函數(shù)類型。填空2和填空3:此處考查結(jié)構(gòu)體變量成員的表示方法,a.name和a.score[i]分別表示學(xué)生的姓名和成績(jī)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。下列給定程序中函數(shù)fun的功能是:刪除數(shù)列中值為X的元素,變量n中存放數(shù)列中元素的個(gè)數(shù)。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN20fun(int*a,intn,intx){intp=0,i,a[n]=x;while(x!=a[p])p=p+1;/*********found*********/if(p==n)return-1;else{for(i=p;i<n-1;i++)/*********found*********/a[i+1]=a[i];,returnn-1;}}voidmain(){intw[N]={-3,0,1,5,7,99,10,15,30,90),x,n,i;n=10;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\nInputx(todelete):");scanf("%d",&x);printf("Delete:%d\n",x);n=fun(w,n,x);if(13==-1)printf("***Nobefound!***\n\n");else{printf("Thedataafterdeleted:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\n\n");}}標(biāo)準(zhǔn)答案:(1)if(p==n)return-1;(2)a[i]=a[i+1];知識(shí)點(diǎn)解析:(1)需要確定if條件語(yǔ)句的條件表達(dá)式,發(fā)現(xiàn)變量p大寫,C語(yǔ)言中變量是區(qū)別大小寫的。(2)刪除數(shù)列中的元素,刪除后,后面的元素依次前移一個(gè)位置,因此此處應(yīng)為a[i]=a[i+1];。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,編寫函數(shù)fun,其功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并成一個(gè)整數(shù)放在C中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的個(gè)位和百位上,b數(shù)的十位和個(gè)位數(shù)依次放在C數(shù)的千位和十位上。例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=1524。注意:部分源程序給出如下。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#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:%ld\n",c);}標(biāo)準(zhǔn)答案:voidfun(inta,intb,long*c){/*b%10獲取b的個(gè)位,a/10獲取a的十位,a%10獲取a的個(gè)位,b/10獲取b的十位*/*c=a/10+(b%10)★10+(a%10)★100+(b/10)★1000;}知識(shí)點(diǎn)解析:本題主要的問題是如何取出a和b的個(gè)位數(shù)和十位數(shù),取出后如何表示成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對(duì)它們除以10可得到它們的十位數(shù),分別用10對(duì)它們求余可得到它們的個(gè)位數(shù)。得到后對(duì)應(yīng)乘以1000、100、10、1即可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個(gè)位數(shù)。注意使用c時(shí)要進(jìn)行指針運(yùn)算。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:將a所指4×3矩陣中第k行的元素與第0行元素交換。例如,有下列矩陣:123456789101112若k為2,程序執(zhí)行結(jié)果為:789456123101112請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BIANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inclucle<stdio.h>#deineN3#defitieM4/*********found*********/voidfun(int(*a)[N],int【1】){inti,temp;/*********found*********/for(i=0;i<【2】;i++){temp=a[0][i];/*********found*********/a[0][i]=【3】;a[k][i]=temp?}}main(){intx[M][N]=({1,2,3),{4,5,6},{7,8,9},{10,11,12}},i,j;printf("Thearraybeforemoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3d",x[i][j]);printf("\n\n");}fun(x,2);printf("Thearrayaftermoving:\n\n");for(1=0;1<M;i++){for(J=0,j<N;j++)printf("%3d",x[i][j]);printf("\n\n"),}}標(biāo)準(zhǔn)答案:(1)k(2)N(3)a[k][i]知識(shí)點(diǎn)解析:填空1:變量k在函數(shù)體fun中已經(jīng)使用,但在函數(shù)體中沒有定義,肯定是在函數(shù)的形參中定義的,所以應(yīng)填k。填空2:數(shù)組共N列,所以應(yīng)填N。填空3:這部分語(yǔ)句實(shí)現(xiàn)的功能是變量值的交換,所以應(yīng)填a[k][i]。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:讀入一個(gè)字符串(長(zhǎng)度<20),將該字符串中的所有字符按ASCII碼值升序排序后輸出。例如,若輸入“edcba”,則應(yīng)輸出“abcde”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<string.h>#include<Stdio.h>voidfun(chart[]){charc;inti,j;/*********found*********/for(i=strlen(t);i;i﹣﹣)for(j=0;j<i;j++)/*********found*********/if(t[j]<t[j+1]){C=t[j];t[j]=t[j+1];t[j+1]=C;}}main(){chars[81];printf("\nPleaseenteracharacterstring:");gets(s);printf("\n\nBeforesorting:\n%s",s);fun(s);printf("\nAftersortingdecendingly:\n%s",s);}標(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])知識(shí)點(diǎn)解析:(1)本題是利用選擇法對(duì)數(shù)組元素進(jìn)行比較排序。所謂選擇法,是依次用當(dāng)前取得的元素和其后面的元素進(jìn)行比較,在第一個(gè)元素和其后面的元素順次比較時(shí),可以借助中間變量來對(duì)兩個(gè)數(shù)進(jìn)行交換,要保證第一個(gè)元素始終存放數(shù)組中的最大數(shù),以后依次挑選出次大數(shù),這樣最終的數(shù)組就是有序的。strlen函數(shù)所求得的字符串長(zhǎng)度,數(shù)組最大下標(biāo)表示為字符串長(zhǎng)度減1,所以要減1。(2)這里是一個(gè)分析邏輯錯(cuò)誤,題中要求按升序排序,所以應(yīng)改為if(t[j]>t[j+1])。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:將ss所指字符串中所有下標(biāo)為奇數(shù)位置的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入“abc4Efg”,則應(yīng)輸出“aBc4EFg”。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#include<stdlib.h>voidfun(char*ss){}voidmain(){FILE*wf;chartt[81],s[81]="abc4Efg";system("CLS");printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n%s\n",tt);/*********found*********/wf=fopen("out.dat","w");fun(s);fprintf(wf,"%s",s);fclose(wf);/*********found*********/}標(biāo)準(zhǔn)答案:voidfun(char*ss){inti;for(i=0;ss[i]!=’\0’;i++)/*將ss所指字符串中所有下標(biāo)為奇數(shù)位置的字母轉(zhuǎn)換為大寫*/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]﹣32;}知識(shí)點(diǎn)解析:該題要求將給定字符串中奇數(shù)位置的字母轉(zhuǎn)換為大寫,需要先判斷奇數(shù)位置以及是否是小寫字母,如果是再通過其轉(zhuǎn)換方法進(jìn)行轉(zhuǎn)換。從C語(yǔ)言的學(xué)習(xí)中知道,只要將小寫字母減去32即轉(zhuǎn)成大寫字母,將大寫字母加上32即轉(zhuǎn)成小寫字母。本程序用if語(yǔ)句實(shí)現(xiàn)轉(zhuǎn)換功能。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:利用指針數(shù)組對(duì)形參ss所指字符串?dāng)?shù)組中的字符串按由長(zhǎng)到短的順序排序,并輸出排序結(jié)果。ss所指字符串?dāng)?shù)組中共有N個(gè)字符串,且串長(zhǎng)小于M。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<string.h>#defineN5#defineM8voidfun(char(*ss)[M]){char*ps[N],*tp;inti,j,k;for(i=0;i<N;i++)ps[i]=ss[i];for(i=0;i<N-1;i++){/**********found**********/k=___1___;for(j=i+1;j<N;j++)/**********found**********/if(strlen(ps[k])<strlen(___2___))k=j;/**********found**********/tp=ps[i];ps[i]=ps[k];ps[k]=___3___;}printf("\nThestringaftersortingbylength:\n\n");for(i=0;i<N;i++)puts(ps[i]);}main(){charch[N][M]={"red","green","blue","yellow","black"};inti;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(ch[i]);printf("\n");fun(ch);}標(biāo)準(zhǔn)答案:(1)i(2)ps[j](3)tp知識(shí)點(diǎn)解析:本題中函數(shù)fun的功能是利用指針數(shù)組對(duì)形參ss所指字符串?dāng)?shù)組中的字符串按由長(zhǎng)到短的順序排序,并輸出排序結(jié)果。在fun函數(shù)中采用了選擇排序法,在選擇排序法中的降序排序,首先從數(shù)組中挑選一個(gè)最大的元素,把它和第一元素交換,接著從剩下的n-1個(gè)元素中再挑出一個(gè)最大的元素,把它和第二個(gè)元素交換,不斷重復(fù)以上過程,直到比較完最后兩個(gè)元素。第一空:分析可知,fun函數(shù)采用的選擇排序,在第一空處是初始化k。“for(j=i+1;j<N;j++)”循環(huán)是尋找長(zhǎng)度最長(zhǎng)的字符串,找到之后和k字符串交換,因止匕k從0開始,隨著i變化,故第一空處應(yīng)為“i”。第二空:“if(strlen(ps[k])y<strlen(___2___))k=j;”新的字符串ps[j]如果比ps[k]的長(zhǎng)度長(zhǎng),那么k記錄下新的最長(zhǎng)的字符串的下標(biāo)位置j,故第二空處應(yīng)為“ps[j]。第三空:“tp=ps[i];ps[i]=ps[k];ps[k]=___3___;”是字符串地址交換,顯然第三空處應(yīng)是臨時(shí)變量tp。二、程序修改題(本題共1題,每題1.0分,共1分。)2、已知一個(gè)數(shù)列從第0項(xiàng)開始的前三項(xiàng)分別為0,0,1,以后的各項(xiàng)都是其相鄰的前三項(xiàng)之和。給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算并輸出該數(shù)列前n項(xiàng)的平方根之和。n的值通過形參傳入。例如,當(dāng)n=10時(shí),程序的輸出結(jié)果應(yīng)為:23.197745。請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<math.h>/**********found**********/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k<=n;k++){s=s0+s1+s2;sum+=sqrt(S);s0=s1;s1=s2;s2=s;}/**********found**********/returnsum}main(){intn;printf("InputN=");Scanf("%d",&n);printf("%f\n",fun(n));}標(biāo)準(zhǔn)答案:(1)doublefun(intn)(2)returnsum;知識(shí)點(diǎn)解析:本題中函數(shù)的功能是計(jì)算并輸出該數(shù)列前n項(xiàng)的平方根之和sum。解題思路首先根據(jù)題干求得每一項(xiàng)的值,然后再計(jì)算數(shù)列前n項(xiàng)的平方根之和。(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下fun函數(shù)的定義根據(jù)題干要返回前n項(xiàng)的平方根之和,函數(shù)具有返回值,所以“fun(intn)”應(yīng)改為“doublefun(intn)”,其中,double為雙精度型變量。(2)第二個(gè)標(biāo)識(shí)符下返回平方根之和,根據(jù)C語(yǔ)言語(yǔ)法每一句C語(yǔ)言后面應(yīng)該以“;”為結(jié)尾,所以“returnsum”改為“returnsum;”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun,它的功能是計(jì)算下列級(jí)數(shù)和,和值由函數(shù)值返回。例如,當(dāng)n=10,x=0.3時(shí),函數(shù)值為1.349859。注意:部分源程序在文件PROG1.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#include<stdio.h>#include<math.h>doublefun(doublex,intn){}msin(){voidNONO();printf("%f\n",fun(0.3,10));NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,n;doublesfx;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%1f,%d",&x,&n);s=fun(x,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:doubles=1.0,y=x;inti;longk=1;for(i=1;i<=n;i++){k=k*i;s+=y/k;y=x;}returns;知識(shí)點(diǎn)解析:該程序功能是計(jì)算并輸出多項(xiàng)式值。根據(jù)題干中給出的數(shù)列,首先推出每一項(xiàng)的表達(dá)式,然后再對(duì)多項(xiàng)式進(jìn)行累加求和。(1)根據(jù)題干中給出的數(shù)列,推出每一項(xiàng)分子是在前一項(xiàng)的基礎(chǔ)上乘以x,分母是每一項(xiàng)的階乘,它可以在前一項(xiàng)的基礎(chǔ)上乘以當(dāng)前項(xiàng)的項(xiàng)數(shù),即第n項(xiàng)是n。(2)在循環(huán)中求得每一項(xiàng),然后對(duì)其進(jìn)行累加求和。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是將形參給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個(gè)讀入并顯示在終端屏幕上。請(qǐng)?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>voidfun(char*s,inta,doublef){/******found******/___1___fp;charch;fp=fopen(″filel.txt″,″w″);fprintf(fp,″%s%d%f\n″,s,a,f);fclose(fp);fp=fopen(″filel.txt″,″r″);printf(″\nTheresult:\n\n″);ch=fgetc(fp);/******found******/while(!feof(___2___)){/******found******/putchar(___3___);ch=fgetc(fp);}putchar(′\n′);fclose(fp);}main(){chara[10]=″Hello!″;intb=12345;doublec=98.76;fun(a,b,c);}標(biāo)準(zhǔn)答案:(1)FILE*(2)fp(3)ch知識(shí)點(diǎn)解析:填空1:由語(yǔ)句fopen(″filel.txt″,″r″)可知,fp應(yīng)該是文件類型指針,因此本空應(yīng)該填寫FILE*。填空2:feof函數(shù)只能對(duì)文件類型數(shù)據(jù)進(jìn)行操作,因此本空填寫fp,填空3:putchar()代表輸入一個(gè)字符,從ch=fgete(fp)可以看出本題應(yīng)該填寫ch。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從高到低的順序找出前m(m≤10)名學(xué)生來,并將這些學(xué)生的數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)區(qū)的首地址作為函數(shù)值返回。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#include<malloc.h>#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/******found******/*t=calloc(m,sizeof(STU));for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++){for(i=j=0;i<N;i++)if(b[i].s>b[j].s)j=i;/******found******/t[k].num=b[j].num;t[k].s=b[j].s;b[j].s=0;}returnt;outresult(STUa[],F(xiàn)ILE*pf){inti:for(i=0;i<N;i++)fprintf(pf,″No=%sMark=%d\n″,a[i].num,a[i].s);fprintf(pf.″\n\n″);}voidmain(){STUa[N]={″A01″,81},{″A02″,89},{″A03″,66},{″A04″,87},{″A05″,77},{″A06″,90},{″A07″,79},{″A08″,61},{″A09″,80},{″A10″,71}};STU*pOrder;inti,m;system(″CLS″);printf(″*****THERESULT*****\n″);outresult(a,stdout);printf(″\nGivethenmuberofthestudentswhohavebetterscore:″);scanf(″%d″,&m);while(m>10){printf(″\nGivethenumberofthestudentswhohavebetterscore:″);scanf(″%d″.&m);}pOrder=fun(a,m);printf(″*****THERESULT*****\n″);printf(″Thetop:\n″);for(i=0;i<m;i++)printf(″%s%d\n″,pOrder[i].num,pOrder[i].s);free(pOrder);}標(biāo)準(zhǔn)答案:(1)t=(STU*)calloc(m,sizeof(STU));(2)t[k].num=b[j].num改為t[k]=b[j]知識(shí)點(diǎn)解析:(1)calloc函數(shù)用于分配內(nèi)存空間。其調(diào)用形式為(類型說明符術(shù)*)calloc(n,size),功能:在內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域,函數(shù)的返回值為該區(qū)域的首地址,(類型說明符*)用于強(qiáng)制類型轉(zhuǎn)換。calloc函數(shù)與malloc函數(shù)的區(qū)別在于calloc函數(shù)一次可以分配n塊區(qū)域。例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的結(jié)構(gòu)長(zhǎng)度。該語(yǔ)句的意思是:按stu的長(zhǎng)度分配兩塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。在本題中不用考慮那么復(fù)雜,根據(jù)定義類型STUb[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的錯(cuò)誤。(2)t[k].num=b[j].num的錯(cuò)誤旨在考查對(duì)結(jié)構(gòu)體概念的掌握和靈活應(yīng)用程度。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:找出成績(jī)最高的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最高分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。注意:請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineN10typedefstructss/*定義結(jié)構(gòu)體*/{charnum[10];ints;}STU;fun(STUa[],STU*S){}voidmain(){FILE*wf;STUa[N]={{″A01″,81},{″A02″,89},{″A03″,66},{″A04″,87},{″A05″,77},{″A06″,90},{″A07″,79},{″A08″,61},{″A09″,80},{″A10″,71}},m;inti:system(″CLS″);printf(″*****Theoriginaldata*****″);for(i=0;i<N;i++)printf(″No=%sMark=%d\n″,a[i].num,a[i].s);fun(a,&m);printf(″*****THERESULT*****\n″);printf(″Thetop:%s,%d\n″,m.num,m.s);/****************/wf=fopen(″out.dat″,″w″);fprintf(wf,″%s,%d″,m.num,m.s);fclose(wf);/****************/}標(biāo)準(zhǔn)答案:fun(STUa[],STU*s){inti:*s=a[0];for(i=0;i<N;i++)/*找出成績(jī)最高的學(xué)生記錄*/if(s—>s<a[i].s)*s=a[i];}知識(shí)點(diǎn)解析:本題考查:成績(jī)最高的學(xué)生記錄查找;for循環(huán)語(yǔ)句;if條件語(yǔ)句。本題的流程是先使s指向第1名學(xué)生,利用循環(huán)語(yǔ)句遍歷所有學(xué)生的成績(jī),利用條件語(yǔ)句判斷當(dāng)前學(xué)生成績(jī)是否最高,所以if語(yǔ)句的條件是s—>s<a[i].s.此外,做題時(shí)應(yīng)該熟練掌握“指向運(yùn)算符”和“成員運(yùn)算符”的相關(guān)知識(shí),題中“s—>s”等價(jià)于“(*s).s”。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、下列給定程序中,函數(shù)fun的功能是:有N×N矩陣,以主對(duì)角線為對(duì)稱線,對(duì)稱元素相加并將結(jié)果存放在左下三角元素中,右上三角元素置為0。例如,若N=3,有下列矩陣:123456789計(jì)算后結(jié)果為10065010149請(qǐng)?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除。使程序得出正確的結(jié)果。注意:不得增行或刪行,也不得改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN4/******found******/voidfun(int(*t)____1____){inti,j;for(i=1;i<N;i++){for(j=0;j<i;j++){/******found******/____2____=t[i][j]+t[j][i];/******found******/____3____=0;}}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf(″\nTheoriginalarray:\n″);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(″%2d″,t[i][j]);printf(″\n″);}fun(t);printf(″\nTheresultis:\n″);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(″%2d″,t[i][j]);printf(″\n″);}}標(biāo)準(zhǔn)答案:(1)[N](2)t[i][j](3)t[j][i]知識(shí)點(diǎn)解析:本題考查:有參函數(shù)定義,需要根據(jù)題目要求和給定程序確定函數(shù)參數(shù)N×N矩陣中如何表示左下角和右上角元素。填空1:主函數(shù)中調(diào)用函數(shù)的參數(shù)為二維數(shù)組,所以此處形參應(yīng)定義為指針數(shù)組。填空2:根據(jù)題意可知,對(duì)稱元素相加的和存放在左下三角元素中,那么應(yīng)填入的是t[i][j]。填空3:右上三角元素置0,應(yīng)填入t[j][i]。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:找出一個(gè)大于給定整數(shù)m且緊隨m的素?cái)?shù),并作為函數(shù)值返回。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio,h>intfun(intm){inti,k;for(i=m+1;;i++){for(k=2;k<i;k++)/******found******/if(i%k!=0)break;/******found******/if(k<i)return(i);}}voidmain(){intn;system(″CLS″);printf(″\nPleaseentern:″);scanf(″%d″.n);printf(″%d\n″.fun(n));}標(biāo)準(zhǔn)答案:(1)if(i%k==0)(2)if(k==i)知識(shí)點(diǎn)解析:(1)判斷當(dāng)前數(shù)是否為素?cái)?shù),若存在一個(gè)數(shù)(除1和其自身)能整除當(dāng)前數(shù),則跳出本次循環(huán),所以if條件應(yīng)為i%k==0。(2)如果i是素?cái)?shù),則循環(huán)結(jié)束時(shí)k==i,將該值返回。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:將s所指字符串中ASCⅡ碼值為偶數(shù)的字符刪除,串中剩余字符形成一個(gè)新串放在t所指的數(shù)組中。例如,若s所指字符串中的內(nèi)容為″ABCDEFG12345″,其中字符B的ASCⅡ碼值為偶數(shù),字符2的ASCⅡ碼值為偶數(shù),都應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是″ACEG135″。注意:請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>voidfun(char*s,chart[]){}voidmain(){FILE*wf;chars[100],t[100];system(″CLS″);printf(″\nPleaseenterstringS:″);scanf(″%s″,s);fun(s,t);printf(″\nTheresultis:%s\n″,t);/******found******/wf=fopen(”out.dat”,”W”);fun(″ABCDEFG12345″,t);fprintf(wf,″%s″,t);fclose(wf);/******found******/}標(biāo)準(zhǔn)答案:voidfun(char*s,chart[]){inti=0;for(;*s!=′\0′;s++)/*找出ASCⅡ值為奇數(shù)的字符依次存入數(shù)組t中*/if(*s%2==1)t[i++]=*s;t[i]=′\0′;/*在字符串的末尾加上串結(jié)束符*/}知識(shí)點(diǎn)解析:本題要求將s所指字符串中ASCⅡ碼值為偶數(shù)的字符刪除,因此本題要求采用一個(gè)for循環(huán)來找出ASCⅡ碼值為奇數(shù)的字符依次存入數(shù)組t中,并使用if條件句來判斷s所指字符串中ASCⅡ碼值是否為奇數(shù)。用′\0′加在字符串的末尾來表示字符串的結(jié)束。要?jiǎng)h除ASCⅡ碼值為偶數(shù)的字符,也就是要留下ASCⅡ碼值為奇數(shù)的字符。由于最終是要求出剩余字符(即ASCⅡ碼值為奇數(shù))形成的新串,所以本題程序的算法是對(duì)原字符串從頭到尾掃描,找出ASCⅡ碼值為奇數(shù)的字符并將其依次存入數(shù)組t中。此外,還要注意數(shù)組t的下標(biāo)變化和下標(biāo)的初值(初值必須為0,即i=0),t[i++]的作用是先使用t[i],然后再使i自增1。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件blan1.C。此程序定義了學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和三門課的成績(jī)。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號(hào)從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來的文件內(nèi)容。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN5typedefstructstudent{longsno;charname[10],floatscore[3];}STU;voidfun(char*filename){FILE*fp;inti,j;STUs[N],t;/*********found*********/fp=fopen(filename,【1】);fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)/*********found*********/if(s[i].sno【2】s[j].sno){t=s[i];s[i]=s[j];s[j]=t;)fp=fopen(filename,”wb”);/*********found*********/【3】(s,sizeof(STU),N,fp);fclose(fp);}main(){STUt[N]={{10005,"ZhangSan",95,80,88},{10003,"LiSi",85,70,78),{10002,"CaoKai",75,60,88},{10004,"FangFang",90,82,87},{10001,"MaChao",91,92,77}},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),5,fp);fclose(fp);printf("\n\nTheoriginaldata:\n\n");for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",t[j].sno,t[j].name);for(i=0;i<3;i++)printf("%6.2f",t[j].score[i]);printf("\n");}fun("student.dat");printf("\n\nThedataaftersorting:\n\n");fp=fopen("student.dat","rb");fread(ss,sizeof(STU),5,fp);fclose(fp);for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}}標(biāo)準(zhǔn)答案:(1)"rb"(2)>(3)fwrite知識(shí)點(diǎn)解析:填空1:題目中要求從形參filename所指的文件中讀入學(xué)生的數(shù)據(jù),以此可以看出本空應(yīng)該填寫”rb”。填空2:此處的if語(yǔ)句是比較學(xué)號(hào)的大小,如果學(xué)號(hào)大就和學(xué)號(hào)小的換位,以此本空填寫>。填空3:題目要求所有的學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中,因此本空填寫fwrite。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:在字符串的最前端加入n個(gè)*號(hào),形成新串,并且覆蓋原串。字符串的長(zhǎng)度最長(zhǎng)允許為79。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件NODll.c中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>voidfun(chars[],intn){chara[80],*p;inti;/*********found*********/s=p;for(i=0,i<n,i++)a[i]=’★’;do{a[i]=*p;i++;}/*********found*********/while(*p++)a[i]=0;strcpy(s,a);}main(){intn;chars[80];printf("\nEnterastring:");gets(s);printf("\nThestring\"%s\"\n",s);printf("\nEntern(numberof,*):");scanf("%d",&n);fun(s,n);printf("\nThestringafterinsert:\"%s\"\n",s);}標(biāo)準(zhǔn)答案:(1)p=s;(2)while(*p++);知識(shí)點(diǎn)解析:(1)指針p應(yīng)指向s,所以應(yīng)改為p=s;。(2)循環(huán)等待,當(dāng)while循環(huán)執(zhí)行一次,臨時(shí)變量p應(yīng)該指向字符串的下一位置,所以應(yīng)改為while(*p++);。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過調(diào)用隨機(jī)函數(shù)獲得,并放入主函數(shù)的age數(shù)組中。要求函數(shù)把0—9歲年齡段的人數(shù)放在d[0]中,把10~19歲年齡段的人數(shù)放在d[1]中,把20~29歲年齡段的人數(shù)放在d[2]中,依此類推,把100歲(含100歲)以上年齡的人數(shù)都放在d[10]中。結(jié)果在主函數(shù)中輸出。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#defineN50#defineM11voidfun(int*a,int*b){}doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}voidmain(){FILE*wf;intage[N],i,d[M];intb[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};for(i=0;i<N;i++)age[i]=(int)(115*rnd());/*產(chǎn)生一個(gè)隨機(jī)的年齡數(shù)組*/printf("Theoriginaldata:\n");for(i=0;i<N;i++)printf((i+1)%10==0?"%4d\n":"%4d",age[i]);/*每行輸出10個(gè)數(shù)*/printf("\n\n");fun(age,d);for(i=0;i<10;i++)printf("%4d---%4d:%4d\n",i*10,i*10+9,d[i]);printf("Over100:%4d\n",d[10]);/*****************/wf=fopen("out.dat","w");fun(b,d);for(i=0;i<10;i++)fprintf(wf,“%4d一%4d:%4d\n”,i*10,i*10+9,d[i]);fprintf(wf,"Over100:%4d",d[10]);fclose(wf);/*****************/}標(biāo)準(zhǔn)答案:voidfun(int*a,int*b){inti,j;for(j=0;j<M;j++)b[j]=0;/*數(shù)組b初始化為0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年齡大于等于100,b[10]自增1*/elseb[a[i]/10]++;/*如果年齡小于100,則將其分別統(tǒng)計(jì)到b[a[i]/10]中*/}知識(shí)點(diǎn)解析:本題是一個(gè)分段函數(shù)的問題,用兩個(gè)循環(huán)來完成。第1個(gè)循環(huán)的作用是使b中的所有元素值都為0。這個(gè)循環(huán)不能省略,因?yàn)槿粑磳?duì)b中的元素賦初值,則它們的值是不可預(yù)測(cè)的。第2個(gè)循環(huán)的作用是分別統(tǒng)計(jì)a中各年齡段的人數(shù)。當(dāng)a[i]≥100時(shí),按題意要將其統(tǒng)計(jì)到b[10]中。else的作用是如果年齡小于100,則將其分別統(tǒng)計(jì)到b[a[i]/10]中。由運(yùn)算優(yōu)先級(jí)可知先進(jìn)行a[i]/10的運(yùn)算,所得結(jié)果作為b的下標(biāo)。若a[i]為0~9時(shí),a[i]/10的值為0,且0~9歲的人數(shù)正好要存入b[0]中。若a[i]為10~19時(shí),a[i]/10的值為1,且10~19歲的人數(shù)正好要存入b[1]中,依此類推。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:計(jì)算形參X所指數(shù)組中N個(gè)數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中大于平均值的數(shù)據(jù)移至數(shù)組的前部,小于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動(dòng)后的數(shù)據(jù)。例如,有10個(gè)正數(shù):46、30、32、40、6、17、45、15、48、26,平均值為30.500000。移動(dòng)后的輸出為:46、32、40、45、48、30、6、17、15、26。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<stdio.h>#defineN10doublefun(double*x){inti,j;doubles,av,y[N];s=0;for(i=0;i<N;i++)s=s+x[i];/*********found*********/av=【1】;for(i=j=0;i<N;i++)if(x[i]>av){/*********found*********/y[【2】]=x[i];x[i]=﹣1;}for(i=0;i<N;i++)/*********found*********/if(x[i]!=【3】)y[j++]=x[i];for(i=0;i<N;i++)x[i]=y[i];returnav;}main(){inti;doublex[N];for(i=0;i<N;i++){x[i]=rand()%50;printf("%4.0f",x[i]);}printf("\n");printf("\nTheaverageis:%f\n",fun(x));printf("\nTheresult:\n",fun(x));for(i=0;i<N;i++)printf("%5.0f",x[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)s/N(2)j++(3)﹣1知識(shí)點(diǎn)解析:填空1:由原程序可知,av代表的是平均值,而平均值的求法是所有數(shù)的總和除以數(shù)的個(gè)數(shù),因而本空應(yīng)該填寫s/N。填空2:y數(shù)組代表暫時(shí)存放x數(shù)組,if(x[i]>av)表達(dá)的是當(dāng)x數(shù)組中的數(shù)大于平均值時(shí),應(yīng)該把這些大于平均值的數(shù)放在y數(shù)組的前半部分,因而此空應(yīng)該填y[j++]。填空3:此空表明當(dāng)x[i]不等于什么時(shí),x[i]中的數(shù)要賦值給y數(shù)組,由題意可知此空只能填寫﹣1。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。此程序的功能是:讀入一個(gè)英文文本行,將其中每個(gè)單詞的第一個(gè)字母改成大寫,然后輸出此文本行(這里”單詞”是指由空格隔開的字符串)。例如,若輸入"Iamastudenttotaketheexamination",則應(yīng)輸出"IAmAStudentToTakeTheExamination"。請(qǐng)改正程序中的錯(cuò)誤,使程序能得出正確的結(jié)果。注意:部分源程序在文件MODI1.c中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<string.h>#include<conio.h>#include<ctype.h>#include<Stdio.h>#include<string.h>/*********found*********/voidupfst(charp){intk=0;for(;*p,p++)if(k){if(*p==’’)k=0;}else{if(*p!=’’){k=1;*p=toupper(*p);}}}voidmain(){charchrstr[81];system("CLS");printf("\nPleaseenteranEnglishtextline:");gets(chrstr);printf("\nBoforechanging:\n%s",chrstr);upfst(chrstr);printf("\nAfterchanging:\n%s\n",chrstr);}標(biāo)準(zhǔn)答案:voidupfst(char*p)知識(shí)點(diǎn)解析:主函數(shù)中fun函數(shù)的調(diào)用方式說明函數(shù)fun的參數(shù)應(yīng)為指針類型。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給主函數(shù)中的s。例如,若a數(shù)組中的值為:0127919745238314568259141則返回主程序后S的值應(yīng)為3.375。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5doublefun(intw[][N]){}voidmain(){FILE*wf;inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;doubles;system("CLS");printf("***Thearray***\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%4d",a[i][j]);}printf("\n");}s=fun(a);printf("***THERESULT***\n");printf("Thesumis:%lf\n",s);/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%lf",s);fclose(wf);/*********found*********/}標(biāo)準(zhǔn)答案:doublefun(intw[][N]){inti,j,k=0;doublesum=0.0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N﹣1||j==0||j==N﹣1)/*只要下標(biāo)中有一個(gè)為0或N﹣1,則它一定是周邊元素*/{sum=sum+w[i][j];/*將周邊元素求和*/k++;}returnsum/k;/*求周邊元素的平均值*/}知識(shí)點(diǎn)解析:本題要求計(jì)算二維數(shù)組周邊元素的平均值,for循環(huán)語(yǔ)句控制循環(huán)過程,if條件語(yǔ)句根據(jù)數(shù)組元素的下標(biāo)判斷該元素是否為二維數(shù)組的周邊元素。本題采用逐一判斷的方式,周邊元素的規(guī)律為下標(biāo)中有一個(gè)是0或N﹣1,所以只要下標(biāo)中有一個(gè)為0或N﹣1,那么它一定是周邊元素。計(jì)算周邊元素個(gè)數(shù)的方式是當(dāng)給sum累加一個(gè)值時(shí),k也加1。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:統(tǒng)計(jì)出帶有頭結(jié)點(diǎn)的單向鏈表中結(jié)點(diǎn)的個(gè)數(shù),存放在形參n所指的存儲(chǔ)單元中。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*a);voidoutlist(SLIST*);voidfun(SLIST*h,int*n)ISLIST*p;/**********found**********/___1___=0;p=h->next;while(p){(n)++;/**********found**********/p=p->___2___;}}main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48),num;head=creatlist(a);outlist(head);/**********found**********/fun(___3___,&num);printf("\nnumber=%d\n",num);}SLIST*creatlist(inta[]){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST)),for(i=0;i<N;i++){(q=(SLIST*)malloc(sizeof(SLIST)),q->data=a[i];p->next=q,p=q,}p->next=0;returnh;}voidoutlist(SLIST*h)(SLIST*p;p=h->next;if(p==NULL)printf("ThelistisNULL!\n");else(printf("\nHead");do(printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}標(biāo)準(zhǔn)答案:(1)*n(2)next(3)head知識(shí)點(diǎn)解析:函數(shù)fun的功能是統(tǒng)計(jì)出帶有頭結(jié)點(diǎn)的單向鏈表中結(jié)點(diǎn)的個(gè)數(shù)。第一空:木n保存返回值鏈表長(zhǎng)度,在開始計(jì)數(shù)之前,應(yīng)該將*n清零,故第一空處應(yīng)為“*n=0;”。第二空:*n在循環(huán)while(p)中計(jì)數(shù),p不斷指向下一個(gè)結(jié)點(diǎn),因此,第二空處應(yīng)該為“p=p->next;”。第三空:fun函數(shù)的聲明為:voidfun(SUST*h,int*n),第一個(gè)參數(shù)是頭結(jié)點(diǎn)地址,第二個(gè)參數(shù)要存放鏈表長(zhǎng)度的整型變量地址,故第三空處應(yīng)為“fun(hrad,&num);”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:求出S所指字符串中最后一次出現(xiàn)的t所指子字符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則函數(shù)值為NULL。例如,當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“ab”時(shí),輸出結(jié)果應(yīng)是“abcdx”。當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“abd”時(shí),則程序輸出未找到信息“notbefound!”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<string.h>char*fun(char*s,char*t){char*p,*r,*a;/**********found**********/a=Null;while(*s)(p=s;r=t;while(*r)/**********found**********/if(r==p){r++;p++;}elsebreak;if(*r==’\0’)a=s;s++;}returna;}main(){chars[100],t[100],*p;printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt:");scanf("%s",t);p=fun(s,t);if(p)printf("\nTheresultis:%s\n",p);elseprintf("\nNotfound!\n");}標(biāo)準(zhǔn)答案:(1)a=NULL;(2)if(*r==*p)知識(shí)點(diǎn)解析:函數(shù)功能是求得字符串中某子串最后一次出現(xiàn)的地址。(1)第一個(gè)標(biāo)識(shí)下面:語(yǔ)句“a=Null;”中的Null未定義。NULL代表空值,但程序中寫成了Null。所以,改成“a=NULL;”。(2)程序的主體是二重循環(huán),其中,外循環(huán)使指針s逐個(gè)指向字符串的字符,直到遇到串結(jié)束符退出循環(huán),內(nèi)循環(huán)檢查指針p與r所指字符串是否匹配。因?yàn)檫@里p、r是指針,如果使用判斷表達(dá)式“if(r==p)”,那么比較的是地址,而題目要求比較它們所指的字符。所以,改為:“if(*r==*p)”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、函數(shù)fun的功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并形成一個(gè)整數(shù)放在C中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的十位和千位上,b數(shù)的十位和個(gè)位數(shù)依次放在C數(shù)的百位和個(gè)位上。例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=5142。注意:部分源程序存在文件PROG1.C中。數(shù)據(jù)文件in.dat中的數(shù)據(jù)不得修改。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#include<stdio.h>voidfun(inta,intb,long*c){}mein(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%idk\n",c);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE-rf,*wf;inti,a,b;longc;rf=fopen("in.clat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscarlf(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)準(zhǔn)答案:*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);知識(shí)點(diǎn)解析:(1)分解兩位數(shù)的正整數(shù)n的個(gè)位和十位數(shù),可用n%10和n/10實(shí)現(xiàn)。(2)設(shè)x0、x1、x2、x3為一位數(shù),則x0、x1×10、x2×100、x3×1000,可以分別使x0、x1、x2、x3構(gòu)成個(gè)、十、百、千帶權(quán)數(shù),而x0+xl×10+x2×100+x3×1000構(gòu)成四位數(shù)。本題最多只考慮四位數(shù)。國(guó)家二級(jí)C語(yǔ)言機(jī)試(操作題)模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:計(jì)算形參x所指數(shù)組中N個(gè)數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中小于平均值的數(shù)據(jù)移至數(shù)組的前部,大于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動(dòng)后的數(shù)據(jù)。例如,有10個(gè)正數(shù):47、30、32、40、6、17、45、15、48、26,其平均值為30.500000。移動(dòng)后的輸出為:30、6、17、15、26、47、32、40、45、48。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<stdio.h>#defineN10doublefun(double*x){inti,j;doublea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)龜合作合同范例
- 教學(xué)協(xié)議合同范例
- 藝術(shù)培訓(xùn)公司合同范例
- 傘加工合同范例
- 憑證裝訂合同范例
- 餐廳轉(zhuǎn)租合同范例版
- 投資借貸合同范例
- 客戶轉(zhuǎn)讓合同范例
- 奶茶 合同范例
- 寫物流運(yùn)輸合同范例
- 洼田飲水試驗(yàn)
- 3S技術(shù)在精準(zhǔn)農(nóng)業(yè)的應(yīng)用
- 循環(huán)流化床鍋爐DCS控制方案
- 大眾頂級(jí) 輝騰 減振控制的空氣懸架_圖文
- 血液透析??撇僮髁鞒碳霸u(píng)分標(biāo)準(zhǔn)
- 座板式單人吊具(課堂PPT)
- 托班一日生活情況反饋表
- FLAC3D常用命令
- JGJ_T231-2021建筑施工承插型盤扣式鋼管腳手架安全技術(shù)標(biāo)準(zhǔn)(高清-最新版)
- 畢業(yè)論文(設(shè)計(jì))除雪車工作裝置設(shè)計(jì)
- 鏡片加工知識(shí)之四研磨
評(píng)論
0/150
提交評(píng)論