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

下載本文檔

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

文檔簡介

國家二級C語言機試(操作題)模擬試卷11(共9套)(共27題)國家二級C語言機試(操作題)模擬試卷第1套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:把形參S所指字符串中下標為奇數(shù)的字符右移到下一個奇數(shù)位置,最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,下標為偶數(shù)的字符不動(注:字符串的長度大于等于2)。例如,形參S所指的字符串為:abcdefgh,執(zhí)行結(jié)果為:ahcbedgf。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#inoludevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=’\0’;i++)n++;/**********found**********/if(n%2==0)k=n—____1____;elsek=n一2;/**********found**********/c=____2____;for(i=k一2;i>=1;i=i一2)s[i+2]=s[i];/**********found**********/s[1]=____3____;}main(){chars[80]="abodefgh";printf("\nTheoriginalStringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}標準答案:(1)1(2)s[k](3)c知識點解析:第一空:“for(i=0;s[i]!=’\0’;i++)n++;”n記錄了數(shù)組s的長度,“if(n%2==0)”如果長度n是偶數(shù),那么最右邊被移出的字符的下標是在n-1,如果n是奇數(shù),那么最右邊被移出的字符的下標是n-2,因此第一空處應為“1”。第二空:題目要求最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,因此最右邊被移出的字符是s[k],在s[k]被替換之前必須先把s[k]保存在其他變量中,故第二空處應為“s[k]”,將s[k]保存在c中。第三空:此處是把最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,最右邊被移出字符保存在c,第一奇數(shù)位置是s[1],故第三處應為“c”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODIl.C中函數(shù)fun的功能是:對N名學生的學習成績,按從高到低的順序找出前m(m≤10)名學生來,并將這些學生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include{}include#defineN10typedefstructss{charhum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/**********found**********/t=(STU*)calloc(sizeof(STU),m)for(i=0;ib[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;i10){print~("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);}porder=fun(a,m);printf("*****THERESULT*****\n");printf("Thetop:\n");for(i=0;i標準答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)t[k]=b[j];知識點解析:(1)題干中要求結(jié)構(gòu)體STU類型的m個學生放在動態(tài)分配的連續(xù)存儲區(qū)中,“t=STU*)calloc(sizeof(STU),m)”語句沒有使用分號“;”結(jié)束,因此需要在語句結(jié)尾處加分號。calloc函數(shù)是C語言的動態(tài)分配函數(shù),分配存儲空間。(2)第二個標識下是將b數(shù)組拷貝到t數(shù)組,在C語言中,數(shù)組元素的訪問使用中括號“[]”而不是元括弧“()”,因此第二標識下應改成“t[k]=b[j];”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,其功能是:計算并輸出下列多項式的值:例如,在主函數(shù)中從鍵盤給n輸入50后,輸出為:s=1.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includedoublefun(intn){}NONO(){/*清在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/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);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){intn;doubles;printf("\nTnputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();}標準答案:doubles=0,t=1;inti;for(i=1;i<=n;i++){t*=i;s+=1./t;}returns;知識點解析:(1)根據(jù)題干中給出的數(shù)列,推出每一項分母是在前一項分母的基礎(chǔ)上乘當前項數(shù),第n項的項數(shù)為n。(2)在循環(huán)中求得每一項,然后對其進行累加求和。國家二級C語言機試(操作題)模擬試卷第2套一、程序填空題(本題共1題,每題1.0分,共1分。)1、下列給定程序中,函數(shù)fun的功能是:計算N×N矩陣的主對角線元素和反向?qū)蔷€元素之和,并作為函數(shù)值返回。要求先累加主對角線元素中的值,再累加反向?qū)蔷€元素中的值。例如,若N=3,有下列矩陣:123456789首先累加1、5、9,然后累加3、5、7,函數(shù)返回值為30。請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<stdio.h>2#defineN43fun(intt[][N],intn)4{5inti,sum;6/*********found*********/7【1】;8for(i=0;i<n;i++)9/*********found*********/10sum+=【2】;11for(i=0;i<n;i++)12/*********found*********/13sum+=t[i][n-i-【3】];14returnsum;15}16main()17{18inti,j,t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10};19printf("\nTheoriginaldata:\n’’);20for(i=0;i<N;i++)21{22for(j=0;j<N;j++)23printf(’’%4df’’,t[i][j]);24printf(’’\n’’);25}26printf(’’Theresultis:%d’’,fun(t,N));27}標準答案:(1)sum=0(2)t[i][i](3)1知識點解析:填空1:變量sum用來儲存“和”結(jié)果,所以將其初始化為0。填空2:從題目中可以了解到,主對角線元素的行和列下標是相同的,所以應填入t[i][i]。填空3:對于反向?qū)蔷€元素的行和列的下標,它們的關(guān)系是相加和為n-1,所以應填入1。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:根據(jù)形參m的值(2≤m≤9),在m行m列的二維數(shù)組中存放如下所示規(guī)律的數(shù)據(jù),由main函數(shù)輸出。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1#include<conio.h>2#include<stdio.h>3#defineM104inta[M][M]={0};5/*********found*********/6voidfun(int**a,intm)7{intj,k;8for(j=0;j<m;j++)9for(k=0;k<m;k++)10/*********found*********/11a[j][k]=k*j;12}13main()14{inti,j,n;15printf(’’Entern:’’);16scarlf(’’%d’’,&n);17fun(a,n);18for(i=0;i<n;i++)19{for(j=0;j<n;j++)20printf(’’%4d’’,a[i][j]);21printf(’’\n’’);22}23}標準答案:(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);知識點解析:(1)在函數(shù)體fun中可知,a是一個二維整型數(shù)組變量,設(shè)置實參時,用**a表示是錯誤的,所以應改為voidfun(inta[][M],intm)。(2)根據(jù)輸出的結(jié)果可知,應改為a[j][k]=(k+1)水(j+1);。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun,其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數(shù)組中,n中存放指定的下標。例如,輸入一個字符串“World”,然后輸入3,則調(diào)用該函數(shù)后的結(jié)果為“Word”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:1#include<stdlib.h>2#include<stdio.h>3#include<conio.h>4#defineLEN205voidfun(chara[],charb[],intn)6{78}9voidmain()、10{11charstr1[LEN],str2[LEN];12intn;13system(’’CLS’’);14printf("Enterthestring:\n’’);15gets(str1);16printf(’’Enterthepositionofthestringdeleted:’’);17scanf(’’%d’’,&n);18fun(str1,str2,n);19printf("Thenewstringis:%s\n’’,str2);20}標準答案:1voidfun(chara[],charb[],intn)2{3inti,k=0;4for(i=0;a[i]!=’\0’;i++)5if(i!=n)/*將不是指定下標的字符存入數(shù)組b中*/6b[k++]=a[i];7b[k]=’\0’;/*在字符串最后加上結(jié)束標識*/8}知識點解析:本題要求刪除字符串中指定下標的字符,即把非指定下標的字符保留,所以if語句條件表達式的內(nèi)容是if(i!=n)。字符串最后不要忘記加上字符串結(jié)束標識’\0’。國家二級C語言機試(操作題)模擬試卷第3套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中,刪除所有串長超過k的字符串,函數(shù)返回所剩字符串的個數(shù)。ss所指字符串數(shù)組中共有N個字符串,且串長小于M。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/**********found**********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/**********found**********/if(len<=【2】)/**********found**********/strcpy(ss[j++],【3】);}returnj;}main(){charx[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i標準答案:(1)N(2)k(3)ss[i]知識點解析:第一空:“for(i=0;i<【1】;i++)”,這一空部分出現(xiàn)在fun函數(shù)中的for循環(huán)條件中,在定義了i之后i的條件。根據(jù)for后面的語句我們可以看出,這里是要進行比較,比較對象是ss所指字符串數(shù)組的所有字符串,所以這里循環(huán)要進行整改字符串數(shù)組的長度,相應的,這里for循環(huán)的循環(huán)條件就要是i小于字符串長度,而字符串長度開始就有定義,為N,所以這里應該是i二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODIl.C中函數(shù)fun的功能是:逐個比較p、q所指兩個字符串對應位置中的字符,把ASCII值大或相等的字符依次存放到c所指數(shù)組中,形成一個新的字符串。例如,若主函數(shù)中a字符串為:aBCDeFgH,主函數(shù)中b字符串為:ABcd,則C中的字符串應為:aBcdeFgH。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#includevoidfun(char*p,char*q,char*c){/**********found**********/intk=1;/**********found**********/while(*p!=*q){if(*p<*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;}}main(){chara[10]="aBCDeFgH",b[10]="ABcd",c[80]={’\0’};fun(a,b,C);printf("Thestringa:");puts(a);printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}標準答案:(1)intk=1改為intk=0;(2)(*p!=*q)改為(*p‖*q);知識點解析:(1)第一個錯誤在fun函數(shù)最開始定義的k的初始值。根據(jù)fun函數(shù)的功能我們可以知道這里k是新字符串c各字符的位置,然后根據(jù)比較結(jié)果一一對應新字符串個位置的字符。這里犯了一個明顯的錯誤就是:從字符串的第一個字符比較,得到的第一個字符在字符串中的位置不是c[1]而是c[0],所以k的初始值不是1,而是0。所以這里第一個改錯是將1改為0。第二個錯誤在while循環(huán)的條件表達式,我們要知道的是while循環(huán)條件和if循環(huán)條件的區(qū)別。if的條件為開始條件,即符合這條件開始循環(huán),而這里while的循環(huán)條件則是為終止條件,意思是下面括號內(nèi)的循環(huán)進行到不符合while條件語句時終止,所以這里很明顯錯誤,如果是這種條件的只要兩個字符串中出現(xiàn)相同的字符即終止,以例子來說就是到第二個字符比較久終止,很明顯不符合題意。所以為了完全比較這兩個字符串,給出的終止條件應該是到兩個字符串都結(jié)束,即兩個字符串字符都為“’\0’”時終止,所以終止條件應該為“*p‖*q”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:除了字符串前導的*號之外,將串中其它“*”號全部刪除。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。函數(shù)fun中給出的語句僅供參考。例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后字符串中的內(nèi)容應當是:****ABCDEFG。注意:部分源程序在文件PROG1.C文件中。請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includevoidfun(char*a){/*以下代碼僅供參考*/inti=0,k;while(a[i]==’*’)i++;k=i;while(a[i]!=’\0’)/*以下程序段實現(xiàn)非*字符前移*/{}a[k]=’\0’;}main(){chars[81];voidNONO();printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO()(/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*in,*out;inti;chars[81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%S",s);fun(s);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}標準答案:voidfun(char*a){inti=0,k;while(a[i]==’*’)i++;k=i;while(a[i]!=’\0’){if(a[i]!=’*’)a[k++]=a[i];i++;}a[k]=’\0’;}知識點解析:本題主函數(shù)中需要輸入一個字符串,然后進入fun函數(shù)處理字符串,在fun函數(shù)中,就要實現(xiàn)題目要求我們寫出的功能了。首先是判斷字符串的開始是否為“*”,這里就用到while函數(shù)(這里因為有步驟的區(qū)別,所以這里用while比用if好),判斷開始的字符是否為“*”,見程序第5~6行,這里需要順次進行,因為開始無論有多少個“*”都不用刪除,當出現(xiàn)字母時,就開始下一步了,因為已經(jīng)出現(xiàn)了字母,所以后面出現(xiàn)的“*”一律刪除,而字母時不用管的,所以這里就又需要if條件語句來判斷是否為“*”然后賦值為空,見程序第9~12行,當程序進行到字符為空時代表字符串結(jié)束,程序就終止,這里就要用到while條件語句進行終止判斷,見程序第7行。這樣循環(huán)進行就能保留字符串前面的“*”并且刪除后面出現(xiàn)的所有“*”了,然后fun函數(shù)執(zhí)行完成就可以轉(zhuǎn)到主函數(shù)中進行新字符串的輸出了。國家二級C語言機試(操作題)模擬試卷第4套一、程序填空題(本題共1題,每題1.0分,共1分。)1、函數(shù)fun的功能是:從三個形參a,b,C中找出中間的那個數(shù),作為函數(shù)值返回。例如,當a=3,b=5,c=4時,中數(shù)為4。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#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知識點解析:第一空:語句“(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,二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODIl.C中fun函數(shù)的功能是:求出以下分數(shù)序列的前n項之和。和值通過函數(shù)值返回main函數(shù)。例如,若n=5,則應輸出:8.391667。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/*************found*************,/fun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b,i/*************found*************/c=a,ia+=b;b+=c;}return(s);}main(){intn=5;printf("\nThevalueoffunctionis:%1f\n",fun(n));}標準答案:(1)doublefun(intn)(2)c=a;a+=b;b=c;知識點解析:(1)fun函數(shù)中的語句“doubles=0.0;”以及“return(s);”說明fun函數(shù)具有double返回值,所以應將“fun(intn)”改為“doublefun(intn)”。(2)根據(jù)題干中給出的公式可以推出每一項的特點,知道每一項的b值是前一項的c值,所以第二個標識下“b+=c;”改為“b=c;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,它的功能是:求出1到1000之間能被7或11整除、但不能同時被7和11整除的所有整數(shù)并將它們放在a所指的數(shù)組中,通過n返回這些數(shù)的個數(shù)。注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#includevoidfun(int*a,int*n){}main(){intaa[1000],n,k;voidNONO();fun(aa,&n);for(k=0;k標準答案:inti;*n=0;for(i=7;i<1000;i++)if(((i%7)==0||(i%11)==0)&&(i%77)!=0)a[(*n)++]=i;知識點解析:進入fun函數(shù),根據(jù)前面的分析:首先,*n置0,設(shè)置為累計器,計算符合條件的數(shù)的個數(shù)。然后,通過循環(huán),判斷小于1000的每一個整數(shù)是否符合題干中的要求。其中的判斷條件能否被7或者被11整除為i%7==0‖i%11==0,不能被11和7同時整除為i%77!=0,它們之間的并關(guān)系就用&&連接,最后結(jié)果即為(i%7==0‖i%11==0)&&i%77!=0。最后,將符合條件的整數(shù)存入數(shù)組a中,同時對*n進行自加,返回結(jié)果。國家二級C語言機試(操作題)模擬試卷第5套一、程序填空題(本題共1題,每題1.0分,共1分。)1、使用VC++2010打開考生文件夾下blank1中的解決方案。此解決方案的項目中包含一個源程序文件blank1.c。在此程序中,通過定義學生結(jié)構(gòu)體變量,存儲學生的學號、姓名和三門課的成績。函數(shù)fun的功能是:將形參a中的數(shù)據(jù)進行修改,把修改后的數(shù)據(jù)作為函數(shù)值返回主函數(shù)進行輸出。例如,若傳給形參a的數(shù)據(jù)中學號、姓名和三門課的成績依次是:10001、“ZhangSan”、95、80、88,修改后的數(shù)據(jù)應為:10002、“LiSi”、96、81、89。請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>structsLudent{longsno;charname[10],float:score[3];};/*********found*********/【1】fun(structstudent;a){inti;a.sno=10002;/*********found*********/stropy【2】,"Lisi"),/*********found*********/for(i=0;i<3,i++)【3】+=1;returna;}main(){structstudents={10001,"ZhangSan",95,80,88),t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%idName:%s\nscores:",s.silo,s.name);for(i=0,i<3;i++)printf("%6.2f",s.score[i]);printf("\n");t=fun(s);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nscores:",t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}標準答案:(1)structstudent(2)a.name(3)a.score[i]知識點解析:填空1:函數(shù)定義時,類型標識符指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返回值的類型。本題中,用結(jié)構(gòu)類型定義函數(shù)類型。填空2和填空3:此處考查結(jié)構(gòu)體變量成員的表示方法,a.name和a.score[i]分別表示學生的姓名和成績。二、程序修改題(本題共1題,每題1.0分,共1分。)2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:判斷輸入的任何一個正整數(shù)n,是否等于某個連續(xù)正整數(shù)序列之和。若是,則輸出所有可能的序列,否則輸出“不能分解”。例如:當輸入100時,輸出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=1;b<=n/2;b++){/*********found*********/n=m;c=b;while(m!=0&&m>=c){/*********found*********/m=m-c;c++}/*********found*********/if(m!=0){printf("%d=",n);for(j=b;j<c-1;j++)printf("%d+",j);printf("%d\n",j);flag=1;}}if(flag=0)printf("不能分解\n");}main(){intn;printf("請輸入一個整數(shù):");scarlf("%d",&n);fun(n);}標準答案:(1)m=n;(2)m=m-c;c++;(3)if(m==0)知識點解析:(1)每次循環(huán),程序需要對n執(zhí)行減去連續(xù)的正整數(shù)序列來判斷n是否剛好為0,即n是否是連續(xù)的正整數(shù)序列之和,所以需要使用臨時變量m寄存n的值,每次循環(huán)對m執(zhí)行減運算操作,不滿足繼續(xù)下一輪。另外,程序聲明變量m時,未初始化它的值,所以此處應該修改為:m=n。(2)語法錯誤。C語言中每個語句必須以分號結(jié)束,所以應修改為:m=m-c;c++;。(3)題目判斷n是否是連續(xù)的正整數(shù)序列之和,若是,則輸出所有序列,程序中m依次減去連續(xù)的正整數(shù),當m為0時,表示m(即n)滿足條件,再輸出當前序列中的每個正整數(shù),所以此處判斷條件反了,應修改為:if(m==0)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、使用VC++2010打開考生文件夾下prog1中的解決方案。此解決方案的項目中包含一個源程序文件prog1.c。在此程序中,編寫函數(shù)fun,其功能是:根據(jù)以下公式求P的值,結(jié)果由函數(shù)值帶回。m與n為兩個正整數(shù)且要求m>n。例如:m=12,n=8時,運行結(jié)果為495.000000。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#iticlude<stdio.h>floatfun(intm,intn){}main()/*主函數(shù)*/{voidNONO();printf("p=%f\n",fun(12,8));NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,m,n;floats;fp=fopen("in.ctat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d,%d",&m,&n);s=fun(m,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}標準答案:floatfun(intm,intn){floatp1=1,p2=1,p3=1;inti;for(i=1;i<=m;i++)p1*=i;for(i=1;i<=n;i++)p2*=i;for(i=1;i<=(m-n);i++)p3*=i;returnp1/(p2*p3);}知識點解析:本題考查循環(huán)的使用。通過三個for循環(huán)分別計算階乘。其中p1=m!,p2=n!,p3=(m-n)!。國家二級C語言機試(操作題)模擬試卷第6套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:找出形參s所指字符串中出現(xiàn)頻率最高的字母(不區(qū)分大小寫),并統(tǒng)計出其出現(xiàn)的次數(shù)。例如,形參s所指的字符串為:abcAbsmaxless,程序執(zhí)行后的輸出結(jié)果為:letter’a’:3timesletter’s’:3times請在程序的下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序在文件BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include#include#includevoidfun(char,lcS){intk[26]=f0),n,i,max=0;charch;while(*s){if(isalpha(*s)){/*********found*********/ch=tolower(【1】);n=ch一’a’;/*********found*********/k[n]+=【2】;}s++;/*********found*********/if(max<k[n])max=M;)printf("\nAftercount:\n");for(i=0;i<26;i++)if(k[i]==max)printf("\nletter\’%c\’:%dtimes\n",i+’a’,k[i]);}main(){chars[81];printf("\nEnterastring:\n\n");gets(s);fun(s);}標準答案:(1)*s(2)1(3)k[n]知識點解析:本題統(tǒng)計字符串中各字母的個數(shù),建立了一個包括26個整型變量的數(shù)組,用來存儲每個字母的個數(shù)。填空1:isalpha函數(shù)的作用是判斷當前字符是否為字母,tolower函數(shù)的作用是將當前字母轉(zhuǎn)換為小寫字母,所以應填*s。填空2:把該字母出現(xiàn)的個數(shù)累加到指定的數(shù)組中,所以應填1。填空3:max用來記錄出現(xiàn)次數(shù)最高的字母的出現(xiàn)次數(shù),如果當前該字母出現(xiàn)次數(shù)大于最大次數(shù)max,那么把該次數(shù)賦值給max,所以應填k[n]。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列程序中,函數(shù)fun的功能是:按順序給s所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序?qū)γ?個元素求一個平均值,并將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個數(shù)不是5的倍數(shù),則多余部分忽略不計。例如,s所指數(shù)組有14個元素,則只對前10個元素進行處理,不對最后的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++;}}returrlk;}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");}標準答案:(1)sum:0.0;(2)if((i+1)%5==0)知識點解析:(1)變量sum書寫錯誤。(2)循環(huán)條件if(i+1%5==0)是一個運算邏輯錯誤,應先計算j+1,再對5求余。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、請編寫函數(shù)fun,該函數(shù)的功能是:求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。例如,若二維數(shù)組中的值為:13579299946999813570則函數(shù)值為61。注意:部分源程序在文件PROG1.C中。請勿改主動函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:1#include<conio.h>2#include<stdio.h>3#include<stdlib.h>4#defineM45#defineN56intfun(inta[M][N])7{89}10voidmain()11{12FILE*wf;13intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{:6,9,9,9,8),{1,3,5,7,0}};14inti,j,y;15system(”CLS,”);16printf("Theoriginaldatais:\n");17for(i=0;i標準答案:intfun(inta[M][N]){inti,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)if(i==0‖i==M—1‖j==0‖j==N—1)/*只要下標中有一個為0或M一1或N一1,則它一定是周邊元素*/sum=sum+a[i][j];/*將周邊元素相加*/returnsum;}知識點解析:本題采用逐一判斷的方式。二維數(shù)組周邊元素的規(guī)律是,其兩個下標值中一定有一個是0或M—1或N一1。程序中循環(huán)語句用來控制數(shù)組的行和列,條件語句用來判斷數(shù)組元素是否為周邊元素。國家二級C語言機試(操作題)模擬試卷第7套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。請在程序的下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inclucte<stdio.h>voidfun(char*s,inta,doublef){/*********found*********/【1】fp;charch;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);fclose(fp);fp=fopen("filel.txt","r");printf("\nTheresult:\n\n");ch=fgetc(fp);/*********found*********/while(!feof(【2】)){/*********found*********/putchar(【3】);ch=fgetc(fp);)putchar(’\n’);fclose(fP);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}標準答案:(1)FILE*(2)fp(3)ch知識點解析:填空1:由語句fopen("filel.txt","r")可知,fp應該是文件類型指針,因此本空應該填寫FILE*。填空2:feof函數(shù)只能對文件類型數(shù)據(jù)進行操作,因此本空應填寫fp。填空3:putchar()代表輸入一個字符,從ch=fgetc(fp)可以看出本題應該填寫ch。二、程序修改題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:從P所指字符串中找出ASCII碼值最大的字符,將其放在第一個位置上,并將該字符前的原字符向后順序移動。例如,調(diào)用fun函數(shù)之前給字符串輸入“ABCDeFGH”,調(diào)用后字符串中的內(nèi)容應為“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");}標準答案:(1)q=p+i;(2)while(q>p)知識點解析:解答本題需要三個步驟,首先找到字符串中ASCII碼值最大的字符并保存;然后將該字符復制,并將該字符前面的字符串順次后移;最后將ASCII碼值最大的字符賦給字符串的第一個字符。要找到ASCII碼值最大的字符可以通過定義一個字符變量max,該字符變量初始時等于字符串的第一個字符,若字符串的下一個字符大于max,則將下一個字符賦給max,如此循環(huán)到字符尾,即可得到ASCII碼值最大的字符,同時令指針q指向最大字符。此后對最大字符前面的子串順次后移,可采用while語句實現(xiàn)。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、已知學生的記錄由學號和學習成績構(gòu)成,N名學生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請編寫函數(shù)fun,該函數(shù)的功能是:找出成績最低的學生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最低分)。已給出函數(shù)的首部,請完成該函數(shù)。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:1#include<stdio.h>2#include<string.h>3#include<conio.h>4#inclucle<stdlib.h>5#defineN106typedefstructss7{charnum[10];8ints;9}STU;10fun(STUa[],STU*S)11{1213}14voidmain()15{16FILE*wf;17STUa[N]={("A01",81},{"A02",89),{"A03",66},{"A04",87),{"A05",77),{"A06",90},{"A07",79),{"A08",61),{"A09",80},{"A10",71}},m;18inti;19system("CLS");20printf("*****Theoriginaldata*****\n");21for(i=0;i<N;i++)22printf("No=%SMark=%d\n",a[i].num,a[i].s);23fun(a,&m);24printf("****THERESULT****\n");25printf(“Thelowest:%S,%d\n",m.num,m.s);26/******************/27wf=fopen("out.dat","W");28fprintf(wf,"%s,%d",m.num,m.s);29fclose(wf);30/******************/}標準答案:fun(STUa[],STU*s){inti;*s=a[0];/*先認為第1個值最小*/for(i=0;i<N;i++)/*如果在循環(huán)的過程中再發(fā)現(xiàn)比第1個值更小的則賦給*s*/if(s->s>a[i].s)*s=a[i];}知識點解析:找出結(jié)構(gòu)體數(shù)組元素中的最小值。先認為第1個值最小,即*s=a[0];,如果在循環(huán)的過程中發(fā)現(xiàn)比第1個值更小的,就將指針s指向該元素,直到找到最小元素。另外,本題還涉及結(jié)構(gòu)體中的指向運算符。國家二級C語言機試(操作題)模擬試卷第8套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數(shù)fun的功能是:有N×N矩陣,將矩陣的外圍元素順時針旋轉(zhuǎn)。操作順序是:首先將第一行元素的值存入臨時數(shù)組r,然后使第一列成為第一行,最后一行成為第一列,最后一列成為最后一行,臨時數(shù)組中的元素成為最后一列。例如,若N=3,有下列矩陣:123計算結(jié)果為741456852789963請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#defineN4voidfun(int(*t)[N]){intj,r[N];for(j=0;j=0;【2】)t[N-l][N-l-j]=t[j][N-l];for(j=N-l;j>=0;j--)/*********found**********/t[j][N-l]=r[【3】];}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("\nTheoriginalarray:\n");for(i=0;i標準答案:(1)0(2)j--(3)j知識點解析:第一空:由審題分析可知,此處是使第一列成為第一行,即把第一列元素移動到第一行,第一列元素是“t[j][0]”,第一行元素是“t[0][N-j-1]”,故第一空處應為“0”。第二空:第四個循環(huán)是最后一列成為最后一行,即將最后一列移動到最后一行,“for(j=N-1;j>=0;【2】)”循環(huán)變量j從N-1開始,到0結(jié)束,共循環(huán)N次,故j每次減1,第三空處是“j--”。第三空:最后一個循環(huán)將臨時數(shù)組中的元素成為最后1列,即“t[j][N-1]=r[j]”,故第三空處應為“j”。二、程序修改題(本題共1題,每題1.0分,共1分。)2、給定程序MODI1.C中函數(shù)fun的功能是:計算S=f(一n)+f(一n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。例如,當13為5時,函數(shù)值應為:10.407143。f(x)函數(shù)定義如下:請改正程序中的錯誤,使程序能輸出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include/************found************/f(doublex){if(x==0.0||x==2.0)return0.0;elseif(x<0.0)return(x-l)/(x-2);elsereturn(x+1)/(x-2);}doublefun(intn){inti;doubles=0.0,y;for(i=-n;ion;i++){y=f(1.0*i);s+=y;}/************found************/returns}main(){printf("%f\n",fun(5));}標準答案:(1)doublef(doublex)(2)returns;知識點解析:(1)第一個標識下f函數(shù)的定義缺少返回值類型,所以,將“f(doublex)”改為“doublef(doublex)”。(2)第二個標識下返回語句沒有分號結(jié)束。所以,第二個標識下“returns”應該改為“returns;”。三、程序設(shè)計題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun,它的功能是計算:s=s作為函數(shù)值返回。在C語言中可調(diào)用log(n)函數(shù)求In(n)。log函數(shù)的引用說明是:doublelog(doublex)。例如,若m的值為:20,fun函數(shù)值為:6.506583。注意:部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。#include#includedoublefun(intm){}main(){voidNONO();printf("%f\n",fun(20));NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}標準答案:doubles=0.0;inti;for(i=1;i<=m;i++)s+=log(1.0*i);s=sqrt(s);returns;知識點解析:(1)調(diào)用log(n)函數(shù)求ln(n)。(2)對調(diào)用log(n)進行累加求和,求得根號里的內(nèi)容。(3)最后調(diào)用C語言的庫函數(shù)sqrt計算(2)中求得值的平方根。國家二級C語言機試(操作題)模擬試卷第9套一、程序填空題(本題共1題,每題1.0分,共1分。)1、給定程序中已建立一個帶有頭結(jié)點的單向鏈表,鏈表中的各結(jié)點按數(shù)據(jù)域遞增有序鏈接。函數(shù)fun的功能是:刪除鏈表中數(shù)據(jù)域值相同的結(jié)點,使之只保留一個。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存放在考生文件夾下的BLANKl.C中。不得增行或刪行,也不得更改程

溫馨提示

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

最新文檔

評論

0/150

提交評論