國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共27題)_第1頁
國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共27題)_第2頁
國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共27題)_第3頁
國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共27題)_第4頁
國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共27題)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

國家二級(jí)C語言機(jī)試(操作題)模擬試卷46(共9套)(共27題)國家二級(jí)C語言機(jī)試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:逆置數(shù)組元素中的值。例如:若a所指數(shù)組中的數(shù)據(jù)依次為:1、2、3、4、5、6、7、8、9,則逆置后依次為:9、8、7、6、5、4、3、2、1。形參n給出數(shù)組中數(shù)據(jù)的個(gè)數(shù)。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#inCludeVoidfun(inta[],intn){inti,t;/**********found***********/for(2=0;i<___1____;i++){t=a[i];/**********found***********/a[i]=a[n一1—___2___];/**********found***********/___3___=t;}}main(){intb[9]={1,2,3,4,5,6,7,8,9},i;printf(“\nTheoriginaldata:\n”);for(i=0;i<9;i++)printf(“%4d”,b[i]);printf(“\n”);fun(b,9);printf(“\nThedataafterinvert:\n”);for(i=0;i<9;i++)printf(“%4d”,b[i]);printf(“\n”);}標(biāo)準(zhǔn)答案:(1)n/2(2)i(3)a[n—i—1]知識(shí)點(diǎn)解析:函數(shù)fun的功能是將數(shù)組中的元素倒置。第一空:由審題分析可知,總共交換n/2次,故循環(huán)的終止條件為i等于n/2,故第一空處應(yīng)為“n/2”。第二空:a[0]和a[n-1]交換,a[1]和a[n-2]交換…,因此a[i]和a[n—i-1]交換,故第二空處應(yīng)為“i”。第三空:“t=a[i];a[i]=a[n—1—i];”所以第三空處是把t值賦值a[n—1-i],故第三窄處應(yīng)為“a[n—1—i]”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODll.C中函數(shù)fun的功能是:統(tǒng)計(jì)一個(gè)無符號(hào)整數(shù)中各位數(shù)字值為零的個(gè)數(shù),通過形參傳回主函數(shù);并把該整數(shù)中各位上最大的數(shù)字值作為函數(shù)值返回。例如,若輸入無符號(hào)整數(shù)30800,則數(shù)字值為零的個(gè)數(shù)為3,各位上數(shù)字值最大的是8。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(unsignedn,int*zero){intcount=0,max=0,t;do{t=n%10;/**********found***********/if(t=0)count++;if(max標(biāo)準(zhǔn)答案:(1)if(t==0)(2)*zero=count;知識(shí)點(diǎn)解析:本題中函數(shù)的功能是統(tǒng)計(jì)一個(gè)無符號(hào)整數(shù)中各位數(shù)字值為0的個(gè)數(shù)。對(duì)無符號(hào)數(shù)進(jìn)行截取,然后對(duì)每個(gè)數(shù)字進(jìn)行判斷并統(tǒng)計(jì)。[解題思路](1)第一個(gè)標(biāo)識(shí)下的if語句是判斷t是甭為0,而原題給出的“if(t=0)”是將0賦值給t,所以將第一個(gè)標(biāo)識(shí)下的“if(t=0)”改為“if(t==0)”。(2)第二個(gè)標(biāo)識(shí)下的“zero=count;”語句,根據(jù)fun函數(shù)中zero的定義為指針型。所以,第二個(gè)標(biāo)識(shí)下“zero=count;”應(yīng)該改為“*zero=count:”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:比較兩個(gè)字符串的長度,(不得調(diào)用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較長的字符串。若兩個(gè)字符串長度相同,則返回第一個(gè)字符串。例如,輸入beijingshanghai(為回車鍵),函數(shù)將返回shanghai。注意:部分源程序存在文件PROGl.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#inoiudechar*fun(char*s,char*t){}main(){chara[20],b[20];voidNONO();printf(“Input1thstring:”);gets(a);printf(“Input;2thstring:”);gets(b);printf(“%s\n”,fun(a,b));NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti;chara[20],b[20];fp=fopen(“in.dat”,“r”);wf=fopen(“out.dat”,“w”);for(i=0;i<10;i++){fscanf(fp,“%s%s”,a,b);fprintf(wf,“%s\n”,fun(a,b));}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:inti:char*p=s,*q=t;intn=0,m=0;while(*p)//計(jì)算串s的長度n,其中p為臨時(shí)指針{n++;p++;}while(*q)//計(jì)算串t的長度m,其中q為臨時(shí)指針{m++;q++;}if(n>=m)//比較m和n的值,設(shè)置p指向較大的指針p=s;elsep=t;returnp;知識(shí)點(diǎn)解析:該程序功能是比較兩個(gè)字符串的長度。解題過程是首先分別求得兩個(gè)字符串的長度,然后對(duì)這兩個(gè)值進(jìn)行判斷,實(shí)現(xiàn)兩個(gè)字符串長度的比較。[解題思路]進(jìn)入fun函數(shù),根據(jù)前面的分析:(1)首先求得字符串的長度,設(shè)變量n和m分別用來求字符串的長度,初值設(shè)為0,把字符串中的字符逐個(gè)訪問,每訪問一個(gè)字符,n和m分別加1,直到字符串結(jié)束。(2)使用兩個(gè)臨時(shí)指針變量p、q分別作為訪問字符串的變量。(3)根據(jù)m和n的值返回串,設(shè)置指針p,指向返回串的開始地址。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲(chǔ)了一名學(xué)生的學(xué)號(hào)、姓名和3門課的成績。函數(shù)fun的功能是將該學(xué)生的各科成績都乘以一個(gè)系數(shù)a。請(qǐng)?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>typedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){int.i;print.f("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)print:f("%5.1f",tt.score[i]);print:f("\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};float:a;print:f("\nTheoriginalnumbetandnameandscores:\n");show(std);print:f("knlnputanumber:");scanf("%f",&a);/*********found*********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}標(biāo)準(zhǔn)答案:(1)STU(2)score[i](3)&std知識(shí)點(diǎn)解析:本題考查:數(shù)組變量賦值;函數(shù)實(shí)參定義。本題是利用結(jié)構(gòu)體存儲(chǔ)學(xué)生記錄,對(duì)記錄進(jìn)行修改并由實(shí)參ss返回。填空1:實(shí)參ss是一個(gè)結(jié)構(gòu)型指針變量,所以應(yīng)填STU。填空2:該學(xué)生的各科成績都乘以一個(gè)系數(shù)a,所以應(yīng)填score[i]。填空3:函數(shù)的調(diào)用,由于函數(shù)定義時(shí)使用的指針結(jié)構(gòu)型變量,所以應(yīng)填&std。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如,若k=10,則應(yīng)輸出3628800。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<eonio.h>#include<stdio.h>longfun(intk){/*********found*********/ifk>1return(k*fun(k一1));return1;}main(){intk=10;printf("%d!=%ld\n",k,fun(k));}標(biāo)準(zhǔn)答案:if(k>1)知識(shí)點(diǎn)解析:本題考查:if語句,考生需要根據(jù)題意來確定if語句是否是正確的,if條件語句經(jīng)???,考生需掌握。語法錯(cuò)誤,if條件表達(dá)式應(yīng)寫在小括號(hào)內(nèi)。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動(dòng)賦值。請(qǐng)編寫函數(shù)fun(inta[][N],intn),該函數(shù)的功能是:使數(shù)組左下半三角元素中的值乘以n。例如,若n的值為3,a數(shù)組中的值為:則返回主程序后a數(shù)組中的值應(yīng)為:注意:部分源程序給出如下。請(qǐng)勿改動(dòng)函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。試題程序:#inclucle<stdio.h>#inclucle<conio.h>#inclucie<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("*****TGERESULT*****\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++)/*矩形的下三角時(shí),積相乘*/a[i][j]=a[i][j]*n;}知識(shí)點(diǎn)解析:本題的fun的功能是使數(shù)組的左下半三角元素中的值乘以n,因此本題需要使用雙重for循環(huán),for循環(huán)需要注意的是:(1)循環(huán)初值,根據(jù)題意要求控制循環(huán)變量的取值范圍;(2)循環(huán)條件,確定循環(huán)結(jié)束的條件,即當(dāng)不滿足條件時(shí),結(jié)束循環(huán)。首先從數(shù)組中找出要被乘以n的那部分元素,這一過程其實(shí)就是找出將被挑出的元素在原數(shù)組中的分布規(guī)律的過程。通過觀察得出,要被處理的元素下標(biāo)值的范圍是每行中從第一個(gè)元素開始,直到列數(shù)等于該行行數(shù)時(shí)為止。找到這個(gè)規(guī)律后,依次從數(shù)組中取得符合要求的元素,然后乘以n。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的作用是:不斷從終端讀入整數(shù),由變量a統(tǒng)計(jì)大于0的個(gè)數(shù),用變量c來統(tǒng)計(jì)小于0的個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,并通過形參pa和pb把統(tǒng)計(jì)的數(shù)據(jù)傳回主函數(shù)進(jìn)行輸出。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!1#include<stdio.h>2voidfun(int*px,int*py)3{4/**********found**********/5int_(1)_;6scanf(’’%d’’,&k);7/**********found**********/8while(2)9{if(k>0)a++;10if(k<0)c++;11/**********found**********/12__(3)__;13}14*px=a;*py=c;}15main()16{intx,y;17fun(&x,&y);18printf(’’x=%dy=%d\n’’,x,y);19}標(biāo)準(zhǔn)答案:(1)a=0,c=0,k(2)(k!=0)(3)scanf(’’%d’’,&k);知識(shí)點(diǎn)解析:本題中函數(shù)fun的功能是不斷從終端讀入整數(shù),由變量a統(tǒng)計(jì)大于0的個(gè)數(shù),用變量c來統(tǒng)計(jì)小于0的個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,然后通過形參pa和pb把統(tǒng)計(jì)的數(shù)據(jù)傳回主函數(shù)進(jìn)行輸出。因?yàn)榇撕瘮?shù)對(duì)于數(shù)字的大小有不同的處理方式,所以根據(jù)題意首先要區(qū)別大于0、小于0和等于0的數(shù)字,然后進(jìn)行統(tǒng)計(jì)和程序的進(jìn)行。然后我們就能想到要使用條件語句來進(jìn)行,while或者if都可,再利用自增運(yùn)算符既可以統(tǒng)計(jì),得到結(jié)果。第一空:“int__(1)__;”這一空出現(xiàn)在fun函數(shù)最開始的定義階段,我們可以看到這里定義的是int整型數(shù)據(jù),而在這下面的一步為“scanf*’’%d’’,&k);”即讓我們輸入k的數(shù)據(jù),再根據(jù)題意,就可以知道這里的k是我們不斷輸入的整數(shù),而整個(gè)程序也僅僅需要這一個(gè)數(shù)據(jù)的輸入,所以這一空定義的就是我們需要輸入的數(shù)據(jù)k,同時(shí)下面出現(xiàn)在a,c也都沒有定義,所以這一空應(yīng)該填“a=0,c=0,k”。第二空:“while__(2)___;”這一空出現(xiàn)在fun函數(shù)中的while循環(huán)中,是要給出while循環(huán)的條件語句。根據(jù)題意我們就可以知道,這里循環(huán)是只要數(shù)字不0就一直進(jìn)行,而while循環(huán)內(nèi)部也能看到k>0和k<0時(shí)的統(tǒng)計(jì)步驟,所以這里while循環(huán)應(yīng)該就是while循環(huán)的終止條件,k不等于即可,即這一空應(yīng)該填“(k!=0)”(注意這里應(yīng)該加上條件語句應(yīng)有的括號(hào))。第三空:“……(3);……”這一空在while循環(huán)中,此while循環(huán)是數(shù)字的判定函數(shù)。這一空前面已經(jīng)有了對(duì)于數(shù)字大于0或者小于0的判斷,也有相應(yīng)的a++和c++來進(jìn)行個(gè)數(shù)統(tǒng)計(jì),但是我們會(huì)發(fā)現(xiàn)這里功能已經(jīng)齊全,只不過沒有達(dá)到題目要求的不斷的輸入,所以這里循環(huán)還要繼續(xù)輸入k的值才能實(shí)現(xiàn)題目所達(dá)到的要求,所以這一空應(yīng)該填的是“scanf(’’%d’’,&k);"。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序modi1.C的主函數(shù)中,將a、b、c三個(gè)結(jié)點(diǎn)鏈成一個(gè)單向鏈表,并給各結(jié)點(diǎn)的數(shù)據(jù)域賦值,函數(shù)fun()的作用是:累加鏈表結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<stdio.h>2typedefstructlist3{intdata;4structlist*next;5}LIST;6intfun(LIST*h)7{LIST*p;8/**********found**********/9intt;10p=h;11/**********found**********/12while(p)13{14/**********found**********/15t=t+p.data;16p=(*p).next;17}18returnt;19}20main()21{LISTa,b,c,*h;22a.data=34;b.data=51;23c.data=87;c.next=’\0’;24h=&a;a.next=&b;b.next=&c;25printf(’’總和=%d\n’’,fun(h));26}標(biāo)準(zhǔn)答案:(1)intt改為intt=0;(2)while(*p)改為while(p)(3)t=t+p.data;改t=t+(*p).data知識(shí)點(diǎn)解析:本題中函數(shù)fun()的作用是:累加鏈表結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)作為函數(shù)值返回。這里數(shù)據(jù)是主函數(shù)中定義的a,b,c,但是要是鏈表結(jié)點(diǎn)的方式將其相加,其實(shí)也類似于普通的數(shù)據(jù)加減,只不過這里用到鏈表和結(jié)構(gòu)體的話就要注意很多的細(xì)節(jié)問題,因?yàn)橹羔樢恢笔荂語言最難理解的一部分,很容易搞錯(cuò)它的使用方法。(1)第一個(gè)錯(cuò)誤在定義t時(shí),t是數(shù)據(jù)結(jié)果,但是在一開始定義時(shí),t應(yīng)該定義為0的,這樣才不會(huì)影響后面的數(shù)據(jù)結(jié)果,以免程序出現(xiàn)不必要的錯(cuò)誤所以這里應(yīng)該講intt改為“intt=0”。(2)第二個(gè)錯(cuò)誤在fun函數(shù)中執(zhí)行while條件時(shí)while的條件語句。這里用“*p”,我們都知道這是指針的形式,而“*p”的意義是指針變量p所指向的變量的值,所以這里“*p”是一個(gè)具體的變量,而while(*p)的意義是“*p”不為空時(shí)就一直執(zhí)行,但是這里根據(jù)題意我們需要的鏈表的地址來進(jìn)行題目需要的鏈表的計(jì)算,而單向鏈表的結(jié)束的標(biāo)志就是鏈尾,鏈尾的特征則是指向?yàn)榭?,這里指向?yàn)榭罩傅氖堑刂繁劝⒛铮赃@里的終止條件不應(yīng)該是p所指向的值為0,而是p的地址為空,所以“while(*p)”應(yīng)該改為“while(p)”。(3)第三個(gè)錯(cuò)誤在fun()函數(shù)中的計(jì)算。我們都知道,鏈表與結(jié)構(gòu)體是緊密相連的,這一題同樣用到了,而且我們進(jìn)行的也是鏈表結(jié)點(diǎn)的運(yùn)算,自然要用到結(jié)構(gòu)體成員變量的運(yùn)算。但是在“t=t+p.data”這個(gè)運(yùn)算時(shí),“p.data”的意義是“p.data”這個(gè)指針變量,也就是說這是指針變量的運(yùn)算,指針變量是跟結(jié)點(diǎn)變量不同的,我們需要的是結(jié)點(diǎn)的數(shù)據(jù),而不是指向它的指針的數(shù)據(jù),所以這里的運(yùn)算是完全錯(cuò)誤的,為了符合題意,我們應(yīng)該要使用結(jié)點(diǎn)的結(jié)構(gòu)體變量。即“=t+p.data”應(yīng)該改為“t=t+(*p).data”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,其功能是分別統(tǒng)計(jì)形參t所指二維數(shù)組中字母A和C的個(gè)數(shù)。注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。1#include<stdio.h>2#include<stdlib.h>3#defineM144voidNON0();5voidfun(char(*t)[M],int*a,int*c)6{7}8voidget(char(*s)[M])9{inti,j;10for(i=0;i<M;i++)11{for(j=0;j<M;j++)12{s[i][j]=65+rand()%12;13printf(’’%c’’,s[i][j]);}14printf(’’\n’’);15}16}17main()18{chara[M][M];19intx,y;20get(a);21fun(a,&x,&y);22printf(’’A=%dc=%d\n’’,x,y);23NONO();24}25voidNONO()26{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/27FILE*fp,*wf;28inti,j,x,y;29chara[M][M];30fp=fopen(’’in.dat’’,’’r’’);31wf=fopen(’’out.dat’’,’’w’’);32for(i=0;i<M;i++)33{for(j=0;j<M;j++)34{fscanf(fp,’’%c’’,&a[i][j]);}35}36Fun(a,&x,&y);37fprintf(wf,’’A:%d\n’’,x);38fprintf(wf,’’C=%d\n’’,y);39fclose(fp);40fclose(wf);41}標(biāo)準(zhǔn)答案:1voidfun(char(*t)[M],int*a,int*c)2{inti,j;3*a=0;*c=0;4for(i=0;i<M;i++)5for(j=0;j<M;j++)6if(t[i][j]==’A’)*a=*a+1;7elseif(t[i][j]==’c’)*c=*c+1;8}知識(shí)點(diǎn)解析:本題中fun函數(shù)實(shí)現(xiàn)的功能的主要功能是找出二維數(shù)組中A和C的個(gè)數(shù),最先就能想到用條件語句進(jìn)行判斷和統(tǒng)計(jì)。解題步驟主要為:第一步,要得到所需要的二維數(shù)組,第二步,二維數(shù)組進(jìn)入fun函數(shù)中進(jìn)行數(shù)據(jù)處理,fun函數(shù)中需要if條件語句來進(jìn)行判斷,判斷數(shù)組中的字母是否為A或者C,數(shù)組中的每個(gè)數(shù)據(jù)都需要進(jìn)行判斷,要注意A和C是分開統(tǒng)計(jì)的,所以這里需要同時(shí)統(tǒng)計(jì)A和C,然后分別得到結(jié)果;第三步,輸出得到的結(jié)果:字母A和字母C的個(gè)數(shù)。本題首先需要一個(gè)二維數(shù)組,二維數(shù)組的大小在程序開始就進(jìn)行了定義“define=14”,這個(gè)大小比較合適,然后利用gets函數(shù)得到數(shù)組,然后數(shù)據(jù)就可以進(jìn)入fun函數(shù)中進(jìn)行處理應(yīng)用。進(jìn)入fun函數(shù),fun函數(shù)首先肯定需要for循環(huán)語句將二維數(shù)組中的數(shù)據(jù)進(jìn)行排序使用,然后需要條件語句進(jìn)行判斷處理,這兩步是一體,見程序第9~11行,for循環(huán)保證全部使用了二維數(shù)組中數(shù)據(jù),并且是依次使用,if語句判斷了字母是否為A或者C或者都不是,并且進(jìn)行了統(tǒng)計(jì)相加得到了A的個(gè)數(shù)a,C的個(gè)數(shù)c,這樣循環(huán)完成后,A和C的個(gè)數(shù)a、c就能繼續(xù)返回主函數(shù)進(jìn)行輸出了,見程序26行,最終得到結(jié)果。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:在有n個(gè)元素的結(jié)構(gòu)體數(shù)組std中,查找有不及格科目的學(xué)生,找到后輸出學(xué)生的學(xué)號(hào):函數(shù)的返回值是有不及格科目的學(xué)生人數(shù)。例如,主函數(shù)中給出了4名學(xué)生的數(shù)據(jù),則程序運(yùn)行的結(jié)果為:學(xué)號(hào):N1002學(xué)號(hào):N1006共有2位學(xué)生有不及格科目請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容,并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!1#include<stdio.h>2typedefstruct3{charnum[8];4doublescore[2];5/**********found**********/6}___(1)___;7intfun(STUstd[],intn)8{inti,k=0;9for(i=0;i<n;i++)10/**********found**********/11if(std[i].score[0]<60__(2)__std[i].score[1]<60)12{k++;prfntf(’’學(xué)號(hào):%s’’,std[i].num);}13/**********found**********/14return_-(3)__;15}16main()17{STUstd[4]={’’N1001’’,76.5,82.0,’’N1002’’,53.5,73.0,’’N1005’’,80.5,66.0,’’N1006’’,81.0,56.0};18printf(’’\n共有%d位學(xué)生有不及格科目\n’’,fun(std,4)};19}標(biāo)準(zhǔn)答案:(1)STU(2)||(3)k知識(shí)點(diǎn)解析:本題中函數(shù)fun的功能是在有n個(gè)元素的結(jié)構(gòu)體數(shù)組std中,查找有不及格科目的學(xué)生,找到后輸出學(xué)生的學(xué)號(hào);函數(shù)的返回值是有不及格科目的學(xué)生人數(shù)。這里用到了結(jié)構(gòu)體,結(jié)構(gòu)體在對(duì)于個(gè)人信息處理是有很方便的作用。只需要用到學(xué)生的分?jǐn)?shù)和學(xué)號(hào),所以這里的結(jié)構(gòu)體的成員表列比較少。然后根據(jù)題目要求是要統(tǒng)計(jì)出不及格學(xué)生的人數(shù)并且查找和統(tǒng)計(jì)他們的學(xué)號(hào),這里用到if條件語句即可進(jìn)行統(tǒng)計(jì),要注意的是這里學(xué)科數(shù),要求只要有一門學(xué)科不及格即進(jìn)入統(tǒng)計(jì),所以要正確地給出條件語句。最后輸出學(xué)號(hào)和人數(shù)。第一空:“{……}(1)___;”這一空出現(xiàn)在定義結(jié)構(gòu)體時(shí),這里使用了typedef就是很明顯地要聲明結(jié)構(gòu)體類型,而這里則是要填寫結(jié)構(gòu)體類型名。這里就要知道typedef的作用了,typedef是用來命名已有類型的,相當(dāng)于給已經(jīng)知道的類型(如intfloat)一個(gè)新的類型名,而這里命名的是一個(gè)結(jié)構(gòu)體,這不同于結(jié)構(gòu)體的類型定義,大括號(hào)后面填寫的不是變量名表列,而是結(jié)構(gòu)體類型名,相當(dāng)于給一個(gè)名稱或者一種新的類型。而根據(jù)后面程序已給出的部分,我們能清楚的看到定義的結(jié)構(gòu)體類型名是STU,所以這一空應(yīng)該填的是“STU”。第二空:“if(std[i].score[0]<60__(2)___std[i].score[1]<60);”這一空出現(xiàn)在fun函數(shù)中的if條件語句中,根據(jù)if后面的執(zhí)行語句我們可以看到執(zhí)行的人數(shù)的統(tǒng)計(jì),所以這里應(yīng)該就是在判斷學(xué)生學(xué)科分?jǐn)?shù)是否及格的條件語句。對(duì)于一開始的結(jié)構(gòu)體定義我們能夠發(fā)現(xiàn)成員score是長度為2的數(shù)組,所以每個(gè)學(xué)生應(yīng)該是有兩門學(xué)科的分?jǐn)?shù)需要來判定和統(tǒng)計(jì)的,而這兩門學(xué)科中任意一門分?jǐn)?shù)不夠的話都定義為不及格,然后統(tǒng)計(jì)進(jìn)入人數(shù)中,這里所填空的兩邊是兩門學(xué)科的分?jǐn)?shù)低于60分,既然前面說了是任意一門低于60即進(jìn)入統(tǒng)計(jì),那這里就應(yīng)該是“或”符號(hào)才符合要求,所以這一空應(yīng)該填“||”。第三空:“return__(3)___;”這一空出現(xiàn)在fun函數(shù)中,這里要填寫的是fun函數(shù)執(zhí)行后的返回值。根據(jù)題目的要求函數(shù)是要查找不及格的科目的學(xué)生,找到學(xué)生學(xué)號(hào),然后返回學(xué)生的人數(shù),這一空前面已經(jīng)執(zhí)行了查找,統(tǒng)計(jì)人數(shù)和學(xué)號(hào)的輸出,所以這里應(yīng)該返回的就是不及格學(xué)生的人數(shù)。而根據(jù)前面的定義,人數(shù)統(tǒng)計(jì)的變量名應(yīng)該是k,所以這一空應(yīng)該要填寫的是“k”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中,函數(shù)fun的功能是判斷整數(shù)n是否是“完數(shù)”。當(dāng)一個(gè)數(shù)的因子之和恰好等于這個(gè)數(shù)本身時(shí),就稱這個(gè)數(shù)為“完數(shù)”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完數(shù)。如果是完數(shù),函數(shù)返回值為1,否則函數(shù)返回值為0。數(shù)組a中存放的是找到的因子,變量k中存放的是因子的個(gè)數(shù)。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<stdio.h>2intfun(intn,inta[],int*k)3{intm=0,i,t;4t=n;5/**********found**********/6for(i=0;i<n;i++)7if(n%i==0)8{a[m]=i;m++;t=t-i;}9/**********found**********/10k=m;11/**********found**********/12if(t=0)return1;13elsereturn0;}14main()15{intn,a[10],flag,i,k;16printf(’’請(qǐng)輸入一個(gè)整數(shù):’’);scanf(’’%d",1&n);17flag=fun(n,a,&k);18if(flag)19{prfntf(’’%d是完數(shù),其因子是:’’,n);20for(i=0,i<k,i++)printf(’’%d’’,a[i]);21printf(’’\n’’);}22elseprintf(’’%d不是完數(shù).\n’’,n);23}標(biāo)準(zhǔn)答案:(1)for(i=0;i<n;i++)改為for(i=1;i<n;i++)(2)k=m;改為*k=m;(3)if(t=0)改為if(t==0)知識(shí)點(diǎn)解析:本題的fun函數(shù)主要功能是:是判斷整數(shù)n是否是“完數(shù)”。當(dāng)一個(gè)數(shù)的因子之和恰好等于這個(gè)數(shù)本身時(shí),就稱這個(gè)數(shù)為“完數(shù)”。(例如:6的因子包括1、2、3,而6=1+2+3,所以6是完數(shù))如果是完數(shù),函數(shù)返回值為1,否則函數(shù)返回值為0。數(shù)組a中存放的是找到的因子,變量k中存放的是因子的個(gè)數(shù)。這里是一個(gè)條件判斷問題,原理上利用條件if條件語句和for循環(huán)得到結(jié)果,結(jié)果則是用數(shù)組輸出完數(shù)的因子,用k變量輸出因子的個(gè)數(shù)。這里fun()函數(shù)為了判定這個(gè)數(shù)字是否為完數(shù),一定要使用正確的循環(huán),這個(gè)判斷條件還是需要一定的步驟的。最重要的就是注意細(xì)節(jié)(1)第一個(gè)錯(cuò)誤在fun()函數(shù)的for循環(huán)中,這里的循環(huán)的就是輸入數(shù)字n的因式,很明顯的一個(gè)問題就是循環(huán)的起始值有問題,這從i=0開始就違反了最基本的四則運(yùn)算,0不可能是其他整數(shù)的因式,也沒有意義。所以這里應(yīng)該將“i=0”改為“i=1”。(2)第二個(gè)錯(cuò)誤在fun()函數(shù)中數(shù)字經(jīng)過for循環(huán)過后,這里“k=m”,是為了得到“k”的值,也就是因子的個(gè)數(shù)。但是要注意的細(xì)節(jié)是在fun()函數(shù)中的參數(shù)是“k”,也就是說k只是一個(gè)指針變量,而不是我們所需要的因子個(gè)數(shù)的變量,所以這里我們應(yīng)該使用的是“*k”,即將“k=m”改為“*k=m”。(3)第三個(gè)錯(cuò)誤在fun函數(shù)第二個(gè)if條件語句中,這里“f(t=0)return1;”的t是數(shù)字減掉因子和的值,也就是說只要是t等于0就代表輸入的數(shù)字是一個(gè)完數(shù),這里原本的意圖就是在得到因子的和之后判斷數(shù)字是否為完數(shù)。但是又有一個(gè)細(xì)節(jié)沒有注意到的就是在if條件語句中,等于號(hào)應(yīng)該是“==”,而不是普通的“=”,所以這里應(yīng)該將“if(t=0)”改為“if(t==0”。)三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun:在形參指針?biāo)傅?個(gè)整數(shù)中找出最大值和最小值,最大的放在a中,最小的放在d中。注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)mare和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。1#include<stdio.h>2voidNONO();3voidfun(int*a,int*b,int*c,int*d)4{5}6main()7{inta,b,c,d;8printf(’’請(qǐng)輸入4個(gè)整數(shù):’’);9scanf(’’%d%d%d%d’’,&a,&b,&c,&d);10printf(’’原始順序:%d,%d,%d,%d\n’’,a,b,C,d);11fun(&a,&b,&c,&d);12printf(’’處理后:%d,%d,%d,%d\n”,a,b,c,d);13NONO();14}15voidNONO()16{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/17FILE*fP,*wf;18inti,a,b,c,d;19fp=fopen(’’in.dat’’,’’r’’);20wf=fopen(’’out.dat’’,’’w’’);21for(i=0;i<5;i++)22{fscanf(fp,’’%d%d%d%d’’,&a,&b,&c,&d);23fun(&a,&b,&C,&d);24fprintf(wf,’’a=%d,d=%d\n’’,a,d);25}26fclose(fp);27fclose(wf);}標(biāo)準(zhǔn)答案:1voidfun(int*a,int*b,int*c,int*d)2{intt;3if(*a<*b){t=*a;*a=*b;*b=t;}4if(*a<*c)(t=*a;*a=*c;*c=t;}5if(*a<*d){t=*a;*a=*d;*d=t;}6if(*b<*c){t=*b;*b=*c;*c=t;}7if(*b<*d){t=*b;*b=*d;*d=t;}8if(*c<*d){t=*c;*c=*d;*d=t;}}知識(shí)點(diǎn)解析:本題中的函數(shù)功能主要是在形參指針?biāo)傅?個(gè)整數(shù)中找出最大值和最小值,最大的放在a中,最小的放在d中。這個(gè)題目類似于排序,但是又不是嚴(yán)格的排序,只要重新排序最大值和最小值的位置即可。所以類似于排序,這一題需要相互比較4個(gè)數(shù)字,然后進(jìn)行位置的調(diào)換?;舅悸肪褪潜容^相鄰的兩個(gè)數(shù)字,如果靠近a的數(shù)字比靠近d的數(shù)字要大,就不用進(jìn)行交換,如果靠近a的數(shù)字比靠近d的數(shù)字小,就進(jìn)行交換,這樣的話最大的數(shù)字就會(huì)慢慢交換到a的位置,然后最小的數(shù)字就會(huì)慢慢交換到d的位置。所以根據(jù)分析我們就要用到if語句來進(jìn)行判斷和處理,只要經(jīng)過幾輪的if判斷大小然后交換,就能實(shí)現(xiàn)題目條件所給出的位置的重置,得到要求的結(jié)果。首先在主函數(shù)main中我們需要的就是四個(gè)數(shù)字,這四個(gè)數(shù)字需要手動(dòng)輸入,件程序代碼第13~15行,四個(gè)數(shù)字輸入完城后就可以進(jìn)入fun函數(shù)進(jìn)行數(shù)據(jù)處理了。進(jìn)入到fun函數(shù)中,只要從a到d進(jìn)行比較,按照一開始的規(guī)則即可,如果a大于b,不變,比較a與c,若a小b,a與b交換位置,交換過后a就大于b了,這樣就進(jìn)行a與c的比較;a與c的比較同理,這樣的循環(huán)比較,就能發(fā)現(xiàn),每比較一次,較大的數(shù)字就能交換到a的位置,較小的數(shù)字就離a越來越遠(yuǎn),也就是到了d的位置,這樣就完成了題目所給出的要求了,最大的數(shù)字放在a中,最小的數(shù)字放在d中。當(dāng)新的排序排好后,就可以返回主函數(shù)進(jìn)行輸出了。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是重寫形參filename所指文件中最后一個(gè)學(xué)生的數(shù)據(jù),即用新的學(xué)生數(shù)據(jù)覆蓋該學(xué)生原來的數(shù)據(jù),其他學(xué)生的數(shù)據(jù)不變。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/*********found**********/fp=fopen(【1】,"rb+");/*********found**********/fseek(【2】,-(long)sizeof(STU),SEEK_END);/**********found**********/fwrite(&n,sizeof(STU),1,【3】);fclose(fp);}main(){STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;j標(biāo)準(zhǔn)答案:(1)filename(2)fp(3)fp知識(shí)點(diǎn)解析:第一空:“fp=fopen(【1】,"rb+");”補(bǔ)充fopen的參數(shù),fopen的調(diào)用形式是:fp=fopen(文件名,文件使用方式),因此,第一空處應(yīng)填文件名“filename”。第二空:此處是補(bǔ)充fseek函數(shù)的參數(shù),fseek的調(diào)用形式是:fseek~(fp,offset,position),其中,第一個(gè)參數(shù)是文件型指針,故第二空處應(yīng)填文件型指針變量“fp”。第三空:fwrite的調(diào)用形式是(buffer,size,counf,fp),最后一個(gè)參數(shù)是文件型指針,故第三空處應(yīng)填“fp”,將新的學(xué)生數(shù)據(jù)寫在最后一個(gè)學(xué)生數(shù)據(jù)位置。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中的函數(shù)Creatlink的功能是創(chuàng)建帶頭結(jié)點(diǎn)的單向鏈表,并為各結(jié)點(diǎn)數(shù)據(jù)域賦0到m-1的值。請(qǐng)改正函數(shù)Creatlink中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includetypedefstructaa{intdata;structaa*next;}NODE;NODE*Creatlink(intn,intm){NODE*h=NULL,*p,*s;inti;/**********found***********/p=(NODE)malloc(sizeof(NODE));h=p;p->next=NULL;for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->next=p->next;p->next=s;p=p->next;}/**********found***********/returnp;}outlink(NODE*h){NODE*p;p=h->next;printf("\n\nTHELIST:\n\nHEAD");while(p){printf("->%d",p->data);p=p->next;}printf("\n");}main(){NODE*head;head=Creatlink(8,22);outlink(head);}標(biāo)準(zhǔn)答案:(1)p=(NODE*)malloc(sizeof(NODE));(2)returnh;知識(shí)點(diǎn)解析:(1)“p=(NODE)malloc(sizeof(NODE));”第一標(biāo)識(shí),maclloc函數(shù)的返回類型是void*類型,表示未確定類型的指針,因此,需要指針類型轉(zhuǎn)換,而“(NODE)”不是指針類型,故第一標(biāo)識(shí)下應(yīng)改成“p=(NODE*)malloc(sizeof(NODE));”。(2)第二個(gè)標(biāo)識(shí)下,最后將單鏈表返回,應(yīng)該是返回頭指針h指向的鏈表,而不是其中的一個(gè)節(jié)點(diǎn)p,所以“returnp;”應(yīng)該改為“returnh;”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計(jì)一行字符串中單詞的個(gè)數(shù),作為函數(shù)值返回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間由若干個(gè)空格隔開,一行的開始沒有空格。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#include#defineN80intfun(char*s){}main(){charline[N];intnum=0;voidNONO();printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);NONO();}voidNONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti,num;charline[N],*p;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(line,N,rf);p=strchr(line,’\n’);if(p!=NULL)*p=0;num=fun(line);fprintf(wf,"%d\n",num);}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:inti,n=0;//字符統(tǒng)計(jì)初始值設(shè)置為0for(i=0;i=’a’&&s[i]<=’z’&&s[i+1]==’’‖s[i+1]==’\0’)//單詞判斷條件n++;//單詞統(tǒng)計(jì)計(jì)數(shù)器加1}returnn;//返回統(tǒng)計(jì)值知識(shí)點(diǎn)解析:(1)首先,求得字符串的長度。(2)只要小于字符串的長度,就對(duì)字符進(jìn)行循環(huán)判斷。(3)根據(jù)題干要求,只要字符是小寫字母,并且下一個(gè)緊靠的字符是空格或者尾符,那么單詞統(tǒng)計(jì)計(jì)數(shù)器就加1。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:計(jì)算直到<10-6若x=2.5,函數(shù)值為:1.917915o請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!.#include#includedoublefun(doublex){doublef,t,intn;f=1.0+x;/**********found**********/t=___1___;n=1;do{n++;/**********found**********/t*=(-1.0)*x/___2___;f+=t;}/**********found**********/while(___3___>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf("inTheresultis:in");print.f("x=%-12.6fy=%-12.6fin",x,y);}標(biāo)準(zhǔn)答案:(1)x(2)n(3)fabs(t)知識(shí)點(diǎn)解析:函數(shù)fun的功能是計(jì)算級(jí)數(shù)和。第一空:“f=1.0+x;”f的初始化為級(jí)數(shù)的前兩項(xiàng)之和,dowhile循環(huán)從第三項(xiàng)x2/2開始計(jì)算,第一空處是給t賦初值,t表示級(jí)數(shù)項(xiàng),“n++;t*=(-1.0)*x/__2__;”即第一次進(jìn)入do循環(huán)之后n的值為2,故t的初值應(yīng)該為x,第一空處應(yīng)為“x”。第二空:由審題分析可知,后一項(xiàng)乘以(-1)*x除以n,故第二空處應(yīng)為“n”。第三空:循環(huán)的終止條件是(xn/n!)的絕對(duì)值小于le-6,即只要(xn/n!)大于等于le-6,do循環(huán)就執(zhí)行,故第三處應(yīng)為“fabs(t)”,fabs函數(shù)的功能是求絕對(duì)值。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(intx,intY,long*p){inti;longt=1;/**********found**********/for(i=1;i標(biāo)準(zhǔn)答案:(1)for(i=1;i<=y;i++)(2)t=t%1000;知識(shí)點(diǎn)解析:函數(shù)的功能是求整數(shù)x的y次方的低3位值。(1)第一個(gè)標(biāo)識(shí)下的“for(i=1;i三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出當(dāng)x<0.97時(shí)下列多項(xiàng)式的值,直到|Sn-Sn-1|<0.000001為止。例如,在主函數(shù)中從鍵盤給x輸入0.21后,輸出為:s=1.100000。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#includedoublefun(doublex){}NONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti;doubles,x;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%1f",&x);s=fun(x);fprintf(wf,"%1f\n",s);}fclose(rf);fclose(wf);}main(){doublex,s;。printf("Inputx:");scanf("%If",&x);s=fun(x);printf("s=%f\n",s);NONO();}標(biāo)準(zhǔn)答案:intn=1;/*循環(huán)計(jì)數(shù)*/doublesn=1;/*累計(jì)數(shù)*/doublexn=1,xn1=0;/*x的n值,以及x的n-1值;*/while(fabs(xn-xn1)>=0.000001)/*絕對(duì)值是否滿足條件*/{xn=xn*x*(0.5-n+1)/n;/*表達(dá)式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/n+=1;sn+=xn;/*sn累加上xn*/}return(sn);知識(shí)點(diǎn)解析:(1)根據(jù)題干中給出的數(shù)列,推出每一項(xiàng)分子是在前一項(xiàng)分子的基礎(chǔ)上乘以(0.5-n+1)*x,分母則為階乘,也就是在前一項(xiàng)分母的基礎(chǔ)上乘以n。(2)在循環(huán)中求得每一項(xiàng),然后對(duì)其進(jìn)行累加求和。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是將帶頭結(jié)點(diǎn)的單向鏈表逆置。即若原鏈表中從頭至尾結(jié)點(diǎn)數(shù)據(jù)域依次為:2、4、6、8、10,逆置后,從頭至尾結(jié)點(diǎn)數(shù)據(jù)域依次為:10、8、6、4、2。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/**********found**********/P=h->【1】;/**********found**********/if(p==【2】__)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;/**********found**********/p=q;q=【3】;}h->next=p;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=NULL;if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*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");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}標(biāo)準(zhǔn)答案:(1)next(2)0或NULL(3)r知識(shí)點(diǎn)解析:函數(shù)fun的功能是將帶頭結(jié)點(diǎn)的單向鏈表逆置。第一空:“p=h->1;”對(duì)結(jié)點(diǎn)p進(jìn)行初始化,由審題分析可知,p初始化為鏈表的第二個(gè)結(jié)點(diǎn),即p->next,故第一空處應(yīng)為“next”。第二空:“if(p==【2】)return;”如果鏈表只有一個(gè)結(jié)點(diǎn),無需逆置,即第二空處為“0”或“\0”或“NULL”。第三空:循環(huán)內(nèi)完成結(jié)點(diǎn)的指針指向前一個(gè)結(jié)點(diǎn),“r=q一>next;”r已經(jīng)指向q的下一個(gè)結(jié)點(diǎn),“q->next=p;”將q結(jié)點(diǎn)指向鏈表的前一個(gè)結(jié)點(diǎn),“p=q;”是將p結(jié)點(diǎn)往后移動(dòng)一個(gè)結(jié)點(diǎn)位置,第三空處是q結(jié)點(diǎn)往后移動(dòng)一個(gè)結(jié)點(diǎn)位置,即第三空處為“r”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r=p;while(*r)if(*r==*p){r++;p++;}elsebreak;/*********found**********/if(*r=0)n++;s++;}returnn;}main(){chara[N],b[N];intm;printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b);printf("\nTheresultis:m=%d\n",m);}標(biāo)準(zhǔn)答案:(1)r=t;(2)if(*r==0)知識(shí)點(diǎn)解析:函數(shù)的功能是計(jì)算字符串中含有某子串的數(shù)目。(1)根據(jù)“while(*r)if(*r=*p){r++;p++;}”可知該循環(huán)是比較r和p指向的字符串是否相等,本題的要求是計(jì)算字符串中含有某子串的數(shù)目,p指向的源字符串s,所以r應(yīng)指向的是字符串t,故第一標(biāo)識(shí)下應(yīng)改成“r=t;”。(2)根據(jù)題意第二標(biāo)識(shí)下“if(*r=0)”應(yīng)該是判斷r是否指向字符串尾,在C語言中,等于是用“==”標(biāo)識(shí),因此,第二標(biāo)識(shí)下應(yīng)改成“if(*r==0)”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:將放在字符串?dāng)?shù)組中的M個(gè)字符串(每串的長度不超過N),按順序合并組成一個(gè)新的字符串。例如,字符串?dāng)?shù)組中的M個(gè)字符串為AAAABBBBBBBCC則合并后的字符串的內(nèi)容應(yīng)是:AAAABBBBBBBCC。提示:strcat(a,b)的功能是將字符串b復(fù)制到字符串a(chǎn)的串尾上,成為一個(gè)新串。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。#include#include#defineM3#defineN20voidfun(chara[M][N],char*b){}main(){charw[M][N]={"AAAA","BBBBBBB","CC"},a[100];inti/voidNONO();printf("Thestring:\n");for(i=0;KM;i++)puts(w[i]);printf("\n");fun(w,a);printf("TheAstring:\n");printf("%s"fa);printf("\n\n");NONO();}voidNONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;charw[M][N],a[100];inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s%s%s",w[0],w[l],w[2]);fun(w,a);fprintf(wf,"%s\n",a);}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:inti,j,k=0;for(i=0;i知識(shí)點(diǎn)解析:(1)二維字符數(shù)組第i行j列元素a[i][j],就是指針形式的“*(*(a+i)+j)”。因此,如果字符“*(*(a+i)+j)”是串的結(jié)束符,則說明該字符串已經(jīng)結(jié)束。(2)當(dāng)一維字符數(shù)組存放完字符串中各字符后,必須在一維字符數(shù)組的尾字符處加一個(gè)結(jié)束符“’\0’”,才能把字符數(shù)組變成字符串。否則,字符數(shù)組就只能是非字符串的一般字符數(shù)組。國家二級(jí)C語言機(jī)試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:將形參a所擼數(shù)組中的前半部分元素中的值和后半部分元素中的值對(duì)換。形參n中存放數(shù)組中數(shù)據(jù)酌個(gè)數(shù),若n為奇數(shù),則中間的元素不動(dòng)。例如:若a所指數(shù)組中的數(shù)據(jù)依次為:1、2、3、4、5、6、7、8、9,則調(diào)換后為6、7、8、9、5、1、2、3、4。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!1#include<stdio.h>2#defineN93voidfun(inta[],intr1)4{inti,t,p;5/**********found**********/6p=(n%2==0)?n/2:n/2+__1__;7for(i=0;i<n/2;i++)8{9t=a[i];10/**********found**********/11a[i]=a[p+__2__];12/**********found**********/13__3___=t;14}15}16main()17{intb[N]={1,2,3,4,5,6,7,8,9},i;18printf(’’\nTheoriginaldata:\n’’);19for(i=0;i<N;i++)printf(’’%4d’’,b[i]);20printf(’’\n’’);21fun(b,N);22printf(’’\nThedataaftermoving:\n’’);23for(i=0;i<N;i++)printf(’’%4d’’,b[i]);24printf(’’\n’’);25}標(biāo)準(zhǔn)答案:(1)1(2)i(3)a[p+i]知識(shí)點(diǎn)解析:函數(shù)fun的功能是將形參a所指數(shù)組中的前半部分元素中的值和后半部分元素中的值對(duì)換。第一空:“p=(n%2==0)?n/2:n/2+___1___;”和“a[i]=a[p+___2___];”“n%2==0”判斷是否是偶數(shù),a[i]和a[p+__2__]交換,如果n是偶數(shù),a[0]和a[n/2]交換,如果n是奇數(shù),那么a[0]和a[n/2+1]交換,依此類推,故n為偶數(shù)時(shí)a[i]和a[i+n/2]交換,n為奇數(shù)時(shí)a[i]和a[i+n/2+1]交換。因此,如果n是奇數(shù)的話,p應(yīng)該等于n/2+1,故第一空處應(yīng)為“1”。第二空:由上分析可知,a[i]和a[i+p]交換,故第二空應(yīng)為“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三處應(yīng)該是把a(bǔ)[i]賦值給a[p+i],a[i]保存在t中,故第三空應(yīng)為“a[p+i]”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:把主函數(shù)中輸入的3個(gè)數(shù),最大的放在a中,最小的放在c中,中間的放在b中。例如,輸入的數(shù)為:551234,輸出結(jié)果應(yīng)當(dāng)是:a=55.0,b=34.0,c=12.0。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<stdio.h>2voidfun(float*a,float*b,float*c)3{4/**********found**********/5float*k;6if(*a<*b)7{k=*a;*a=*b;*b=k;}8/**********found**********/9if(*a>*c)10{k=*c;*c=*a;*a=k;}11if(*b<*c)12{k=*b;*b=*c;*c=k;}13}14main()15{floata,b,c;16printf(’’Inputabc:’’);scanf(’’%f%f%f’’,&a,&b,&c);17printf(’’a=%4.1f,b=%4.1f,c=%4.1f\n\n’’,a,b,c);18fun(&a,&b,&c);19printf(’’a=%4.1f,b=%4.1f,c=%4.1f\n\n’’,a,b,c);20}標(biāo)準(zhǔn)答案:(1)floatk;(2)if(*a<*c)知識(shí)點(diǎn)解析:函數(shù)對(duì)三個(gè)數(shù)進(jìn)行兩兩比較,實(shí)現(xiàn)判斷。(1)第一個(gè)標(biāo)識(shí)下的變量k是在比較過程中,臨時(shí)存放數(shù)據(jù)的變量,因此k不應(yīng)是指針,所以將“float*k;”改為“floatk;”。(2)分析函數(shù)中第一個(gè)if語句,如果主函數(shù)中a<b,則對(duì)調(diào),把大數(shù)放在a中;分析第二個(gè)if語句,如果主函數(shù)中的a>c,則進(jìn)行對(duì)調(diào),又把大數(shù)放在c中,這樣的邏輯顯然是混亂的。因此,第二個(gè)標(biāo)識(shí)下“if(*a>*c)”應(yīng)該改為“if(*a<*c)”。三、程序設(shè)計(jì)題(本題共1題,每題1.0分,共1分。)3、學(xué)生的記錄由學(xué)號(hào)和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中,注意:分?jǐn)?shù)最高的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最高的學(xué)生的人數(shù)。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。1#include<stdio.h>2#defineN163typedefatruct4{charnum[10];5ints;6}STREC;7intfun(STREC*a,STREC*b]8{910}11main()12{STRECs[N]=({’’GA05’’,85},{’’GA03¨,76},{’’GA02’’,69},{’’GA04’’,85},{.tGAOl”,91},{’’GA07’’,72},{’’GA08’’,64},{’’GA06”,87},{’’GAOl5’’,85},{’’GAOl3’’,91},{’’GA012’’,64),{”GAOl4”,91),{’’GA011’’,77},{’’GAOl7’’,64),{’’GA018’’,64},{’’GA016’’,72}};13STRECh[N];14inti,n;FTL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論