二級C語言上機(jī)100題帶解析_第1頁
二級C語言上機(jī)100題帶解析_第2頁
二級C語言上機(jī)100題帶解析_第3頁
二級C語言上機(jī)100題帶解析_第4頁
二級C語言上機(jī)100題帶解析_第5頁
已閱讀5頁,還剩382頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一套

給定程序的功能是:求二分之一的圓面積,函數(shù)通過形參得到圓的半徑,函數(shù)返回二分

之一的圓面積(注:圓面積公式為⑵在程序中定義的變量名要與公式的變量相同)。

例如,輸入圓的半徑值:19.527,輸出為:s=598.9499910

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或

語句。

試題程序:

ttinclude<stdio.h>

doublefun(doubler)

(

return3.14159*[1]/2.0;

}

voidmain()

{

doublex;

printf("Enterx:");

scanf[2]);

printf("s=%lf\n”,fun([3]));

)

【參考答案】(Dr*r(2)&x(3)x

【考點(diǎn)分析】本題考查:圓面積計(jì)算公式*r*r;scanf()函數(shù)的形式,其一般形式為"scanf("

格式控制字符串”,地址表列);",注意地址是由地址運(yùn)算符后跟變量名組成的;printf()

函數(shù)的形式,其一般形式為"printf("格式控制字符串",輸出表列);";函數(shù)實(shí)參調(diào)用,函數(shù)作

為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。

【解題思路】

填空1:計(jì)算圓的面積,公式為:*r。

填空2:scanf()函數(shù)一般形式為scanf(格式控制,地址表列),因此填入&x。

填空3:函數(shù)的實(shí)際參數(shù)是圓的半徑xo

下列給定程序中,函數(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ù)定義如下:

f(x)=

請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<math.h>

/*************found**************/

f(doublex)

{

if(x==0.01|x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+l)/(x-2);

}

doublefun(intn)

(

inti;doubles=0.0,y;

for(i=-n;i<=n;i++)

{y=f(1.0*i);s+=y;}

/*************found**************/

returns

)

voidmain()

{system(〃CLS〃);

printf(〃%f\n〃,fun(5));

)

【參考答案】

(1)錯(cuò)誤:f(doublex)正確:doublef(doublex)

(2)錯(cuò)誤:returns正確:returns;

【考點(diǎn)分析】本題考查:函數(shù)的定義,其一般形式為〃類型標(biāo)識符函數(shù)名(形式參數(shù)表列)〃,

其中類型標(biāo)識符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。

【解題思路】

該程序的流程是,fun()程序?qū)(n)項(xiàng)循環(huán)累加,并且采用條件選擇語句計(jì)算函數(shù)f(x)的值。

本題的錯(cuò)誤在于未定義函數(shù)f(doublex)的返回值類型。C語言規(guī)定,在未顯式聲明的情況下,

函數(shù)返回值默認(rèn)為int型。

編寫函數(shù)fun,函數(shù)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果作為函數(shù)值返回;n通過形

參傳入。

S=l+l/(l+2)+1/(1+2+3)+…+1/(1+2+3+…+n)

例如,若n的值為11時(shí),函數(shù)的值為1.833333。

注意:部分源程序給出如下。

請勿改動(dòng)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(^XnPleaseenterN:");

scanf(〃%d〃,&n);

s=fun(n);

printf("Theresultis:%f\n〃,s);

wf=fopen(,,out.dat〃,〃w〃);

fprintf(wf,〃%f〃,fun(ll));

fclose(wf);

)

【參考答案】

floatfun(intn)

(

inti,sl=0;/*定義整型變量si,表示分母*/

floats=0.0;/*定義單精度變量s,表示每一項(xiàng)*/

for(i=l;i<=n;i++){

sl=sl+i;/*求每一項(xiàng)的分母*/

s=s+l.O/sl;/*求多項(xiàng)式的值*/

}

returns;

}

【考點(diǎn)分析】

本題考查:計(jì)算給定表達(dá)式的值,根據(jù)題意判斷表達(dá)式為1到n累加倒數(shù)之和。變量數(shù)據(jù)類型

及強(qiáng)制轉(zhuǎn)換操作。for循環(huán)語句,一般情況需要確定循環(huán)變量的取值范圍。使用return語句

完成函數(shù)值的返回。

【解題思路】

本題可以通過for循環(huán)語句來實(shí)現(xiàn)第1項(xiàng)到第n項(xiàng)的變化,然后計(jì)算各項(xiàng)的累加和。方法是

先根據(jù)題目要求定義變量(注意該變量的數(shù)據(jù)類型),然后對其進(jìn)行初始化操作,因?yàn)樵撟兞?/p>

