南開100套題(C語言)_第1頁
南開100套題(C語言)_第2頁
南開100套題(C語言)_第3頁
南開100套題(C語言)_第4頁
南開100套題(C語言)_第5頁
已閱讀5頁,還剩179頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一套給定程序的功能是:求二分之一的圓面積,函數(shù)通過形參得到圓的半徑,函數(shù)返回二分之一的圓面積(注:圓面積公式為:S=?!?,在程序中定義的變量名要與公式的變量相同)。例如,輸入圓的半徑值:19.527,輸出為:s=598.949991。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdio.h>doublefun(doubler)(return3.14159*[1)/2.0;}voidmain()(doublex;printf("Enterx:");scanf【2】);printf("s=%lf\n",fun(13】));}【參考答案】(l)r*r(2)&x (3)x【考點分析】本題考查:圓面積計算公式S=乃*r*r;scanf()函數(shù)的形式,其一般形式為“scanf(“格式控制字符串“,地址表列);“,注意地址是由地址運(yùn)算符"&"后跟變量名組成的;printf()函數(shù)的形式,其一般形式為"printf(“格式控制字符申”,輸出表列):函數(shù)實參調(diào)用,函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。【解題思路】填空1:計算圓的面積,公式為:5=乃「*r。填空2:scanf()函數(shù)一般形式為scanf(格式控制,地址表列),因此填入&X。填空3:函數(shù)的實際參數(shù)是圓的半徑X。下列給定程序中,函數(shù)fun的功能是:計算S=f(-n)+f(-n+1)+...+f(0)+f(l)+f(2)+...f(n)的值。例如,當(dāng)n為5時,函數(shù)值應(yīng)為10.407143。f(x)函數(shù)定義如下:f(x)=(x+l)/(x-2) x>0<0 x=0或x=2(x-l)/(x-2) x<0請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:^include<stdlib.h>nclude<conio.h>^include<stdio.h>#include<math.h>/*************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;i<=n;i++){y=f(1.0*i);s+=y;}/*************foiind**************/returns)voidmain(){system(*CLS*);printf(飛f\n”,fun(5));)【參考答案】錯誤:f(doublex)正確:doublef(doublex)錯誤:returns 正確:returns;【考點分析】本題考查:函數(shù)的定義,其一般形式為”類型標(biāo)識符函數(shù)名(形式參數(shù)表列)”,其中類型標(biāo)識符指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返回值的類型?!窘忸}思路】該程序的流程是,fun()程序?qū)(n)項循環(huán)累加,并且采用條件選擇語句計算函數(shù)f(x)的值。本題的錯誤在于未定義函數(shù)f(doublex)的返回值類型。C語言規(guī)定,在未顯式聲明的情況下,函數(shù)返回值默認(rèn)為im型。編寫函數(shù)fun,函數(shù)的功能是:根據(jù)以下公式計算s,計算結(jié)果作為函數(shù)值返回;n通過形參傳入。S=l+1/(1+2)+1/(l+2+3)+...+l/(l+2+3+.??+n)例如,若n的值為11時,函數(shù)的值為1.833333。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<string.h>#include<stdlib.h>floatfun(intn)(}voidmain()(FILE*wf;intn;floats;system(*CLS*);printf(*\nPleaseenterN:");scanf&n);s=fun(n);printf(*Theresultis:%f\n*,s);wf=fopen(*out.dat*,"w");fprintf(wf,"%f”,fun(11));fclose(wf);【參考答案】floatfun(intn)(inti,sl=O;/*定義整型變量si,表示分母*/floats=0.0;/*定義單精度變量s,表示每一項*/fbr(i=1;i<=n;i-H-) {sl=sl+i; /*求每一項的分母*/s=s+1.0/sl; /*求多項式的值*/)returns;)【考點分析】本題考查:計算給定表達(dá)式的值,根據(jù)題意判斷表達(dá)式為1到n累加倒數(shù)之和。變量數(shù)據(jù)類型及強(qiáng)制轉(zhuǎn)換操作。for循環(huán)語句,一般情況需要確定循環(huán)變量的取值范圍。使用return語句完成函數(shù)值的返回?!窘忸}思路】本題可以通過for循環(huán)語句來實現(xiàn)第1項到第n項的變化,然后計算各項的累加和。方法是先根據(jù)題目要求定義變量(注意該變量的數(shù)據(jù)類型),然后對其進(jìn)行初始化操作,因為該變量用作累加器,所以初始值應(yīng)為0(或0。根據(jù)變量數(shù)據(jù)類型來確定),再通過for循環(huán)語句來完成累加過程。本題中si用來表示式中每一項的分母,它可以由前一項的分母加項數(shù)得到。注意:由于si定義成一個整型,所以在s=s+L0/sl中不能把1.0寫成1。【解題寶典】此類計算表達(dá)式值的程序,首先需要根據(jù)題意分析表達(dá)式的規(guī)律,得出通項,然后再完成程序語句。第二套請補(bǔ)充main函數(shù),該函數(shù)的功能是:計算兩個自然數(shù)n和m(m<10000)之間所有數(shù)的和(n和m從鍵盤輸入)。例如,當(dāng)n=I,m=100時,sum=5050;當(dāng)n=100,m=1000時,sum=495550。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:^include<stdlib.h>#include<stdio.h>#include<conio.h>voidmain()(intn,m;longsum;[1];system(*CLS*);printf(*\nlnputn,m\n*);scanf("%d,%d*,&n,&m);while(n<=m)([2];n++;)printf(*sum=%[3]\n",sum);)【參考答案】(1)sum=O(2)sum+=n(3)Id【考點分析】本題考查:變量初始化,需要注意該變量是累加器還是累乘器:printf()函數(shù),其一般形式為“printf(“格式控制符”,輸出表列汽耕,格式控制符用于指定輸出格式,可由格式字符串和非格式字符串兩種組成,格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等,如“%ld”表示按十進(jìn)制長整型輸出,非格式字符串在輸出時原樣照印,在顯示中起提示作用?!窘忸}思路】填空1:變量sum進(jìn)行了類型聲明,但沒有進(jìn)行初始化,而后面的程序用sum來存放最后的結(jié)果,所以要在使用前將sum初始化為0。填空2:通過while循環(huán)將自然數(shù)n和m之間的數(shù)進(jìn)行累加,結(jié)果存于sum中。填空3:由于sum為長整型,所以標(biāo)準(zhǔn)輸出函數(shù)prinlf()中的格式控制符為“%ld”。下列給定程序中,fun函數(shù)的功能是:根據(jù)形參m,計算下列公式的值:t=l+l/2+l/3+l/4+...+l/m例如,若輸入5,則應(yīng)輸出2.283333。請改正程序中的錯誤,使它能計算出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdlib.h>#include<conio.h>^include<stdio.h>doublefun(intm)(doublet=l.0;intI;for(I=2;I<=m;I++)/*************found**************/t+=l.0/k;/*************found**************/returnI;)voidmainO{intm;system("CLS");printf(*\nPleaseenter1integernumber:");scanf&m);printf(*\nTheresultisfun(m));]【參考答案】⑴錯誤:t+=1.0/k; 正確:t+=1.0/I;⑵錯誤:returnI; 正確:returnt;【考點分析】本題考查:for循環(huán)語句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值范圍;函數(shù)返回值,其一般形式為“reiurn表達(dá)式;”,該語句的功能是計算表達(dá)式的值,并返回給主調(diào)函數(shù)?!窘忸}思路】⑴該題目考查分母成等差數(shù)列遞增的一個數(shù)學(xué)公式,我們先看循環(huán)條件for(I=2;k=m;I++),i從2開始遞增到m,所以]的值應(yīng)該是由1.0/i的值逐步循環(huán)疊加后的結(jié)果,而不是t+=1.0/k;。(2)retumI;考查對程序的解讀能力,當(dāng)循環(huán)結(jié)束后(由輸入m的值決定),函數(shù)返回當(dāng)前t的值。請編寫一個函數(shù)voidfun(char*tt,intpp[]),統(tǒng)計在tt字符串中到“z"26個字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。例如,當(dāng)輸入字符串a(chǎn)bcdcfghabcdcabc后,程序的輸出結(jié)果應(yīng)該是:333221110000000000000000000注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:4include<conio.h>#include<stdio.h>^include<stdlib.h>voidfun(char*tt,intpp[])voidmain()(FILE*wf;charaa[1000];intbb[26],k;system("CLS");printf(*\nPleaseenteracharstring:”);scanfaa);fun(aa,bb);for(k=0;k<26;k++)printf(*%d*,bb[k]);printf(*\n");wf=fopen(*out.dat","w");fun("abcdefgabcdeabc”,bb);for(k=0;k<26;k++)fprintf(wf,*%d*,bb[k]);fclose(wf);【參考答案】voidfun(char*tt,intpp[J)(inti;for(i=0;iv26;i++)PP[i]=O;產(chǎn)初始化pp數(shù)組各元素為0*/for(;*tt!='\0';tt++)if(*tt>=,a,&&*tt<=,z,)

pp|*tt-'a'|++;/*將tt字符串中到N26個字母各自出現(xiàn)的次數(shù),依次放在pp數(shù)組中,任一個小寫字母減去言后所得結(jié)果正好是它對應(yīng)的下標(biāo)*/)【考點分析】本題考查:統(tǒng)計小寫字母在指定字符串中出現(xiàn)次數(shù)。for循環(huán)語句,需要注意循環(huán)變量的取值范圍。if條件語句要注意條件表達(dá)式的判定。【解題思路】第1個循環(huán)的作用是初始化數(shù)組pp.未經(jīng)賦值變量的量為一個不確定數(shù)字。由于它要將言到226個字母的個數(shù)依次放到數(shù)組pp中,即'"的個數(shù)存于pp⑼中,b的個數(shù)存于pp[l]中,V的個數(shù)存于pp⑵中,…,依此類推,而言-宜的值正好為0笛?宜的值為l,'d?n的值為2,…,依此類推。任一個小寫字母減去R后所得結(jié)果正好是它對應(yīng)的下標(biāo),所以就有了pp[*tt-W]++,但*tt必須是小寫字母,即if()不應(yīng)省略。O第三套給定程序的功能是:判斷字符ch是否與串str中的某個字符相同,若相同什么也不做,若不同則插在串的最后。注意:部分源程序給出如下。請勿改動函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或語句。試題程序:ttinclude<stdio.h>#include<string.h>voidfun(char*str,charch)

while(*str&&*str!=ch)str++;if(*str[1]ch){str[O]=ch;[2]=0;})voidmain(){chars[81],c;system(*CLS*);printf(*\nPleaseenterastring:");gets(s);printf(*\nPleaseenterthecharactertosearch:");c=getchar0;fun([3]);printf(*\nTheresultis%s'n',s);}【參考答案】⑴!=(2)str[l]nJc*(str+l)(3)s,c【考點分析】本題考查:if語句,一般掌握條件表達(dá)式的判定。函數(shù)的調(diào)用,其一般形式為”函數(shù)名(實際參數(shù)表)【解題思路】!=。 正填空2:若不同則插在串的最后,那么0就在字符串的!=。 正填空2:若不同則插在串的最后,那么0就在字符串的倒數(shù)第二了。填空3:函數(shù)傳遞的參數(shù)為輸入的兩個字符串,則填入s,c。下列給定程序中,函數(shù)fun的功能是:分別統(tǒng)計字符串中大寫字母和小寫字母的個數(shù)。例如,給字符串s輸入:AaaaBBb123CCccccd,則應(yīng)輸出結(jié)果:upper=5,lower=9。請改正程序中的錯誤,使它能計算出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<conio.h>#include<stdio.h>/*********found***********/voidfun(char*s,inta,intb){while(*s){/*********found***********/if(*s>=,A*&&*s<=,Z')a++;/*********foUn(j***********/if(*s>=,a*&&*s<=,z)b++;s++;))mainO(chars[100];intupper=0,lower=0;printf(*\npleaseastringgets(s);fun(s,ftupper,&1ower);printf(*\n upper=%dlower=%d\n*?upper,lower);)【參考答案】錯誤:voidfun(char*s,inta,intb)確:voidfun(char*s,int*a,int*b)⑵錯誤:a++; 正確:(*a)++;(3)錯誤:b++; 正確:(*b)++;【考點分析】本題考查:函數(shù)的參數(shù)傳遞和指針變量,理解指針變量作為函數(shù)的參數(shù),函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型,它的作用是將一個變量的地址傳送到另一個函數(shù)中。【解題思路】(1)根據(jù)題中程序可以看出,函數(shù)fun傳遞的是地址,那么,在函數(shù)中就應(yīng)該出現(xiàn)指針,所以改為voidfun(char*s,int*a,int*b)。⑵和⑶很明顯,這里是要累加數(shù)值,因為a、b是指針變量,所以是錯誤的。請編寫函數(shù)fun,它的功能是:求出ss所指字符串中指定字符的個數(shù),并返回此值。例如,若輸入字符串123412132.輸入字符1,則輸出3。注意:部分源程序給出如下.請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:ttinclude<conio.h>#include<stdio.h>^include<stdlib.h>#defineM81intfun(char*ss,charc)voidmain(){FILE*wf;chara[M],ch;system(*CLS*);printf(*\nPleaseenterastring:");gets(a);printf(*\nPleaseenterachar:");ch=getchar();printf(*\nThenumberofthecharis:%d\n*,fun(a,ch));wf=fopen(*out.dat","w");fprintf(wf, fun(*123412132*,*T));fclose(wf);1/【參考答案】intfun(char*ss,charc)(intfor(;*ss!='\0';ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數(shù)*/return1;)【考點分析】本題考查:字符串結(jié)束標(biāo)識、0';for循環(huán)語句,如何遍歷字符串;通過if條件語句,判斷是否相同?!窘忸}思路】從字符串ss中找出子字符串的方法是:從第1個字符開始,對字符串進(jìn)行遍歷;若ss串的當(dāng)前字符等于t串的第1個字符,兩字符串的指針自動加1,繼續(xù)比較下一個字符;若比較至字符串的結(jié)尾,則跳出循環(huán);若ss串的字符和c串的字符不對應(yīng)相同,則繼續(xù)對ss串的下一個字符進(jìn)行處理。本程序是采用逐一比較的方式找出出現(xiàn)的次數(shù)。循環(huán)的作用是在串中從左到右逐一走動,if()的作用是進(jìn)行判斷是否相同,若與c相同,則表示又出現(xiàn)一次.第四套請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:把ASCH碼為偶數(shù)的字符從字符串str中刪除,結(jié)果仍然保存在字符串str中,字符串str從鍵盤輸入,其長度作為參數(shù)傳入函數(shù)fun.例如,輸入"abcdef",輸出"ace".注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句.試題程序:ftinclude<stdlib.h>^include<stdio.h>^defineN80[1](inti,j;[2];for(i=0;i<n:i++)(if(s[i]%2!=0)

