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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國家二級C語言機試(操作題)模擬試卷47(共9套)(共27題)國家二級C語言機試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的作用是:不斷從終端讀入整數(shù),由變量a統(tǒng)計大于0的個數(shù),用變量c來統(tǒng)計小于0的個數(shù),當輸入0時結束輸入,并通過形參pa和pb把統(tǒng)計的數(shù)據(jù)傳回主函數(shù)進行輸出。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:源程序存放在BLANK1.C中。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>voidfun(int*px,int*py){/*********found*********/int【1】;Scarlf("%d",&k);/*********found*********/while【2】{if(k>0)a++;if(k<0)b++;/*********found*********/【3】;}*px=a;*py=b;}main(){intx,y;fun(&x,&y);printf("x=%dy=%d\n",x,y);}標準答案:(1)a=0,b=0,k(2)(k!=0)(3)scanf("%d",&k)知識點解析:填空1:下面的seanf函數(shù)用到變量k,需要提前定義,在while循環(huán)中使用了臨時存放正、負數(shù)個數(shù)的變量a,b,因此也要提前定義。填空2:根據(jù)題意,輸入0時結束程序,因此當k!=0時進入循環(huán)記錄正負數(shù)的個數(shù)。填空3處:需要不斷從終端輸入整數(shù),因此在循環(huán)體內添加輸入操作。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序modi1.c的主函數(shù)中,將a、b、c三個結點鏈成一個單向鏈表,并給各結點的數(shù)據(jù)域賦值,函數(shù)fun()的作用是:累加鏈表結點數(shù)據(jù)域中的數(shù)據(jù)作為函數(shù)值返回。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。試題程序:#include<stdio.h>typedefstructlist{intdata;structlist*next;}LIST;intfun(LIST*h){LIST*p;/*********found*********/intt;p=h;/*********found*********/whple(*p){/*********found*********/t=t+p.data;p=(*p).next;}returnt;}main(){LISTa,b,c,*h;a.data=34;b.data=51;c.data=87;c.next=’\0’;h=&a;a.next=&b;b.next=&c;printf("總和=%d\n",fun(h));}標準答案:(1)intt=0;(2)while(p)或while(p!=NULL)(3)t=t+p一>datal.知識點解析:(1)題目中變量t是用來存放累加和的,因此必須初始化。(2)題目中*p是結構體,不能轉化為bool型。(3)p是指針,只能用p一>,不能用p.。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是分別統(tǒng)計形參t所指二維數(shù)組中字母A和C的個數(shù)。注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#include<stdlib.h>#defineM14voidNONO();voidfun(char(*t)[M],int*a,int*c){}voidget(char(*s)[M]){inti,j;for(i=0;i<M;i++){for(j=0;j<M;j++){s[i][j]=65+rand()%12;printf("%c",s[i][j]);)printf("\n");}}main(){chara[M][M];intx,y;get(a);fun(a,&x,&y);printf("A=%dc=%d\n",x,y);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調用函數(shù),輸出數(shù)據(jù),關閉文件。*/FILE*fp,*wf;inti,j,x,y;chara[M][M];fp=fopen("c:\test\sa.dat","r");wf=fopen("c:\test\out.dat","w");for(i=0;i<M;i++){for(j=0;j<M;j++){fscanf(fp,"%c",&a[i][j]);)}fun(a,&x,&y);fprintf(wf,"A=%d\n",x);fprintf(wf,"C=%d\n",y);fclose(fp);fclose(wf);}標準答案:inti=0,j=0;//循環(huán)統(tǒng)計的下標*a=0;//初始化a字符統(tǒng)計的個數(shù)*c=0,//初始化c字符統(tǒng)計的個數(shù)for(i=0;i<M;i++)//行{for(j=0;j<M,j++)//列{if(t[i][j]=’A’)//字符是a,計數(shù)(*a)++;if(t[i][j]==’c’)//字符是c,計數(shù)(*c)++;}}知識點解析:對二維數(shù)組的行列分別循環(huán),行優(yōu)先,查找數(shù)組中元素為A或者C,分別對其進行計數(shù)。國家二級C語言機試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),作為函數(shù)值返回,并將大于平均值的數(shù)放在形參y所指數(shù)組中,在主函數(shù)中輸出。例如,有10個正數(shù):46、30、32、40、6、17、45、15、48、26,其平均值為30.500000。主函數(shù)中輸出:4632404548。請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結構!試題程序:1#include<stdlib.h>2#include<stdio.h>3#defineN104doublefun(doublex[],double*y)5{inti,j;doubleav;6/*********found*********/7av=【1】;8/*********found*********/9for(i=0;i<N;i++)10av=av+【2】;11for(i=j=0;i<N;i++)12/*********found*********/13if(x[i]>av)y[【3】]=x[i];14y[j]=-1;15returnav;16}17main()18{inti;doublex[N],y[N];19for(i=0;i<N;i++)20{x[i]=rand()%50;21printf(’’%4.of’’,x[i]);}22printf(’’\n’’);23printf(’’\nTheaverageis:%f\n’’,fun(x,y));24for(i=0;y[i]>=0;i++)25printf(’’%5.1f’’,y[i]);26printf(’’\n’’);27}標準答案:(1)0.0(2)x[i]/N(3)j++知識點解析:填空1:通過上面的程序可以看出此空考的是給變量賦初值,av代表的是平均值,因此av的初值應該是0.0。填空2:通過for循環(huán)可知,此空代表求平均值,因此應該填寫x[i]/N。填空3:先把大于平均值的數(shù)放在形參y所指數(shù)組中,然后使下標值加1,因此此空應該填j++。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:依次取出字符串中所有的數(shù)字字符,形成新的字符串,并取代原字符串。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:1#include<stdlib.h>2#include<stdio.h>3#include<conio.h>4voidfun(char*s)5{6inti,j;7for(i=0,j=0;s[i]!=’\0’;i++)8if(s[i]>=’0’&&s[i]<=’9’)9/*********found*********/10s[j]=s[i];11/*********found*********/12s[j]=’’\0’’;13}14voidmain()15{16charitem[80];17system(’’CLS’’);18printf(’’\nEnterastring:’’);19gets(item);20printf(’’\n\nThestringis:%s\n’’,item);21fun(item);22printf(’’\n\nThestringofchangingis:%s\n’’,item);23}標準答案:(1)s[j++]=s[i];(2)s[j]=’\0’;知識點解析:題目要求依次取出字符串中所有的數(shù)字字符,因此將元素s[i]存入s[j]后要使j加1,為下次存儲做準備。s[j]=’’\0’’;是一個語法錯誤。三、程序設計題(本題共1題,每題1.0分,共1分。)3、編寫一個甬數(shù),其功能是:從傳人的num個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結束輸入的標識)。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:1#include<conio.h>2#include<stdio.h>3#include<string.h>4#include<stdlib.h>5char*fun(char(*a)[81],intnum,char*max)6{78}9voidmain()10{11FILE*wf;12charss[10][81],*ps=NULL;13chars[3][81]={’’abcd’’,’’deg’’,’’diegns’’},*p=NULL;14inti=0,n;15system(’’CLS’’);16printf(’’輸入若干個字符串:’’);17gets(ss[i]);18puts(ss[i]);19while(!strcmp(ss[i],’’****’’)==0)/*用4個星號作為結束輸入的標志*/20{21i++;22gets(ss[i]);2324puts(ss[i]);25}26n=i:27ps=fun(ss,n,ps);28printf(’’\nmax=%s\n’’,ps);29/*****************/30wf=fopen(’’out.dat’’,’’w’’);31p=fun(s,3,p);32fprintf(wf,’’%s’’,p);33fclose(wf);34/*****************/35}標準答案:1char*fun(char(*a)[81],intnum,char*max)2{3inti=0;4max=a[0];5for(i=0;i知識點解析:解答本題之前,首先應該明白ss是一個指向一維數(shù)組的指針變量,max是指向指針的變量,所以引用變量時要注意加上*。本程序使用循環(huán)語句遍歷字符串數(shù)組,使用條件語句判斷該字符串是否最長。國家二級C語言機試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:將形參s所指字符串中下標為奇數(shù)的字符按ASCII碼大小遞增排序,并將排序后下標為奇數(shù)的字符取出,存入形參p所指字符數(shù)組中,形成一個新串。例如,形參S所指的字符為“baawrskjghzlieda”,執(zhí)行后P所指字符數(shù)組中的字符串應為“aachjlsw”。請在程序的下畫線處填入正確的內容并將下畫線刪除,使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#lnclude<stdio.h>voidfun(char*s,char*p){inti,j,n,x,t;n=0;for(i=0;s[i]!=’\0’;i++)n++;for(i=1;i<n-2;i=i+2){/*********found*********/【1】;/*********found*********/for(j=【2】+2;j<n;j=j+2)if(s[t]>s[j])t=j;if(t!=i){x=s[i];s[i]=s[t];sit]=x;}}for(i=1,j=0;i<n;i=i+2,j++)p[j]=s[i];/*********found*********/p[j]=【3】;}main(){chars[80]="baawrskjghzlicda",p[50];printf~("\nTheoriginalstringis:%s\n",s);fun(s,p);prLntf("\nTheresultis:%s\n",p);}標準答案:(1)t=i(2)i或t(3)’\0’或0知識點解析:本題中第1個for循環(huán)的作用是得到字符串的長度,第2個for循環(huán)的作用是對下標為奇數(shù)的字符按ASCII碼大小排序,最后將排好序的字符取出。填空1:取出字符串中下標為奇數(shù)的字符,所以將下標i賦值給中間變量t。填空2:此處for循環(huán)語句的作用是實現(xiàn)對下標為奇數(shù)的元素進行排序操作,所以循環(huán)變量初值應填入i或t;。填空3:將下標為奇數(shù)的字符取出后,存入p所指的數(shù)組中,最后不要忘記在數(shù)組最后加入字符串結束標識’\0’。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將s所指字符串的正序和反序進行連接,形成的新串放在t所指的數(shù)組中。例如,當s所指字符串為“ABCD”時,t所指字符串中的內容應為“ABCDDCBA”。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d-1-i];/*********found*********/t[2*d-1]=’\0’;}main(){chars[100],t[100];printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}標準答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知識點解析:(1)從調用函數(shù)來看,函數(shù)傳遞的是數(shù)組,所以函數(shù)的形參應為指針。(2)循環(huán)結束后回文字符的個數(shù)為2*d個,因為數(shù)組下標是從0開始的,所以最后一個字符的下標為2*d-1,在最后一個字符的后面加上結束符’\0’,因此為t[2*d]=’\0’;。三、程序設計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已在主函數(shù)中放入結構體數(shù)組s中,請編寫函數(shù)fun,其功能是:把低于平均分的學生數(shù)據(jù)放人b所指的數(shù)組中,低于平均分的學生人數(shù)通過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(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++)/*輸出成績低于平均值的學生記錄*/printf("%s%4.1f\n",h[i].num,h[i].s);printf("\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];/*將低于平均值的學生記錄存入結構體數(shù)組b中*/*n=j;/*指針傳回低于平均值的學生人數(shù)*/returnav;/*返回平均值*/}知識點解析:本題使用循環(huán)語句和條件判斷語句來實現(xiàn)程序操作,第1個循環(huán)語句的作用是求出總分,然后求出平均分av。第2個循環(huán)的作用是將分數(shù)低于平均分的學生記錄存入結構體數(shù)組b中。國家二級C語言機試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,函數(shù)fun的功能是:在任意給定的9個正整數(shù)中找出按升序排列時處于中間的數(shù),將原數(shù)據(jù)序列中比該中間數(shù)小的數(shù)用該中間數(shù)替換,位置不變,在主函數(shù)中輸出處理后的數(shù)據(jù)序列,并將中間數(shù)作為函數(shù)值返回。例如,有9個正整數(shù):1572387582145按升序排列時的中間數(shù)為:8處理后主函數(shù)中輸出的數(shù)列為:8882387882145請在程序的下畫線處填入正確的內容并把下畫線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>#defineN9intfun(intx[]){inti,j,k,t,mid,b[N];for(i=0;i<N;i++)b[i]=x[i];for(i=0;i<=N/2;i++){k=i;for(j=i+1;j<N;j++)if(b[k]>b[J])k=j;if(k!=i){/*********found*********/t=b[i];b[i]=【1】;b[k]=t;}}/*********found*********/mid=b[【2】];for(i=0;i<N;i++)/*********found*********/if(x[i]【3】mid)X[i]=mid;returnmid;}main(){inti,x[N]={1,5,7,23,87,5,8,21,45};for(i=0;i<N;i++)printf("%d",x[i]);printf("\nThemiddatais:%d\n",fun(x));for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");}標準答案:(1)b[k](2)4或N/2(3)<知識點解析:數(shù)組中的9個數(shù)任意排列,要找到按升序排列時處于中間位置的數(shù),應首先對數(shù)組進行升序排列。因為只需找到中間位置的數(shù)即可,故不必對整個數(shù)組進行排序,只需要排列出數(shù)組的前半部分。找到中間數(shù)后,遍歷原數(shù)組,將小于中間數(shù)的元素進行替換。填空1:利用選擇算法排序,先指定一個元素為最小,用這個數(shù)與其后的所有數(shù)進行比較,若找小于此數(shù),則進行替換。此處考查替換操作。填空2:元素mid存放中間位置的數(shù),數(shù)組長度為9,因此中間元素數(shù)為b[4]。填空3:遍歷數(shù)組,當元素小于中間位置的數(shù)(即mid)時,進行替換。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modil.c。在此程序中,函數(shù)fun的功能是:根據(jù)整型參數(shù)m,計算如下公式的值。例如,若m=2000,則應輸出0.000160。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/fun(intm){doubley=0,d;inti;/*********found*********/for(i=100,i<=m,i+=100){d=(double)i*(doub2e)i;y+=1.0/d;}return(y);}voidmain(){intn=2000;system("CLS");printf("\nTheresultis%1f\n",fun(n));}標準答案:(1)doublefun(intm)(2)for(i=100;i<=m;i+=100)知識點解析:(1)題目要求在函數(shù)fun中求級數(shù)前m項和,可用循環(huán)語句,每次計算級數(shù)中的一項,然后累加。第一處錯誤在于定義fun(intm),由函數(shù)的返回值y可知此處應該定義為doublefun(intm)。(2)for(i=100,i<=m,i+=100)中是一個簡單的語法錯誤。for循環(huán)語句的形式為for(表達式1;表達式2;表達式3),其表達式之間應以";"相隔。三、程序設計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,請編寫函數(shù)fun,該函數(shù)的功能是:判斷字符串是否為回文,若是,則函數(shù)返回1,主函數(shù)中輸出"YES",否則返回0,主函數(shù)中輸出"NO"。回文是指順讀和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<stdio.h>#defineN80intfun(char*sir){}main(){chars[N];FILE*out;char*test[]={"1234321","123421","123321","abcdCBA"};inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/*********found*********/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);/*********found*********/}標準答案: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-1-i]);/*相同,什么都不作*/else/*不同,直接跳出循環(huán)*/{fg=0;break;}returnfg;}知識點解析:判斷回文就是將第一個字符與最后一個字符比較,第二個字符與倒數(shù)第二個字符進行比較,依此類推,直到中間的字符,如果比較的結果都相同,那么這個字符串就是回文,否則不是。程序中循環(huán)語句用來遍歷字符串,條件語句用來判斷當前字符與對應位置的字符是否相同。國家二級C語言機試(操作題)模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、下列給定程序中,函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[1]、a[2]…中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如,若a所指數(shù)組中的數(shù)據(jù)最初排列為:9,1,4,2,3,6,5,8,7,刪除偶數(shù)后,a所指數(shù)組中的數(shù)據(jù)為:9,1,3,5,7,返回值為5。請在程序的下畫線處填入正確的內容并將下畫線刪除,使程序得出正確的結果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i<n;i++)/*********found*********/if(a[i]%2==【1】){/*********found*********/a[j]=a[i];【2】;}/*********found*********/return【3】;}main(){intb[N]={9,1,4,2,3,6,5,8,7},i,n;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");n=fun(b,N);printf("\nThenumberofodd:%d\n",n);printf("\nTheoddnumber:\n");for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}標準答案:(1)1(2)j++(3)j知識點解析:本題考查:if語句條件表達式;自增、自減運算符;函數(shù)返回值。填空1:根據(jù)題目要求,需進行奇偶數(shù)的判定,可以通過if條件語句來判斷數(shù)組元素是否為奇數(shù),如果元素不能被2整除,則為奇數(shù),所以填入if(a[i]%2==1)。填空2:將為奇數(shù)的元素重新存放到數(shù)組的前面,同時下標增1。填空3:函數(shù)返回值需要返回數(shù)組中奇數(shù)的個數(shù),因此返回變量j。奇數(shù)和偶數(shù)的判定方法,對2求余運算,結果為0是偶數(shù),結果為1是奇數(shù)。自增1、自減1運算符:自增1運算符記為“++”,其功能是使變量的值自增1;自減1運算符記為“一一”,其功能是使變量值自減1。自增l、自減1運算符均為單目運算符,具有右結合性,有以下幾種形式:++i:i自增1后再參與其他運算。一一i:i自減1后再參與其他運算。i++:i參與運算后,i的值再自增1。i一一:i參與運算后,i的值再自減1。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中函數(shù)fun的功能是:求兩個非零正整數(shù)的最大公約數(shù),并作為函數(shù)值返回。例如,若numl和num2分別為49和2l,則輸出的最大公約數(shù)為7;若numl和hum2分別為27和81,則輸出的最大公約數(shù)為27。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:#include<stdio.h>intfun(inta,intb){intr,t;if(a<b){/*********found*********/t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}/*********found*********/return(a);}voidmain(){inthum1,hum2,a;printf("Inputhumlnum2:");scani("%d%d”,&nurn1,&num2);printf("hum1=%dnum2=%d\n\n",num1,hum2);a=fun(num1,hum2);printf("Themaximuncommondivisoris%d\n\n",a);}標準答案:(1){t=a;a=b;b=t;}(2)return(b);或returnb;知識點解析:本題考查:return語句,功能是計算表達式的值,并將其返回給主調函數(shù)。求最大公約數(shù)算法一般采用輾轉相除法。輾轉相除法的算法為:首先將m除以n(m>n)得余數(shù)r,再用余數(shù)r去除原來的除數(shù),得到新的余數(shù),重復此過程直到余數(shù)為0時停止,此時的除數(shù)就是m和n的最大公約數(shù)。程序首先判斷參數(shù)a和b的大小,如果a<b則進行交換,這里是一個數(shù)學邏輯錯誤,應先將a的值賦給中間變量t,再將b的值賦給a,最后將t的值賦給b。當余數(shù)r為0時,除數(shù)b即為所求的最大公約數(shù),所以函數(shù)應返回b。三、程序設計題(本題共1題,每題1.0分,共1分。)3、規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:刪除字符串中所有的*號。編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,字符串中的內容為“****A*BC*DEF*G*******”,刪除后,字符串中的內容應當是“ABCDEFG”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>voidfun(char*a){}voidmain(){chars[81];print:f("Enterastring:\n");gets(s);fun(s);print:f("Thestringafterdeleted:\n");puts(s);}標準答案:voidfun(char*a){inti,j=0;for(i=0;a[i]!=’\0’;i++)if(a[i]!=’*’)a[j++]=a[i];/*若不是要刪除的字符’*’則保留*/a[j]=’\0’;/*最后加上字符串結束符’\0’*/}知識點解析:本題考查:刪除字符串中所有*號,需用循環(huán)語句遍歷字符串,用判斷語句判斷字符是否為*號,由此可以決定該程序應使用循環(huán)判斷結構。用循環(huán)操作從字符串開始往后逐個進行比較,若不是要刪除的字符(用if(a[i]!=’*’)來控制)則保留。變量i和j用來表示原字符串的下標和刪除*號后新字符串的下標。注意,下標變量j要從0開始,最后還要加上字符串結束標識‘\0’。國家二級C語言機試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:將形參a所指數(shù)組中的前半部分元素中的值和后半部分元素中的值對換。形參n中存放數(shù)組中數(shù)據(jù)的個數(shù),若n為奇數(shù),則中間的元素不動。例如:若a所指數(shù)組中的數(shù)據(jù)依次為:1、2、3、4、5、6、7、8、9,則調換后為:6、7、8、9、5、1、2、3、4。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#include#defineN9voidfun(inta[],intn){inti,t,P;/**********found**********/P=(n%2==0)?n/2:n/2+___1___;for(2=0;i標準答案:(1)1(2)i(3)a[p+i]知識點解析:函數(shù)fun的功能是將形參a所指數(shù)組中的前半部分元素中的值和后半部分元素中的值對換。第一空:“p=(n%2==0)?n/2:n2+__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ù)時a[i]和a[i+n/2]交換,n為奇數(shù)時a[i]和a[i+n/2+1]交換。因此如果n是奇數(shù)的話,p應該等于n/2+1,故第一空處應為“1”。第二空:由上分析可知,a[i]和a[i+p]交換,故第二空應為“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三處應該是把a[i]賦值給a[p+i],a嘲保存在t中,故第三空應為“a[p+i]”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:把主函數(shù)中輸入的3個數(shù),最大的放在a中,最小的放在c中,中間的放在b中。例如,輸入的數(shù)為:551234,輸出結果應當是:a=55.0,b=34.0,c=12.0。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。#includevoidfun(float:*a,float*b,float*c){/**********found**********/float*k;if(*a<*b){k=*a;*a=*b;*b=k;)/**********found**********/if(*a>*c){k=*c;*c=*a;*a=k;}if(*b<*c){k=*b;*b=*c;*c=k;}}main(){float:a,b,c;print:f("Inputabc:");scanf("%f%f%f",&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);fun(&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%41f\n\n",a,b,c);}標準答案:(1)floatk;(2)if(*a<*c)知識點解析:函數(shù)對三個數(shù)進行兩兩比較,實現(xiàn)判斷。(1)第一個標識下的變量k是在比較過程中,臨時存放數(shù)據(jù)的變量,因此k不應是指針,所以將“float*k”改為“floatk”。(2)分析函數(shù)中第一個if語句,如果主函數(shù)中ac,則進行對調,又把大數(shù)放在c中,這樣的邏輯顯然是混亂的。因此第二個標識下“if(*a>*c)”應該改為“if(*a<*c)”。三、程序設計題(本題共1題,每題1.0分,共1分。)3、學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已在主函數(shù)中放入結構體數(shù)組s中,請編寫函數(shù)fun,它的功能是:把分數(shù)最高的學生數(shù)據(jù)放在h所指的數(shù)組中,注意:分數(shù)最高的學生可能不止一個,函數(shù)返回分數(shù)最高的學生的人數(shù)。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",77},{"GA17",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i標準答案:inti,mex=a.[0].s,n=0;for(i=1;i知識點解析:程序功能是把分數(shù)最高的學生數(shù)據(jù)放在h所指的數(shù)組中。(1)要把最高分數(shù)的學生數(shù)據(jù)放在數(shù)組中,首先求出最高分數(shù),再使用一個for循環(huán)把所有的成績進行比較,找出最高的分數(shù)來。(2)找出所有與最高分數(shù)相等的學生,并將最高分數(shù)的人數(shù)累加。國家二級C語言機試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:從三個形參a,b,c中找出中間的那個數(shù),作為函數(shù)值返回。例如,當a=3,b=5,c=4時,中數(shù)為4。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#includeintfun(inta,intb,intc){intt;/************found************/t=(a>b)?(b>c?b:(a>c?c:_____1_____)):((a>c)?_____2_____:((b>c)?c:_____3_____));returnt;}main(){inta1=3,a2=5,a3=4,r;r=fun(a1,a2,a3);printf("\nThemiddlenumberis:%d\n",r);}標準答案:(1)a(2)a(3)b知識點解析:fun函數(shù)的功能是求得三個數(shù)中間的數(shù)。第一空:語句“(a>b)?(b>c?”表示a>b>c,根據(jù)題目要求,則中間值為b,若只是滿足第一個“?”前面的條件,而c>b,則選擇執(zhí)行“(a>c?c:_____1_____)”,當a>c時取值c,所以ac)?”是對a、c的比較選擇,第三空處的“(b>c)?c”根據(jù)b、c的判斷,題目已經(jīng)給出了c,所以這里應該是a。第三空:第三空中對于b、c的判斷選擇缺少b,所以這里填“b”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:首先將大寫字母轉換為對應小寫字母;若小寫字母為a~u,則將其轉換為其后的第5個字母;若小寫字母為v~z,使其值減21。轉換后的小寫字母作為函數(shù)值返回。例如,若形參是字母A,則轉換為小寫字母f;若形參是字母W,則轉換為小寫字母b。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!#include#includecharfun(charc){if(c>=’A’&&c<=’Z’)/*************found*************/C=C+32;if(c>=’a’&&c<=’u’)/*************found*************/c=c一5;elseif(c>=’v’&&c<=’z’}c=c-21;returnc;}main(){charc1,c2;printf("\nEnteraletter(A—Z):");c1=getchar();if(isupper(c1)){c2=fun(c1);printf(”\n\nTheletter\’%c\’changeto\’%c\’\n",c1,c2);}elseprintf("\nEnter(A—Z)!\n");}標準答案:(1)c=c+32;(2)c=c+5;知識點解析:函數(shù)的功能是將某些大寫字母轉換為對應小寫字母之后的第五個字母。(1)第一個標識下“C=C+32;”中變量C沒有定義,編譯時會提示出錯。根據(jù)題意,這行語句的作用是將大寫字母轉換為小寫字母,C語句中大寫字母轉換為對應的小寫字母是對原有ASCII碼加32,小寫轉換為大寫是減32,所以應將“C=C+32;”改為“c=c+32;”。(2)第二個標識下是將小寫字母轉換為其后的第五個字母,字母在a~u之間只加上5就可以了,原題中減5則是將字母轉換到該字母之前的第五個字母,所以第二個標識下“c=c-5:”改為“c=c+5:”。三、程序設計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是:計算并輸出例如,在主函數(shù)中從鍵盤給n輸入20后,輸出為:s=534.188884。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#inoludedoublefun(intn){}main(){intn;doubles;printf("\n\nInputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();}NONO(){/*請在此函數(shù)內打開文件,輸入測試數(shù)據(jù),調用fun函數(shù),輸出數(shù)據(jù),關閉文件。*/FILE*rf,*wf;intn.i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintfcwf,"%lf\n",s);}fclose(rf);fclose(wf);}標準答案:inti;doublefac:1.0;doublesum=1.0;for(i=2;i<=n;i++){fac+=sqrt(i);sum+=fac;}returnsum;知識點解析:該程序功能是對題干中給出的多項式的求解。根據(jù)題干中給出的數(shù)列,首先推出每一項的表達式,然后再對多項式進行累加求和。國家二級C語言機試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、人員的記錄由編號和出生年、月、日組成,N名人員的數(shù)據(jù)已在主函數(shù)中存入結構體數(shù)組std中。函數(shù)fun的功能是:找出指定出生年份的人員,將其數(shù)據(jù)放在形參k所指的數(shù)組中,由主函數(shù)輸出,同時由函數(shù)值返回滿足指定條件的人數(shù)。請在程序的下劃線處填入正確的內容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結構!#include#defineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i標準答案:(1)std[i].year(2)std[i](3)n知識點解析:第一空:比較結構體的出生年份是否等于year,std是結構體指針,指向結構體數(shù)組的首地址,因此訪問一個結構體的year成員是std[i].year,因此第一空處應為“if(std[i].year==year)”。第二空:這里是將找到的數(shù)據(jù)放在形參k所指的數(shù)組中,k是指針變量,k指向結構體數(shù)組的首地址,std[i]是結構體的地址,因此等號左邊也應該是地址,故第二空處應為“k[n++]=std[i];”。第三空:fun函數(shù)的返回值是滿足指定條件的人數(shù)n,故第三空處是“returnfn);”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODIl.C中函數(shù)fun的功能是:為一個偶數(shù)尋找兩個素數(shù),這兩個素數(shù)之和等于該偶數(shù),并將這兩個素數(shù)通過形參指針傳回主函數(shù)。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!#include#includevoidfun(inta,int*b,int*c){inti,j,d,y;for(i=3;i<=a/2;i=i+2){/*************found*************/Y=1;for(j=2;j<=sqrt((double)i);j++)if(i%j==0)y=0;if(y==1){/*************found*************/d==a—i;for(j=2;j<=sqrt((double)d);j++)if(d%j==0)y=0;if(y==1){*b=i;*c=d;}}}}main(){inta,b,c;do{printf("\nInputa:");scanf("%d",&a);}while(a%2);fun(a,&b,&c);printf("\n\n%d=%d+%d\n",a,b,c};}標準答案:(1)y=1;(2)d=a-i;知識點解析:(1)第一標識下“Y=1:”變量Y沒有定義,編譯時會提示出錯。題中用標志y區(qū)別i是否是素數(shù),y=1是素數(shù),y=0不是素數(shù)。第一個標識下當i是素數(shù)時,y最后的值就是進入循環(huán)結構前的初始化值0,標識該值不是素數(shù),所以“Y=1;”應該改為“y=1;”。(2)在語句“if(y==1)”中,應該是判斷(a-i)是否是素數(shù),即d應賦值“a-i”而不是“d==a-i;”,所以第二個標識下“d==a-i;”改為“d=a-i;”。三、程序設計題(本題共1題,每題1.0分,共1分。)3、已知學生的記錄由學號和學習成績構成,N名學生的數(shù)據(jù)已存入a結構體數(shù)組中。請編寫函數(shù)fun,函數(shù)的功能是:找出成績最低的學生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數(shù)main和其他函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#inolude#inolude#defitieN10typedefStruerss{charnum[10];ints;}STU;voidfun(STUa[],STU*s){}main(){STUa[N]={{"A01",81),{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;voidNONO();printf("*****Theoriginaldata*****\n");for(i=0;i標準答案:inti,min=a[0].s,j=0;for(i=1;ia[i].s){/*如果最低分min仍大于當前分*/j=i;/*記住位置*/min=a[i].s;/*把當前分賦值給min*/}*s=a[j];知識點解析:(1)首先指定第一個成績?yōu)樽畹头謹?shù)。(2)再使用一個for循環(huán)把所有的成績進行比較,找出最低的分數(shù)來。國家二級C語言機試(操作題)模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:把形參a所指數(shù)組中的最大值放在a[0]中,

溫馨提示

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

評論

0/150

提交評論