用作累加器,所以初始值應(yīng)為0(或0.0,根據(jù)變量數(shù)據(jù)類型來確定),再通過for循環(huán)語句來完

成累加過程。

本題中si用來表示式中每一項(xiàng)的分母,它可以由前一項(xiàng)的分母加項(xiàng)數(shù)得到。注意:由于si

定義成一個(gè)整型,所以在s=s+l.0/sl中不能把1.0寫成1。

【解題寶典】

此類計(jì)算表達(dá)式值的程序,首先需要根據(jù)題意分析表達(dá)式的規(guī)律,得出通項(xiàng),然后再完成程序

語句。

第二套

請補(bǔ)充main函數(shù),該函數(shù)的功能是:計(jì)算兩個(gè)自然數(shù)n和m(m<10000)之間所有數(shù)的和

(n和m從鍵盤輸入)。

例如,當(dāng)n=l,m=100時(shí),sum=5050;當(dāng)n=100,m=1000時(shí),sum=495550o

注意:部分源程序給出如下。

請勿改動(dòng)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(,z\nlnputn,m'n");

scanf(/z%d,%d",&n,&m);

while(n<=m)

(

[2];

n++;

)

printf(,zsum=%[3]\n",sum);

)

【參考答案】(1)sum=O(2)sum+=n(3)Id

【考點(diǎn)分析】本題考查:變量初始化,需要注意該變量是累加器還是累乘器:printf()函數(shù),

其一般形式為"printf(〃格式控制符”,輸出表列),其中,格式控制符用于指定輸出格式,可

由格式字符串和非格式字符串兩種組成,格式字符串是以%開頭的字符串,在外后面跟有各種

格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等,如%Id”表示按十進(jìn)制長整型

輸出,非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。

【解題思路】

填空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ù)printf()中的格式控制符為"%Id"。

下列給定程序中,fun函數(shù)的功能是:根據(jù)形參m,計(jì)算下列公式的值:

t=l+l/2+l/3+l/4+—+l/m

例如,若輸入5,則應(yīng)輸出2.283333,

請改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

^include<stdlib.h>

ttinclude<conio.h>

ttinclude<stdio.h>

doublefun(intm)

(

doublet=l.0;

intI;

for(1=2;K=m;I++)

/*************found**************/

t+=l.0/k;

/*************found**************/

returnI;

}

voidmain()

{intm;

system("CLS");

printf("\nPleaseenter1integernumber:");

scanf("%d",&m);

printf(,z\nTheresultis%lf\n”,fun(m));

}

【參考答案】

(1)錯(cuò)誤:t+=l.0/k;正確:t+=1.0/I;

(2)錯(cuò)誤:returnI;正確:returnt;

【考點(diǎn)分析】

本題考查:for循環(huán)語句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值

范圍;函數(shù)返回值,其一般形式為"return表達(dá)式二該語句的功能是計(jì)算表達(dá)式的值,并返

回給主調(diào)函數(shù)。

【解題思路】

⑴該題目考查分母成等差數(shù)列遞增的一個(gè)數(shù)學(xué)公式,我們先看循環(huán)條件

for(1=2;1cm;I++),i從2開始遞增到m,所以t的值應(yīng)該是由1.0/i的值逐步循環(huán)疊加后的

結(jié)果,而不是t+=L0/k;。

(2)returnI;考查對程序的解讀能力,當(dāng)循環(huán)結(jié)束后(由輸入m的值決定),函數(shù)返回當(dāng)前t

的值。

請編寫一個(gè)函數(shù)voidfun(char*tt,intpp口),統(tǒng)計(jì)在tt字符串中"a"到"z"26個(gè)字

母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。

例如,當(dāng)輸入字符串a(chǎn)bcdefghabcdeabc后,程序的輸出結(jié)果應(yīng)該是:333221110

000000000000000000

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的

若干語句。

試題程序:

ttinclude<conio.h>

^include<stdio.h>

ttinclude<stdlib.h>

voidfun(char*tt,intpp[])

)

