![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
全國(guó)計(jì)算機(jī)二級(jí)C題庫(kù)第91--100套 |
本題目如果下載后發(fā)現(xiàn)有錯(cuò)誤的地方,請(qǐng)聯(lián)系網(wǎng)站管理員:QQ121431055
考試時(shí),上機(jī)操作題目有三套,基本操作題、簡(jiǎn)單應(yīng)用題、綜合應(yīng)用題
第91套: 函數(shù)fun的功能是:計(jì)算 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include double fun(double x) { double f, t; int n; /**********found**********/ f = 1.0+___1___; t = x; n = 1; do { n++; /**********found**********/ t *= x/___2___; /**********found**********/ f += ___3___; } while (fabs(t) >= 1e-6); return f; } main() { double x, y; x=2.5; y = fun(x); printf("\nThe result is :\n"); printf("x=% } 解題思路: 第一處:根據(jù)公式可知,此處應(yīng)填:x。 第二處:根據(jù)公式可知,此處應(yīng)該除以n,所以應(yīng)填:n。 第三處:計(jì)算的結(jié)果進(jìn)行累加并賦值給變量f,所以應(yīng)填:t。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 計(jì)算n的5次方的值(規(guī)定n的值大于2、 小于8),通過(guò)形參指針傳回主函數(shù);并計(jì)算該值的個(gè)位、十位、百位上數(shù)字之和 作為函數(shù)值返回。 例如,7的5次方是16807, 其低3位數(shù)的和值是15。 請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include int fun( int n ,int *value ) { int d,s,i; /**************found**************/ d=0; s=0; for(i=1; i<=5; i++) d=d*n; *value=d; for(i=1; i<=3; i++) { s=s+d; /**************found**************/ d=d\10; } return s; } main() { int n, sum, v; do { printf("\nEnter n( 2 while(n<=2||n>=8); sum=fun( n,&v ); printf("\n\nThe result:\n value=%d sum=%d\n\n",v,sum); } 解題思路: 第一處:變量d的初始值應(yīng)為1。 第二處:整除的符號(hào)是/。 *************************************************** 請(qǐng)編寫函數(shù)fun, 其功能是: 計(jì)算并輸出給定數(shù)組(長(zhǎng)度為9)中每相鄰兩個(gè)元 素之平均值的平方根之和。 例如, 給定數(shù)組中的9個(gè)元素依次為12.0、34.0、4.0、23.0、34.0、45.0、 18.0、3.0、11.0, 輸出應(yīng)為: s=35.951014。 注意:部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。
給定源程序: #include #include double fun(double x[9]) { } main() { double s,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0}; int i; printf("\nThe original data is :\n"); for(i=0;i<9;i++)printf("% s=fun(a); printf("s=%f\n\n",s); NONO(); } 解題思路: 本題是計(jì)算并輸出給定數(shù)組中每相鄰兩個(gè)元素之平均值的平方根之和。 參考答案: double fun(double x[9]) { int i ; double avg=0.0,sum=0.0; for (i=0;i<8;i++) { avg=(x[i]+x[i+1])/2; sum+=sqrt(avg); } return sum; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第92套: 函數(shù)fun的功能是:計(jì)算 的前n項(xiàng)。若x=2.5,函數(shù)值為:12.182340。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include double fun(double x, int n) { double f, t; int i; f = 1.0; /**********found**********/ t = ___1___; /**********found**********/ for (i=___2___; i { /**********found**********/ t *= x/___3___; f += t; } return f; } main() { double x, y; x=2.5; y = fun(x, 12); printf("\nThe result is :\n"); printf("x=% } 解題思路: 第一處:t是處理公式中每一項(xiàng)中間項(xiàng),所以應(yīng)填:1。 第二處:根據(jù)公式可知,for循環(huán)變量的初始值應(yīng)從1開始。 第三處:每做一次循環(huán)均要除以變量i的值,所以應(yīng)填:i。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 找出100至n(不大于1000)之間三位數(shù) 字相等的所有整數(shù), 把這些整數(shù)放在s所指數(shù)組中, 個(gè)數(shù)作為函數(shù)值返回。 請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 100 int fun(int *s, int n) { int i,j,k,a,b,c; j=0; for(i=100; i /**************found**************/ k=n; a=k; k/=10; b=k; k/=10; /**************found**************/ c=k if( a==b && a==c ) s[j++]=i; } return j; } main() { int a[N], n, num=0, i; do { printf("\nEnter n( <=1000 ) : "); scanf("%d",&n); } while(n > 1000); num = fun( a,n ); printf("\n\nThe result :\n"); for(i=0; i printf("\n\n"); } 解題思路: 第一處:k應(yīng)該取循環(huán)變量i的值,所以應(yīng)改為:k=i;。 第二處:語(yǔ)句后缺少分號(hào)。 *************************************************** 請(qǐng)編寫函數(shù)fun, 其功能是: 計(jì)算并輸出給定10個(gè)數(shù)的方差: 例如,給定的10個(gè)數(shù)為95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、 90.0、56.0,輸出為s=11.730729。 注意:部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include #include double fun(double x[10]) { } main() { double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0}; int i; printf("\nThe original data is :\n"); for(i=0;i<10;i++)printf("% s=fun(x); printf("s=%f\n\n",s); NONO(); } 解題思路: 本題是根據(jù)公式進(jìn)行計(jì)算。 參考答案: double fun(double x[10]) { int i; double avg=0.0, sum=0.0, abs=0.0, fc; for (i=0;i<10;i++) sum+=x[i]; avg=sum/10; /* 計(jì)算平均值 */ for (i=0;i<10;i++) abs+=(x[i]-avg)*(x[i]-avg); fc=sqrt(abs/10) ; return fc; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第93套: 給定程序中已建立一個(gè)帶有頭結(jié)點(diǎn)的單向鏈表,在main函數(shù)中將多次調(diào)用fun 函數(shù),每調(diào)用一次fun函數(shù),輸出鏈表尾部結(jié)點(diǎn)中的數(shù)據(jù),并釋放該結(jié)點(diǎn),使鏈表 縮短。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *p) { SLIST *t, *s; t=p->next; s=p; while(t->next != NULL) { s=t; /**********found**********/ t=t->___1___; } /**********found**********/ printf(" %d ",___2___); s->next=NULL; /**********found**********/ free(___3___); } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } main() { SLIST *head; int a[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf("\nOutput from head:\n"); outlist(head); printf("\nOutput from tail: \n"); while (head->next != NULL){ fun(head); printf("\n\n"); printf("\nOutput from head again :\n"); outlist(head); } } 解題思路: 本題是對(duì)已經(jīng)建立的鏈表,通過(guò)調(diào)用一次函數(shù)就輸出鏈表尾部的數(shù)據(jù)。程序中共有三處要 填上適當(dāng)?shù)膬?nèi)容,使程序能運(yùn)行出正確的結(jié)果。 第一處:由于本題要求輸出鏈表尾部的數(shù)據(jù),函數(shù)是利用while循環(huán)語(yǔ)句找出鏈表尾部的指 針并存入臨時(shí)變量s中,那么每循環(huán)一次就要判斷鏈表是否已結(jié)束位置,如果是,則退出循環(huán), 進(jìn)行輸出,由于是通過(guò)t指針變量進(jìn)行操作的,因此,都要取t的next指針重新賦給t來(lái)實(shí)現(xiàn),所 以本處應(yīng)填next。 第二處:輸出最后一個(gè)結(jié)點(diǎn)的數(shù)據(jù),所以應(yīng)填t->data或(*t).data。 第三處:輸出出最后一個(gè)結(jié)點(diǎn)數(shù)據(jù)后,并把此結(jié)點(diǎn)刪除了,程序要求釋放內(nèi)存,所以應(yīng)填t。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:將字符串中的字符按逆序輸出,但不改 變字符串中的內(nèi)容。 例如,若字符串為abcd,則應(yīng)輸出:dcba。 請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include /************found************/ fun (char a) { if ( *a ) { fun(a+1) ; /************found************/ printf("%c" *a) ; } } main( ) { char s[10]="abcd"; printf("處理前字符串=%s\n處理后字符串=", s); fun(s); printf("\n") ; } 解題思路: 第一處:形參a應(yīng)定義為字符串指針。 第二處:語(yǔ)句中缺少逗號(hào)。 *************************************************** 請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:比較兩個(gè)字符串的長(zhǎng)度,(不得調(diào)用C語(yǔ)言 提供的求字符串長(zhǎng)度的函數(shù)),函數(shù)返回較長(zhǎng)的字符串。若兩個(gè)字符串長(zhǎng)度相同, 則返回第一個(gè)字符串。 例如,輸入beijing 函數(shù)將返回shanghai。 注意: 部分源程序存在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include char *fun ( char *s, char *t) { } main( ) { char a[20],b[20]; printf("Input 1th string:") ; gets( a); printf("Input 2th string:") ; gets( b); printf("%s\n",fun (a, b )); NONO (); } 解題思路: 本題是比較兩個(gè)字符串的長(zhǎng)度并按要求返回字符串。 我們給出的程序是使用for循環(huán)來(lái)判斷兩個(gè)字符串中哪一個(gè)比較長(zhǎng)或相等,循環(huán)的終止值為 兩個(gè)字符串中是否字符串結(jié)束符,如果有,則退出循環(huán)體。接下來(lái)再判斷兩個(gè)字符串是否同時(shí) 出現(xiàn)結(jié)束符,則返回第一個(gè)字符串s,如果不沒有同時(shí)出現(xiàn),則判斷哪一個(gè)字符串先有結(jié)束符, 則按要求返回指定的字符串。 參考答案: char *fun ( char *s, char *t) { int i; char *p=s, *q=t; for(i=0;*p && *q; i++) { p++; q++; } if(*p == 0 && *q == 0) return s ; if(*p) return s ; else return t ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第94套: 函數(shù)fun的功能是:計(jì)算 的前n項(xiàng)之和。若x=2.5,n=15時(shí),函數(shù)值為:1.917914。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include double fun(double x, int n) { double f, t; int i; /**********found**********/ f = ___1___; t = -1; for (i=1; i { /**********found**********/ t *= (___2___)*x/i; /**********found**********/ f += ___3___; } return f; } main() { double x, y; x=2.5; y = fun(x, 15); printf("\nThe result is :\n"); printf("x=% } 解題思路: 第一處:根據(jù)公式可知,變量f的初值為1。 第二處:根據(jù)公式可知,此處是正負(fù)號(hào)的變換,所以應(yīng)填:-1。 第三處:計(jì)算的結(jié)果進(jìn)行累加并賦值給變量f,所以應(yīng)填:t。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是: 從3個(gè)紅球,5個(gè)白球, 6個(gè)黑球中任意 取出8個(gè)作為一組,進(jìn)行輸出。在每組中,可以沒有黑球,但必須要有紅球和白球。 組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應(yīng)該是15。程序中i的值代表紅球數(shù), j的 值代表白球數(shù),k的值代表黑球數(shù)。 請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)! 給定源程序: #include int fun() { int i,j,k,sum=0; printf("\nThe result :\n\n"); /**************found**************/ for(i=0; i<=3; i++) { for(j=1; j<=5; j++) { k=8-i-j; /**************found**************/ if(K>=0 && K<=6) { sum=sum+1; printf("red:M white:M black:M\n",i,j,k); } } } return sum; } main() { int sum; sum=fun(); printf("sum =M\n\n",sum); } 解題思路: 第一處:外for循環(huán)的初始變量i的值應(yīng)為1。 第二處:變量k寫成了大寫K了。 *************************************************** 請(qǐng)編寫函數(shù)fun, 其功能是: 計(jì)算并輸出下列多項(xiàng)式的值: 例如, 在主函數(shù)中從鍵盤給n輸入15, 則輸出為:s=2.718282。 注意: 要求n的值大于1但不大于100。 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include double fun(int n) { } main() { int n; double s; printf("Input n: "); scanf("%d",&n); s=fun(n); printf("s=%f\n",s); NONO(); } 解題思路: 本題是根據(jù)給定的公式計(jì)算結(jié)果。使用for循環(huán)語(yǔ)句依次求出每一項(xiàng)的值,分別進(jìn)行累加并 把結(jié)果存入變量s中,最后把s作為函數(shù)值返回。 參考答案: double fun(int n) { double s=1 ; long t=1; int i; for(i=1; i<=n; i++) { t=t*i; /* 計(jì)算階乘 */ s+=1./t; /* 計(jì)算每項(xiàng)的值并累加至變量s中 */ } return s; /* 返回多項(xiàng)式的值 */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第95套: 給定程序中,函數(shù)fun的功能是:計(jì)算N×N矩陣的主對(duì)角線元素和反向?qū)蔷 元素之和,并作為函數(shù)值返回。注意:要求先累加主對(duì)角線元素中的值,然后累 加反向?qū)蔷元素中的值。例如,若N=3,有下列矩陣: 1 2 3 4 5 6 7 8 9 fun函數(shù)首先累加1、5、9,然后累加3、5、7,函數(shù)的返回值為30。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 4 fun(int t[][N], int n) { int i, sum; /**********found**********/ ___1___; for(i=0; i /**********found**********/ sum+=___2___ ; for(i=0; i /**********found**********/ sum+= t[i][n-i-___3___] ; return sum; } main() { int t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j; printf("\nThe original data:\n"); for(i=0; i { for(j=0; j printf("\n"); } printf("The result is: %d",fun(t,N)); } 解題思路: 第一處:變量sum是用來(lái)存放主對(duì)角線元素和反向?qū)蔷元素之和,要對(duì)其進(jìn)行初始化,所 以應(yīng)填:sum=0。 第二處:對(duì)主對(duì)角線元素值累加,所以應(yīng)填:t[i][i]。 第三處:對(duì)反向?qū)蔷元素值累加,所以應(yīng)填:t[i][n-i-1]。 *************************************************** 例如,若給m輸入 -100,給n輸入90,則函數(shù)求得的一個(gè)根值為2.000。 請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。 給定源程序: #include #include double funx(double x) { return(2*x*x*x-4*x*x+3*x-6); } double fun( double m, double n) { /************found************/ int r; r=(m+n)/2; /************found************/ while(fabs(n-m)<0.001) { if(funx(r)*funx(n)<0) m=r; \TAB else n=r; \TAB r=(m+n)/2; } return r; } main( ) { double m,n, root; printf("Enter m n : \n"); scanf("%lf%lf",&m,&n); root=fun( m,n ); printf("root = % } 解題思路: 第一處:變量r應(yīng)該定義為實(shí)數(shù)型double或浮點(diǎn)型float變量。 第二處:while必須先滿足條件,才做循環(huán)體的內(nèi)容,所以應(yīng)改為:while(fabs(m-n)>0.001)。 *************************************************** 假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是: 除了 字符串前導(dǎo)和尾部的*號(hào)之外,將串中其它*號(hào)全部刪除。形參h已指向字符串中第 一個(gè)字母,形參p已指向字符串中最后一個(gè)字母。在編寫函數(shù)時(shí),不得使用C語(yǔ)言 提供的字符串函數(shù)。 例如,字符串中的內(nèi)容為:****A*BC*DEF*G********,刪除后,字符串中的內(nèi) 容應(yīng)當(dāng)是:****ABCDEFG********。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串 函數(shù)。 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include void fun( char *a, char *h,char *p ) { } main() { char s[81],*t, *f; printf("Enter a string:\n");gets(s); t=f=s; while(*t)t++; t--; while(*t=='*')t--; while(*f=='*')f++; fun( s , f,t ); printf("The string after deleted:\n");puts(s); NONO(); } 解題思路: 本題是考察字符串的操作。 1. 把r指針左邊的字符仍存放字符串a首地址開始的位置上。 2. 把r指針和p指針中間的字符進(jìn)行判斷,其字符是否是'*',如果不是'*',則把這些字符 放到第1步操作字符串a的后面。 3. 把p指針右邊的字符放到第2步操作字符串a的后面。 4. 最后給字符串a加上結(jié)束符。 參考答案: void fun( char *a, char *h,char *p ) { int j=0; char *q=a; while(*q && q < h) a[j++] = *q++ ; while(*h && *p && h < p) { if(*h != '*') a[j++] = *h ; h++; } while(*p) a[j++] = *p++ ; a[j] = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第96套: 給定程序中,函數(shù)fun的功能是:有N×N矩陣,將矩陣的外圍元素順時(shí)針旋轉(zhuǎn)。 操作順序是:首先將第一行元素的值存入臨時(shí)數(shù)組r,然后使第一列成為第一行, 最后一行成為第一列,最后一列成為最后一行,臨時(shí)數(shù)組中的元素成為最后一列。 例如,若N=3,有下列矩陣: 1 2 3 4 5 6 7 8 9 計(jì)算結(jié)果為 7 4 1 8 5 2 9 6 3 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 4 void fun(int (*t)[N]) { int j ,r[N]; for(j=0; j for(j=0; j /**********found**********/ t[0][N-j-1]=t[j][___1___ ]; for(j=0; j t[j][0]=t[N-1][j]; /**********found**********/ for(j=N-1; j>=0;___2___ ) t[N-1][N-1-j]=t[j][N-1]; for(j=N-1; j>=0; j--) /**********found**********/ t[j][N-1]=r[___3___]; } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i { for(j=0; j } fun(t); printf("\nThe result is:\n"); for(i=0; i { for(j=0; j } } 解題思路: 第一處:把第1列上的數(shù)存放到第1行上,所以應(yīng)填:0。 第二處:for循環(huán)的增量值,由于循環(huán)是從大到小遞減,所以應(yīng)填:j--。 第三處:把臨時(shí)數(shù)組中的元素成為最后一列,所以應(yīng)填:j。 *************************************************** 給定程序MODI1.C中函數(shù) fun 的功能是:計(jì)算 S = f(-n) + f(-n+1) +…+ f(0) + f(1) + f(2) +…+ f(n) 的值。例如,當(dāng)n為5時(shí),函數(shù)值應(yīng)為:10.407143。f(x)函數(shù)定義如下: ┌(x+1)/(x-2) x>0 且 x≠2 f(x) = ┤0 x=0 或 x=2 └(x-1)/(x-2) x<0 請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include /************found************/ f( double x) { if (x == 0.0 || x == 2.0) return 0.0; else if (x < 0.0) return (x -1)/(x-2); else return (x +1)/(x-2); } double fun( int n ) { int i; double s=0.0, y; for (i= -n; i<=n; i++) {y=f(1.0*i); s += y;} /************found************/ return s } main ( ) { printf("%f\n", fun(5) ); } 解題思路: 第一處:由于返回值是實(shí)數(shù)型值,所以在函數(shù)名前加上double。 第二處:語(yǔ)句后缺少分號(hào)。 *************************************************** 編寫函數(shù)fun,它的功能是計(jì)算: s作為函數(shù)值返回。 在C語(yǔ)言中可調(diào)用log ( n )函數(shù)求ln (n)。log函數(shù)的引用說(shuō)明是: double log(double x)。 例如,若m的值為: 20,fun函數(shù)值為: 6.506583。 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include #include double fun( int m ) { } main() { printf("%f\n", fun(20)); NONO(); } 解題思路: 本題是根據(jù)給定的公式計(jì)算結(jié)果。使用for循環(huán)語(yǔ)句依次求出每一項(xiàng)的值,分別進(jìn)行累加并 把結(jié)果存入變量s中,循環(huán)結(jié)束后再對(duì)s求平方根,結(jié)果仍存入s中,最后返回s。 參考答案: double fun( int m ) { double s = 0.0 ; int i ; for(i = 1 ; i <= m ; i++) s += log(1.0 * i) ; s = sqrt(s) ; return s ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第97套: 函數(shù)fun的功能是:逆置數(shù)組元素中的值。例如:若a所指數(shù)組中的數(shù)據(jù)依次 為:1、2、3、4、5、6、7、8、9,則逆置后依次為:9、8、7、6、5、4、3、2、 1。形參n給出數(shù)組中數(shù)據(jù)的個(gè)數(shù)。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include void fun(int a[], int n) { int i,t; /**********found**********/ for (i=0; i<___1___; i++) { t=a[i]; /**********found**********/ a[i] = a[n-1-___2___]; /**********found**********/ ___3___ = t; } } main() { int b[9]={1,2,3,4,5,6,7,8,9}, i; printf("\nThe original data :\n"); for (i=0; i<9; i++) printf("M ", b[i]); printf("\n"); fun(b, 9); printf("\nThe data after invert :\n"); for (i=0; i<9; i++) printf("M ", b[i]); printf("\n"); } 解題思路: 第一處:利用for循環(huán)語(yǔ)句,對(duì)數(shù)組中的各元素進(jìn)行逆置,所以終止值為n/2。 第二處:進(jìn)行交換數(shù)組中元素的值,由于是依次是首和尾交換,所以應(yīng)填:i。 第三處:使用中間變量t來(lái)交換的,所以應(yīng)填:a[n-i-1]。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:將一個(gè)由八進(jìn)制數(shù)字字符組成的字符 串轉(zhuǎn)換為與其面值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含5位八進(jìn)制 數(shù)字字符。 例如,若輸入:77777,則輸出將是:32767。 請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。 給定源程序: #include int fun( char *p ) { int n; /**********found**********/ n= *P-'o'; p++; while( *p!=0 ) { /**********found**********/ \TAB n=n*8+*P-'o'; \TAB p++; } return n; } main() { char s[6]; int i; int n; printf("Enter a string (Ocatal digits): "); gets(s); if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); } for(i=0; s[i]; i++) if(s[i]<'0'||s[i]>'7') { printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); } printf("The original string: "); puts(s); n=fun(s); printf("\n%s is convered to integer number: %d\n\n",s,n); } 解題思路: 第一和第二處:*p錯(cuò)寫成*P,'0'錯(cuò)寫成'o'。 *************************************************** 學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組 s中,請(qǐng)編寫函數(shù)fun,它的功能是:函數(shù)返回指定學(xué)號(hào)的學(xué)生數(shù)據(jù),指定的學(xué)號(hào)在主 函數(shù)中輸入。若沒找到指定學(xué)號(hào),在結(jié)構(gòu)體變量中給學(xué)號(hào)置空串,給成績(jī)置-1,作 為函數(shù)值返回。(用于字符串比較的函數(shù)是strcmp)。 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include #include #define N 16 typedef struct { char num[10]; int s; } STREC; STREC fun( STREC *a, char *b ) { } main() { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, \TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, \TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, \TAB \TAB {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}}; STREC h; char m[10]; int i;FILE *out ; printf("The original data:\n"); for(i=0; i { if(i%4==0) printf("\n"); printf("%s = ",s[i].num,s[i].s); } printf("\n\nEnter the number: ");gets(m); h=fun( s,m ); printf("The data : "); printf("\n%s M\n",h.num,h.s); printf("\n"); out = fopen("c:\\test\\out.dat","w") ; h=fun(s,"GA013"); fprintf(out,"%s M\n",h.num,h.s); fclose(out); } 解題思路: 本題是從學(xué)生記錄體中找出給定的學(xué)號(hào)。具體操作請(qǐng)看答案程序中的說(shuō)明。 參考答案: STREC fun( STREC *a, char *b ) { STREC c ; int i ; c.num[0] = '\0' ; /* 置初始空串 */ c.s = -1 ; /* 置成績(jī)?yōu)?/SPAN>-1 */ for(i = 0 ; i < N ; i++) if(strcmp(a[i].num, b)==0) { /* 判斷學(xué)號(hào)是否相等 */ strcpy(c.num, a[i].num) ; /* 相等,則對(duì)學(xué)號(hào)進(jìn)行賦值 */ c.s=a[i].s; /* 相等,則對(duì)成績(jī)進(jìn)行賦值 */ break ; /* 退出循環(huán)體 */ } return c ; /* 返回結(jié)構(gòu)體變量 */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第98套: 給定程序中,函數(shù)fun的功能是:在帶有頭結(jié)點(diǎn)的單向鏈表中,查找數(shù)據(jù)域中 值為ch的結(jié)點(diǎn)。找到后通過(guò)函數(shù)值返回該結(jié)點(diǎn)在鏈表中所處的順序號(hào);若不存在 值為ch的結(jié)點(diǎn),函數(shù)返回0值。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include #define N 8 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(char *); void outlist(SLIST *); int fun( SLIST *h, char ch) { SLIST *p; int n=0; p=h->next; /**********found**********/ while(p!=___1___) { n++; /**********found**********/ if (p->data==ch) return ___2___; else p=p->next; } return 0; } main() { SLIST *head; int k; char ch; char a[N]={'m','p','g','a','w','x','r','d'}; head=creatlist(a); outlist(head); printf("Enter a letter:"); scanf("%c",&ch); /**********found**********/ k=fun(___3___); if (k==0) printf("\nNot found!\n"); else printf("The sequence number is : %d\n",k); } SLIST *creatlist(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0;
return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%c",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } 解題思路: 本題是在給定的鏈表中要求找出指定的值。 第一處:判斷p是否結(jié)束,所以應(yīng)填:NULL。 第二處:在函數(shù)fun中,使用n來(lái)計(jì)算結(jié)點(diǎn)的位置,當(dāng)找到ch值,則返回結(jié)點(diǎn)的位置n,所以 應(yīng)填:return n。 第三處:函數(shù)調(diào)用,在主函數(shù)中已經(jīng)給出了head和ch,所以應(yīng)填:head,ch。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:刪除p所指字符串中的所有空白字符(包 括制表符、回車符及換行符)。 輸入字符串時(shí)用'#'結(jié)束輸入。 請(qǐng)改正程序中的錯(cuò)誤,使它能輸出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #include #include fun ( char *p) { int i,t; char c[80]; /************found************/ For (i = 0,t = 0; p[i] ; i++) if(!isspace(*(p+i))) c[t++]=p[i]; /************found************/ c[t]="\0"; strcpy(p,c); } main( ) { char c,s[80]; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') { s[i]=c;i++;c=getchar(); } s[i]='\0';
fun(s); puts(s); } 解題思路: 第一處:保留字for錯(cuò)寫成For。 第二處:置字符串結(jié)束符錯(cuò)誤,應(yīng)該是:'\0'。 *************************************************** 請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:將ss所指字符串中所有下標(biāo)為奇數(shù)位置上 的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。 例如, 若輸入"abc4EFg",則應(yīng)輸出"aBc4EFg"。 注意: 部分源程序存在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include #include void fun ( char *ss ) { } main( ) { char tt[81] ; printf( "\nPlease enter an string within 80 characters:\n" ); gets( tt ); printf( "\n\nAfter changing, the string\n \"%s\"", tt ); fun( tt ); printf( "\nbecomes\n \"%s\"\n", tt ); NONO ( ); } 解題思路: 本題是考察考生對(duì)字母按要求進(jìn)行轉(zhuǎn)換。其中大小字母的ASCII值相差32。 參考答案: void fun ( char *ss ) { int i ; for(i = 1 ; i < strlen(*ss) ; i+=2) { if(ss[i] >= 'a' && ss[i] <= 'z') ss[i] -= 32 ; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第99套: 函數(shù)fun的功能是:將形參a所指數(shù)組中的前半部分元素中的值和后半部分元 素中的值對(duì)換。形參n中存放數(shù)組中數(shù)據(jù)的個(gè)數(shù),若n為奇數(shù),則中間的元素不動(dòng)。 例如:若a所指數(shù)組中的數(shù)據(jù)依次為:1、2、3、4、5、6、7、8、9,則調(diào)換后 為:6、7、8、9、5、1、2、3、4。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié) 果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include #define N 9 void fun(int a[], int n) { int i, t, p; /**********found**********/ p = (n%2==0)?n/2:n/2+___1___; for (i=0; i { t=a[i]; /**********found**********/ a[i] = a[p+___2___]; /**********found**********/ ___3___ = t; } } main() { int b[N]={1,2,3,4,5,6,7,8,9}, i; printf("\nThe original data :\n"); for (i=0; i fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i } 解題思路: 第一處:如果n是奇數(shù),則中間的元素不動(dòng),所以應(yīng)填:1。 第二處:使用for循環(huán)語(yǔ)句來(lái)交換數(shù)組元素的值,所以應(yīng)填:i。 第三處:使用中間變量t來(lái)交換的,所以應(yīng)填:a[p+i]。 *************************************************** 給定程序MODI1.C中函數(shù)fun的功能是:把主函數(shù)中輸入的3個(gè)數(shù),最大的放在 a中,最小的放在c中,中間的放在b中。 例如,輸入的數(shù)為:55 12 34, 輸出結(jié)果應(yīng)當(dāng)是:a=55.0 , b=34.0 , c=12.0。 請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。 給定源程序: #include void fun(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; printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c); printf("a = % fun(&a,&b,&c); printf("a = % } 解題思路: 第一處:在函數(shù)fun體中,k是一個(gè)浮點(diǎn)型變量,所以應(yīng)改為:float k;。 第二處:三個(gè)數(shù)比較大小,第1個(gè)條件是第1個(gè)比第2個(gè)小,則交換。第3個(gè)條件是第2個(gè)比第 3個(gè)小,則也交換。第2個(gè)條件是應(yīng)該第1和第3個(gè)小,則交換就符合題意了,所以應(yīng)改為: if(*a<*c)。 *************************************************** 學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組 s中,請(qǐng)編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,注 意:分?jǐn)?shù)最高的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最高的學(xué)生的人數(shù)。 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include #define N 16 typedef struct { char num[10]; int s; } STREC; int fun( STREC *a, STREC *b ) { } main() { STREC s[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},{"GA017",64},{"GA018",64},{"GA016",72}}; STREC h[N]; int i,n;FILE *out ; n=fun( s,h ); printf("The %d highest score :\n",n); for(i=0;i printf("%s M\n",h[i].num,h[i].s); printf("\n"); out = fopen("c:\\test\\out.dat","w") ; fprintf(out, "%d\n",n); for(i=0;i fprintf(out, "M\n",h[i].s); fclose(out); } 解題思路: 本題是找出最高成績(jī),再把N名學(xué)生的成績(jī)等于最高成績(jī)的記錄存入b所指的數(shù)組中。具體操作請(qǐng)看答案程序中的說(shuō)明。 參考答案: int fun( STREC *a, STREC *b ) { int i, max = a[0].s, n=0; for(i = 1; i < N; i++) if(max < a[i].s) max = a[i].s ; /* 找出最高成績(jī) */ for(i = 0; i < N; i++) if(max==a[i].s) b[n++] = a[i] ; /* 找相等的最高成績(jī)并存入數(shù)組b中 */ return n; /* 返回符合條件的人數(shù) */ } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第100套: 給定程序中,函數(shù)fun的功能是:在形參s所指字符串中尋找與參數(shù)c相同的字符,并在其后插入一個(gè)與之相同的字符,若找不到相同的字符則函數(shù)不做任何處理。 例如,s所指字符串為:baacda,c中的字符為:a, 執(zhí)行后s所指字符串為:baaaacdaa。 請(qǐng)?jiān)诔绦虻南聞澗處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include void fun(char *s, char c) { int i, j, n; /**********found**********/ for(i=0; s[i]!=___1___ ; i++) if(s[i]==c) { /**********found**********/ n=___2___ ; while(s[i+1+n]!='\0') n++; for(j=i+n+1; j>i; j--) s[j+1]=s[j]; /**********found**********/ s[j+1]=___3___ ; i=i+1; } } main() { char s[80]="baacda", c; printf("\nThe string: %s\n",s); printf("\nInput a character: "); scanf("%c",&c); fun(s,c); printf("\nThe result is: %s\n",s); } 解題思路: 第一處:在for循環(huán)中終止值要判斷字符串是否結(jié)束符,所以應(yīng)填:'\0'。 第二處:n用于統(tǒng)計(jì)參數(shù)c后還有多少個(gè)字符,要對(duì)其進(jìn)行初始化,所以應(yīng)填:0。 第三處:要求插入相同的字符c,所以應(yīng)填:c。 *************************************************** 在主函數(shù)中從鍵盤輸入若干個(gè)數(shù)放入數(shù)組中, 用0結(jié)束輸入并放在最后一個(gè) 元素中。給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算數(shù)組元素中值為正數(shù)的平均 值(不包括0)。 例如:數(shù)組中元素中的值依次為:39,-47,21,2,-8,15,0, 則程序的運(yùn)行結(jié)果為:19.250000。 請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)! 給定源程序: #include double fun ( int x[]) { /************found************/ int sum = 0.0; int c=0, i=0; while (x[i] != 0) { if (x[i] > 0) { sum += x[i]; c++; } i++; } /************found************/ sum \= c; return sum; } main( ) { int x[1000]; int i=0; printf( "\nPlease enter some data (end with 0): " ); do { scanf("%d", &x[i]); } while (x[i++] != 0); printf("%f\n", fun ( x )); } 解題思路: 第一處:由于sum是存放實(shí)數(shù)值,因此不能定義為整型,所以應(yīng)改為double sum=0.0;或float sum=0.0;。 第二處:除的運(yùn)算符是“/”。 *************************************************** 編寫函數(shù)fun,函數(shù)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果作為函數(shù)值返 回;n通過(guò)形參傳入。 1 1 1 S=1 + ── + ─── + ... + ────── 1+2 1+2+3 1+2+3+...+n 例如:若n的值為11時(shí),函數(shù)的值為:1.833333 注意: 部分源程序在文件PROG1.C中。 請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入 你編寫的若干語(yǔ)句。 給定源程序: #include float fun(int n) { } main() { int n; float s; printf("\nPlease enter N:"); scanf("%d", &n); s = fun(n); printf("the result is: %f\n", s); NONO(); } 解題思路: 本題是根據(jù)給定的公式計(jì)算結(jié)果。使用for循環(huán)語(yǔ)句依次求出每一項(xiàng)的值,分別進(jìn)行累加并 把結(jié)果存入變量s中,最后返回s。 參考答案: float fun(int n) { int i,j,t; float s=0; for(i=1;i<=n;i++) { t=0; for(j=1;j<=i;j++) t+=j; s=s+1./t; } return s; } |