國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共45題)_第1頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共45題)_第2頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共45題)_第3頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共45題)_第4頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共45題)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷1(共9套)(共45題)國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第1套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給主函數(shù)中的s。例如,若a數(shù)組中的值為:0127919745238314568259141則返回主程序后s的值應(yīng)為3.375。注意:部分源程序在文件PROGl.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");{printf("%4d",a[i][j]);}printf("\n");}s=fun(a);printf("***THERESULT***\n");printf("Thesumis:%lf\n",s);/******************/wf=fopen("out.dat","w");fprintf(wf,"%lf",s);fclose(wf);/******************/}標(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)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)過(guò)程,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。2、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過(guò)調(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]);/*********found*********/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);/*********found*********/}標(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ù)的問(wèn)題,用兩個(gè)循環(huán)來(lái)完成。第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]中,依此類推。3、請(qǐng)編寫一個(gè)函數(shù)voidfun(char*tt,intpp[]),統(tǒng)計(jì)在tt所指字符串中’a’到’z’26個(gè)小寫字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。例如,當(dāng)輸入字符串:abcdefgabcdeabc后,程序的輸出結(jié)果應(yīng)該是:33322110000000000000000000注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#include#includevoidfun(char*tt,intPP[]){}main(){charaa[1000];intbb[26],k;voidNONO();printf("\nPleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf("%d",bb[k]);printf("\n");NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/charaa[1000];intbb[26],k,i;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",aa);fun(aa,bb);for(k=0;k<26;k++)fprintf(wf,"%d",bb[k]);fprintf(wf,"\n");}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:char*p=tt;inti;for(i=0;i<26;i++)PP[i]=0;while(*p){if(*p>=’a’&&*p<=’z’)PP[*p-’a’]+=1;p++;}知識(shí)點(diǎn)解析:該程序功能是統(tǒng)計(jì)字符串中26個(gè)字母各自出現(xiàn)的次數(shù)。解題思路,從已給部分源程序的main主函數(shù)開始入手,函數(shù)形參指針tt接受主函數(shù)中字符數(shù)組aa的起始地址,形參pp接受主函數(shù)中的bb數(shù)組的起始地址,bb數(shù)組的每一個(gè)元素都是計(jì)數(shù)器,bb[0]中統(tǒng)計(jì)字母“a”的個(gè)數(shù),bb[1]中統(tǒng)計(jì)字母“b”的個(gè)數(shù),依此類推,bb[25]中統(tǒng)計(jì)字母“z”的個(gè)數(shù)。4、請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過(guò)調(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ù)中輸出。注意:部分源程序在文件PROGl.C中。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#defineN50#defineN11voidfun(int*a,int*b){}doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}voidmain(){FTLE*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==07"%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ù)的問(wèn)題,用兩個(gè)循環(huán)來(lái)完成。第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]中,依此類推。5、請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:判斷字符串是否為回文?若是,函數(shù)返回1,主函數(shù)中輸出:YES;否則返回0,主函數(shù)中輸出NO?;匚氖侵疙樧x和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#include#include#defineN80intfun(char*str){}main(){chars[N];voidNONO();printf("Enterastring:"),gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");NONO();)voidNONO(){/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti;chars[N];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s),if(fun(s))fprintf(wf,"%sYES\n",s);elsefprintf(wf,"%sNO\n",s);}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:1inti,n=0,flag=1;//初始設(shè)置標(biāo)識(shí)位2char*p=str;//設(shè)置工作指針3while(*p)//取字符串大小4{n++;5p++;6}7for(i=0;i知識(shí)點(diǎn)解析:該程序功能是判斷字符串是否為回文。其中,回文是指順讀和倒讀都一樣的字符串。解題過(guò)程首先利用while循環(huán)取得字符串的長(zhǎng)度n,然后循環(huán)判斷正序第i個(gè)字符和其對(duì)應(yīng)的逆序字符n—1—i個(gè)是否相等,也就是判斷是否是回文。進(jìn)入fun函數(shù),根據(jù)前面的分析主要思路是:(1)首先用整型變量i表示所判斷的字符串中前面對(duì)應(yīng)元素的下標(biāo)。i初值為0,n是字符串的長(zhǎng)度,通過(guò)循環(huán)來(lái)求得n。(2)然后,把下標(biāo)為i的字符與下標(biāo)為“n—1—i”的字符比較,如果相同,i加1,繼續(xù)進(jìn)行一對(duì)一的字符比較。不斷重復(fù)此過(guò)程,直到i≥n/2為止。在此過(guò)程中,如果下標(biāo)為i的字符與下標(biāo)為“n—1一i”的字符不相同,則可以斷定字符串不是回文,立即退出函數(shù)。(3)如果正常結(jié)束循環(huán),就說(shuō)明字符串符合回文條件。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第2套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、請(qǐng)編寫函數(shù)fun,其功能是:統(tǒng)計(jì)s所指字符串中的數(shù)字字符個(gè)數(shù),并作為函數(shù)值返回。例如,s所指字符串中的內(nèi)容是:2det35adh253kjsdf7/kj8655x,函數(shù)fun返回值為:11注意:部分源程序在文件PROG1.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>voidNONO();intfun(char*s){}main(){char*s="2clef35adh253kjsdf7/kj8655x";printf("%s\n",s);printf("%d\n",fun(s));NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti;chars[256];fp=fopen("in.clat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(s,255,fp);fprintf(wf,"%d\n",fun(s));}fclose(fp);fclose(wf);}標(biāo)準(zhǔn)答案:intfun(char*s){intn=0;char*p;n++;returnn;}知識(shí)點(diǎn)解析:要統(tǒng)計(jì)字符串中數(shù)字字符的個(gè)數(shù),首先應(yīng)定義變量n,并初始化為0,然后遍歷字符串,逐個(gè)判斷字符是否為數(shù)字字符,判斷條件為該元素的ASCII碼在字符0和9的ASCII碼之間,若判斷條件成立,則使n的值加1,否則,繼續(xù)判斷下一個(gè)字符,直到字符串結(jié)束。2、請(qǐng)編寫函數(shù)fun,其功能是:將M行N列的二維數(shù)組中的字符數(shù)據(jù),按列的順序依次放到一個(gè)字符串中。例如,若二維數(shù)組中的數(shù)據(jù)為WWWWSSSSHHHH則字符串中的內(nèi)容應(yīng)是:wSHwSHWSHWSH。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#defineM3#defineN4voidfun(char(*s)[N],char*b){}voidmain(){chara[100],w[M][N]={{’W’,’W’,’W’,’W’},{’S’,’S’,’S’,’S’},{’H’,’H’,’H’,’H’));inti,j;printf("Thematrix:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3c",w[i][j]);printf("\n");}fun(w,a);printf("TheAstring:\n");puts(a);printf("\n\n");}標(biāo)準(zhǔn)答案:voidfun(char(*s)[N],char*b){inti,j,k=0;for(i=0;i<N;i++)/*按列的順序依次放到一個(gè)字符串中*/for(j=0;j<M;j++)b[k++]=s[j][i];b[k]=’\0’;}知識(shí)點(diǎn)解析:看到程序后,很容易便能想到用循環(huán)嵌套的方法,本題中按列的順序依次放到一個(gè)字符串中,所以列標(biāo)變化慢,行標(biāo)變化快。注意:第1個(gè)循環(huán)條件為i<N(即列);第2個(gè)循環(huán)條件為j<M(即行),因?yàn)樵谘h(huán)的嵌套中越在內(nèi)層,循環(huán)變化就越快。3、請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:將M行N列的二維數(shù)組中的字符數(shù)據(jù),按列的順序依次放到一個(gè)字符串中。例如,若二維數(shù)組中的數(shù)據(jù)為WWWWSSSSHHHH則字符串中的內(nèi)容應(yīng)是:WSHWSHWSHWSH。注意:請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#defineM3#defineN4voidfun(char(*S)[N],char*b){}voidmain(){FILE*wf;chara[100],w[M][N]={{′W′,′W′,′W′,′W′},{′S′,′S′,′S′,′S′},{′H′,′H′,′H′,′H′}};inti,j;printf(″Thematrix:\n″);for(i=0;i<M;i++){for(j=0;j<N;j++)printf(″%3c″,w[i][j]);printf(″\n″);}fun(w,a);printt(″TheAstring:\n″);puts(a);printf(″\n″);/****************/wf=fopen(″out.dat″,″w″);fprintf(wf,″%s″,a);fclose(wf);/****************/}標(biāo)準(zhǔn)答案:voidfun(char(*s)[N],char*b){inti,j,k=0;for(i=0;i<N;i++)/*按列的順序依次放到一個(gè)字符串中*/for(j=0;j<M;j++)b[k++]=s[j][i];b[k]=′\0′;}知識(shí)點(diǎn)解析:看到程序后,很容易便能想到用循環(huán)嵌套的方法,本題中按列的順序依次放到一個(gè)字符串中,所以列標(biāo)變化慢,行標(biāo)變化快。注意:第1個(gè)循環(huán)條件為i<N(即列),第2個(gè)循環(huán)條件為j<M(即行),因?yàn)樵谘h(huán)的嵌套中,越在內(nèi)層,循環(huán)變化就越快。4、已知學(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é)生記錄,通過(guò)形參返回主函數(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”。5、編寫函數(shù)fun,其功能是:求Fibonacci數(shù)列中大于t的最小的數(shù),結(jié)果由函數(shù)返回。Fibonacci數(shù)列F(n)的定義為:F(0)=0,F(xiàn)(1)=1F(n)=F(n一1)+F(n一2)例如,當(dāng)t=1000時(shí),函數(shù)值為1597。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<math.h>#include<stdio.h>intfun(intt){}main(){intn;n=1000;printf("n=%d,f=%d\n",n,fun(n));}標(biāo)準(zhǔn)答案:intfun(intt){intf0=0,f1=1,f;do{/*根據(jù)Fibonacci數(shù)列的定義求數(shù)值*/f=f0+f1;f0=f1;f1=f;)while(f<t);/*如果求的數(shù)值小于t則繼續(xù)*/returnf;}知識(shí)點(diǎn)解析:根據(jù)所給數(shù)列定義不難發(fā)現(xiàn),該數(shù)列最終的結(jié)果是由兩個(gè)數(shù)列之和組成,所以可以在循環(huán)內(nèi)部始終把f看成是前兩項(xiàng)之和,而f0始終代表第n一2項(xiàng),n代表第n一1項(xiàng)。退出循環(huán)時(shí)得到的數(shù)f,就是大于指定數(shù)的最小的數(shù)。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第3套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動(dòng)賦值。請(qǐng)編寫函數(shù)fun(inta[][N]),該函數(shù)的功能是:將數(shù)組左下半三角元素中的值全部置0。例如a數(shù)組中的值為:197238456則返回主程序后a數(shù)組中的值應(yīng)為:097008000注意:請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<(20hio.h>#include<stdio.h>#include<stdlib.h>#defineN5voidfun(inta[][N]){}voidmain(){FILE*wf;inta[N][N],i,j;intb[N][N]={1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4};system("CLS");printf("*****Thearray*****\n");for(i=0;i<N;i++)/*產(chǎn)生一個(gè)隨機(jī)的5*5矩陣*/{for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}fun(a);printf("THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}/****************/wf=fopen("out.dat","w");fun(b);for(i=0;i<N;i++){for(j=0;j<N;j++)fprintf(wf,"%4d",b[i][j]);fprintf(wf,"\n");}fclose(wf);/****************/}標(biāo)準(zhǔn)答案:voidfun(inta[][N]){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)a[i][j]=0;/*將數(shù)組左下半三角元素中的值全部置0*/}知識(shí)點(diǎn)解析:本題考查:for循環(huán)語(yǔ)句,使用嵌套循環(huán)語(yǔ)句遍歷二維數(shù)組的各個(gè)元素;二維數(shù)組元素的引用。對(duì)于N×N二維數(shù)組,如何表示其左下半三角元素,可以通過(guò)以下語(yǔ)句實(shí)現(xiàn):for(i=0;i<n;i++)for(j=0;j<=i;j++)外層循環(huán)用來(lái)控制矩陣的行下標(biāo),內(nèi)層循環(huán)控制矩陣的列下標(biāo)。注意列下標(biāo)的取值范圍,因?yàn)橐硎鞠氯窃?,所以j的范圍是0~i。2、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。程序中,m個(gè)人的成績(jī)存放在score數(shù)組中,請(qǐng)編寫函數(shù)fun,它的功能是:將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10、20、30、40、50、60、70、80、90時(shí),函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10、20、30、40。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<stclio.h>#include<string.h>#include<stdlib.h>intfun(intscore[],intm,intbelow[]){}voidmain(){FILE*wf;inti,n,below[9];intscore[9]=(10,20,30,40,50,60,70,80,90};system("CLS");n=fun(score,9,below);printf("\nBelowtheaveragescoreare:");for(i=0;i<n;i++)printf("%d",below[i]);/*********found*********/wf=fopen("out.dat","w");for(i=0;i<n;i++)fprintf(wf,"%d",below[i]);fclose(wf);/*********found*********/}標(biāo)準(zhǔn)答案: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)/*如果分?jǐn)?shù)低于平均分,則將此分?jǐn)?shù)放入below數(shù)組中*/below[j++]=score[i],returnj;/*返回低于平均分的人數(shù)*/}知識(shí)點(diǎn)解析:要計(jì)算低于平均分的人數(shù),首先應(yīng)該求出平均分,然后通過(guò)for循環(huán)語(yǔ)句和if條件語(yǔ)句找出低于平均分的分?jǐn)?shù)。該題第1個(gè)循環(huán)的作用是求出平均分av,第2個(gè)循環(huán)的作用是找出低于平均分的成績(jī)記錄并存入below數(shù)組中。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ǔ)句。#includelincludedoublefun(doublex,intn){}main(){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;doubles,x;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%lf,%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)解析:(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)行累加求和。4、函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的干位和十位上,b中的十位和個(gè)位數(shù)依次放在變量c的個(gè)位和百位上。例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=4251。注意:部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#includevoidfun(inta,intb,long*c){}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}fclose(rf);fclose(wf);}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}標(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+x1×10+x2×100+x3×1000構(gòu)成四位數(shù)。本題最多只考慮四位數(shù)。5、編寫函數(shù)fun,它的功能是:利用以下所示的簡(jiǎn)單迭代方法求方程:cos(x)-x=0的一個(gè)實(shí)根。xn+1=cos(xn)迭代步驟如下:(1)取x1初值為0.0;(2)x0=x1,把x1的值賦給x0:(3)x1=cos(x0),求出一個(gè)新的x1;(4)若x0-x1的絕對(duì)值小于0.000001,執(zhí)行步驟(5),否則執(zhí)行步驟(2);(5)所求x1就是方程cos(x)-x=0的一個(gè)實(shí)根,作為函數(shù)值返回。程序?qū)⑤敵鼋Y(jié)果Root=0.739086。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#include#includedoublefun(){}main(){voidNONO();printf("Root=%f\n",fun());NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*wf;wf=fopen("out.dat","w");fprintf(wf,"%f\n",fun());fclose(wf);}標(biāo)準(zhǔn)答案:floatx0,x1=0.0;do{x0=x1;x1=cos(x0);}while(fabs(x0一x1)>0.000001);returnx1;知識(shí)點(diǎn)解析:該程序功能是利用簡(jiǎn)單迭代方法求方程的一個(gè)實(shí)根。牛頓迭代法的求解思想是從一個(gè)初始值開始,逐步逼近所求方程的根。其具體過(guò)程是:將初始值代入迭代公式,得到一個(gè)迭代輸出值。再次迭代時(shí),將上一次的迭代輸出值當(dāng)作本次的迭代輸入。不斷重復(fù)以上過(guò)程,直到滿足題目要求為止。牛頓迭代公式為:Xn+1=Xn-f(x)/’f(x)。其求解過(guò)程在題干中已經(jīng)給出。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第4套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,函數(shù)fun的功能是:將s所指字符串中下標(biāo)為偶數(shù)同時(shí)ASCII值為奇數(shù)的字符刪除,s所指串中剩余的字符形成的新串放在t所指的數(shù)組中。例如,若8所指字符串中的內(nèi)容為“ABCDEFG12345”,其中字符C的ASCII碼值為奇數(shù),在數(shù)組中的下標(biāo)為偶數(shù),因此必須刪除;而字符1的ASCII碼值為奇數(shù),在數(shù)組中的下標(biāo)為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是“BDF12345”。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");Scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/chars[100],t[100];FTLE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}標(biāo)準(zhǔn)答案:voidfun(char*s,chart[]){inti,j=0;for(i=0;i<strlen(s);i++)if(!((i%2)==0&&(s[i]%2)))t[j++]=s[i];t[j]=0;}知識(shí)點(diǎn)解析:本題是從一個(gè)字符串按要求生成另一個(gè)新的字符串。我們使用for循環(huán)語(yǔ)句來(lái)解決這個(gè)問(wèn)題。在賦值新的字符串之前,先對(duì)數(shù)組元素的下標(biāo)和ASCII碼的值進(jìn)行判斷,將滿足要求的元素賦給新的字符串。2、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過(guò)調(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]);/*********found*********/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);/*********found*********/}標(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ù)的問(wèn)題,用兩個(gè)循環(huán)來(lái)完成。第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]中,依此類推。3、編寫函數(shù)fun,其功能是:根據(jù)以下公式計(jì)算S,并將計(jì)算結(jié)果作為函數(shù)值返回,n通過(guò)形參傳入。例如,若n的值為11時(shí),函數(shù)的值為1.833333。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>floatfun(intn){}voidmain(){intn;floats;system("CLS");printf("\nPleaseenterN:");scanf("%d",&n);s=fun(n);printff"Theresultis:%f\n",s);}標(biāo)準(zhǔn)答案:floatfun(intn){inti,s1=0;floats=0.0;for。(i=1;i<=n;i++){s1=s1+i;/*求每一項(xiàng)的分母*}s=s+1.0/s1;/*求多項(xiàng)式的值*/}returns;}知識(shí)點(diǎn)解析:此類計(jì)算表達(dá)式值的程序,首先需要根據(jù)題意分析表達(dá)式的規(guī)律,得出通項(xiàng),然后再完成程序語(yǔ)句。本題中表達(dá)式的規(guī)律是1+2+…+n的倒數(shù)之和,那么可以通過(guò)for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)第1項(xiàng)到第n項(xiàng)的變化。其實(shí)就是累加算法,方法是先根據(jù)題目要求定義變量,注意該變量的數(shù)據(jù)類型,然后對(duì)其進(jìn)行初始化操作,因?yàn)樵撟兞康淖饔檬抢奂悠?,所以初始值?yīng)為0(或0.0,根據(jù)變量數(shù)據(jù)類型來(lái)確定),再通過(guò)for循環(huán)語(yǔ)句來(lái)完成累加過(guò)程。本題中s1用來(lái)表示每一項(xiàng)的分母,每一項(xiàng)的分母都是由前一項(xiàng)分母加項(xiàng)數(shù)。注意,由于s1定義成一個(gè)整型,所以在s=s+1.0/s1語(yǔ)句中不能把1.0寫成1。4、請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中的數(shù)己按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。例如,一維數(shù)組中的數(shù)據(jù)是:2223445666677899101010。刪除后,數(shù)組中的內(nèi)容應(yīng)該是:2345678910。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。1#include<stdio.h>2#define.N803intfun(inta[],intn)4{56}7main()8{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;voidNONO();9printf(’’Theoriginaldata:\n’’);10for(i=0;i<n;i++)printf(’’%3d’’,a[i]);11n=fun(a,n);12printf(’’\n\nThedataafterdeleted:\n’’);13for(i=0;i<n;i++)printf(’’%3d’’,a[i]);printf(’’\n\n’’);14NONO();15}16voidNONO()17{/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/18FILE*rf,*wf;inta[N],n,i,j;19rf=fopen(’’in.dat’’,’’r’’);20wf=fopen(’’out.dat’’,’’w’’);21for(i=0;i<5;i++){22fscanf(rf,’’%d’’,&n);23for(j=0;j<n;j++)fscanf(rf,’’%d’’,&a[j]);24n=fun(a,n);25for(j=0;j<n;j++)fprintf(wf,’’%4d’’,a[j]);26fprintf(wf,’’\n’’);27}28fclose(rf);fclose(wf);29}標(biāo)準(zhǔn)答案:1inti,t,j=0,‘p=a;2t=p[0];//設(shè)置臨時(shí)變量t初值指向第一數(shù)組值3for(i=0;i<=n;i++)4if(t==p[i])//當(dāng)臨時(shí)變量與數(shù)組中的某個(gè)值相同則跳出,比較下一個(gè)元素5;6else//如果臨時(shí)變量與數(shù)組中值不同,則對(duì)臨時(shí)變量重新賦值7{a[j]=t;8t=p[i];9j++;}10if(i>=n)a[j]=t;11returnj;知識(shí)點(diǎn)解析:該程序功能是刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。解題思路是,首先在函數(shù)中定義臨時(shí)變量指向每一個(gè)元素,然后在循環(huán)過(guò)程中將臨時(shí)值和其他元素進(jìn)行比較,如果相同,那么跳過(guò)相同字符。(1)首先,設(shè)置一個(gè)臨時(shí)變量,初值設(shè)置為一維數(shù)組的第一個(gè)元素。(2)然后,依次將數(shù)組的元素與臨時(shí)變量比較,如果相同,則繼續(xù)取數(shù)組下一個(gè)元素與臨時(shí)變量比較:如果不同,則將臨時(shí)變量的值賦值到數(shù)組的第一個(gè)元素,同時(shí)將此與臨時(shí)變量不同的數(shù)組元素賦值給臨時(shí)變量。(3)循環(huán)執(zhí)行,直到所有的數(shù)據(jù)處理完畢。5、請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個(gè)數(shù)存放在形參n所指的存儲(chǔ)單元中。例如,二維數(shù)組中的數(shù)據(jù)為:333333334444444455555555則一維數(shù)組中的內(nèi)容應(yīng)是:333333334444444455555555。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。1#include<stdio.h>2voidfun(int(*s)[10],int*b,int*n,intmm,intnn)3{45}6main()7{intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;8inta[100]={0),n=0;voidNONO();9printf(’’Thematrix:\n’’);10for(i=0;i<3;i++)11{for(j=0;j<4;j++)printf(’’%3d’’,w[i][j]);12printf(’’\n’’);13}14fun(w,a,&n,3,4);15printf(’’TheAarray:\n’’);16for(i=0;i<n;i++)printf(’’%3d’’,a[i]);printf(’’\n\n’’);17NONO();18}19voidNONO()20{/*請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/21FILE*rf,*wf;inti,j,k;22intw[10][10],a[100],n=0,mm,nn;23rf=fopen(’’in.dat’’,’’r’’);24wf=fopen(’’out.dat’’,’’w’’);25for(k=0;k<5;K++){26fscanf(rf,’’%d%d’’,&mm,&nn);27for(i=0;i<mm;i++)28for(j=0;j<m;j++)fscanf(rf,’’%d’’,&w[i][j]);29fun(w,a,&n,mm,nn);30for(i=0;i<n;i++)fprintf(wf,’’%3d’’,a[i]);fprintf(wf,’’\n’’);31}}標(biāo)準(zhǔn)答案:1inti,j;2for(i=0;i<mm;i++)3for(j=0;j<nn;j++)4{b[*n]=*(*(s+i)+j);5*n=*n+1;}知識(shí)點(diǎn)解析:該程序功能是將M行、N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一維數(shù)組中。本題中首先要清楚數(shù)組元素在通常情況下是按行存放的,而如果要實(shí)現(xiàn)按行存放,其對(duì)應(yīng)關(guān)系應(yīng)為:s[0][0],s[0][1],s[0][2],…,s[0][M-1],s[1][0],s[1][1],…,s[N-1][M-1]。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第5套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件prog1.c。在此程序中,已知學(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é)生記錄,通過(guò)形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。注意:部分源程序在文件PROG1.C中。請(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{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*****\n"),for(i=0;i<N;i++)pr2ntf("No=%sMarR=%d\n",a[i].num,a[i].s);fun(a,&m);printf("****THERESULT****\n");printf("Thelowest:%s,%d\n",m.num,m.s);/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%s,%d",m.num,m.s);fclose(wf);/*********found*********/}標(biāo)準(zhǔn)答案:fun(STUa[],STU*s){inti;*s=a[0];/*先認(rèn)為第1個(gè)值最小*/for(i=0;i<N;i++)/*如果在循環(huán)的過(guò)程中再發(fā)現(xiàn)比第1個(gè)值更小的則賦給*s*/if(s﹣>s>a[i].s)*s=a[i];}知識(shí)點(diǎn)解析:找出結(jié)構(gòu)體數(shù)組元素中的最小值。先認(rèn)為第1個(gè)值最小,即*s=a[0];,如果在循環(huán)的過(guò)程中發(fā)現(xiàn)比第1個(gè)值更小的,就將指針s指向該元素,直到找到最小元素。2、已知學(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é)生記錄,通過(guò)形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)maln和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s){}voidmain(){FILE*wf;inti;system("CLS");printf("*****Theoriginaldata,*****\n");printf("No=%sMark=%d\n",aprintf("****THERESULT****\n");printf("Thelowest:%s,%d\n",m.num,m.s);/*********found*********/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];/*先認(rèn)為第1個(gè)值最小*/for(i=0;i<N;i++)/*如果在循環(huán)的過(guò)程中再發(fā)現(xiàn)比第1個(gè)值更小的則賦給*s*/if(s一>s>a[i].s)*s=a[i];}知識(shí)點(diǎn)解析:找出結(jié)構(gòu)體數(shù)組元素中的最小值。先認(rèn)為第1個(gè)值最小,即*s=a[0];,如果在循環(huán)的過(guò)程中發(fā)現(xiàn)比第1個(gè)值更小的,就將指針s指向該元素,直到找到最小元素。另外,本題還涉及結(jié)構(gòu)體中的指向運(yùn)算符,請(qǐng)考生注意。3、編寫一個(gè)函數(shù),其功能是:從傳入的num個(gè)字符中找出最長(zhǎng)的一個(gè)字符串,并通過(guò)形參指針max傳回該串地址(用****作為結(jié)束輸入的標(biāo)識(shí))。注意:部分源程序在文件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>char*fun(char(*a)[81],intnum,char*max){}voidmain(){FILE*wf;charss[10][81],*ps=NULL;chars[3][81]={"abcd","deg","diegns"),*p=NULL;inti=0,n;system("CLS");printf("輸入若干個(gè)字符串:");gets(ss[i]);puts(ss[i]);while(!strcmp(ss[i],"****")==0)/*用4個(gè)星號(hào)作為結(jié)束輸入的標(biāo)志*/{i++;gets(ss[i]);puts(ss[i]);}n=itps=fun(ss,n,ps);printf"\nmax=%s\n",ps);/******************/wf=fopen("out.dat","w");p=fun(s,3,p);fprintf(wf,"%s",p);fclose(wf);/******************/}標(biāo)準(zhǔn)答案:char*fun(char(*a)[81],intnum,char*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最長(zhǎng)的一個(gè)字符串*/if(str1en(max)<str1en(a[i]))max=a[i];returnmax;/*傳回最長(zhǎng)字符串的地址*/}知識(shí)點(diǎn)解析:解答本題之前,首先應(yīng)該明白ss是一個(gè)指向一維數(shù)組的指針變量,max是指向指針的變量,所以引用變量時(shí)要注意加上*。本程序使用循環(huán)語(yǔ)句遍歷字符串?dāng)?shù)組,使用條件語(yǔ)句判斷該字符串是否最長(zhǎng)。4、假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:除了尾部的*號(hào)之外,將字符串中其他*號(hào)全部刪除。形參p已指向字符串中最后的一個(gè)字母。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG*******。注意:部分源程序在文件PROG1.C中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。#includevoidfun(char*a,char*p){}main(){chars[81],*t;voidNONO();printf("Enterastring:\n");gets(s);t=s;while(*t)t++;t-;while(*t==’*’)t--;fun(s,t);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*in,*out;inti;chars[81],*t;in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);t=s;while(*t)t++;t--;while(*t==’*’)t--;fun(s,t);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}標(biāo)準(zhǔn)答案:char*q=a;intj=0;while(*q&&q知識(shí)點(diǎn)解析:(1)首先,主函數(shù)中使指針移到字符串的最后一個(gè)字符,對(duì)字符串由串尾開始進(jìn)行操作。(2)然后,指針由尾開始向頭移動(dòng),查找第一個(gè)非“*”號(hào)字符,指針t指向后一個(gè)非“*”,即從最后一個(gè)非“*”,字符開始的字符都不需要?jiǎng)h除,將前面的其他“*”號(hào)全部刪除后,將尾部的“*”字符往前移動(dòng)即可。(3)確定了字符數(shù)組的最后一個(gè)字符非“*”后,調(diào)用fun函數(shù),在fun函數(shù)中,將原串中由起始位置的字符開始到最后一個(gè)非“*”逐個(gè)查詢?cè)撟址欠袷恰?”字符,如果是則刪除,并將后面的字符往前移動(dòng);然后將t之后的字符移動(dòng)到前面,最后在字符串的后面添加“’\0’”即可。5、學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組S中,請(qǐng)編寫函數(shù)fun,它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。注意:部分源程序在文件PROG1.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。1#include<stdio.h>2#defineN163typedefstruct4{charnum[10];5ints;6}STREC;7voidfun(STRECa[])8{9}10main()11{STRECs[N]={{]]GA005’’,85},{’’GA003’’,76},{’’GA002’’,69},{’’GA004’’,85},{’’GA001’’,91},{’’GA007’’,72},{’’GA008’’,64},{’’GA006’’,87},{--GA015’’,85},{’’GA013’’,91},{’’GA012’’,64},{’’GA014’’,91},{’’GA011’’,66},{”GA017”,64},{’’GA018”,64},{’’GA016’’,72}};12inti;FILE*out;13fun(s);14printf(’’Thedataaftersorted:\n’’);15for(i=0;i<N;i++)16{if((i)%4==0)printf(’’\n’’);17printf(’’%s%4d’’,s[i].num,s[i].s);18}19printf(’’\n’’);20out=fopen(’’out.dat’’,’’w’’);21for(i=0;i<N;i++)22{if((i)%4==0&&i)fprintf(out,’’\n’’);23fprintf(out,’’%4d’’,s[i].s);}24fprintf(out,’’\n’’);25fclose(out);}標(biāo)準(zhǔn)答案:1STRECtmp;2inti,j;3for(i=0;i<N;i++)4for(j=i+1;j<N;j++)5if(a[i].s<a[j].s){6tmp-a[i];7a[i]=a[j];8a[j]=tmp;}知識(shí)點(diǎn)解析:(1)在fun函數(shù)中,通過(guò)循環(huán)對(duì)成績(jī)記錄進(jìn)行排序。(2)首次查找到最大的記錄,第二次循環(huán)查找第二大的記錄,依次實(shí)現(xiàn)對(duì)成績(jī)記錄的排序。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序設(shè)計(jì)題)模擬試卷第6套一、程序設(shè)計(jì)題(本題共5題,每題1.0分,共5分。)1、已知學(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é)生記錄,通過(guò)形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。注意:部分源程序在文件PROGl.C中。請(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{charnum[10];ints;}STU;fun(STUa[],STU*s){}voidmain(){FILE*wf;STUa[N]={{"A01",81},{"A02",A05",77},{"A06",9

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論