voidmain()

{

FILE*wf;

charaa[1000];

intbb[26],k;

system(,,CLS,/);

printf(,z\nPleaseenteracharstring:〃);

scanf(〃%s〃,aa);

fun(aa,bb);

for(k=0;k<26;k++)

printf(z,%dz,,bb[k]);

printf(,z\n〃);

wf=fopen(,zout.dat〃,〃w〃);

fun(//abcdefgabcdeabc,,,bb);

for(k=0;k<26;k++)

fprintf(wf,,z%d”,bb[k]);

fclose(wf);

)

【參考答案】

voidfun(char*tt,intpp[])

(

inti;

for(i=0;i<26;i++)

Pp[i]=0;

while(*tt)

(

switch(*tt)

(

case匕':pp[0]++;break;

case廿:pp[l]++;break;

case:pp[2]++;break;

casedpp[3]++;break;

case<e,pp[4]++;break;

casefpp[5]++;break;

case'g'pp[6]++;break;

case'h'pp[7]++;break;

case'i'pp[8]++;break;

case'j'pp[9]++;break;

case'k'pp[10]++;break;

case'1'pp[l1]++;break;

case'm'pp[12]++;break;

case'n'pp[12]++;break;

case'o'pp[14]++;break;

case<p,pp[15]++;break;

case'q'pp[16]++;break;

case'r'pp[17]++;break;

case's'pp[18]++;break;

case't'pp[19]++;break;

case'u'pp[20]++;break;

case<v,pp[21]++;break;

case'w'pp[22]++;break;

case'x'pp[23]++;break;

case'y'pp[24]++;break;

case'z'pp[25]++;break;

}

tt++;

)

)

【考點(diǎn)分析】

本題考查:統(tǒng)計(jì)小寫字母在指定字符串中出現(xiàn)次數(shù)。for循環(huán)語句,需要注意循環(huán)變量的取值

范圍。if條件語句要注意條件表達(dá)式的判定。

【解題思路】

第1個(gè)循環(huán)的作用是初始化數(shù)組PP,未經(jīng)賦值變量的量為一個(gè)不確定數(shù)字。由于它要將'a'

到'z'26個(gè)字母的個(gè)數(shù)依次放到數(shù)組pp中,即'a'的個(gè)數(shù)存于pp[0]中,'b'的個(gè)數(shù)存于pp[l]

中,‘c'的個(gè)數(shù)存于pp[2]中,…,依此類推,而‘a(chǎn)'-a'的值正好為0,'b'-'a'的值為

'a'的值為2,…,依此類推。任一個(gè)小寫字母減去'a'后所得結(jié)果正好是它對應(yīng)的下標(biāo),所以

就有了pp[*tt-'a']++,但*tt必須是小寫字母,即if()不應(yīng)省略。。

第三套

給定程序的功能是:判斷字符ch是否與串str中的某個(gè)字符相同,若相同什么也不做,

若不同則插在串的最后。

注意:部分源程序給出如下。

請勿改動(dòng)函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或

語句。

試題程序:

ttinclude<stdio.h>

ttinclude<string.h>

voidfun(char*str,charch)

(

while(*str&&*str!=ch)str++;

if(*str[1]ch)

{str[0]=ch;

[2]=0;

)

}

voidmain()

{chars[81],c;

system(Z,CLS,/);

printf('\nPleaseenterastring:");

gets(s);

printf(z/\nPleaseenterthecharactertosearch:");

c=getchar();

fun([3]);

printf(w\nTheresultis%s\n”,s);

)

【參考答案】⑴!=(2)str⑴或*(str+l)(3)s,c

【考點(diǎn)分析】本題考查:if語句,一般掌握條件表達(dá)式的判定。函數(shù)的調(diào)用,其一般形式為"

函數(shù)名(實(shí)際參數(shù)表)”。

【解題思路】

填空1:根據(jù)題意"若相同什么也不做”,則應(yīng)填入!=。

填空2:若不同則插在串的最后,那么0就在字符串的倒數(shù)第二了。

填空3:函數(shù)傳遞的參數(shù)為輸入的兩個(gè)字符串,則填入s,c?

下列給定程序中,函數(shù)fun的功能是:分別統(tǒng)計(jì)字符串中大寫字母和小寫字母的個(gè)數(shù)。

例如,給字符串s輸入:AaaaBBbl23CCccccd,則應(yīng)輸出結(jié)果:upper=5,lower=9。

請改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

#include<conio.h>

#include<stdio.h>

/*********fourid***********/

voidfun(char*s,inta,intb)

|

while(*s)

(

/*********fourid***********/

if(*s>='A'&&*s<='Z')

a++;

/*********found***********/

if(*s>='a'&&*s<='z')

b++;

s++;

)

}

main()

(

chars[100];

intupper=0,lower=0;

printf(,z\npleaseastring:〃);

gets(s);

fun(s,&upper,felower);

printf(,z\nupper=%dlower=%d\n,/,upper,lower);

)

【參考答案】

(1)錯(cuò)誤:voidfun(char*s,inta,intb)

正確:voidfun(char*s,int*a,int*b)

⑵錯(cuò)誤:a++;正確:(*a)++;

⑶錯(cuò)誤:b++;正確:(*b)++;

【考點(diǎn)分析】

本題考查:函數(shù)的參數(shù)傳遞和指針變量,理解指針變量作為函數(shù)的參數(shù),函數(shù)的參數(shù)不僅可以

是整型、實(shí)型、字符型等數(shù)據(jù),還可以是指針類型,它的作用是將一個(gè)變量的地址傳送到另一

個(gè)函數(shù)中。

【解題思路】

(1)根據(jù)題中程序可以看出,函數(shù)fun傳遞的是地址,那么,在函數(shù)中就應(yīng)該出現(xiàn)指針,所以改

為voidfun(char*s,intint*b)。

(2)和(3)很明顯,這里是要累加數(shù)值,因?yàn)閍、b是指針變量,所以是錯(cuò)誤的。

請編寫函數(shù)fun,它的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。

例如,若輸入字符串123412132,輸入字符1,則輸出3。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的

若干語句。

試題程序:

ttinclude<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineM81

intfun(char*ss,charc)

(

)

voidmain()

(

FILE*wf;

chara[M],ch;

system(〃CLS〃);

printf(,z\nPleaseenterastring:〃);

gets(a);

printf(,z\nPleaseenterachar:〃);

ch=getchar();

printf(,z\nThenumberofthecharis:%d\n,z,fun(a,ch));

wf=fopen(,zout.dat〃,〃w");

fprintf(wf,〃%d〃,fun(“123412132〃,'1'));

fclose(wf);

【參考答案】

intfun(char*ss,charc)

inti=0;

for(;*ss!='\0':ss++)

if(*ss==c)

i++;

/*求出ss所指字符串中指定字符的個(gè)數(shù)*/

returni;

}

【考點(diǎn)分析】

本題考查:字符串結(jié)束標(biāo)識'\0';for循環(huán)語句,如何遍歷字符串;通過if條件語句,判斷

是否相同。

【解題思路】

從字符串SS中找出子字符串的方法是:從第1個(gè)字符開始,對字符串進(jìn)行遍歷;若SS串的當(dāng)

前字符等于t串的第1個(gè)字符,兩字符串的指針自動(dòng)加1,繼續(xù)比較下一個(gè)字符;若比較至字

符串的結(jié)尾,則跳出循環(huán);若SS串的字符和C串的字符不對應(yīng)相同,則繼續(xù)對SS串的下一個(gè)

字符進(jìn)行處理。本程序是采用逐一比較的方式找出出現(xiàn)的次數(shù)。循環(huán)的作用是在串中從左到

右逐一走動(dòng),if()的作用是進(jìn)行判斷是否相同,若與C相同,則表示又出現(xiàn)一次。

第四套

請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:把ASCII碼為偶數(shù)的字符從字符串str中刪除,結(jié)果

仍然保存在字符串str中,字符串str從鍵盤輸入,其長度作為參數(shù)傳入函數(shù)fun。

例如,輸入"abcdef",輸出"ace”。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若

干表達(dá)式或語句。

試題程序:

ttinclude<stdlib.h>

ttinclude<stdio.h>

#defineN80

[1]

{

inti,j;

[2];

for(i=0;i<n;i++)

if(s[i]%2!=0)

s[j++]=s[i];

)

[3];

}

voidmain()

{

inti=0,strlen=0;

charstr[N];

system("CLS");

printfC\nlnputastring:\nz,);

gets(str);

while(str[i]!='\0")

(

strlen++;

i++;

)

fun(str,strlen);

printf("\n***displaystring***\n");

puts(str);

)

【參考答案】

(1)voidfun(chars[],intn)

(2)j=0

⑶s[j]=,\(r

【考點(diǎn)分析】

本題考查:函數(shù)定義,需要確定類型標(biāo)識符、函數(shù)名和形式參數(shù)。變量初始化,變量聲明后,

要進(jìn)行初始化賦值,我們對變量進(jìn)行初始化時(shí),必須確定好變量的作用。字符串結(jié)束標(biāo)識

''0',用來結(jié)束字符串,是經(jīng)常考查的知識點(diǎn)。

【解題思路】

填空1:由main函數(shù)調(diào)用函數(shù)fun的格式可以知道,函數(shù)fun沒有返回值,第一個(gè)參數(shù)是字符

數(shù)組,第二個(gè)參數(shù)是整型變量。

填空2:變量j聲明時(shí),沒有初始化,所以在使用j之前要將它初始化為0。

填空3:當(dāng)把所有ASCII碼為偶數(shù)的字符都存入字符串s中后,要在最后加上'\0',表示字符

串的結(jié)束。

下列給定程序中函數(shù)fun的功能是:計(jì)算正整數(shù)num各位上的數(shù)字之積。例如,若輸入

252,則輸出應(yīng)該是20o若輸入202,則輸出應(yīng)該是0。

請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)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(^XPleaseenteranumber:〃);

scanf(,z%ld,z,&n);

printf("\n%ld\n〃,fun(n));

)

【參考答案】

(1)錯(cuò)誤:longk;正確:longk=l;

(2)錯(cuò)誤:num\=10;正確:num/=10;

【考點(diǎn)分析】

變量初始化,保存乘積的變量初始化為1。

【解題思路】

(l)k用來存放各位數(shù)字的積,初值應(yīng)為lo

(2)這里是一個(gè)符號錯(cuò)誤,除號使用〃/〃來表示的。

請編寫一個(gè)函數(shù)fun,它的功能是:求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)