s[j++]=s[i];)(31;)voidmain()

inti=0,strlen=O;charstr[N];system(*CLS*);printf(^\nlnputastring:Xn^);gets(str);while(str[i]!='\0')(strlen++;i++;)fun(str,strlen);printf(*\n***displaystring***\n");puts(str);}【參考答案】(1)voidfun(chars[],intn)⑵網(wǎng)⑶煩=''0'【考點分析】本題考查:函數(shù)定義,需要確定類型標(biāo)識符、函數(shù)名和形式參數(shù)。變量初始化,變量聲明后,要進(jìn)行初始化賦值,我們對變量進(jìn)行初始化時,必須確定好變量的作用。字符串結(jié)束標(biāo)識用來結(jié)束字符串,是經(jīng)??疾榈闹R點?!窘忸}思路】填空1:由main函數(shù)調(diào)用函數(shù)fun的格式可以知道,函數(shù)fun沒有返回值,第一個參數(shù)是字符數(shù)組,第二個參數(shù)是整型變量。填空2:變量j聲明時,沒有初始化,所以在使用j之前要將它初始化為0。填空3:當(dāng)把所有ASCII碼為偶數(shù)的字符都存入字符串s中后,要在最后加上‘\0',表示字符串的結(jié)束。下列給定程序中函數(shù)fun的功能是:計算正整數(shù)num各位上的數(shù)字之積。例如,若輸入252,則輸出應(yīng)該是20。若輸入202,則輸出應(yīng)該是必請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#include<conio.h>longfun(longnum)(/*************found**************/longk;do(k*=num%10;/*************found**************/num\=10;(while(num);return(k);)main(){intn;printf(*\Pleaseenteranumber:");scanf&n);printf(*\n%ld\n*?fun(n));)【參考答案】⑴錯誤Jongk;(2)錯誤:num\=10;【考點分析】變量初始化,保存乘積的變量初始化為1?!窘忸}思路】(1)k用來存放各位數(shù)字的積,初值應(yīng)為1O⑵這里是一個符號錯誤,除號使用"來表示的。請編寫一個函數(shù)fun,它的功能是:求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個數(shù)。例如,若傳給m的值為50,則程序輸出:711142122283335424449注意:部分源程序給出如下。正確:longk=l;正確:num/=10;請勿改動正確:longk=l;正確:num/=10;試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>tfdefineM100voidfun(intm,int*a,int*n)voidmain(){FILE*wf;intaa[M],n,k;system("CLS");fun(50,aa,&n);for(k=0;k<n;k++)if((k+l)%20==0) /*每行輸出20個數(shù)*/{printf("%4d”,aa[k]);printf(*\n*);)elseprintfC%4d*,aa[k]);printfOwf=fopen(*out.dat*,"w");for(k=0;k<n;k++)fprintf(wf,"%4d”,aa[k]);fclose(wf);/*****************************/)【參考答案】voidfun(intm,int*a,int*n)(inti,j=0;for(i=l;i<=m;i++)if(j%7=0lli%ll==0)/*求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)放在數(shù)組a中*/aU++]=i;*n=j; /*返回這些數(shù)的個數(shù)*/)【考點分析】本題考查:整除的判斷方法,用%對除數(shù)求余,若余數(shù)為。,表示能被整除。if語句條件表達(dá)式,注意”邏輯與“和“邏輯或"的區(qū)別。for循環(huán)語句,注意循環(huán)變量的取值范圍。一維數(shù)組的定義與引用。【解題思路】本題要找出能被7或11整除的所有整數(shù),注意數(shù)學(xué)中的“或"和C語言中的“或”的區(qū)別,在此處,if條件語句中用”11“運(yùn)算符,若要找能同時被7和11整除的所有整數(shù),則在if()中,應(yīng)用"&&"運(yùn)算符。第五套請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:判斷某一個年份是否為閏年。例如,1900年不是閏年,2004是閏年。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdlib.h>ttinclude<stdio.h>#include<conio.h>intfun(intn)(intflag=0;if(n%4=0)(if([11)flag=l;}if([2])flag』return[3];)voidmain()(intyear;system(*CLS*);printf("Inputtheyear:*);scanf&year);if(fun(year))printfC*%disaleapyear.\n*,year);elseprintf(飛disnotaleapyear.\n”,year);)【參考答案】⑴n%100!=0或n%100(2)n%400==0 (3)flag【考點分析】本題考查:判斷閏年的算法,年份能被4整除但不能被100整除,或者年份能被400整除。return語句,負(fù)責(zé)將函數(shù)值返回給主調(diào)函數(shù)。一般情況下,flag在C語言中作為一種標(biāo)志來使用,本書中有多個題目都使用了nag標(biāo)志。【解題思路】填空1:判斷閏年的方法是,年份能被4整除但不能被100整除.或者年份能被400整除。n不能被100整除,即對100取余非零。填空2:能被400整除的年份也是閏年,n能被400整除,即對400取余為零。填空3:flag標(biāo)記年份n是否為閏年,當(dāng)flag為1時,是閏年,當(dāng)flag為。時,不是閏年。下列給定程序中函數(shù)fun的功能是:計算n!。例如,給n輸入5,則輸出120.000000。請改正程序中的錯誤,使程序能輸出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:??include<stdio.h>#include<conio.h>doub1efun(intn){doubleresult=1.0;/*************t'ound**************/ifn=0return1.0;while(n>l&&n<170)/*************found**************/result=n-;returnresult;voidmain(){intn;printf(*InputN:");scanf("%d",&n);printf("\n\n%d!=%lf\n”,n,fun(n));)【參考答案】(1)錯誤:ifn==0 正確:if(n=0)(2)錯誤:result=n—; 正確:result*=n—;【考點分析】本題考杳:if語句,一般情況下,需要根據(jù)題口要求確定條件表達(dá)式的內(nèi)容,同時需要注意其格式。計算階乘的方法,n!=n*(n-l)!。請編寫函數(shù)fun,其功能是:將兩個兩位數(shù)的正整數(shù)a、b合并成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)的十位和千位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的個位和百位上。例如,當(dāng)a=45,b=12,調(diào)用該函數(shù)后,c=524L注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:^include<stdio.h>#include<conio.h>voidfun(inta,intb,long*c)()voidmain()(inta,b;longc;FILE*out;printf(*Inputa,b:");scanf("%d%d”,&a,&b);fun(a,b,&c);printf(*Theresultis:%ld\n*?c);out=fopen(*out.dat","w");

