全國(guó)二級(jí)c語(yǔ)言100套上機(jī)真題_第1頁(yè)
全國(guó)二級(jí)c語(yǔ)言100套上機(jī)真題_第2頁(yè)
全國(guó)二級(jí)c語(yǔ)言100套上機(jī)真題_第3頁(yè)
全國(guó)二級(jí)c語(yǔ)言100套上機(jī)真題_第4頁(yè)
已閱讀5頁(yè),還剩273頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

001請(qǐng)補(bǔ)充函數(shù)fun,函數(shù)fun的功能是求n的階乘。注意:部分源程序給出如卜。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>longfun(intn)if([1])retum(n*fun([2]));return[3];voidmain()printf("10!=%ld\n\fun(l0));[1]n>l或l<n[2]n-1[3]1【解析】填空1:求階乘時(shí)采用遞歸的算法,n>l和n==l這兩種情況的處理方法不同,需要分開考慮。填空2:階乘的算法是,當(dāng)n>l時(shí),n!=n*(n-l)!,即:fun(n)=n*fun(n-l)。填空3:n==l是遞歸的終止條件,返回值為E下列給定程序中,函數(shù)fun的功能是:分別統(tǒng)計(jì)字符串中大寫字母和小寫字母的個(gè)數(shù)。例如,給字符串s輸入:AaaaBBb123CCccccd,則應(yīng)輸出結(jié)果:upper=5,lower=9?請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>/*********found***********/voidfun(char*s,inta,inib)while(*s)/********亭found***********/if(*s>='A,&&*s<=T)a++;/*********found***********/if(*s>='a'&&*sv='z')b++;s++;)}main()(chars[100];intupper=0,lower=0;printf("\npieaseastring:H);gets(s);fun(s,&upper,&lower);printf("\nupper=%dlower=%d\nH,upper,lower);(1)錯(cuò)誤:voidfun(char*s,inta,intb)正確:voidfun(char*s,int*a,int*b)(2)錯(cuò)誤:a++;正確:(*a)++;(3)錯(cuò)誤:b++;正確:(*b)++;【解析】(1)根據(jù)題中程序可以看出,函數(shù)fun傳遞的是地址,那么在函數(shù)中就應(yīng)該出現(xiàn)指針,所以改為voidfun(char*s,int*a,int*b)。(2)和(3)很明顯,這里是要累加數(shù)值,因?yàn)閍、b是指針變量,所以是錯(cuò)誤的。請(qǐng)編寫一個(gè)函數(shù)voidfun(char pp[]),統(tǒng)計(jì)在tt字符串中”a“到“z"26個(gè)字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。例如:當(dāng)輸入字符串a(chǎn)bcdefghabcdeabc后,程序的輸出結(jié)果應(yīng)該是:333221110000000000000000000注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>voidfun(charpp[])voidmain()(FILE*wf;charaa[1000];intbb[26],k;system(MCLS");printf("\nPleaseenteracharstring:");scanf(n%sn,aa);fun(aa,bb);for(k=0;k<26;k++)printf(H%dM,bb[k]);printf(M\n");wf=fopen("out.dat,,,"wM);fun(nabcdefgabcdeabcM,bb);for(k=0;k<26;k++)fprinlf(wf,"%d”,bb[k]);fclose(wf);}voidfun(char*tt,intpp[])(inti;for(i=0;i<26;i++)pp[i]=O;/*初始化pp數(shù)組各元素為0*/for(;*tt!='0';H++)if(*tt>=,a,&&*tt<=,z,)pp[*tt-'a']++; /*將tt字符串中H到N26個(gè)字母各自出現(xiàn)的次數(shù),依次放在pp數(shù)組中,任一個(gè)小寫字母減去宜后所得結(jié)果正好是它對(duì)應(yīng)的下標(biāo)*/}【解析】第1個(gè)循環(huán)的作用是初始化數(shù)組pp,未經(jīng)賦值變量的量為一個(gè)不確定數(shù)字。由于它要將'a到Z'26個(gè)字母的個(gè)數(shù)依次放到數(shù)組pp中。即丁的個(gè)數(shù)存于pp[0]中,'b,的個(gè)數(shù)存于pp[l]中,的個(gè)數(shù)存于pp⑵中,…,依次類推。而葭-0,的值正好為0, 的值為1,'c」a,的值為2,…,依此類推。即任一個(gè)小寫字母減去T后所得結(jié)果正好是它對(duì)應(yīng)的下標(biāo),所以就有了pp[*tt」a[++。但*tt必須是小寫字母,即if()不應(yīng)省略。002請(qǐng)補(bǔ)充函數(shù)fun,它的功能是:計(jì)算并輸出n(包括n)以內(nèi)所有能被3或7整除的自然數(shù)的倒數(shù)之和。例如,在主函數(shù)中從鍵盤給n輸入30后,輸出為:s=1.226323。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>doublefun(intn)inti;doublesum=0.0;for(i=1[1];i++)if(i%3==0_[2]_i%7==0)sum+=_[3]__/i;returnsum;)main()(intn;doubles;printf(H\nInputn:");scanf("%d”,&n);s=fun(n);printf("\n\ns=%f\nu,s);[1]i<=n[2]II【3】1.0或(double)1【解析】填空1:本題要求找出n(包括n)以內(nèi)滿足條件的自然數(shù),所以,i的取值范圍是從1到n,填空2:i能被3整除,也就是指,i除以3的余數(shù)為0,題中的條件是能被3或7整除,所以使用邏輯或運(yùn)算符"11"。填空3:需要注意,如果71運(yùn)算符兩邊都是整型數(shù),則結(jié)果也是整型數(shù)。因?yàn)閕為整型數(shù),如果將i的倒數(shù)寫為1/i,則結(jié)果為0,所以在求倒數(shù)時(shí),要使用1。,而不是1,或者將變量i強(qiáng)制類型轉(zhuǎn)化為double型。下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參m的值,計(jì)算如下公式的值。t=l-l/(2x2)-l/(3x3)-...-l/(mxm)請(qǐng)改正函數(shù)fun()中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>doublefun(intm){doubley=1.0;intI;/¥************found**************/for(I=2;I<m;I++)/*************found**************/y-=l/(I*I);retum(y);voidmain(){intn=5;system("CLS");printf("\nTheresultis%lf\n",fun(n));(1)錯(cuò)誤:for(I=2;I<m;I++)正確:for(I=2;I<=m;I++)(2)錯(cuò)誤:y-=l/(l*I);正確:y-=1.0/(I*I);【解析】該題是一道簡(jiǎn)單的計(jì)算題,循環(huán)條件for(I=2;km;I++)中忽略了i=m時(shí)的一種情況,因?yàn)轭}目中I是從2到m的一個(gè)計(jì)算公式。y-=l/(l*[);的錯(cuò)誤很明顯,是語(yǔ)法錯(cuò)誤,由定義doubley=1.0可知,應(yīng)該是y-=L0/(I*I);,而非y-=l/(I*I);。請(qǐng)編寫一個(gè)函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入所指的數(shù)組中。例如,若輸入17,5,則應(yīng)輸出19,23,29,31,37。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>voidfun(intm,intk,intxx[])voidmain()(intm,n,zz[1000];system(,'CLS,');printf("\nPleaseentertwointegers:");scanf(,'%d%dM,&m,&n);fun(m,n,zz);for(m=0;m<n;m++)printf(M%dM,zz[m]);printf(H\n");voidfun(intm,intk,intxx[])(inti,j,n;for(i=m+1,n=0;n<k;i++) /*找大于m的素?cái)?shù),循環(huán)k次,即找出緊靠m的k個(gè)素?cái)?shù)*/{for(j=2;j<i;j++) /*判斷一個(gè)數(shù)是否為素?cái)?shù),如果不是,跳出此循環(huán),判斷下一個(gè)數(shù)*/if(i%j==O)break;if(j>=i)/*如果是素?cái)?shù),放入數(shù)組xx中*/xx[n++]=i;【解析】本題只要掌握了判斷素?cái)?shù)的算法就不難完成了,其實(shí)程序缺少部分也正是這部分。003給定程序的功能是:求二分之一的圓面積,函數(shù)通過(guò)形參得到圓的半徑,函數(shù)返回二分之一的圓面積(注:圓面積公式為:S=nr2,在程序中定義的變量名要與公式的變量相同)。例如,輸入圓的半徑值:19.527,輸出為:s=598.949991。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,儀在橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>doublefun(doubler)(return3.14159*_[1]_/2.0;Imain()(doublex;printf("Enterx:");scanf("%ir,_[2]J;printf("S=%lf\n",fun(_[3]_));[1]r*r[2]&x[3]x【解析】填空1:計(jì)算圓的面積,面積公式:S=FIr*r。填空2:scanf一般形式為scanf(格式控制,地址表列),因此填入&x。填空3:送入函數(shù)的參數(shù)是圓的半徑X。下列給定程序中,fun函數(shù)的功能是:根據(jù)形參m,計(jì)算下列公式的值。t=l+l/2+l/3+l/4+...+l/m例如,若輸入5,則應(yīng)輸出2.283333。請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>doublefun(intm)doublet=1.0;intI;for(I=2;I<=m;I++)/*************found**************/t+=l.O/k;/*************found**************/returnI;}voidmain(){intm;system(nCLSu);printf(H\nPleaseenter1integernumber:");scanf(”%d”,&m);printf(M\nTheresultis%lf\nu,fun(m));(1)錯(cuò)誤:t+=LO/k;正確:t+=1.0/I;(2)錯(cuò)誤:returnI;正確:returnt;【解析】該題目考查分母成等差數(shù)列遞增的一個(gè)數(shù)學(xué)公式,我們先看循環(huán)條件for(I=2;I<=m;I++),i從2開始遞增到m,所以t的值應(yīng)該是由1.0/1的值逐步循環(huán)疊加后的結(jié)果,而不是t+=1.0/k;。returnI;考查對(duì)程序的解讀能力,當(dāng)循環(huán)結(jié)束后(由輸入m的值決定),函數(shù)返回當(dāng)前t的值。編寫函數(shù)fun,函數(shù)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果作為函數(shù)值返回;n通過(guò)形參傳入。S=l+l/(l+2)+l/(l+2+3)+...+l/(l+2+3+...+n)例如:若n的值為11時(shí),函數(shù)的值為1.833333。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>floatfun(intn)voidmain()(intn;floats;system(“CLS”);printf(M\nPleaseenterN:");scanf(H%dn,&n);s=fun(n);printf("Theresultis:%f\n",s);floatfun(intn)(inti,sl=0;floats=0.0;fbr(i=l;i<=n;i++){sl=sl+i;/*求每一一項(xiàng)的分母*/s=s+1.0/sl;/*求多項(xiàng)式的值*/}returns;}【解析】本題中si用來(lái)表示式中每一?項(xiàng)的分母,而每一項(xiàng)的分母都是由前一項(xiàng)分母加項(xiàng)數(shù)。注意:由于si定義成一個(gè)整型,所以在s=s+1.0/sl中不能把1.0寫成1。004給定程序的功能是:計(jì)算并輸出下列級(jí)數(shù)的前N項(xiàng)之和SN,直到SN大于q為止,q的值通過(guò)形參傳入。例如,若q的值為50.0,則函數(shù)值為50.416687。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>doublefun(doubleq)(intn;doubles;n=2;s=2.0;while(s[1]q){s=s+(double)(n+l)/n;[2];)printf(',n=%d\n,\n);【3】;

main()printf(M%f\nn,fun(50));[1]<=[2]n++或n+=l或n=n+1[3]returns或return(s)【解析】填空1:根據(jù)題意,相加直到Sn大于q為止,因此為<=。填空2:計(jì)算前N項(xiàng)的和,增加n的值。填空3:計(jì)算完Sn的和后,返回函數(shù)的值,以便于輸出。下列給定的程序中,函數(shù)fun的功能是:計(jì)算并輸出k以內(nèi)最大的10個(gè)能被13或17整除的自然數(shù)之和。K的值由主函數(shù)傳入,若k的值為500,則函數(shù)的值為4622。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。也不得更改程序的結(jié)構(gòu)。注意:不要改動(dòng)main函數(shù),不得增行或刪行,試題程序:也不得更改程序的結(jié)構(gòu)。#include<stdio.h>#include<conio.h>#include<stdlib.h>intfun(intk){intm=0,mc=0,j;while((k>=2)&&(mc<10))/*************found**************/if((k%13=0)ll(k%17=0)){m=m+k;mc++;}k--;/*************found**************/returnm;voidmain(){system(MCLSM);printf(n%d\n",fun(500));(1)錯(cuò)誤:(1)錯(cuò)誤:if((k%13=0)ll(k%17=0))(2)錯(cuò)誤:缺少大括號(hào)正確:if((k%13==0)H(k%17==0))正確:加}【解析】x能被y整除的表示方法是x%y==0,而并非像題目中所表示的x%y=0,所以,if((k%13=0)ll(k%17=0))修改后的結(jié)果應(yīng)該是答案所示信息。(2)中缺少程序完整所需的此類信息在做題時(shí)一定要注意,我們可以在做題前先運(yùn)行一下程序,這樣明顯的錯(cuò)誤一般都會(huì)有錯(cuò)誤信息顯示出來(lái),比如丟失"}"的錯(cuò)誤信息是"Compoundstatementmissing}infunctionfun”,并在當(dāng)前錯(cuò)誤處停止光標(biāo),我們只要按回車健進(jìn)行編輯就可以了。編寫函數(shù)fun,它的功能是:根據(jù)以下公式求p的值,結(jié)果由函數(shù)值帶回。m與n為兩個(gè)正數(shù)且要求m>n。P=m!/(n!(m?n)!),例如:m=12,n=8時(shí),運(yùn)行結(jié)果為495.000000。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>floatfun(intm,intn)voidmain(){system(nCLS");printf(Mp=%f\nM,fun(12,8));floatfun(intm,intn)(inti;doublep=1.0;for(i=1;i<=m;i++) p=p*i;/*求m!*/for(i=1;i<=n;i++) p=p/i;/*求m!/n!*/fbr(i=1;i<=m-n;i++)p=p/i; /*求m!/(n!(m-n)!)*/returnp;)【解析】本題中,欲求P的值,需要先求m、n和m-n的階乘值,可用循環(huán)語(yǔ)句實(shí)現(xiàn)。注意階乘值應(yīng)當(dāng)是double類型,若定義x,y,z為整型變量,則p=x/(y*z)中的除法為整數(shù)除法。005請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能求能是:整除x且是偶數(shù)的數(shù),把這些數(shù)保存在數(shù)組bb中,并按從大到小的順序輸出。例如當(dāng)x=20時(shí),依次輸出:201042。注意:部分源程序給出如卜。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>voidfun(intk,intbb[])intI;intj=O;for([I];I<=k;I++){if([2])bb[j++]=I;)printf(n\n\nH);for(I=[3];I>=0;I-)printf(H%dM,bb[I]);voidmain()(intk=l;intbb[100];system(HCLSn);printf(M\nPleaseinputX=M);scanf(H%dM,&k);fun(k,bb);[111=1[2]k%I==0&&I%2==0 [3]_j或j??或j=j-l或j?=l【解析】填空1:為了求出能整除k,且是偶數(shù)的數(shù),尋找范圍是從1到匕填空2:如果I能整除匕則k對(duì)I求余為0,如果I為偶數(shù),貝UI對(duì)2求余為0,由于這兩個(gè)條件要同時(shí)滿足,所以要使用“與“運(yùn)算符“&&”。填空3:由于數(shù)組bb[]中的數(shù)是按從小到大的順序排列的,而題目要求按從大到小輸出,所以從數(shù)組的最后一個(gè)元素開始,依次輸出。因?yàn)樵趂or循環(huán)中,變量j多加了一次,所以這里要將j減1,得到數(shù)組最后一個(gè)元素的下標(biāo)。下列給定程序中,函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。例如,若m中的值為5,則應(yīng)輸出:1.463611。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>doublefun(intm)doubley=1.0;inti;/********found********/for(i=2;i<m;i++)/********found********/y+=l/(i*i);retum(y);}main()(intn=5;printf(n\nTheresultis%lf\n",fun(n));(1)錯(cuò)誤:for(i=2;i<m;i++)正確:fbr(i=2;i<=m;i++)(2)錯(cuò)誤:y+=l/(i*i)正確:y+=1.0/(i*i)【解析】(1)for(i=2;ivm;i++)中是一個(gè)基礎(chǔ)的分析錯(cuò)誤,應(yīng)該包括m。(2)y是一個(gè)double型變量,題中得出的結(jié)果是一個(gè)整數(shù),所以改為y+=1.0/(i*i)。編寫函數(shù)fun,它的功能是:利用以下所示的簡(jiǎn)單迭代方法求方程cos(x)?x=0的一個(gè)實(shí)根。xn+l=cos(xn)迭代步驟如下:(1)取xl初值為0.0;x0=xl,把xl的值賦給x0;xl=cos(x0),求出一個(gè)新的xl;(4)若x0?xl,的絕對(duì)值小于0.000001,則執(zhí)行步驟(5),否則執(zhí)行步驟(2);(5)所求xl就是方程cos(x)?x=0的一個(gè)實(shí)根,作為函數(shù)值返回。程序?qū)⑤敵鼋Y(jié)果Root=0.739085o注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,儀在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<math.h>#include<stdio.h>floatfun()main()(floatf=fun();printf(MRoot=%f\nM,f);floatfun()(floatxl=0.0,x0;do(xO=xl;xl=cos(xO);)while(fabs(xO-x1)>=1e-6);returnxl;}【解析】函數(shù)fun的功能是用迭代方法求方程的一個(gè)實(shí)根,結(jié)果由函數(shù)值返回。題目已經(jīng)給出了算法,只要按照算法用合適的程序表達(dá),就可以解題了。006程序的功能是計(jì)算s=!!.注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>longfun(intn){inti;longs;s=[1]_;for(i=l;i<=n;i++)s=[2];returns;)main()(longs;intk,n;scanf(M%dH,&n);s=[3];for(k=0;k<=n;k++)s=[4];printf(n%id\nu,s);[1]1 【2]s*i或i*s[3]0 [4]s+fun(k)【解析】函數(shù)fun的功能是計(jì)算n的階乘。首先定義一個(gè)long型累計(jì)變量s,并初始化為1,然后用一個(gè)for循環(huán)從1循環(huán)到n,累乘給s,循環(huán)結(jié)束時(shí)s的值即為n的階乘。主函數(shù)中也定義了一個(gè)累計(jì)變量s,通過(guò)for循環(huán),累加從0到n的所有數(shù)的階乘。下列給定程序中,函數(shù)fun的功能是:按如下遞歸公式求函數(shù)值。例如,當(dāng)給n輸入5時(shí),函數(shù)值為18;當(dāng)給n輸入3時(shí),函數(shù)值為14。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>/********found********/intfun(n)(intc;/********found********/if(n=l)c=10;elsec=fun(n-l)+2;return(c);Imain()(intn;printf("Entern:");scanf(u%dM,&n);printf(MTheresult:%d\n\n'\fun(n));(1)錯(cuò)誤:intfun(n) 正確:intfun(intn)(2)錯(cuò)誤:if(n=l)正確:if(n==l)【解析】(1)主函數(shù)中已經(jīng)定義了變量n的類型,在子函數(shù)中也要定義。(2)if后面應(yīng)該緊跟一個(gè)條件判斷表達(dá)式,而n=l是付值表達(dá)式,表達(dá)式的值永遠(yuǎn)為真,也就是說(shuō)這個(gè)條件永遠(yuǎn)成立,沒(méi)有遞歸執(zhí)行。請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。例如:若二維數(shù)組中的值為13579299946999813570則函數(shù)值為61,注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#defineM4#defineN5intfun(inta[M][N])voidmain()(intaa[M][N]={{135,7,9),{2,9,9,9,4),{6,9,9,9,8},{1,3,57,0}};inti,j,y;system(nCLSn);printf(nTheoriginaldatais:\n");for(i=0;i<M;i++){for(j=O;j<N;j++)printf("%6dn,aa[i][j]);printf("\n");}y=fun(aa);printf("\nThesun:%d\nn,y);printf(H\n");intfun(inta[M][N])(inti,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)if(i=0lli=M-lllj==0llj==N-l) /*只要下標(biāo)中有一個(gè)為0或M-l或N-1,則它一定是周邊元素*/sum=sum+a[ij[j];/*將周邊元素相加*/returnsum;)【解析】本題采用逐一判斷的方式,周邊元素的下標(biāo)一定有一個(gè)是0或M-1或N-1,且只要下標(biāo)中有一個(gè)為?;騇-1或N-1,則它一定是周邊元素。請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是:求不超過(guò)給定自然數(shù)的所有偶數(shù)之和。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>intfun(intx)(inti,s;s=_[11;for(i=2;[2];i+=2)s+=i;returns;}main()(intn;do(printf(n\nPleaseenternaturalnumbersn:");scanf("%d'\&n);}while(n<=0);printf("\n不超過(guò)給定自然數(shù)%d的各偶數(shù)之和為%d\n”,n,fun(n));)[1]0 [2]i<=x【解析】填空1:根據(jù)題意,偶數(shù)當(dāng)然要從0開始,所以40。填空2:不論給定的數(shù)是偶數(shù)還是奇數(shù),只要小于等于X,便應(yīng)該計(jì)算在內(nèi)。下列給定程序中函數(shù)fun的功能是:計(jì)算n!。例如,給n輸入5,則輸出定0.000000。請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<conio.h>doublefun(intn)(doubleresult=1.0;/********found*******/ifn==0return1.0;while(n>l&&n<170)/********found********/result=n-;returnresult;main()(intn;printf(nInputN:");scanf("%dH,&n);printf(',\n\n%d!=%lf\n\n,',n,fun(n));(I)錯(cuò)誤:ifn=O正確:if(n=O)(2)錯(cuò)誤:result=n??;正確:result*=n—;【解析】(1)這里是一個(gè)簡(jiǎn)單的格式錯(cuò)誤,if條件應(yīng)該加括號(hào)。(2)根據(jù)階乘的概念,從n開始,n!=n*(n?l)!,直到1,所以應(yīng)該為result*=n-;請(qǐng)編一個(gè)函數(shù)floatfun(doubleh),函數(shù)的功能是:對(duì)變量h中的值保留兩位小數(shù),并對(duì)第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。例如:若h值為8.32433,則函數(shù)返回8.32;若h值為8.32533,則函數(shù)返回8.33。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>floatfun(floath)voidmain()(floata;system(nCLSn);printf("Entera:");scanf(M%f),&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf(MTheresult:%f\nM,fun(a));floatfun(floath)(longt;t=(h*1000+5)/10; /*單精度數(shù)h乘以1000后再加5,相當(dāng)于對(duì)h中的第三位小數(shù)進(jìn)行四舍五入除以10后將其賦給一個(gè)長(zhǎng)整型數(shù)時(shí)就把第三位小數(shù)后的數(shù)全部截去*/return(float)t/l00; /*除以100,保留2位小數(shù)*/I【解析】注意本題要求h的值真正發(fā)生了四舍五入,而不是為了輸出,即不能用printf(,,%7.2f”,h)來(lái)直接得到結(jié)果。由于單精度數(shù)h乘以1000后再加5,此時(shí)相當(dāng)于對(duì)h中的第三位小數(shù)進(jìn)行四舍五入,在將其賦給一個(gè)長(zhǎng)整型數(shù)時(shí)就把第三位小數(shù)后的數(shù)全部截去。注意在return中要將其中??個(gè)數(shù)轉(zhuǎn)成浮點(diǎn)型數(shù)。008請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是:求一維數(shù)組x[N]的平均值,并對(duì)所得結(jié)果進(jìn)行四舍五入(保留兩位小數(shù))。例如:當(dāng)x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},結(jié)果為:avg=15.030000o注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>doublefun(doublex[10])(intI;longt;doubleavg=0.0;doublesum=0.0;for(I=0;I<10;I++)[1];avg=sum/10;avg=[2];t=[3];avg=(double)t/100;returnavg;}voidmain()(doubleavg,x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0);inti;system(nCLSM);printf("\nTheoriginaldatais:\n");for(i=0;i<10;i++)printf(n\n\nn);avg=fun(x);printf(Haverage=%f\n\nn,avg);[I]sum+=x[I][2]avg*1000 [3](avg+5)/10【解析】填空1:通過(guò)for循環(huán)求出10個(gè)數(shù)的累加和,存于變量sum中。填空2:為了實(shí)現(xiàn)四舍五入保留兩位小數(shù)的功能,應(yīng)將平均值先擴(kuò)大1000倍。填空3:將平均值加上5,再除以10,實(shí)現(xiàn)四舍五入的功能。下列給定程序中函數(shù)fun的功能是:計(jì)算正整數(shù)num各位上的數(shù)字之積。例如,若輸入252,則輸出應(yīng)該是20。若輸入202,則輸出應(yīng)該是0。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<conio.h>longfun(longnum){/********tound********/longk;do(k*=num%10;/********foun(j********/num\=10;}while(num);return(k);}main()(longn;printf("\pleaseenteranumber:");scanf(n%ld",&n);printf(,'\n%ld\n,',fun(n));(1)錯(cuò)誤:longk;正確:longk=l;(2)錯(cuò)誤:num\=10;正確:num/=10;【解析】(1)k用來(lái)存放各位數(shù)字的積,初值應(yīng)為lo(2)這里是一個(gè)符號(hào)錯(cuò)誤,除號(hào)使用來(lái)表示的。請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:根據(jù)以下公式求冗的值(要求滿足精度0.005,即某項(xiàng)小于0.005時(shí)停止迭代)。n72=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*47(3*5*7*9)+...+1*2*3*...*n/(3*5*7*...*(2n+l))程序運(yùn)行后,如果輸入精度0.0005,則程序;輸出3.14…。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<conio.h>#include<math.h>doublefun(doubleeps)voidmain()(doublex;printf(nInputeps:");scanf(n%ir,&x);printf(n\neps=%1f,PI=%1f\nu,x,fun(x));doublefun(doubleeps)(doubles=1.0,s1=1.0;intn=l;while(sl>=eps) /*當(dāng)某項(xiàng)大于精度要求時(shí),繼續(xù)求下一項(xiàng)*/{sl=sl*n/(2*n+l);/*求多項(xiàng)式的每一項(xiàng)*/s=s+sl;/*求和*/n++;)return2*s;)【解析】從第2項(xiàng)開始以后的每一項(xiàng)都是其前面一項(xiàng)乘以n/(2*n+l),程序中用si來(lái)表示每一項(xiàng),s來(lái)表示求和后的結(jié)果。要注意si和s的初值都為1.0,返回時(shí)要乘以2即return2*s,這跟數(shù)學(xué)思想有關(guān)系,學(xué)習(xí)者理解后就很簡(jiǎn)單了。請(qǐng)補(bǔ)允函數(shù)fun,該函數(shù)的功能是:計(jì)算并輸出下列多項(xiàng)式的值。S例如,若主函數(shù)從犍盤給n輸入50后,則輸出為S=1.960784。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>[1]fun(intn)(inti,j;doublesum=0.0?t;for(i=l;i<=n;i++)(t=0.0;for(j=l;j<=i;j++)t+=[2];sum+=[3];}returnsum;)main()(intn;doubles;printf("\nlnputn:");scanf(H%dH,&n);s=fun(n);printf("\n\ns=%f\n\n,,,s);[1]double[2]j[3]LO/t或(double)1/t【解析】填空1:根據(jù)主函數(shù)可知,返回值是一個(gè)double型的數(shù)據(jù),因此填入double。填空2:由題中的公式可知,t表示分?jǐn)?shù)分母的累加,那么應(yīng)填入j。填空3:計(jì)算整個(gè)公式的和,就是分母的倒數(shù)的和,由于在計(jì)算過(guò)程中有小數(shù)存在,應(yīng)把分子寫為double型的數(shù)據(jù),所以填入1.0/t或(double)1/t。下列給定程序中函數(shù)fun的功能是:將長(zhǎng)整型數(shù)中每一位上為奇數(shù)的數(shù)依次取出,構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。例如當(dāng)s中的數(shù)為87653142時(shí),t中的數(shù)為7531?請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidfun(longsjong*t){intd;longsl=l;/*************tound**************/t=0;while(s>0){d=s%10;/*************,ound**************/if(d%2==0){*t=d*sl+*t;sl*=10;}s/=10;voidmain(){longs,t;system(nCLSu);printf(n\nPleaseenters:");scanf(“%ld”,&s);fun(s,&t);printf(MTheresultis:%ld\nM,t);}(1)錯(cuò)誤:t=0; 正確:*t=0;(2)錯(cuò)誤:if(d%2=0) 正確:if(d%2!=0)【解析】其實(shí),本題的重點(diǎn)在考查兩個(gè)問(wèn)題:第1個(gè)錯(cuò)誤中出現(xiàn)了一個(gè)t=0,那么請(qǐng)看一下t是從哪兒來(lái)的,第1次出現(xiàn)t的地方在哪兒?對(duì),就這么簡(jiǎn)單。那我們?cè)賮?lái)思考一下用C語(yǔ)言表達(dá)一個(gè)奇數(shù)的話應(yīng)該怎么表達(dá)?用數(shù)學(xué)的方法呢?偶數(shù)是能被2整除的,奇數(shù)剛好相反,那么if(d%2==0)是想表示奇數(shù)還是偶數(shù)呢,看題目就明白了!請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)放在數(shù)組a中,通過(guò)n返回這些數(shù)的個(gè)數(shù)。例如,若傳給m的值為50,則程序輸出:711142122283335424449注意:部分源程序給出如卜。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#defineM100voidfun(intm,int*a,int*n)voidmain()(intaa[M],n,k;system("CLS");fun(50,aa,&n);for(k=0;k<n;k++)if((k+l)%20==0) /*每行輸出20個(gè)數(shù)*/{printf("%4d",aa[k]);printf("\n");)elseprintf("%4d",aa[k]);printf("\n");voidfun(intm,int*a,int*n)(inti,j=0;for(i=1;i<=m;i++)if(i%7==0lli%ll==0) /*求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)放在數(shù)組a中*/afj++]=i;*n=j;/*返回這些數(shù)的個(gè)數(shù)*/)【解析】本題要找出能被7或11整除的所有整數(shù),注意數(shù)學(xué)中的"或"和C語(yǔ)言中的“或”的區(qū)別,在此處,if條件語(yǔ)句中用了"II"運(yùn)算符,若要找能同時(shí)被7和11整除的所有整數(shù),則在if()中應(yīng)用"&&”運(yùn)算符。010請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:求n!。例如7!=5040。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidmain()(intI,n;longf=l;syslem(“CLS");printf("Inputn:");scanf(“%d",【1】);for([2];I<=n;I++)[3];printf(M%d!=%ld\nM,n,f);[I]&n【2]1=1或1=2 [3]f*=I【解析】填空1:本題考查對(duì)標(biāo)準(zhǔn)輸入函數(shù)scanf()的掌握,地址列表中都是地址值,所以在變量名前要加上取址運(yùn)算符&。填空2:n的階乘是將1、2、3……n累積相乘,所以for循環(huán)中I從1開始取數(shù)。因?yàn)?乘以任何數(shù)都等于這個(gè)數(shù)本身,所以I也可以從2開始取數(shù)。填空3:掌握了階乘的算法,這空就非常簡(jiǎn)單了。下列給定程序中,函數(shù)fun的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)目,并作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中的錯(cuò)誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#defineN80intfun(char*s,char*t)(intn;char*p,*r;n=0;/********found********/p=&s[OJ;*r=t;while(*p)(if(*r==*p)r++;if(*r==AO')n++;/*******found*******/ 填空 P++;)returnn;}main()(chara[N],b[N];intm;printf(n\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b);m=printf(u\nTheresultis:m=%d\nM,m);(1)錯(cuò)誤:*r=t;正確:r=t;(2)應(yīng)填:r=t;或【解析】從字符串s中找出子字符串的方法是:從第1個(gè)字符開始,對(duì)字符串進(jìn)行遍歷;若s串的當(dāng)前字符等于t串的第1個(gè)字符,兩字符串的指針自動(dòng)加1,繼續(xù)比較下一個(gè)字符;若比較至字符串的末尾,則跳出循環(huán);若s串的字符和t串的字符不對(duì)應(yīng)相同,則繼續(xù)對(duì)s串的下一個(gè)字符進(jìn)行處理。請(qǐng)編寫函數(shù)fun,它的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。例如,若輸入字符串123412132,輸入字符1,則輸出3。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#defineM81intfun(char*ss,charc)voidmain(){chara[M],ch;system("CLSu);printf(H\nPleaseenterastring:");gets(a);printf(n\nPleaseenterachar:");ch=getchar();printf(H\nThenumberofthecharis:%d\n'\fun(a,ch));intfun(char*ss,charc)(inti=0;for(;*ss!=AO*;ss++)if(*ss==c)i++; /*求出ss所指字符串中指定字符的個(gè)數(shù)*/returni;)【解析】從字符串SS中找出子字符串的方法是:從第1個(gè)字符開始,對(duì)字符串進(jìn)行遍歷;若SS串的當(dāng)前字符等于t串的第1個(gè)字符,兩字符串的指針自動(dòng)加1,繼續(xù)比較下一個(gè)字符;若比較至字符串的結(jié)尾,則跳出循環(huán);若SS串的字符和C串的字符不對(duì)應(yīng)相同,則繼續(xù)對(duì)SS串的下一個(gè)字符進(jìn)行處理。本程序是采用逐一比較的方式找出出現(xiàn)的次數(shù)。循環(huán)的作用是在串中從左到右逐一走動(dòng),if()的作用是進(jìn)行判斷是否相同,若與C相同則表示又出現(xiàn)一次。011請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:先以只寫方式打開文件"。utll.dat",再把字符串str中的字符保存到這個(gè)磁盤文件中。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#defineN80voidmain()(HLE*fp;inti=0;charch;charstr[N]=Mrmastudent!H;system(nCLSM);if((fp=fopen([1]))==NULL)printf(ncannotopenoutll.dat\nn);exit(O);ch=str[i];[2];putchar(ch);i++;【1】"outll.dat"w"[2]fputc(ch,fp)[3]fclose(fp)【解析】填空1:本題考查對(duì)文件操作的掌握。打開一個(gè)文件的調(diào)用方式是,fp=fopen(文件名,使用文件方式),題目要求以只寫的方式打開文件"。utll.dat",所以文件使用方式為"w"o填空2:fputc()函數(shù)用于將一個(gè)字符寫到磁盤文件上去,調(diào)用形式為:fputc(要輸出的字符,文件指針)。填空3:對(duì)一個(gè)文件進(jìn)行操作后,應(yīng)該關(guān)閉它,以防被誤用。調(diào)用形式為:fclose(文件指針)。數(shù)列中,第一項(xiàng)為3,后一項(xiàng)都比前一項(xiàng)的值增5。下列給定程序中,函數(shù)fun的功能是:計(jì)算前n(4<n<50)項(xiàng)的累計(jì)和。在累加過(guò)程中把那些被4除后余2的當(dāng)前累加值放入數(shù)組中,符合此條件的累加值的個(gè)數(shù)作為函數(shù)值返回主函數(shù)里。如,當(dāng)n的值為20時(shí),該數(shù)列為3,8,13,18,23,28,…,93,98.符合此條件的累加值應(yīng)為42,126,366,570,1010。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#defineN20intfun(intn,int*a)/*************found**************/{inti,j,k,sum;sum=0;for(k=3,i=0;i<n;i+4-,k+=5){sum=sum+k;/¥************found**************/if(sum%4=2)a[j++]=sum;/*************found**************/returnj;voidmain(){inta[N],d,n,i;printf(H\nEntern(4<=n<=50):");scanf(H%d",&n);d=fun(n,a);printf("\n\nTheresult:\n");for(i=0;i<d;i++)printf(M%6dn,a[i]);printf(H\n\n");(1)錯(cuò)誤:inti,j,k,sum;正確:inti,j=O,k,sum;(2)錯(cuò)誤:if(sum%4=2)正確:if(sum%4==2)(3)錯(cuò)誤:returnj;正確:returnj++;【解析】該題是一個(gè)公差為5的等差數(shù)列,要是用數(shù)學(xué)的辦法解決也就是一個(gè)公式兩個(gè)符號(hào),迎刃而解,所以用C語(yǔ)言來(lái)求這樣很有規(guī)律的等差數(shù)列前n項(xiàng)和的話,也相當(dāng)簡(jiǎn)單,關(guān)鍵看細(xì)節(jié)!i,k,sum都分別定義了,那么j呢?所以,正確的應(yīng)該是inti,j=O,k,sum;,再往下看,if(sum%4=2)是在說(shuō)明題干中”在累加過(guò)程中把那些被4除后余2的當(dāng)前累加值放入數(shù)組中,符合此條件的累加值的個(gè)數(shù)作為函數(shù)值返回主函數(shù)",那么“余2”的表示方法呢?不用看就知道應(yīng)該是if(sum%4==2),后面的返回錯(cuò)誤就不提了吧,看看a[j++]=sum;語(yǔ)句,難道還能返回給j嗎?請(qǐng)編寫函數(shù)fun,其功能是:將兩個(gè)兩位數(shù)的正整數(shù)a、b合并成一個(gè)整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的十位和千位上,b數(shù)的十位和個(gè)位數(shù)依次放在c數(shù)的個(gè)位和百位上。例如,當(dāng)a=45,b=12,調(diào)用該函數(shù)后,c=5241o注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<conio.h>#include<stdio.h>#include<stdio.h>voidfun(intajntb,long*c)main()inta,b;longc;printf(*'Inputa,b:");scanf(M%d%dM,&a,&b);fun(a,b,&c);printf(nTheresultis:%ld\nH,c);voidfun(inta,intb,long*c)(*c=(a%10)*1000+(b%10)*100+(a/10)*10+b/l0;I【解析】本題中主要的問(wèn)題是怎么取出a和b的個(gè)位數(shù)和十位數(shù),取出后怎么表示成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對(duì)他們除10可得到他們的十位數(shù),分別用10對(duì)他們求余可得到他們的個(gè)位數(shù)。得到后對(duì)應(yīng)乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個(gè)位數(shù)。注意要使用c時(shí)要進(jìn)行指針運(yùn)算。012請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:把文本文件B中的內(nèi)容追加到文本文件A的內(nèi)容之后。例如,文件B的內(nèi)容為Tmten.",文件A的內(nèi)容為Tmastudent!",追加之后文件A的內(nèi)容為"I'mastudent!I'mten."注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)main的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#defineN80voidmain()(FILE*fp,*fpl,*fp2;inti;charc[NJ,ch;system(,,CLSM);if((fp=fopen(,'A.datu;,rM))==NULL)(printf(HfileAcannotbeopened\n°);exit(O);}printf("\nAcontentsare:\n\nM);for(i=0;(ch=fgetc(fp))!=EOF;i++)(c[i]=ch;putchar(c[i]);)fclose(fp);if((fp=fopen(nB.datu;'rH))==NULL)printf(HfileBcannotbeopened\nn);exit(O);)printf(H\n\n\nBcontentsare:\n\nM);for(i=0;(ch=fgetc(fp))!=EOF;i++)(c[i]=ch;putchar(c[i]);}fclose(fp);if((fpl=fopen("A.dat",“a"))[1](fp2=fopen("B.dat”,T))){while((ch=fgetc(fp2))!=EOF)[2];)else{printf("CannotopenAB!\nH);)fclose(fp2);fclose(fpl);printf(M\n***newAcontents***\n\n");if((fp=fopen(,'A.datu;,rH))==NULL)(printf(nfileAcannotbeopened\n°);exit(O);)for(i=0;(ch=fgetc(fp))!=EOF;i++)(c[i]=ch;putchar(c[i]);)[3];[1]&& [2]fputc(ch,fpl)[3]fclose(fp)【解析】填空1:當(dāng)兩個(gè)文件都被成功打開時(shí),才能將文件B中的內(nèi)容追加到文件A中,所以應(yīng)該用"與"運(yùn)算符”&&”。填空2:fputc()函數(shù)用于將一個(gè)字符寫到磁盤文件上去,調(diào)用形式為:fputc(要輸出的字符,文件指針)。填空3:對(duì)一個(gè)文件進(jìn)行操作后,應(yīng)該關(guān)閉它,以防被誤用,調(diào)用形式為:fclose(文件指針)。在主函數(shù)中從鍵盤輸入若干個(gè)數(shù)放入數(shù)組中,用0結(jié)束輸入并放在最后一個(gè)元素中。下列給定程序中,函數(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<conio.h>#include<stdio.h>doublefun(intx[])(/********8un(j********/intsum=0.0;intc=0,i=0;while(x[i]!=0)(if(x[i]>0)(sum+=x[i];C++;)i++;I/********found********/sum\=c;returnsum;}main()(intxflOOO];inti=0;printf("\nPleaseentersomedata(endwith0):”);do(scanf("%dn,&x[i]);}while(x[i++]!=0);printf(',%lf\n,',fun(x));(1)錯(cuò)誤:intsum=0.0;正確:doublesum=0.0;(2)錯(cuò)誤:sum\=c;正確:sum/=c;【解析】(1)定義變量錯(cuò)誤。(2)c語(yǔ)言中的除法運(yùn)算符是假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:將字符串中的前導(dǎo)*號(hào)全部刪除,中間和后面的*號(hào)不刪除。例如,若字符串中的內(nèi)容為****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是A*BC*DEF*G*******。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdio.h>#include<conio.h>voidfun(char*a)voidmain()(chars[81];printf(nEnterastring:\nn);gets(s);fun(s);printf(MThestringafterdeleted:\nn);puts(s);voidfun(char*a)(char*p=a;while(*p==***)p++; /*指針p指向字符串第一個(gè)字母*/for(;*p!=*\0*;p4-+,a++)*a=*p; /*從第一個(gè)字母開始,其后的字符都放入指針a所指的字符串中*/*a=VT; /*在字符串最后加上結(jié)束標(biāo)記符*/)【解析】在前面的改錯(cuò)題和編程題中,相關(guān)試題已經(jīng)出現(xiàn)好多次了,我們?cè)诖颂峁┝硪环N解答方法。#include<string.h>voidfun(char*a){char*p=a;while(*p==***)p++;strcpy(a,p);013請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是:建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表并輸出到文件"outl3.dat”和屏幕上,各結(jié)點(diǎn)的值為對(duì)應(yīng)的下標(biāo),鏈表的結(jié)點(diǎn)數(shù)及輸出的文件名作為參數(shù)傳入。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>typedefstructss(intdata;structss*next;}NODE;voidfun(intn,char*filename)(NODE*h,*p,*s;FILE*pf;inti;h=p=(NODE*)malloc(sizeof(NODE));h->data=O;for(i=l;i<n;i++)(s=(NODE*)malloc(sizeof(NODE));s->data=[1];[2];p=[3];1p->next=NULL;if((pf=fopen(filename,"wH))==NULL)(printf(HCannotopenoutl3.dat!");exit(O);}p=h;fprintf(pf,M\n***THELIST***\nM);printf(H\n***THELIST***\nn);while(p)(fprintf(pfj%3d”,p->data);printf(M%3dn,p->data);if(p->next!=NULL)fprintf(pf,H->u);printf("->n);}p=p->next;1fprintf(pf;'\nH);printf(H\nn);fclose(pf);p=h;while(p)(s=p;p=p->next;free(s);))voidmain()(char*filename="out13.dat";intn;system(“CLS");printf(n\nlnputn:n);scanf("%d'\&n);fun(n,filename);[1]i [2]p->next=s [3]p->next【解析】填空1:題目要求各結(jié)點(diǎn)的值為對(duì)應(yīng)的下標(biāo),頭結(jié)點(diǎn)的值為0,其他結(jié)點(diǎn)的值從1開始,所以此空應(yīng)填i。填空2:為了將結(jié)點(diǎn)p和結(jié)點(diǎn)s連接起來(lái),應(yīng)將結(jié)點(diǎn)p的next指針指向結(jié)點(diǎn)s。填空3:為了通過(guò)for循環(huán)形成鏈表,每執(zhí)行完一次操作,都要將指針p指向下一個(gè)結(jié)點(diǎn)。下列給定程序中,函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出3628800。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>longfun(intk)(/********tound********/ifk>lreturn(k*fun(k-l));return1;main()intk=10;printf(n%d!=%ld\nM,k,fun(k));(1)錯(cuò)誤:ifk>l正確:if(k>l)【解析】(1)簡(jiǎn)單語(yǔ)法錯(cuò)誤,不作介紹了。請(qǐng)編寫函數(shù)fun,它的功能是計(jì)算:s=(ln(1)+ln(2)+ln(3)+...+ln(m))0.5在C語(yǔ)言中可調(diào)用log(n)函數(shù)求ln(n)o例如,若m的值為20,則fun函數(shù)值為6.506583。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<math.h>doublefun(intm)voidmain()(system(nCLSn);printf(M%f\n\fun(20));doublefun(intm)(inti;doubles=0.0;for(i=1;i<=m;i++)s=s+log(i); /*計(jì)算s=ln(1)+ln(2)+ln(3)+…+ln(m)*/return sqrt(s);/*對(duì)s求平方根并返回*/【解析】首先,題目要求計(jì)算從1到m的對(duì)數(shù)的和,可用從1到m的循環(huán),每次循環(huán)都累加求和。該題需要注意之處是,log()函數(shù)的形式參數(shù)應(yīng)當(dāng)為double型變量,而用于循環(huán)的基數(shù)變量為整數(shù),需要進(jìn)行強(qiáng)制轉(zhuǎn)換。在返回的時(shí)候求出平方根。請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:計(jì)算兩個(gè)自然數(shù)n和m(mvl(X)00)之間所有數(shù)的和(n和m從鍵盤輸入)。例如:當(dāng)n=l,m=100時(shí),sum=5O5O;當(dāng)n=100,m=1000時(shí),sum=495550o注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語(yǔ)句。試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidmain()intn,m;longsum;[1];system(nCLS");printf("\nlnputn,m\nK);scanf("%d,%d",&n,&m);while(n<=m))printf("sum=%[3]\n",sum);[1]sum=0[2]sum+=n[3]Id【解析】填空1:變量sum進(jìn)行了類型聲明,但沒(méi)有進(jìn)行初始化,而后面的程序用sum來(lái)存放最后的結(jié)果,所以要在使用前將sum初始化為0。填空2:通過(guò)while循環(huán)將自然數(shù)n和m之間的數(shù)進(jìn)行累加I,結(jié)果存于sum中。填空3:由于sum為長(zhǎng)整型,所以標(biāo)準(zhǔn)輸出函數(shù)printf()中的格式控制符為"%Id”。下列給定程序中,函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對(duì)調(diào)、次最大數(shù)和a[l]中的數(shù)對(duì)調(diào)。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>#defineN20/********found*******/voidfun(int*a,intn);(inti,m,t,k;for(i=0;iv2;i++)(/********found********/m=0;for(k=i+l;k<n;k++)if(a[k]>a[m])m=k;t=a[i];a[i]=a[m];a[m]=t;main()(intb[N]={11,5,12,03697,10,8),n=10,i;for(i=0;i<n;i++)printf(M%dM,b[i]);printf('^\n^^);fun(b,n);for(i=0;i<n;i++)printf(M%dH,b[i]);printfCAn0);(1)錯(cuò)誤:voidfun(int*a,intn);正確:voidfun(int*a,intn)(2)錯(cuò)誤:m=0;正確:m=i;【解析】(1)簡(jiǎn)單的語(yǔ)法錯(cuò)誤。(2)這是一段簡(jiǎn)單的比較程序,m作為一個(gè)比較數(shù)的下標(biāo)。從下面的程序可以看出,m=io編寫函數(shù)fun,它的功能是:求n以內(nèi)(不包括n)同時(shí)能被5與11整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。例如:n為1000時(shí),函數(shù)值應(yīng)為s=96.979379。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。

試題程序:#include試題程序:#include#include#include#include<stdlib.h><conio.h><math.h><stdio.h>doublefun(intn)voidmain()(system(nCLSu);printf(Hs=%f\n'\fun(1000));doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++) /*從0?n中找到既能被5整除同時(shí)又能被11整除的數(shù),并將這些數(shù)求和*/if(i%5==0&&i%ll==0)s=s+i;s=sqrt(s);/*對(duì)s求平方根*/returns;)【解析】本題的解題思路是逐個(gè)取得從。?n之間的數(shù),對(duì)每次取得的數(shù)進(jìn)行條件判斷,條件是既能被5整除又能被11整除,注意:這兩個(gè)條件要求同時(shí)成立,因此用到了“&&"運(yùn)算符。若滿足條件,該數(shù)就被累加到s中去,求出所有符合條件的數(shù)后,用sqrt()函數(shù)(包含于頭文件vmath.h>中)對(duì)s求平方根。015請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能求能是:整除x且

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論