放在數(shù)組a中,通過n返回這些數(shù)的個(gè)數(shù)。

例如,若傳給m的值為50,則程序輸出:

711142122283335424449

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的

若干語句。

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineM100

voidfun(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個(gè)數(shù)*/

{printf(〃%4d〃,aa[k]);

printf(〃\n〃);

)

else

printf("%4d”,aa[k]);

printfC\nO;

wf=fopen(,zout.dat〃,〃w〃);

for(k=0;k<n;k++)

fprintf(wf,zr%4d,z,aa[k]);

fclose(wf);

}

【參考答案】

voidfun(intm,int*a,int*n)

inti,j=0;

for(i=l;i<=m;i++)

if(i%7==0||i%ll==O)

/*求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)放在數(shù)組a中*/

a[j++]=i;

*n=j;/*返回這些數(shù)的個(gè)數(shù)*/

}

【考點(diǎn)分析】

本題考查:整除的判斷方法,用%對除數(shù)求余,若余數(shù)為0,表示能被整除。if語句條件表達(dá)式,

注意"邏輯與"和"邏輯或"的區(qū)別。for循環(huán)語句,注意循環(huán)變量的取值范圍。一維數(shù)組的定

義與引用。

【解題思路】

本題要找出能被7或11整除的所有整數(shù),注意數(shù)學(xué)中的"或''和C語言中的"或”的區(qū)別,在此

