




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一套
給定程序的功能是:求二分之一的圓面積,函數(shù)通過形參得到圓的半徑,函數(shù)返回二分
之一的圓面積(注:圓面積公式為⑵在程序中定義的變量名要與公式的變量相同)。
例如,輸入圓的半徑值:19.527,輸出為:s=598.9499910
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或
語(yǔ)句。
試題程序:
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)=
請(qǐng)改正程序中的錯(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ù)名(形式參數(shù)表列)〃,
其中類型標(biāo)識(shí)符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。
【解題思路】
該程序的流程是,fun()程序?qū)(n)項(xiàng)循環(huán)累加,并且采用條件選擇語(yǔ)句計(jì)算函數(shù)f(x)的值。
本題的錯(cuò)誤在于未定義函數(shù)f(doublex)的返回值類型。C語(yǔ)言規(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。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
#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)語(yǔ)句,一般情況需要確定循環(huán)變量的取值范圍。使用return語(yǔ)句
完成函數(shù)值的返回。
【解題思路】
本題可以通過for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)第1項(xiàng)到第n項(xiàng)的變化,然后計(jì)算各項(xiàng)的累加和。方法是
先根據(jù)題目要求定義變量(注意該變量的數(shù)據(jù)類型),然后對(duì)其進(jìn)行初始化操作,因?yàn)樵撟兞?/p>
用作累加器,所以初始值應(yīng)為0(或0.0,根據(jù)變量數(shù)據(jù)類型來(lái)確定),再通過for循環(huán)語(yǔ)句來(lái)完
成累加過程。
本題中si用來(lái)表示式中每一項(xiàng)的分母,它可以由前一項(xiàng)的分母加項(xiàng)數(shù)得到。注意:由于si
定義成一個(gè)整型,所以在s=s+l.0/sl中不能把1.0寫成1。
【解題寶典】
此類計(jì)算表達(dá)式值的程序,首先需要根據(jù)題意分析表達(dá)式的規(guī)律,得出通項(xiàng),然后再完成程序
語(yǔ)句。
第二套
請(qǐ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
注意:部分源程序給出如下。
請(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("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ù)的類型、形式、長(zhǎng)度、小數(shù)位數(shù)等,如%Id”表示按十進(jìn)制長(zhǎng)整型
輸出,非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。
【解題思路】
填空1:變量sum進(jìn)行了類型聲明,但沒有進(jìn)行初始化,而后面的程序用sum來(lái)存放最后的結(jié)
果,所以要在使用前將sum初始化為0。
填空2:通過while循環(huán)將自然數(shù)n和m之間的數(shù)進(jìn)行累加,結(jié)果存于sum中。
填空3:由于sum為長(zhǎng)整型,所以標(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,
請(qǐng)改正程序中的錯(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)語(yǔ)句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值
范圍;函數(shù)返回值,其一般形式為"return表達(dá)式二該語(yǔ)句的功能是計(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;考查對(duì)程序的解讀能力,當(dāng)循環(huán)結(jié)束后(由輸入m的值決定),函數(shù)返回當(dāng)前t
的值。
請(qǐng)編寫一個(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
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
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)語(yǔ)句,需要注意循環(huán)變量的取值
范圍。if條件語(yǔ)句要注意條件表達(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é)果正好是它對(duì)應(yīng)的下標(biāo),所以
就有了pp[*tt-'a']++,但*tt必須是小寫字母,即if()不應(yīng)省略。。
第三套
給定程序的功能是:判斷字符ch是否與串str中的某個(gè)字符相同,若相同什么也不做,
若不同則插在串的最后。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達(dá)式或
語(yǔ)句。
試題程序:
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語(yǔ)句,一般掌握條件表達(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。
請(qǐng)改正程序中的錯(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ò)誤的。
請(qǐng)編寫函數(shù)fun,它的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。
例如,若輸入字符串123412132,輸入字符1,則輸出3。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
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)識(shí)'\0';for循環(huán)語(yǔ)句,如何遍歷字符串;通過if條件語(yǔ)句,判斷
是否相同。
【解題思路】
從字符串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)一次。
第四套
請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是:把ASCII碼為偶數(shù)的字符從字符串str中刪除,結(jié)果
仍然保存在字符串str中,字符串str從鍵盤輸入,其長(zhǎng)度作為參數(shù)傳入函數(shù)fun。
例如,輸入"abcdef",輸出"ace”。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若
干表達(dá)式或語(yǔ)句。
試題程序:
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ù)名和形式參數(shù)。變量初始化,變量聲明后,
要進(jìn)行初始化賦值,我們對(duì)變量進(jìn)行初始化時(shí),必須確定好變量的作用。字符串結(jié)束標(biāo)識(shí)
''0',用來(lái)結(jié)束字符串,是經(jīng)??疾榈闹R(shí)點(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。
請(qǐng)改正程序中的錯(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用來(lái)存放各位數(shù)字的積,初值應(yīng)為lo
(2)這里是一個(gè)符號(hào)錯(cuò)誤,除號(hào)使用〃/〃來(lái)表示的。
請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:求出1到m(含m)之內(nèi)能被7或11整除的所有整數(shù)
放在數(shù)組a中,通過n返回這些數(shù)的個(gè)數(shù)。
例如,若傳給m的值為50,則程序輸出:
711142122283335424449
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
#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)分析】
本題考查:整除的判斷方法,用%對(duì)除數(shù)求余,若余數(shù)為0,表示能被整除。if語(yǔ)句條件表達(dá)式,
注意"邏輯與"和"邏輯或"的區(qū)別。for循環(huán)語(yǔ)句,注意循環(huán)變量的取值范圍。一維數(shù)組的定
義與引用。
【解題思路】
本題要找出能被7或11整除的所有整數(shù),注意數(shù)學(xué)中的"或''和C語(yǔ)言中的"或”的區(qū)別,在此
處,if條件語(yǔ)句中用"II”運(yùn)算符,若要找能同時(shí)被7和11整除的所有整數(shù),則在if()中,應(yīng)
用"&&”運(yùn)算符。
第五套
請(qǐng)補(bǔ)充函數(shù)fun,該函數(shù)的功能是:判斷某一個(gè)年份是否為閏年。
例如,1900年不是閏年,2004是閏年。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若
干表達(dá)式或語(yǔ)句。
試題程序:
#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語(yǔ)句,負(fù)責(zé)將函數(shù)值返回給主調(diào)函數(shù)。一般情況下,flag在C語(yǔ)言中作為一種標(biāo)志來(lái)
使用,本書中有多個(gè)題目都使用了flag標(biāo)志。
【解題思路】
填空1:判斷閏年的方法是,年份能被4整除但不能被100整除,或者年份能被400整除。n
不能被100整除,即對(duì)100取余非零。
填空2:能被400整除的年份也是閏年,n能被400整除,即對(duì)400取余為零。
填空3:flag標(biāo)記年份n是否為閏年,當(dāng)flag為1時(shí),是閏年,當(dāng)flag為。時(shí),不是閏年。
下列給定程序中函數(shù)fun的功能是:計(jì)算n!。例如,給n輸入5,則輸出120.000000。
請(qǐng)改正程序中的錯(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語(yǔ)句,一般情況下,需要根據(jù)題目要求確定條件表達(dá)式的內(nèi)容,同時(shí)需要注意其
格式。計(jì)算階乘的方法,n!=n*(n-l)!。
請(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<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ù)相除,'/'
用來(lái)求得數(shù)的整數(shù)部分,’留用來(lái)求余數(shù)。
【解題思路】
本題中主要的問題是怎么取出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)算。
第六套
請(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])
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語(yǔ)句條件表達(dá)式,這類題目一般解法是根據(jù)題意確定表達(dá)式的值,如果表達(dá)式
的值為真,則執(zhí)行下面的語(yǔ)句;如果值為假,則不執(zhí)行該語(yǔ)句。遞歸算法的掌握,遞歸是指函數(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。
請(qǐng)改正程序中的錯(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ò)誤:缺少大括號(hào)正確:力口}
【考點(diǎn)分析】
本題考查:if語(yǔ)句,這類題目的一般解法是根據(jù)題意確定if語(yǔ)句的條件表達(dá)式,區(qū)別邏輯表
達(dá)式和算術(shù)表達(dá)式。同時(shí)注意c語(yǔ)言書寫程序應(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ò)誤信息顯示出來(lái),比如丟失"}"的錯(cuò)誤信息是"Compound
statementmissing}infunctionfun”,并在當(dāng)前錯(cuò)誤處停止光標(biāo),我們只要按回車鍵進(jìn)行
編輯就可以了。
請(qǐng)編寫函數(shù)fun,它的功能是計(jì)算:
s=(In(1)+ln(2)+ln(3)+-+ln(m))0.5
在C語(yǔ)言中可調(diào)用log(n)函數(shù)求ln(n)?
例如,若m的值為20,則fun函數(shù)值為6.506583,
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
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)*/
/*對(duì)s求平方根并返回*/
}
【考點(diǎn)分析】
計(jì)算表達(dá)式的值,一般都要定義一個(gè)變量sum作為累加(乘器),加法運(yùn)算時(shí)賦初值為0,乘法
運(yùn)算時(shí),賦初值為1,然后利用循環(huán)語(yǔ)句,使sum進(jìn)行累加或累乘。
【解題思路】
題目要求計(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ǔ)充函數(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>
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)語(yǔ)句的循環(huán)初值,根據(jù)題意確定循環(huán)變量取值范圍。if語(yǔ)
句的條件表達(dá)式,根據(jù)題意確定條件表達(dá)式,本題的條件表達(dá)式應(yīng)該既滿足整除又滿足偶數(shù)
的條件。
【解題思路】
填空1:為了求出能整除k,且是偶數(shù)的數(shù),尋找范圍是從1到k。
填空2:如果i能整除k,則k對(duì)i求余為0,如果i為偶數(shù),則i對(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ì)算如下公式的值:
請(qǐng)改正函數(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)語(yǔ)句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值
范圍。變量數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,是通過類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。一般形式為:"(類型說明符)
(表達(dá)式)”,其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。
【解題思路】
該題是一道簡(jiǎ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ò)誤很明顯,是語(yǔ)法錯(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。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的
若干語(yǔ)句。
試題程序:
#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);/*對(duì)s求平方根*/
returns:
}
【考點(diǎn)分析】
本題考查:整除判定后求和、再對(duì)求和結(jié)果求平方根運(yùn)算;變量數(shù)據(jù)類型,求和時(shí)變量如何初
始化;整除的方法;if條件語(yǔ)句及“邏輯與"運(yùn)算;sqrt()平方根函數(shù)的應(yīng)用。
【解題思路】
本題的解題思路是逐個(gè)取得從0到n之間的數(shù),對(duì)每次取得的數(shù)進(jìn)行條件判斷,條件是既能被
5整除又能被11整除,注意這兩個(gè)條件要求同時(shí)成立,因此用到了"&&”運(yùn)算符。若滿足條件,
該數(shù)就被累加到s中去,求出所有符合條件的數(shù)后,用sqrt()函數(shù)(包含于頭文件<math.h>
中)對(duì)s求平方根。
第八套
請(qǐng)補(bǔ)充函數(shù)fun,它的功能是:計(jì)算并輸出n(包括n)以內(nèi)所有能被3或7整除的自然數(shù)
的倒數(shù)之和。
例如,在主函數(shù)中從鍵盤給n輸入30后,輸出為:s=l.226323。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若
干表達(dá)式或語(yǔ)句。
試題程序:
#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)語(yǔ)句的循環(huán)條件,這類題目的一般解法是根據(jù)題意確定循環(huán)變量的取值
范圍。if語(yǔ)句的條件表達(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. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 11我是一張紙 (教學(xué)設(shè)計(jì))統(tǒng)編版道德與法治二年級(jí)下冊(cè)
- 2024年五年級(jí)數(shù)學(xué)上冊(cè) 二 軸對(duì)稱和平移第2課時(shí) 軸對(duì)稱再認(rèn)識(shí)(二)配套教學(xué)實(shí)錄 北師大版
- 2024年五年級(jí)語(yǔ)文下冊(cè) 第五單元 習(xí)作:形形色色的人新學(xué)習(xí)單教學(xué)實(shí)錄 新人教版
- 7《不甘屈辱奮勇抗?fàn)帯罚ń虒W(xué)設(shè)計(jì))統(tǒng)編版道德與法治五年級(jí)下冊(cè)
- 金融市場(chǎng)多空策略制定與實(shí)施實(shí)戰(zhàn)指南
- 2024-2025學(xué)年新教材高考數(shù)學(xué) 第1章 空間向量與立體幾何 3 直線與平面的夾角教學(xué)實(shí)錄 新人教B版選擇性必修第一冊(cè)
- 5《草船借箭》教學(xué)設(shè)計(jì)-2023-2024學(xué)年語(yǔ)文五年級(jí)下冊(cè)統(tǒng)編版
- 醫(yī)療機(jī)構(gòu)應(yīng)急響應(yīng)預(yù)案
- 環(huán)境保護(hù)與污染防治預(yù)案
- 27巨人的花園(教學(xué)設(shè)計(jì))-2023-2024學(xué)年語(yǔ)文四年級(jí)下冊(cè)統(tǒng)編版
- 施工安全情況日常巡查表(完整版)
- 2025年醫(yī)院科教工作計(jì)劃
- 《亞洲概況及東亞》課件
- 河北交投物流有限公司所屬公司招聘筆試沖刺題2025
- 第二節(jié) 物業(yè)管理服務(wù)機(jī)構(gòu)設(shè)置及運(yùn)作流程
- 2025年上半年江西宜春市事業(yè)單位招聘工作人員651人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 初三心理健康 教育課件
- UL1650標(biāo)準(zhǔn)中文版-2019便攜式電纜UL中文版標(biāo)準(zhǔn)
- 高血壓課件教學(xué)課件
- 起重機(jī)械的安全管理制度(4篇)
- 2024解析:第十六章電壓和電阻-基礎(chǔ)練(解析版)
評(píng)論
0/150
提交評(píng)論