fun(a+l1,b+22,&c);fprintf(out,*%ld\n*,c);fclose(out);}//【參考答案】voidfun(intajntbjong*c)(*c=(a%10)*1000+(b%10)*100+(a/10)*10+b/l0;)【考點分析】本題考查:如何取出數(shù)值n的各個位,主要是考查'%'和7的交換使用。兩個整型數(shù)相除"用來求得數(shù)的整數(shù)部分,用來求余數(shù)?!窘忸}思路】本題中主要的問題是怎么取出a和b的個位數(shù)和十位數(shù),取出后怎么表示成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應(yīng)乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進(jìn)行指針運(yùn)算。第六套請補(bǔ)充函數(shù)fun,函數(shù)fun的功能是求n的階乘。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:^include<stdio.h>longfun(intn)(if([1])return(n*fun([2]));return[3]:printf(*10!=%ld\n*?fun(10));}【參考答案】(l)n>l或kn(2)n-l (3)1【考點分析】本題考查:if語句條件表達(dá)式,這類題目一般解法是根據(jù)題意確定表達(dá)式的值,如果表達(dá)式的值為真,則執(zhí)行下面的語句;如果值為假,則不執(zhí)行該語句。遞歸算法的掌握,遞歸是指函數(shù)/過程/子程序在運(yùn)行過程序中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。【解題思路】填空1:求階乘時,采用遞歸的算法和n==l這兩種情況的處理方法不同,需要分開考慮。填空2:階乘的算法是,當(dāng)>1時,n!=n*(n-l)!,即fun(n)=n*fun(n-l)o填空3:n==l是遞歸的終止條件,返回值為1。下列給定的程序中,函數(shù)fun的功能是:計算并輸出k以內(nèi)最大的10個能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳入,若k的值為500,則函數(shù)的值為4622。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:tfinclude<stdio.h>ttinclude<conio.h>^include<stdlib.h>intfun(intk){intm=0,mc=0,j;while((k>=2)&&(mc<10)){/*************found**************/