處,if條件語句中用"II”運(yùn)算符,若要找能同時(shí)被7和11整除的所有整數(shù),則在if()中,應(yīng)

用"&&”運(yùn)算符。

第五套

請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:判斷某一個(gè)年份是否為閏年。

例如,1900年不是閏年,2004是閏年。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若

干表達(dá)式或語句。

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

intfun(intn)

(

intflag=0;

if(n%4==0)

(

if([1])

flag=l;

)

if([2])

flag=l;

return[3];

}

voidmain()

intyear;

system("CLS");

printfClnputtheyear:z/);

scanf&year);

if(fun(year))

printf("%disaleapyear.\n",year);

else

printf(,z%disnotaleapyear.\n/z,year);

}

【參考答案】

(1)n%100!=0或n%100

(2)n%400==0(3)flag

【考點(diǎn)分析】

本題考查:判斷閏年的算法,年份能被4整除但不能被100整除,或者年份能被400整除。

return語句,負(fù)責(zé)將函數(shù)值返回給主調(diào)函數(shù)。一般情況下,flag在C語言中作為一種標(biāo)志來

使用,本書中有多個(gè)題目都使用了flag標(biāo)志。

【解題思路】

填空1:判斷閏年的方法是,年份能被4整除但不能被100整除,或者年份能被400整除。n

