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

下載本文檔

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

文檔簡介

國家二級C語言機(jī)試(操作題)模擬試卷16(共9套)(共27題)國家二級C語言機(jī)試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blankl中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun()的功能是將不帶頭節(jié)點(diǎn)的單向鏈表節(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)從小到大排序。即若原鏈表節(jié)點(diǎn)數(shù)據(jù)域從頭至尾的數(shù)據(jù)為10、4、2、8、6,排序后鏈表節(jié)點(diǎn)數(shù)據(jù)域從頭至尾的數(shù)據(jù)為2、4、6、8、10。請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<stdio.h>2#include<stdlib.h>3#defineN64typedefstructnode{5intdata;6structnode*next;7}NODE;8voidfun(NODE*h)9{NODE*p,*q;intt;10p=h;11while{p){12/*********found*********/13q=<u>【1】</u>;14/*********found*********/15while(<u>【2】</u>)16{if(p->data>q->data)17{t=p->data;18p->data=q->data;19q->data=t;}20q=q->next;21}22/*********found*********/23p=<u>【3】</u>;24}25}26NODE*creatlist(inta[])27{NODE*h,*p,*q;inti;28h=NULL;29for(i=0;i<N;i++)30{q=(NODE*)malloc(sizeof(NODE));31q->data=a[i];32q->next=NULL;33if(h==NULL)h=p=q;34else{p->next=q;p=q;}35}36returnh;37}38voidoutlist(NODE*h)39{NODE*p;40p=h;41if(p==NULL)42printf("ThelistisNULL!\n");43else44{printf("\nHead");45do46{printf("->%d",p->data);47p=p->next;}48while(p!=NULL);49printf("->End\n");50}51}52main()53{NODE*head;54inta[N]={0,10,4,2,8,6};55head=creatlist(a);56printf("\nTheoriginallist:\n");57outlist(head);58fun(head);59printf("\nThelistafterinverting:\n");60outlist(head);61}標(biāo)準(zhǔn)答案:(1)p->next(2)q(3)p->next知識點(diǎn)解析:填空1:從第2個while循環(huán)可知,q的初值應(yīng)該為p的Next,故空1處應(yīng)該填p->next。填空2:第2個while循環(huán)表示的是每次從鏈表剩下的節(jié)點(diǎn)中找出最小的數(shù),因此應(yīng)該以q是否為空來判斷循環(huán)是否結(jié)束。故空2處應(yīng)該填q。填空3:當(dāng)找到一個最小的數(shù)時p應(yīng)該向后移,故空3處應(yīng)該填p->next。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modil中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件modil.c。在此程序中,函數(shù)fun()的功能是將s所指字符串中的字母轉(zhuǎn)換為字母序列的后續(xù)字母(如"Z"轉(zhuǎn)換為"A","Z"轉(zhuǎn)換為"a"),其他字符不變。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行。也不得更改程序的結(jié)構(gòu)!試題程序:1#include<stdlib.h>2#include<stdio.h>3#include<ctype.h>4#include<conio.h>5voidfun(char*s)6{7/*********found*********/8while(*s!='@')9{10if(*s>='A’&&*s<=’Z’||*s>=’a’&&*s<=’z’)11{12if(*s='z’)*s=’A’;13elseif(*s=='z')*s=’a’;14else*s+=1;15}16/*********found*********/17(*s)++;18}19}20voidmain()21{22chars[80];23system("CLS");24printf("\nEnterastringwithlength<80:\n\n");25gets(s);26printf{"\nThestring:\n\n");27puts(s);28fun(s);29printf("\n\nThecords:\n\n");30puts(s);31}標(biāo)準(zhǔn)答案:(1)while(*s)或while(*s!='\0’)(2)s++;知識點(diǎn)解析:(1)通過,while語句可對字符串所有字符進(jìn)行遍歷,循環(huán)條件是對當(dāng)前字符進(jìn)行判斷,若當(dāng)前字符不是字符串結(jié)束標(biāo)志,則對其進(jìn)行其他操作。(2)因?yàn)樵撗h(huán)通過指針s的移動遍歷字符串,所以每循環(huán)一次要使指針向后移動一個位置,而不是將指針?biāo)傅脑丶?。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件progl.c。在此程序中,請編寫函數(shù)fun(),其功能是移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)為0~P(含p,p不大于n-1)的數(shù)組元素平移到數(shù)組的最后。例如,一維數(shù)組中的原始內(nèi)容為1、2、3、4、5、6、7、8、9、10;p的值為3。移動后,一維數(shù)組中的內(nèi)容應(yīng)為5、6、7、8、9、10、1、2、3、4。注意:部分源程序給出如下。請勿改動主函數(shù)main()和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題程序:1#include<stdio.h>2#defineN803voidfun(int*w,intp,intn)4{5}6main()7{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);8infi,p,n=15;9printf("Theoriginaldata:\n");10for(i=0;i<n;i++)11printf("%3d",a[i]);12printf("\n\nEnterp:");13scanf("%d",&p);14fun(a,p,n);15printf("\nThedataaftermoving:\n");16for(i=0;i<n;i++)17printf("%3d",a[i]);18printf("\n\n");19}標(biāo)準(zhǔn)答案:1voidfun(int*w,intp,intn)2{intx,j,ch;3for(x=0;x<=p;x++)4{ch=w[0];5for(j=1;j<n;j++)/*通過for循環(huán)語句,將p+1~n-1(含n-1)的數(shù)組元素依次向前移動p+1個存儲單元*/6{7w[j-1]=w[j];8}9w[n-1]=ch;/*將下標(biāo)為0~p的數(shù)組元素逐一賦給數(shù)組w[n-1]*/10}11}知識點(diǎn)解析:本題要求把下標(biāo)為0~p(含p,p不大于n-1)的數(shù)組元素平移到數(shù)組的最后??梢愿鶕?jù)輸入的p值,通過for循環(huán)語句,將p+1~n-1(含n-1)的數(shù)組元素依次向前移動p+1個存儲單元,即w[j-1]=w[j];。同時將下標(biāo)為0~p的數(shù)組元素逐一賦給數(shù)組w[n-1],也就是通過語句w[n-1]=ch;來實(shí)現(xiàn)此操作。國家二級C語言機(jī)試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和三門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來的文件內(nèi)容。請?jiān)诔绦虻南庐嬀€處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(chat*filename){FILE*fp;inti,j;STUS[N],1;/******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++)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(){STU[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);pfintf(″\nTheoriginaldata:\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(″\nThedataaftersorting:\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)″r″(2)>(3)fwrite知識點(diǎn)解析:填空1:題目中要求從形參filename所指的文件中讀入學(xué)生的數(shù)據(jù),以此可以看出本空應(yīng)該填寫″r″。填空2:此處的if語句是比較學(xué)號的大小,如果學(xué)號大就和學(xué)號小的換位,以此本空填寫>。填空3:題目要求所有的學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中,因此本空填寫:fwrite。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整型值),判斷能否構(gòu)成三角形。若能構(gòu)成等邊三角形,則返回3;若是等腰三角形,則返回2;若能構(gòu)成三角形則返回1;若不能,則返回0。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<math.h>intfun(inta,intb,intc){if(a+b>c&&b+c>a&&a+c>b){if(a==b&&h==c)/******found******/return1;elseif(a==b||b==c||a==c)return2;/******found******/elsereturn3;}elsereturn0;}voidmain(){inta,b,c,shape;printf(″\nlnputa,b,c:″);scanf(″%d%d%d″,&a,&b,&c);printf(″\na=%d,b=%d,c=%d\n″,a,b,c);shape=fun(a,b,c);printf(″\nTheshape:%d\n″,shape);}標(biāo)準(zhǔn)答案:(1)return3;(2)return1;知識點(diǎn)解析:(1)變量a、b、c分別表示三條邊,當(dāng)三邊相等(a==b&&b==c)時,返回3。(2)在能構(gòu)成三角形的前提下,如果不能構(gòu)成等邊三角形或等腰三角形,則返回1。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,該函數(shù)的功能是:判斷字符串是否為回文,若是,則函數(shù)返回1,主函數(shù)中輸出″YES″,否則返回0,主函數(shù)中輸出″NO″。回文是指順讀和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(char*str){}main(){chars[N];FILE*out:char*test[]={″1234321″,″123421″,″123321″,″abcdCBA″};inti;printf(″Enterastring:″);gets(s);printf(″\n″);puts(s);if(fun(s))printf(″YES\n″);elseprintf(″NO\n″);/****************/out=fopen(″out.dat″,″w″);for(i=0:i<4;i++)if(fun(test[i]))fprintf(out,″YES\n″);elsefprintf(out,″NO\n″);fclose(out);/****************/}標(biāo)準(zhǔn)答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*將指針p置位到字符串末尾,并統(tǒng)計字符數(shù)*/{n++;p++;}for(i=0;i<n/2;i++)/*循環(huán)比較字符*/if(str[i]==str[n—I—i]);/*相同,什么都不做*/else{fg=0;break;}/*不同,直接跳出循環(huán)*/returnfg;}知識點(diǎn)解析:判斷回文就是將第一個字符與最后一個字符比較,第二個字符與倒數(shù)第二個字符進(jìn)行比較,以此類推,直到中間的字符。如果比較的結(jié)果都相同,那么這個字符串就是回文,否則不是。程序中循環(huán)語句用來遍歷字符串,條件語句用來判斷當(dāng)前字符與對應(yīng)位置的字符是否相同。國家二級C語言機(jī)試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blankl中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun()的功能是將N×N矩陣中的元素按列向右移動1個位置,右邊被移出矩陣的元素繞回左邊第1列。例如,N=3,有下列矩陣:請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<stdio.h>2#defineN43voidfun(int(*t)[N])4{5inti,j,x;6for(i=0;i<<u>【1】</u>;i++)7{8x=t[i][<u>【2】</u>];9for(j=N-1;j>0;j--)10t[i][j]=t[i][j-1];11t[i][<u>【3】</u>]=x;12}13}14main()15{16inti,j,t[][N]=(21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10);17printf("Theoriginalarray:\n");18for(i=0;i<N;i++)19{20for(j=0;j<N;j++)21printf("%2d",t[i][j]);22printf("\n");23}24fun(t);25printf("\nTheresultis:\n");26for(i=0;i<N;i++)27{28for(j=0;j<N;j++)29printf("%2d",t[i][j]);30printf("\n");31}32}標(biāo)準(zhǔn)答案:(1)N(2)N-1(3)0知識點(diǎn)解析:填空1:因?yàn)槭荖×N的矩陣,所以行列數(shù)是相同的。外層循環(huán)用來循環(huán)行,故空1處應(yīng)該填N。填空2:此語句將移出矩陣的元素暫存,移出矩陣的元素的列下標(biāo)為N-1,故空2處應(yīng)該填N-1。填空3:此語句將移出矩陣的元素放入最左邊,也就是第1列,第1列元素的列下標(biāo)為0,故空3處應(yīng)該填0。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modil中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件modil.c。在此程序中,函數(shù)fun()的功能是計算并輸出下列級數(shù)的前N項(xiàng)和SN,直到SN+1的值大于q為止,q的值通過形參傳入。例如,若q的值為50.0,則函數(shù)值應(yīng)為49.394948。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<conio.h>2#include<stdio.h>3doublefun(doubleq)4{5intn;6doubles,t;7n=2;8s=2.0;9while(s<=q)10{11t=s;12/*********found*********/13s=s+(n+1)/n;14n++:15}16printf("n=%d\n",n);17/*********found*********/18returns;19}20main()21{22printf("%f\n",fun(50));23}標(biāo)準(zhǔn)答案:(1)s=s+(double)(n+1)/n;(2)returnt;知識點(diǎn)解析:(1)在c語言中,整數(shù)除以整數(shù)所得的結(jié)果也是整數(shù),因此此處需要將表達(dá)式n+1強(qiáng)制轉(zhuǎn)換為double型。(2)觀察while循環(huán),如果返回變量是s,那么返回的是大于q的值。而題中所要返回的是小于q的值,所以應(yīng)該返回變量t。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++加10打開考生文件夾下progl中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件progl.c。在此程序中,編寫函數(shù)fun(),其功能是求斐波那契數(shù)列中大于t的最小的數(shù),結(jié)果由函數(shù)返回。斐波那契數(shù)列F(n)的定義為F(0)=0,F(xiàn)(1)=1F(n)=F(n-1)+F(n-2)例如,當(dāng)t=10170時,函數(shù)值為1597。注意:部分源程序給出如下。請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。試題程序:1#include<conio.h>2#include<math.h>3#inclucte<stdio.h>4intfun(intt)5{67}8main()9{10intn;11n=1000;12printf("n=%d,f=%d\n",n,fun(n));13}標(biāo)準(zhǔn)答案:1intfun(intt)2{3intf0=0,f1=1,f;4do{5/*根據(jù)斐波那契數(shù)列的定義求教值*/6f=f0+f1;7f0=f1;f1=f;8}while(f知識點(diǎn)解析:根據(jù)斐波那契數(shù)列定義不難發(fā)現(xiàn),該數(shù)列最終的結(jié)果由兩個數(shù)列之和組成,所以可以在循環(huán)內(nèi)部始終把f看成前兩項(xiàng)之和,而f0始終代表第n-2項(xiàng),n代表第n-1項(xiàng)。退出循環(huán)時得到的數(shù)f,就是大于指定數(shù)的最小的數(shù)。國家二級C語言機(jī)試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:統(tǒng)計形參S所指的字符串中數(shù)字字符出現(xiàn)的次數(shù),并存放在形參t所指的變量中,最后在主函數(shù)中輸出。例如,若形參S所指的字符串為“abcdef35adgh3kjsdf7”,則輸出結(jié)果為4。請?jiān)诔绦虻南聞澗€處填入正確內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>voidfun(char*s,int*t){inti,n;n=0;/*********found*********/for(i=0;【1】!=0;i++)/*********found*********/if(s[i]>=’0’&&s[i]<=【2】)n++;/*********found*********/【3】;}main(){chars[80]="abcdef35adgh3kjsdf7";intt;printf("\nTheoriginalstringis:%s\n",s);fun(s,&t);printf("\nTheresultis:%d\n",t);}標(biāo)準(zhǔn)答案:(1)s[i](2)’9’(3)*t=n知識點(diǎn)解析:填空1:通過for循環(huán)語句來判斷是否到字符型結(jié)尾,變量i用來存放字符型數(shù)組下標(biāo),則應(yīng)填入s[i]。填空2:題目要求判斷數(shù)字字符,所以此處應(yīng)填入‘9’。填空3:將數(shù)字字符個數(shù)存入變量t中,此處需注意變量t是指針變量。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:通過某種方式實(shí)現(xiàn)兩個變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如,變量a中的值原為8,b中的值原為3,程序運(yùn)行后a中的值為3,b中的值為8。請改正程序中的錯誤,使它得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>intfun(int*xinty){intt;/*********found*********/t=x;x=y;/*********found*********/return(y);}voidmain(){inta=3,b=8;system("CLS");printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}標(biāo)準(zhǔn)答案:(1)t=*x;*x=y;(2)return(t);或returnt;知識點(diǎn)解析:首先,定義變量t作為中間變量,然后進(jìn)行數(shù)據(jù)交換,注意參數(shù)x是指針變量,交換時應(yīng)使用*x,最后確定返回值;根據(jù)代碼b=fun(8a,b),可以知道返回值將賦給變量b,而b中應(yīng)存放交換前*x中的值,所以函數(shù)應(yīng)返回變量t。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件prog1.c。在此程序中,編寫函數(shù)fun,其功能是:求出1~1000之間能被7或11整除,但不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>voidfun(int*a,int*n){}voidmain(){intaa[1000],n,k;system("CLS");fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0){printf("%5d",aa[k]);printf("\n");)/*一行寫9個數(shù)*/elseprintf("%5d",aa[k]);}標(biāo)準(zhǔn)答案:voidfun(int*a,int*n){inti,j=0;for(i=1;i<=1000;i++)/*求1到1000之內(nèi)能被7或ll整除但不能同時被7和11整除的所有整數(shù),并放入數(shù)組a中*/if((i%7==0||i%11==0)&&i%77!=0)a[j++]=i;*n=j;/*傳回滿足條件的數(shù)的個數(shù)*/}知識點(diǎn)解析:該題需要運(yùn)用循環(huán)判斷結(jié)構(gòu)來實(shí)現(xiàn),其中循環(huán)語句比較容易,只要確定循環(huán)變量的范圍即可,下面來看判斷語句。題目要求找出能被7或11整除,但不能同時被7和11整除的所有整數(shù),能同時被7和11整除的整數(shù)一定能被77整除,且不能被77整除的數(shù)不一定就是能被7或11整除的數(shù),因而,可得出程序中的if語句。注意(i%7==0||i%11==0)兩邊必須要有小括號。國家二級C語言機(jī)試(操作題)模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1.c。在此程序中,通過定義學(xué)生結(jié)構(gòu)體數(shù)組,存儲若干名學(xué)生的學(xué)號、姓名和三門課的成績。函數(shù)fun的功能是:將存放學(xué)生數(shù)據(jù)的結(jié)構(gòu)體數(shù)組,按姓名的字典序(從小到大)排序。請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inclucle<stdio.h>#include<string.h>structstudent{longsrlo;charname[10];floatscore[3];};voidfun(structstudenta[],intn){/*********found*********/【1】t;inti,j;/*********found*********/for(i=0;i<【2】;i++)for(j=i+1;j<n;j++)/*********found*********/if(strcmp(【3】)>0){t=a[i];a[i]=a[j];a[j]=t;}}main(){structstudents[4]={{10001,"ZhangSan",95,80,88},{10002,"LiSi",85,70,78},{10003,"CaoKai",75,60,88},{10004,"FangFang",90,82,87}};inti,j;printf("\n\nTheoriginaldata:\n\n");for(j=0;j<4;j++){printf("\nNo:%ldName:%﹣8sScores:",s[j].sno,s[j].name);for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]);printf("\n");}fun(s,4);printf("\n\nThedataaftersorting:\n\n");for(j=0;j<4;j++){printf("\nNo:%ldName:%一8sScores:",s[j].sno,s[j].name);for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]);printf("\n");}}標(biāo)準(zhǔn)答案:(1)structstudent(2)n﹣1(3)a[i].name,a[j].name知識點(diǎn)解析:填空1:變量t是中間變量,用來存放結(jié)構(gòu)體數(shù)組中的元素,因此應(yīng)定義為結(jié)構(gòu)體類型。填空2:for循環(huán)語句用來遍歷結(jié)構(gòu)體數(shù)組,n是數(shù)組的長度,因此循環(huán)變量的取值范圍是0~n﹣1。填空3:字符串比較函數(shù)stremp的一般格式為“stremp(字符串1,字符串2)”。功能:按照ASCII碼順序比較兩個字符數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串1=字符串2,返回值=0;字符串1>字符串2,返回值>0;字符串1<字符串2,返回值<0。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:從P所指字符串中找出ASCII碼值最大的字符,將其放在第一個位置上,并將該字符前的原字符向后順序移動。例如,調(diào)用fun函數(shù)之前給字符串輸入“ABCDeFGH”,調(diào)用后字符串中的內(nèi)容應(yīng)為“eABCDFGH”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>voidfun(char*p){charmax,*q;inti=0;max=p[i];while(p[i]!=0){if(max<p[i]){max=p[i];/*********found*********/q=p+i}i++;}/*********found*********/while(q<p){*q=*(q﹣1);q﹣﹣;}p[0]=max;}voidmain(){charstr[80];printf("Enterastring:");gets(str);printf("\nTheoriginalstring:");puts(str);fun(str);printf("\nThestringaftermoving:");puts(str);printf("\n\n");}標(biāo)準(zhǔn)答案:(1)q=p+i;(2)while(q>p)知識點(diǎn)解析:解答本題需要三個步驟,首先找到字符串中ASCII碼值最大的字符并保存;然后將該字符復(fù)制,并將該字符前面的字符串順次后移;最后將ASCII碼值最大的字符賦給字符串的第一個字符。要找到ASCII碼值最大的字符可以通過定義一個字符變量max,該字符變量初始時等于字符串的第一個字符,若字符串的下一個字符大于max,則將下一個字符賦給max,如此循環(huán)到字符尾,即可得到ASCII碼值最大的字符,同時令指針q指向最大字符。此后對最大字符前面的子串順次后移,可采用while語句實(shí)現(xiàn)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件prog1.c。在此程序中,學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已放入主函數(shù)中的結(jié)構(gòu)體數(shù)組s中。請編寫函數(shù)fun,其功能是:把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。例如,輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60~69的學(xué)生數(shù)據(jù)輸出,包含60分和69分的學(xué)生數(shù)據(jù)。主函數(shù)中把60放在low中,把69放在heigh中。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth){}voidmain(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,nlow,heigh,t;printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,&heigh);if(heigh<low){t=heigh;heigh=low;low=t;}n=fun(s,h,low,heigh);printf("Thestudent’sdatabetween%d﹣﹣%d:\n",low,heigh);for(i=0;i<n;i++)printf("%s%4d\n",h[i].hum,h[i].s);printf("\n");}標(biāo)準(zhǔn)答案:intfun(STREC*a,STREC*b,intl,inth){inti,j=0;for(i=0;i<N;i++)if(a[i].s>=l&&a[i].s<=h)/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/b[j++]=a[i];returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/}知識點(diǎn)解析:本題使用循環(huán)判斷結(jié)構(gòu)實(shí)現(xiàn)程序操作,循環(huán)語句用于遍歷結(jié)構(gòu)體數(shù)組,條件語句用于判斷當(dāng)前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)體數(shù)組b中。國家二級C語言機(jī)試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1。c。在此程序中,函數(shù)fun的功能是:把形參a所指數(shù)組中的最大值放在a[0]中,接著求出a所指數(shù)組中的最小值放在a[1]中,再把a(bǔ)所指數(shù)組元素中的次大值放在a[2]中,把a(bǔ)數(shù)組元素中的次小值放在a[3]中,依此類推。例如,若a所指數(shù)組中的數(shù)據(jù)最初排列為:1、4、2、3、9,6、5、8、7,按規(guī)則移動后,數(shù)據(jù)排列為:9、1、8、2,7、3、6、4、5。形參n中存放a所指數(shù)組中數(shù)據(jù)的個數(shù)。請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并將下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN9/*********found*********/voidfun(int【1】,intn){inti,j,maX,min,px,pn,t;/*********found*********/for(i=0;i<n﹣1;i+=【2】){max=min=a[i];px=pn=i;/*********found*********/for(j=【3】;j<n;j++){if(max<a[j]){max=a[j];px=j;)if(min>a[j]){min=a[j];pn=j;}}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;}if(pn!=i+1)(t=a[i+1];afi+1]=min;a[pn]=t;)}}main()(intb[N]={1,4,2,3,9,6,5,8,7},i;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");fun(b,N);printf("\nThedataaftermoving:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)a[](2)2(3)i+1知識點(diǎn)解析:填空1:由main中的函數(shù)調(diào)用語句確定函數(shù)定義的形式參數(shù)。填空2:for循環(huán)語句中,循環(huán)變量增值為2。填空3:確定for語句循環(huán)變量的初值。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:按順序給s所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序?qū)γ?個元素求一個平均值,并將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個數(shù)不是5的倍數(shù),則多余部分忽略不計。例如,s所指數(shù)組有14個元素,則只對前10個元素進(jìn)行處理,不對最后的4個元素求平均值。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineSIZE20fun(double*s,double*w){intk,i;doublesum;for(k=2,i:0;i<SIZE;i++)(s[i]=k;k+=2;)/*********found*********/sun=0.0;for(k=0,i=0;i<SIZE;i++){sum+=s[i];/*********found*********/if(i+1%5==0){w[k]=sum/5;sum=0;k++;)}returnk;}main(){doublea[SIZE],b[SIZE/5];inti,k;k=fun(a,b);printf("Theoriginaldata:\n");for(i=0;i<SIZE;i++){if(i%5==0)printf("\n");printf("%4.0f",a[i]);}printf("\n\nTheresult:\n");for(i=0;i<k;i++)printf("%6.2f",b[i]),printf("\n\n");}標(biāo)準(zhǔn)答案:(1)sum=0.0;(2)if((i+1)%5==0)知識點(diǎn)解析:(1)變量sum書寫錯誤。(2)循環(huán)條件if(i+1%5==0)是一個運(yùn)算邏輯錯誤,應(yīng)先計算i+1,再對5求余。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件prog1.c。在此程序中,學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,其功能是:把低于平均分的學(xué)生數(shù)據(jù)放入b所指的數(shù)組中,低于平均分的學(xué)生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}voidmain(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};STRECh[N];inti,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);for(i=0;i<n;i++)/*輸出成績低于平均值的學(xué)生記錄*/printf("%s%4.lf\n",h[i].num,h[i].s);printf("\n");}標(biāo)準(zhǔn)答案:doublefun(STREC*a,STREC*b,int*n){inti,j=0;doubleav=0.0;for(i=0;i<N;i++)av=av+a[i].s;av=av/N;/*求平均值*/for(i:0;i<N;i++)if(a[i].s<av)b[j++]=a[i];/*將低于平均值的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/*n=j;/*指針傳回低于平均值的學(xué)生人數(shù)*/returnav;/*返回平均值*/}知識點(diǎn)解析:本題使用循環(huán)語句和條件判斷語句來實(shí)現(xiàn)程序操作,第1個循環(huán)語句的作用是求出總分,然后求出平均分av。第2個循環(huán)的作用是將分?jǐn)?shù)低于平均分的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中。國家二級C語言機(jī)試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、下列給定程序的功能是:調(diào)用函數(shù)fun將指定源文件中的內(nèi)容復(fù)制到指定的目標(biāo)文件中,復(fù)制成功時函數(shù)返回1,失敗時返回0。在復(fù)制的過程中,把復(fù)制的內(nèi)容輸出到屏幕。主函數(shù)中源文件名放在變量sfname中,目標(biāo)文件名放在變量tfname中。請?jiān)谙庐嬀€處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<stdlib.h>intfun(char*souree,char*target){FILE*fs,*ft;charch;/******found******/if((fs=fopen(source,___1___))==NULLreturn0;if((ft=fopen(target,″w″))==NULL)return0;printf(″\nThedatainfile:\n″);ch=fgeto(fs);/******found******/while(!feof(___2___)){putchar(ch);/******found******/fputc(ch,___3___);ch=fgetc(fs);}fclose(fs);fclose(ft);printf(″\n″);return1;}main(){charsfname[20]=″myfile1″,tfname[20]=″myfile2″;FILE*myf;inti;charc;myf=fopen(sfname,″w″);printf(″\nTheoriginaldata:\n″);for(i=1;i<30;i++){c=′A′+rand()%25;fprintf(myf,″%c″,c);printf(″%c″,c);};fclose(myf);printf(″\n\n″);if(fun(sfname,tfname))printf(″Succeed!″);elseprintf(″Fail!″);}標(biāo)準(zhǔn)答案:(1)″r″(2)fs(3)ft知識點(diǎn)解析:本題考查:打開文件操作,fopen函數(shù)用來打開一個文件,其一般形式為“文件指針名=fopen(文件名,使用文件方式);”;文件結(jié)束檢測函數(shù)feof函數(shù);寫字符函數(shù)fputc,功能是把一個字符寫入指定的文件中,函數(shù)調(diào)用的形式為“fputc(字符量,文件指針);”、其中,待寫入的字符量可以是字符常量或變量,被寫入的文件可以用寫、讀/寫、追加方式打開。文件一旦使用完畢,需使用關(guān)閉文件函數(shù)fclose將文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤填空1:本題考查對文件操作的掌握。打開一個文件的調(diào)用方式是:fs=fopen(文件名,使用文件方式),以只讀的方式打開文件,所以文件打開方式為″r″。填空2:while循環(huán)語句中,循環(huán)條件通過feof()函數(shù)來檢測是否到文件結(jié)尾。填空3:fputc()函數(shù)用于將一個字符寫到磁盤文件上,調(diào)用形式為:fputc(要輸出的字符,文件指針)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:在有n名學(xué)生、2門課成績的結(jié)構(gòu)體數(shù)組std中,計算出第1門課程的平均分,作為函數(shù)值返回。例如,主函數(shù)中給出了4名學(xué)生的數(shù)據(jù),則程序運(yùn)行的結(jié)果為:第1門課程的平均分是76.125000請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>typedefstruct{charnum[8];doublescore[2];}STU;doublefun(STUstd[],intn){inti;/******found******/doublesum;/******found******/for(i=0;i<2;i++)/******found******/sum+=std[i].score[1];returnsum/n;}main(){STUstd[]={″N1001″,76.5,82.0,″N1002″,66.5,73.0,″N1005″,80.5,66.0,″N1006″,81.0,56.0};printf(″第1門課程的平均分是:%lf\n″,fun(std,4));}標(biāo)準(zhǔn)答案:(1)doublesum改為doublesum=0.0:(2)for(i=0;i<2;i++)改為for(i=0;i<n;i++);(3)sum+=std[i].score[1]改為sum+=std[i].score[0];知識點(diǎn)解析:本題考查:臨時變量初始化,C語言里臨時變量不初始化,它的默認(rèn)值是不確定的一一個值。再者,考查C語言約定數(shù)組的下標(biāo)是從0開始的。(1)doublesum改為doublesum=0.0;累加求和需要初始化累加結(jié)果的臨時變量。(2)for(i=0;i<2;i++)改為for(i=0;i<n;i++);共有n個學(xué)生的成績,需要累加所有學(xué)生第一門課的成績。(3)sum+=std[i].score[1]改為sum+=std[i].score[0];第1門課程的平均分,C語言的下標(biāo)是從0開始的。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如,若輸入的數(shù)據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。注意:請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>voidNONO();intfun(intn){}main(){intn,place;do{printf(″請輸入一個4位以內(nèi)的正整數(shù):″);scanf(″%d″,&n);while(n<0||n>9999);place=fun(n);printf(″輸入的數(shù)字是%d位\n″,place);NONO();}voidNONO()/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/{FILE*fp,*wf;inti,n,place;fp=fopen(″in.dat″,″r″);wf=fopen(″out.dat″,″w″);for(i=0;i<10;i++){fscanf(fp,″%d″.&n);place=fun(n);fprintf(wf,″%d\n″,place);}fclose(fp);fcl0se(wf);}標(biāo)準(zhǔn)答案:intbits=1://臨時變量統(tǒng)計位數(shù)while(n/10)/*判斷是否為0,若不為0,bits加1,再將n除以10,繼續(xù)判斷*/{bits++;n=n/10;}returnbits;知識點(diǎn)解析:本題考查:對循環(huán)跳出的條件的理解,以及理解取數(shù)字位數(shù)的方法。通過對指定的多位數(shù)每次除以10,去掉最后一位,直到為0結(jié)束,使用臨時變量來統(tǒng)計一個多位數(shù)的位數(shù)。國家二級C語言機(jī)試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點(diǎn)數(shù),然后將其顯示在屏幕上。請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found**********/___1___fp;Charstr[100],str1[100],sir2[100];inta1;doublef1;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/**********found**********/___2___;fp=fopen("file1.txt","r");/**********found**********/fscanf(___3___,"%s%s%s",str,strl,str2);fclose(fp);a1=atoi(str1);f1=atof(str2);printf("\nTheresult:\n\n%s%d%f\n",str,a1,f1);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}標(biāo)準(zhǔn)答案:(1)FILE*(2)fclose(fp)(3)fp知識點(diǎn)解析:本題中函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點(diǎn)數(shù),然后將其顯示在屏幕上。第一空:“fp=fopen("file1.txt","w");”可知fp是文件型指針,故第一空處fp的定義應(yīng)為“FILE*。第二空:第二處的后面一句是“fp=fopen("file1.txt","r");”再次打開file1.txt,因此,在第二次打開file1.tXt之前必須將文件關(guān)閉,故第二處是關(guān)閉文件,即“fclose(fp)”。第三空:fscanf。的調(diào)用形式是:fscanf(fp),格式字符串,輸入列表),因此,第三空處應(yīng)為“fp”,從文件中讀出字符串、整數(shù)、浮點(diǎn)數(shù)。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:對N名學(xué)生的學(xué)習(xí)成績,按從高到低的順序找出前m(m≤10)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/**********found**********/t=(STU*)calloc(sizeof(STU),m)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)=b(j);b[j].s=0;}returnt;}outresult(STUa[],F(xiàn)ILE*pf)(inti;for(i=0;i<N;i++)fprintf(pf,"No=%sNark=%d\n",a[i].num,a[i].s);fprintf(pf,"\n\n");}main(){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,in;printf("*****TheOriginaldata*****\n");outEesult(a,stdout);printf("\nGivethenumberofthestudentSwhOhavebetterscore:");scanf("%d",&m);while(m>10){printf("\nGivethenumberofthestudentswhohavebetterscore:");scarlf("%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(pOrcler);}標(biāo)準(zhǔn)答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)t(k]=b[j];知識點(diǎn)解析:本題中函數(shù)的功能是按學(xué)習(xí)成績從高到低的順序找出前m(m≤10)名學(xué)生。利用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)對定義的結(jié)構(gòu)體中的成績域進(jìn)行排序。(1)題干中要求結(jié)構(gòu)體STU類型的m個學(xué)生放在動態(tài)分配的連續(xù)存儲區(qū)中,“t=STU*)calloc(sizeofi(STU),m)”語句沒有使用分號“;”結(jié)束,因此,需要在語句結(jié)尾處加分號。calloc函數(shù)是C語言的動態(tài)分配函數(shù),分配存儲空間。(2)第二個標(biāo)識下是將b數(shù)組拷貝到t數(shù)組,在C語言中,數(shù)組元素的訪問使用中括號“[]”而不是圓括弧“()”,因此,第二標(biāo)識下應(yīng)改成“t[k]=b[j];”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。例如,一維數(shù)組中的數(shù)據(jù)是:2223445666677899101010。刪除后,數(shù)組中的內(nèi)容應(yīng)該是:2345678910。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include<stdio.h>#defineN80intfun(inta[],intn){}main(){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();printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);n=fun(a,n);printf("\n\nThedataafterdeleted:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");NONO();}voidNONO(){/*請?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*rf,*wf;inta[N],n,i,j;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++){fscanf(rf,"%d",&n);for(j=0;j<n;j++)fscanf(rf,"%d",&a[j]);n=fun(a,n);for(j=0;j<n;j++)fprintf(wf,"%4d",a[j]);fprintf(wf,"\n");}fclose(rf);fcLoSe(wf),}標(biāo)準(zhǔn)答案:inti,t,j=0,*p=a;t=p[0];//設(shè)置臨時變量t初值指向第一數(shù)組值for(i=0;i<=n;i++)if(t==p[i])//當(dāng)臨時變量與數(shù)組中的某個值相同則跳出,比較下一個元素;else//如果臨時變量與數(shù)組中值不同,則對臨時變量重新賦值{a[j]=t;t=p[i];j++;}if(i>=n)a[j]=t;returnj;知識點(diǎn)解析:該程序功能是刪去一維數(shù)組中所有相同的數(shù),使之只剩一個。解題思路是,首先在函數(shù)中定義臨時變量指向每一個元素,然后在循環(huán)過程中將臨時值和其他元素進(jìn)行比較,如果相同,那么跳過相同字符。(1)首先,設(shè)置一個臨時變量,初值設(shè)置為一維數(shù)組的第一個元素。(2)然后,依次將數(shù)組的元素與臨時變量比較,如果相同,則繼續(xù)取數(shù)組下一個元素與臨時變量比較;如果不同,則將臨時變量的值賦值到數(shù)組的第一個元素,同時將此與臨時變量不同的數(shù)組元素賦值給臨時變量。(3)循環(huán)執(zhí)行,直到所有的數(shù)據(jù)處理完畢。國家二級C語言機(jī)試(操作題)模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項(xiàng)目中包含一個源程序文件blank1.c。此程序定義了學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和三門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來的文件內(nèi)容。請?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BLANK1.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)j;printf("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論