if((k%13=0)||(k%17=0)){m=m+k;mc++;)k一;voidmain()returnm;/*************found**************/voidmain()returnm;voidmain(){system(*CLS*);printf(*%d\n”,fun(500));}【參考答案】(1)錯誤:if((k%13=0)ll(k%17=0))正5ft:if((k%13==0)ll(k%17==0))(2)錯誤:缺少大括號 正確:力口}【考點分析】本題考查:if語句,這類題目的一般解法是根據(jù)題意確定if語句的條件表達(dá)式,區(qū)別邏輯表達(dá)式和算術(shù)表達(dá)式。同時注意c語言書寫程序應(yīng)遵守的規(guī)則?!窘忸}思路】(l)x能被y整除的表示方法是x%y==O,而并非像題目中所表示的x%y=Oo所以,if((k%13=0)ll(k%17=0))修改后的結(jié)果應(yīng)該是答案所示信息。(2)缺少程序完整所需的“)“,此類信息在做題時一定要注意,我們可以在做題前先運(yùn)行一下程序,這樣明顯的錯誤一般都會有錯誤信息顯示出來,比如丟失"}"的錯誤信息是"Compoundstatementmissing}infunctionfun",并在當(dāng)前錯誤處停止光標(biāo),我們只要按回車鍵進(jìn)行編輯就可以了。請編寫函數(shù)fun,它的功能是計算:s=(ln(1)+ln(2)+ln(3)+...+ln(m))0.5在C語言中可調(diào)用】og(n)函數(shù)求ln(n)。例如,若m的值為20,則fun函數(shù)值為6.506583o注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>^include<math.h>^include<stdlib.h>doublefun(intm)voidmainO(FILE*wf;system(*CLS*);printf(*%f\n”,fun(20));wf=fopen(*out.dat","w");fprintf(wf,*%f*?fun(20));fclose(wf);1/【參考答案】doublefun(intm)(inti;doubles=0.0;for(i=l;i<=m;i++)s=s+log(i);returnsqrt(s);/*計算s=ln(1)+ln(2)+ln(3)+…+ln(m)*//*對s求平方根并返回*/)【考點分析】計算表達(dá)式的值,一般都要定義一個變量sum作為累加(乘器),加法運(yùn)算時賦初值為0,乘法運(yùn)算吐賦初值為1,然后利用循環(huán)語句,使sum進(jìn)行累加或累乘。【解題思路】題目要求計算從1到m的對數(shù)的和,可用從1到m的循環(huán),每次循環(huán)都累加求和.該題需要注意之處是Jog()函數(shù)的形式參數(shù)應(yīng)當(dāng)為double型變量,而用于循環(huán)的基數(shù)變量為整數(shù),需要進(jìn)行強(qiáng)制轉(zhuǎn)換,在返回的時候求出平方根。第七套請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:整除x且是偶數(shù)的數(shù),把這些數(shù)保存在數(shù)組bb中,并按從大到小的順序輸出。例如當(dāng)x=20時,依次輸出:201042,注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:include<stdlib.h>include<conio.h>include<stdio.h>voidfun(intk,intbb[]){intI;intj=0;for([1];K=k;I++)(if([2])bb[j++]=I;}printf(*\n\n*);for(I=[3];I>=0;I—)printf(*%d*,bb[I]);}voidmain0(intk=l;intbb[100];system(*CLS*);printf(*\nPleaseinputX=");scanf&k);fun(k,bb);}【參考答案】(l)i=l(2)k%i=0&&i%2=0(3)-j或j?l【考點分析】本題考查:for循環(huán)語句的循環(huán)初值,根據(jù)題意確定循環(huán)變量取值范圍。if語句的條件表達(dá)式,根據(jù)題意確定條件表達(dá)式,本題的條件表達(dá)式應(yīng)該既滿足整除又滿足偶數(shù)的條件。【解題思路】填空1:為了求出能整除k,且是偶數(shù)的數(shù),尋找范圍是從1到k。填空2:如果i能整除k,則k對i求余為0,如果i為偶數(shù),則i對2求余為0,由于這兩個條件要同時滿足,所以要使用"與“運(yùn)算符“&&”。填空3:由于數(shù)組bb[]中的數(shù)是按從小到大的順序排列的,而題目要求按從大到小輸出,所以從數(shù)組的最后一個元素開始,依次輸出。因為在for循環(huán)中,變量j多加了一次,所以這里要將j減1,得到數(shù)組最后一個元素的下標(biāo)。下列給定程序中,函數(shù)fun()的功能是:根據(jù)整型形參m的值,計算如下公式的值:t=l-l/(2x2)-l/(3x3)-…一l/(mxm)請改正函數(shù)fun()中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:^include<stdlib.h>#include<conio.h>^include<stdio.h>doublefun(intm){doubley=1.0;intI;/*************found**************/for(1=2;I<m;I++)/*************found**************/y-=l/(I*I);return(y);}voidmainO{intn=5;system(*CLS*);printf(*\nTheresultis%lf\n*,fun(n));}【參考答案】(1)錯誤:for(i=2;ivm;i++)正確:for(i=2;iv=m;i++)⑵錯誤:y-=l/(i*i);正確:y-=1.0/(i*i);【考點分析】本題考查:for循環(huán)語句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值范圍。變量數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,是通過類型轉(zhuǎn)換運(yùn)算來實現(xiàn)的。一般形式為:"(類型說明符)(表達(dá)式)",其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。【解題思路】該題是一道簡單的計算題,循環(huán)條件for(i=2;i<m;i++)中忽略了i=m時的一種情況,因為題目中i是從2到m的一個計算公式。y-=l/(i*i);的錯誤很明顯,是語法錯誤,由定義doubley=10可知,應(yīng)該是y-=LO/(i*i)而非y-=l/(i*i);。例如:(float)a 把a(bǔ)轉(zhuǎn)換為實型(int)(x+y) 把x+y的結(jié)果轉(zhuǎn)換為整型編寫函數(shù)fun,它的功能是:求n以內(nèi)(不包括n)同時能被5與11整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。例如,n為1000時,函數(shù)值應(yīng)為s=96.979379。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>^include<math.h>^include<stdio.h>#include<stdlib.h>doublefun(intn)voidmain()(FILE*wf;system(*CLS*);printf(*s=%f\n*?fun(1000));wf=fopen(*out.dat*,"w");fprintf(wf,*%f*,fun(1000));fclose(wf);)【參考答案】doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*從0n中找到既能被5整除同時又能被11整除的數(shù),并將這些數(shù)求和*/if(i%5==0&&i%ll=0)s=s+i;s=sqrt(s); /*對s求平方根*/returns;]【考點分析】本題考查:整除判定后求和、再對求和結(jié)果求平方根運(yùn)算;變量數(shù)據(jù)類型,求和時變量如何初始化;整除的方法;if條件語句及“邏輯與”運(yùn)算;sqrt()平方根函數(shù)的應(yīng)用?!窘忸}思路】本題的解題思路是逐個取得從0到n之間的數(shù),對每次取得的數(shù)進(jìn)行條件判斷,條件是既能被5整除又能被11整除,注意這兩個條件要求同時成立,因此用到了“&&”運(yùn)算符。若滿足條件,該數(shù)就被累加到s中去,求出所有符合條件的數(shù)后,用sqrt()函數(shù)(包含于頭文件<math.h>中)對s求平方根。第八套請補(bǔ)充函數(shù)fun,它的功能是:計算并輸出n(包括n)以內(nèi)所有能被3或7整除的自然數(shù)的倒數(shù)之和。例如,在主函數(shù)中從鍵盤給n輸入30后,輸出為:s=1.226323。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:^include<stdio.h>doublefun(intn)(intI;doublesum=0.0;for(1=1;[1];I++)if(I%3=0[2]I%7==0)sum+=[3]/I;returnsum;)voidmain()(intn;doubles;printf("\nlnputn:");scanf&n);s=fun(n);printf("\n\ns=%f\n”,s);)【參考答案】⑴i<=n(2)11 (3)1.0或(double)1【考點分析】本題考查:for循環(huán)語句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值范圍。if語句的條件表達(dá)式,這類題目的一般解法是確定條件表達(dá)式的內(nèi)容.變量數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,由強(qiáng)制轉(zhuǎn)換運(yùn)算符完成該轉(zhuǎn)換操作?!窘忸}思路】填空1:本題要求找出n(包括n)以內(nèi)滿足條件的自然數(shù),所以,i的取值范圍是從1到n。填空2:i能被3整除,也就是指,i除以3的余數(shù)為0。題中的條件是能被3或7整除,所以使用邏輯或運(yùn)算符T。填空3:需要注意,如果運(yùn)算符兩邊都是整型數(shù).則結(jié)果也是整型數(shù)。因為i為整型數(shù),如果將i的倒數(shù)寫為1/i,則結(jié)果為0,所以在求倒數(shù)時,要使用1。,而不是1,或者將變量i強(qiáng)制類型轉(zhuǎn)化為double型。在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用0結(jié)束輸入并放在最后一個元素中。下列給定程序中,函數(shù)fun的功能是:計算數(shù)組元素中值為正數(shù)的平均值(不包括0)。例如,數(shù)組中元素的值依次為39,-47,21,2,-8,15,0,則程序的運(yùn)行結(jié)果為19.250000。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:tfinclude<conio.h>^include<stdio.h>doublefun(intx[])(/*************found**************/intsum=0.0;intc=0,1=0;while(x[I]!=0)(if(x[I]>0)(sum+=x[I];C++;}I++;)/*************found**************/sum=sum\c;returnsum;)voidmain()(intx[1000];inti=0;system(*CLS*);printf(*\nPleaseentersomedata(endwith0)do{scanf&x[i]);}while(x[i++]!=0);printf(*%f\n*,fun(x));)【參考答案】(1)錯誤:intsum=0.0; 正確:doublesum=0.0;⑵錯誤:sum\=c; 正確:sum/=c;【考點分析】本題考查:變量的數(shù)據(jù)類型,區(qū)別im整型和double雙精度型;除法運(yùn)算符,7"。【解題思路】(1)定義變量錯誤。(2)C語言中的除法運(yùn)算符是V".請編寫函數(shù)fun,其功能是:將所有大于1小于整數(shù)m的非素數(shù)存入xx所指數(shù)組中,非素數(shù)的個數(shù)通過k傳回。例如,輸入17,則應(yīng)輸出46891012141516.注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>voidfun(intm,int*k,intxx口)voidmain()(FILE*wf;intm,n,zz[100];system(*CLS*);printf(\nPleaseenteranintegernumberbetween10and100:");scanf("%d",&n);fun(n,&m,zz);printf(*\n\nThereare%dnon-primenumberslessthan%d:",m,n);for(n=0;n<m;n++)printf(*\n%4d”,zz[n]);wf=fopen(*out.dat","w");fun(17,&m,zz);for(n=0;n<m;n++)fprintf(wf,"%4d”,zz[n]);fclose(wf);【參考答案】voidfun(intm,int*k,intxx[])inti,j,n=O;for(i=4;i<m;i++)/*找出大于1小于整數(shù)m的非素數(shù)*/{for(j=2;j<i;j++)if(i%j==O)break;if(j<i)xx[n++]=i;>*k=n; /*返回非素數(shù)的個數(shù)*/)【考點分析】本題考查:素數(shù)的判斷,是對整除算法和循環(huán)判斷結(jié)構(gòu)的考查?!窘忸}思路】這道題是考查一個數(shù)是否為素數(shù)的簡單延伸,只要掌握了判斷素數(shù)的方法,問題便能順利解決,請學(xué)習(xí)者以此題為例,搞清楚判斷素數(shù)的方法。第九套請補(bǔ)充main函數(shù),該函數(shù)的功能是:計算每個學(xué)生成績的平均分,并把結(jié)果保存在數(shù)組bb中。例 如 ,當(dāng)score[N][M]={{83.5,82,86,65,67),{80,91.5.84.99,95),(90.5,95,86,95,97)}時,三個學(xué)生的平均分為76.7,89.9,92.7。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdio.h>#defineN3^defineM5voidmain()(intI,j;static floatscore[N][M]={(83.5,82,86,65,67},(80,91.5,84,99,95},{90.5,95,86,95,97}};floatbb[N];system("CLS");for(I=0;KN;I++)[1];for(I=0:I<N;I++)for(j=0;j<M;j++)[2];bb[I]/=M;}for(I=0;KN;I++)printf("\nstudent%d\taverage=%5.If”,I+l,bb[I]):)【參考答案】(l)bb[i]=O(2)bb[i]+=score[i][j]考點分析本題考:數(shù)組的引用以及數(shù)組元素賦值?!窘忸}思路】填空1:每個人的平均分都保存在數(shù)組bb[N]中,所以在使用前要對數(shù)組bb的各元素賦初值0。填空2:為了求出平均分,首先要求出每個學(xué)生的總分,并存于數(shù)組bb中。下列給定程序中,函數(shù)fun的功能是:判斷一個整數(shù)m是否是素數(shù),若是返回1,否則返回0。在main函數(shù)中,若fun()返回1則輸出“YES",若fun()返回0則輸出"NO!"。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:^include<stdlib.h>Sinclude<conio.h〉ttinclude<stdio.h>intfun(intm){intk=2;while(k<=m&&(m%k))/*************found**************/k++/*************found**************/if(m=k)return1;elsereturn0;}voidmain(){intn;system("CLS");printf(*\nPleaseentern:");scanf&n);if(fun(n))printf(*YES\n*);elseprintf(*N0!\n*);)【參考答案】⑴錯誤:k++正確:k++;(2)錯誤:if(m=k)正確:if(m==k)【考點分析】本題考查:C程序的基本格式,每個語句后面要以「結(jié)尾。if語句,其中多數(shù)考查條件表達(dá)式,注意賦值表達(dá)式與邏輯表達(dá)式的區(qū)別?!窘忸}思路】函數(shù)fun的功能是判斷m是否為素數(shù):m從2開始作為除數(shù),并對m取余,若不存在一個數(shù)使得余數(shù)為0,則m為素數(shù),程序的錯誤在于if(m=k)語句中的邏輯表達(dá)式寫成了賦值表達(dá)式。編寫函數(shù)fun,它的功能是:根據(jù)以下公式求p的值,結(jié)果由函數(shù)值帶回。m與n為兩個正數(shù)且受求m>noP=m!/(n!(m-n)!),例如,m=12,n=8時,運(yùn)行結(jié)果為495.000000。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:ttinclude<conio.h>^include<stdio.h>^include<stdlib.h>floatfun(intm,intn)voidmain0(FILE*wf;system(*CLS*);printf(*p=%f\n*,fun(12,8));wf=fopen(*out.dat","w");fprintf(wf,"%f",fun(12,8));fclose(wf);fun(n)=10加fun(n)=10加1(〃-1)+2(〃=1)(?>1)【參考答案】floatfun(intm,intn)(inti;doublep=1.0;for(i=l;i<=m;i++)p=p*i;/*求m!*/for(i=l;i<=n;i++)p=p/i;/*求m!/n!*/for(i=l;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}【考點分析】本題考查:for循環(huán)語句,根據(jù)題意確定循環(huán)變量的取值范圍。return語句,返回函數(shù)的值,注意返回變量的類型?!窘忸}思路】本題中,欲求P的值,需要先求m、n和m-n的階乘值,可用循環(huán)語句實現(xiàn)。注意:階乘值應(yīng)當(dāng)是double類型,若定義x、y、z為整型變量,則p=x/(y*z)中的除法為整數(shù)除法。第十套請補(bǔ)充函數(shù)fun(char*s),該函數(shù)的功能是:把字符串中的內(nèi)容逆置。例如,字符串中原有的字符串為abcde,則調(diào)用該函數(shù)后,串中的內(nèi)容為edcba。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include〈string.h>#include<conio.h>^include<stdio.h>#defineN81voidfun(char*s){inti,n=strlen(s)-l;chart;for(i=0;i<n;i++,[1])t=s[i];[2];[3];}}mainO(chara[N];system(*CLS*);printf(*Enterastring:*);gets(a):printf(*The originalstringis:*);puts(a);fun(a);printf(*\n*);printf(*The stringaftermodified:*);puts(a);)【參考答案】(1)1)--或-7或4=1或11=11-1⑵s[i]=s[N]或*(s+i)=*(s+n)s[N]=t或*(s+n)=t【考點分析】本題考查:變量交換算法,注意需借助第三個變量來完成?!窘忸}思路】填空1:將字符串的內(nèi)容逆置,實際上就是將第一個字符和最后一個字符交換,再將第二個字符與倒數(shù)第二個字符交換,依此類推,直到中間的字符為止,所以需要i加1的同時,n要減Io填空2和填空3:數(shù)據(jù)的交換程序。下列給定程序中,函數(shù)fun的功能是:按如下遞歸公式求函數(shù)值。例如,當(dāng)給n輸入5時,函數(shù)值為18;當(dāng)給n輸入3時,函數(shù)值為14。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>/*************found**************/intfun(n)(intc;/*************foun(j**************/if(n=l)c=10;elsec=fun(n-l)+2;return(c);}voidmain()(intn;printf("Entern:");scanf&n);printf("Theresult:%d\n\n",fun(n));)【參考答案】⑴錯誤:intfun(n) 正確:intfun(intn)⑵錯誤:if(n=l) 正確:if(n=l)【考點分析】有參函數(shù)定義,其一般形式為:類型標(biāo)識符函數(shù)名(形式參數(shù)列表)聲明部分語句)在形參列表中給出的參數(shù)稱為形式參數(shù),它們可以是各種類型的變量,各參數(shù)之間用逗號間隔。在進(jìn)行函數(shù)調(diào)用時,主調(diào)函數(shù)將賦予這些形式參數(shù)實際的值。形參既然是變量,必須在形參表中給出形參列的類型說明?!窘忸}思路】(1)主函數(shù)中已經(jīng)定義了變量n的類型,在子函數(shù)中也要定義。(2)if后面應(yīng)該緊跟一個條件判斷表達(dá)式,而n=l是賦值表達(dá)式,表達(dá)式的值永遠(yuǎn)為真,也就是說這個條件永遠(yuǎn)成立,沒有遞歸執(zhí)行。請編一個函數(shù)floatfun(doubleh),函數(shù)的功能是:對變量h中的值保留兩位小數(shù),并對第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。例如,若h值為8.32433,則函數(shù)返回8.32;若h值為8.32533,則函數(shù)返回8.33。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:^include<stdio.h>^include<conio.h>ttinclude<stdlib.h>floatfun(floath)(}voidmain()(FILE*wf;floata;system("CLS");printf(*Entera:");scanf("%f",&a);printf(*Theoriginaldatais:");printf(*%f\n\n*,a);printf(*Theresult: %f\n*,fun(a));wf=fopen(*out.dat","w");fprintf(wf,*%f*,fun(8.32533));fclose(wf);}//【參考答案】floatfun(floath)(longt;t=(h*1000+5)/10;/*單精度數(shù)h乘以1000后再加5相當(dāng)于對h中的第三位小數(shù)進(jìn)行四舍五入,除以10后將其賦給一個長整型數(shù)時,把第三位小數(shù)后的數(shù)全部截去*/return(float)t/100;/*除以100,保留2位小數(shù)*/【考點分析】本題考查:四舍五入方法的考查;數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換。【解題思路】注意:本題要求h的值真正發(fā)生了四舍五入,而不是為了輸出,即不能用printf("%7.2「,h)直接得到結(jié)果。由于單精度數(shù)h乘以1000后再加5,此時相當(dāng)于對h中的第三位小數(shù)進(jìn)行四舍五入,在將其賦給一個長整型數(shù)時,把第三位小數(shù)后的數(shù)全部截去。在return中要將其中一個數(shù)轉(zhuǎn)成浮點型數(shù)。第H-一套請補(bǔ)充main函數(shù),該函數(shù)的功能是:輸出一個NXN矩陣,要求非周邊元素賦值0,周邊元素賦值1。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdlib.h>#include<stdio.h>#defineN10voidmain()(intbb[N][N];intI,j,n;system(*CLS*);printf(*\nlnputn:\n*);scanf&n);for(I=0;I<n;I++)for(j=0;j<n;j++)if([1])bb[I][j]=l;else[2];}printf(*\n***theresult***W);for(I=0;I<n;I++){printf(*\n\n*);for(j=0;j<n;j++)printf("%4d",bb[I][j]);))【參考答案】(1)i==0||i==n-1||j==Ollj==n-1(2)bb[il|jl=()【考點分析】本題考查:if條件語句,-一般需根據(jù)題意確定條件表達(dá)式。數(shù)組元素下標(biāo)及其賦值語句,通過二維數(shù)組的下標(biāo)如何表示其周邊元素和非周邊元素?!窘忸}思路】填空1:用二維數(shù)組表示“X〃矩陣時,周邊元素是行下標(biāo)為0或n-1,列下標(biāo)為0或n-1的元素,判斷時四個條件中只要有一個條件滿足,那么該元素就是周邊元素,所以用”/運(yùn)算符。填空2:題目要求將非周邊元素賦值為0,所以b|i](jl=Oo下列給定程序中,函數(shù)fun的功能是:用遞歸算法計算斐波拉契級數(shù)列中第n項的值。從第一項起,斐波拉契級數(shù)序列為1,123,5,8,13,21,…例如,若給n輸入7,該項的斐波拉契級數(shù)值為13。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或冊IJ行,也不得更改程序的結(jié)構(gòu)。試題程序:^include<stdio.h>longfun(intg)(/*************found**************/switch(g);{case0:return0;/*************found**************/case1;case2:return1;}return(fun(g-l)+fun(g-2));}voidmain(){longfib;intn;printf(^Inputn:");scanf("%d",&n);printf(*n=%d\n*,n);fib=fun(n);printf(*fib=%d\n\n*,fib);}【參考答案】⑴錯誤:switch(g);正確:去掉分號(2)錯誤:case1;case2:return1;正確:case1:case2:return1;【考點分析】swilch語句,其一般形式為:switch(表達(dá)式)(case常量表達(dá)式1:語句1;case常量表達(dá)式2:語句2;case常量表達(dá)式n:語句n;default:語句n+1;}”其中,switch(表達(dá)式)后不帶有”;”,同時case語句常量后應(yīng)該是“:"。【解題思路】C語言中,switch語句之后不能有分號,并且case語句常量后該用是冒號。請編寫函數(shù)fun,函數(shù)的功能是:求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。例如,若二維數(shù)組中的值為13579299946999813570則函數(shù)值為61。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>defineM4ttdefineN5intfun(inta[M][N])()voidmainO(FILE*wf;intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8),{1,3,5,7,0}}:inti,j,y;system("CLS");printf("Theoriginaldatais:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf(*%6d*,aa[i][j]);printf(*\n");}y=fun(aa);printf(*\nThesun:%d\n",y);printf(*\n");wf=fopen(*out.dat*,"w");fprintf(wf,"%d",y);fclose(wf);)【參考答案】intfun(inta[M||N|)(inti,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)if(i==Olli==M-1||j=Ollj==N-1)/*只要下標(biāo)中有一個為0或M-l或N-l,則它一定是周邊元素*/sum=sum+a[i][j];/*將周邊元素相加*/returnsum;【考點分析】本題考查:二維數(shù)組,其元素也稱為雙下標(biāo)變量;for循環(huán)語句根據(jù)數(shù)組元素的下標(biāo)進(jìn)行循環(huán)操作;if語句確定周邊元素是否符合題目要求?!窘忸}思路】本題采用逐一判斷的方式,周邊元素的下標(biāo)一定有一個是0或M-1或N-1,且只要下標(biāo)中有一個為0或M-1或N-1,則它一定是周邊元素。第十二套請補(bǔ)充main函數(shù),該函數(shù)的功能是:從鍵盤輸入一個字符串及一個指定字符,然后把這個字符及其后面的所有字符全部刪除。結(jié)果仍然保存在原串中.例如,輸入"abcdef",指定字符為"e",則輸出"abed".注意:部分源程序給出如下.請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。試題程序:#include<stdlib.h>#include<stdio.h>^defineN80voidmain()(int1=0;charstr[N];charch;system(*CLS*);printf(*\nInputastring:\n*);gets(str);printf(*\n Inputacharator;\n*);scanf(*%c*,&ch);while(str[I]!='\0')(if(str[I]=ch)[1][2];)str[I]=[3];printf(*\n***displaystring***\n*);puts(str);}【參考答案】break;i++sR++i^ci+=lfiKi=i+l⑶'\0'【考點分析】本題考查:break語句,通常用在循環(huán)語句和開關(guān)語句中。當(dāng)break用于開關(guān)語句switch中時,可使程序跳出switch而執(zhí)行以后的語句。當(dāng)break語句用于for、while、do-while循環(huán)語句時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,通常break語句總是與if語句一起使用,即滿足條件時便跳出循環(huán);字符串結(jié)束標(biāo)識''0',上機(jī)考試時經(jīng)??疾椤O铝薪o定程序中,函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對調(diào)、次最大數(shù)和a[l]中的數(shù)對調(diào)。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:ttinclude <conio.h>ttinclude <stdio.h>#defineN20/*************foun(j**************/voidfun(int*a,intn);(intI,m,t,k;for(1=0;Kn;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]={ll,5,12,0,3,6,9,7,10,8},n=10,i;system("CLS");for(i=0;i<n:i++)printf(*%d",b[i]);printf(*\n*);fun(b,n);for(i=0;i<n;i++)printf(*%d”,b[i]);printf("\n");)【參考答案】(1)錯誤:voidfun(int*a,intn);正確:voidfun(int*a,intn)⑵錯誤:m=0; 正確:m=i;【考點分析】本題考查:函數(shù)定義的一般形式,定義函數(shù)時不應(yīng)該帶有【解題思路】(1)簡單的語法錯誤。(2)這是一段簡單的比較程序,m作為一個比較數(shù)的下標(biāo)。從下面的程序可以看出,m=i。編寫函數(shù)fun,它的功能是:利用以下所示的簡單迭代方法求方程cos(x)-x=0的一個實根。xn+i=cos(xn)迭代步驟如下:(1)取乂1初值為0.0;(2)x0=xI,把x1的值賦給xO;(3)x1=cos(x0),求出一個新的xl;(4)若xO-xl,的絕對值小于0.000001,則執(zhí)行步驟(5),否則執(zhí)行步驟(2);(5)所求xl就是方程cos(x)?x=0的一個實根,作為函數(shù)值返回。程序?qū)⑤敵鼋Y(jié)果Root=0.739085。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:^include<stdio.h>ttinclude<conio.h>ttinclude<math.h>floatfun()(}main()(FILE*out;floatf=fun();printf(*Root=%f\n*,f);out=fopen(*out.dat","w");fprintf(out,*%f*,f);fclose(out);)//【參考答案】floatfun()(floatxl=0.0,x0;do|x0=xl;xl=cos(x0);[while(fabs(xO-x1)>=1e-6);returnx1;}【考點分析】do while循環(huán)語句,其形式為:do{語句}while(表達(dá)式);

這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷表達(dá)式是否為真。如果為真則繼續(xù)循環(huán),如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。第十三套請補(bǔ)充main函數(shù),該函數(shù)的功能是:從鍵盤輸入3個整數(shù),然后找出最大的數(shù)并輸出。例如,輸入12,45,43,最大值為45。注意:部分源程序給出如下。請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句.試題程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidmain

溫馨提示

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

評論

0/150

提交評論