不能被100整除,即對100取余非零。

填空2:能被400整除的年份也是閏年,n能被400整除,即對400取余為零。

填空3:flag標(biāo)記年份n是否為閏年,當(dāng)flag為1時(shí),是閏年,當(dāng)flag為。時(shí),不是閏年。

下列給定程序中函數(shù)fun的功能是:計(jì)算n!。例如,給n輸入5,則輸出120.000000。

請改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

ttinclude<stdio.h>

ttinclude<conio.h>

doublefun(intn)

{doubleresult=1.0;

/*************found**************/

ifn==0

return1.0;

while(n>l&&n<170)

/*************found**************/

result=n--;

returnresult;

}

voidmain()

(

intn;

printf(""InputN:〃);

scanf(〃%d〃,&n);

printf(,,\n\n%d!=%lf\n,z,n,fun(n));

)

【參考答案】

(1)錯(cuò)誤:ifn==0正確:if(n=0)

(2)錯(cuò)誤:result=n--;正確:result*=n--;

【考點(diǎn)分析】

本題考查:if語句,一般情況下,需要根據(jù)題目要求確定條件表達(dá)式的內(nèi)容,同時(shí)需要注意其

格式。計(jì)算階乘的方法,n!=n*(n-l)!。

請編寫函數(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

注意:部分源程序給出如下。

請勿改動(dòng)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(/zInputa,b:");

scanf("%d%d”,&a,&b):

fun(a,b,&c);

printfCTheresultis:%ld'n”,c);

out=fopen("out.dat","w");

fun(a+ll,b+22,&c);

fprintf(out,c);

fclose(out);

}

【參考答案】

voidfun(inta,intb,long*c)

{

*c=(a%l0)*1000+(b%l0)*100+(a/10)*10+b/l0;

)

【考點(diǎn)分析】

本題考查:如何取出數(shù)值n的各個(gè)位,主要是考查'和'/'的交換使用。兩個(gè)整型數(shù)相除,'/'

用來求得數(shù)的整數(shù)部分,’留用來求余數(shù)。

【解題思路】

本題中主要的問題是怎么取出a和b的個(gè)位數(shù)和十位數(shù),取出后怎么表示成c中相應(yīng)的位數(shù)。

由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它

們求余可得到它們的個(gè)位數(shù)。得到后對應(yīng)乘以1000、100、10、1就可得到c的千位數(shù)、百

位數(shù)、十位數(shù)和個(gè)位數(shù)。注意:使用c時(shí)要進(jìn)行指針運(yùn)算。

第六套

請補(bǔ)充函數(shù)fun,函數(shù)fun的功能是求n的階乘。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若

干表達(dá)式或語句。

試題程序:

#include<stdio.h>

longfun(intn)

if([1])

return(n*fun([2]));

return[3];

}

voidmain()

(

printf(z,10!=%ld\n/,,fun(10));

}

【參考答案】

(l)n>l或l<n(2)n-1(3)1

【考點(diǎn)分析】

本題考查:if語句條件表達(dá)式,這類題目一般解法是根據(jù)題意確定表達(dá)式的值,如果表達(dá)式

的值為真,則執(zhí)行下面的語句;如果值為假,則不執(zhí)行該語句。遞歸算法的掌握,遞歸是指函數(shù)

/過程/子程序在運(yùn)行過程序中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。

【解題思路】

填空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是遞歸的終止條件,返回值為1。

下列給定的程序中,函數(shù)fun的功能是:計(jì)算并輸出k以內(nèi)最大的10個(gè)能被13或17

整除的自然數(shù)之和。k的值由主函數(shù)傳入,若k的值為500,則函數(shù)的值為4622。

請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

ftinclude<stdio.h>

tiinclude<conio.h>

#include<stdlib.h>

intfun(intk)

{intm=0,mc=0,j;

while((k>=2)&&(mc<l0))

(

/*************found**************/

if((k%13=0)||(k%17=0))

{m=m+k;mc++;}

k-;

/*************found**************/

returnm;

}

voidmain()

{system("CLS");

printf(z,%d\n”,fun(500));

}

【參考答案】

(1)錯(cuò)誤:if((k%13=0)|I(k%17=0))

正確:if((k%13==0)||(k%17==0))

(2)錯(cuò)誤:缺少大括號正確:力口}

【考點(diǎn)分析】

本題考查:if語句,這類題目的一般解法是根據(jù)題意確定if語句的條件表達(dá)式,區(qū)別邏輯表

達(dá)式和算術(shù)表達(dá)式。同時(shí)注意c語言書寫程序應(yīng)遵守的規(guī)則。

【解題思路】

(Dx能被y整除的表示方法是x%y==0,而并非像題目中所表示的x%y=0。所

以,if((k%13=0)||(k%17=0))修改后的結(jié)果應(yīng)該是答案所示信息。

(2)缺少程序完整所需的”}此類信息在做題時(shí)一定要注意,我們可以在做題前先運(yùn)行一下

程序,這樣明顯的錯(cuò)誤一般都會(huì)有錯(cuò)誤信息顯示出來,比如丟失"}"的錯(cuò)誤信息是"Compound

statementmissing}infunctionfun”,并在當(dāng)前錯(cuò)誤處停止光標(biāo),我們只要按回車鍵進(jìn)行

編輯就可以了。

請編寫函數(shù)fun,它的功能是計(jì)算:

s=(In(1)+ln(2)+ln(3)+-+ln(m))0.5

在C語言中可調(diào)用log(n)函數(shù)求ln(n)?

例如,若m的值為20,則fun函數(shù)值為6.506583,

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的

若干語句。

試題程序:

ttinclude<conio.h>

ttinclude<stdio.h>

ttinclude<math.h>

^include<stdlib.h>

doublefun(intm)

(

}

voidmain()

FILE*wf;

system("CLS");

printf(z,%f\n",fun(20));

wf=fopen("out.dat","w");

fprintf(wf,"%f”,fun(20));

fclose(wf);

)

【參考答案】

doublefun(intm)

(

inti;

doubles=0.0;

for(i=l;i<=m;i++)

s=s+log(i);

returnsqrt(s);

/*計(jì)算s=ln(1)+ln(2)+ln(3)+-+ln(m)*/

/*對s求平方根并返回*/

}

【考點(diǎn)分析】

計(jì)算表達(dá)式的值,一般都要定義一個(gè)變量sum作為累加(乘器),加法運(yùn)算時(shí)賦初值為0,乘法

運(yùn)算時(shí),賦初值為1,然后利用循環(huán)語句,使sum進(jìn)行累加或累乘。

【解題思路】

題目要求計(jì)算從1到m的對數(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í)候求出平方根。

第七套

請補(bǔ)充函數(shù)fun,該函數(shù)的功能是:整除x且是偶數(shù)的數(shù),把這些數(shù)保存在數(shù)組bb中,并

按從大到小的順序輸出。

例如當(dāng)x=20時(shí),依次輸出:201042。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若

干表達(dá)式或語句。

試題程序:

#include<stdlib.h>

Sinclude<conio.h>

Sinclude<stdio.h>

voidfun(intk,intbb[])

(

intI;

intj=0;

for([1];I<=k;I++)

(

if([2])

bb[j++]=I;

)

printf("\n\n〃);

for(I=[3];I>=0;I—)

printf("%d",bb[I]);

}

voidmain()

{

intk=l;

intbb[100];

system(ZZCLS/Z);

printf(z,\nPleaseinputX=");

scanf&k);

fun(k,bb);

j

【參考答案】(l)i=i(2)k%i==0&&i%2=0(3)—j或j-1

【考點(diǎn)分析】本題考查: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,由于這兩個(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ì)算如下公式的值:

請改正函數(shù)fun()中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序:

ttinclude<stdlib.h>

ttinclude<conio.h>

ftinclude<stdio.h>

doublefun(intm)

{doubley=l.0;

intI;

/*************found**************/

for(I=2;Km;I++)

/*************found**************/

y-=l/(I*I);

return(y);

}

voidmain()

{intn=5;

system("CL$");

printf('\nTheresultis%lf\nz,,fun(n));

}

【參考答案】

⑴錯(cuò)誤:for(i=2;i<m;i++)

正確:for(i=2;i<=m;i++)

⑵錯(cuò)誤:y-=l/(i*i);

正確:y-=L0/(i*i);

【考點(diǎn)分析】

本題考查:for循環(huán)語句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值

范圍。變量數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,是通過類型轉(zhuǎn)換運(yùn)算來實(shí)現(xiàn)的。一般形式為:"(類型說明符)

(表達(dá)式)”,其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。

【解題思路】

該題是一道簡單的計(jì)算題,循環(huán)條件for(i=2;i<m;i++)中忽略了i=m時(shí)的一種情況,因?yàn)轭}

目中i是從2至I]m的一個(gè)計(jì)算公式。y-=l/(i*i);的錯(cuò)誤很明顯,是語法錯(cuò)誤,由定義double

y=l.0可知,應(yīng)該是y-=l.0/(i*i);,而非y-=l/(i*i);。

例如:

(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型

(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型

編寫函數(shù)fun,它的功能是:求n以內(nèi)(不包括n)同時(shí)能被5與11整除的所有自然數(shù)之

和的平方根s,并作為函數(shù)值返回。

例如,n為1000時(shí),函數(shù)值應(yīng)為s=96.979379。

注意:部分源程序給出如下。

請勿改動(dòng)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(Z,CLSZ,);

printf("s=%f\n”,fun(1000));

wf=fopen(,zout.dat〃,〃w〃);

fprintf(wf,fun(1000));

fclose(wf);

}

【參考答案】

doublefun(intn)

{doubles=0.0;

inti;

for(i=0;i<n;i++)

/*從0n中找到既能被5整除同時(shí)又能被11整除的數(shù),并將這些數(shù)求和*/

if(i%5=0&&i%ll==0)

s=s+i;

s=sqrt(s);/*對s求平方根*/

returns:

}

【考點(diǎn)分析】

本題考查:整除判定后求和、再對求和結(jié)果求平方根運(yùn)算;變量數(shù)據(jù)類型,求和時(shí)變量如何初

始化;整除的方法;if條件語句及“邏輯與"運(yùn)算;sqrt()平方根函數(shù)的應(yīng)用。

【解題思路】

本題的解題思路是逐個(gè)取得從0到n之間的數(shù),對每次取得的數(shù)進(jìn)行條件判斷,條件是既能被

5整除又能被11整除,注意這兩個(gè)條件要求同時(shí)成立,因此用到了"&&”運(yùn)算符。若滿足條件,

該數(shù)就被累加到s中去,求出所有符合條件的數(shù)后,用sqrt()函數(shù)(包含于頭文件<math.h>

中)對s求平方根。

第八套

請補(bǔ)充函數(shù)fun,它的功能是:計(jì)算并輸出n(包括n)以內(nèi)所有能被3或7整除的自然數(shù)

的倒數(shù)之和。

例如,在主函數(shù)中從鍵盤給n輸入30后,輸出為:s=l.226323。

注意:部分源程序給出如下。

請勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若

干表達(dá)式或語句。

試題程序:

#include<stdio.h>

doublefun(intn)

(

intI;

doublesum=O.0;

for(1=1;[1];I++)

if(I%3==0[2]I%7=0)

sum+=[3]/I;

returnsum;

}

voidmain()

(

intn;

doubles;

printfCXnlnputn:〃);

scanf(〃%d〃,&n);

s=fun(n);

printf('\n\ns=%f\n”,s);

}

【參考答案】

(1)i<=n(2)|(3)1.0或(double)1

【考點(diǎn)分析】

本題考查: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)算符"II"。

填空3:需要注意,如果7”運(yùn)算符兩邊都是整型數(shù),則結(jié)果也是整型數(shù)。因?yàn)閕

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論