版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國多肽藥物行業(yè)發(fā)展環(huán)境分析及投資戰(zhàn)略研究報(bào)告
- 2024-2030年中國地坪行業(yè)發(fā)展態(tài)勢與投資建議分析報(bào)告
- 小學(xué)班主任工作考核方案
- 2024年環(huán)保節(jié)能廠房分租服務(wù)合同模板下載3篇
- 2024年版:數(shù)字音樂版權(quán)許可合同(許可范圍、使用方式及許可費(fèi)用)
- 2024年區(qū)二手房買賣交易安全協(xié)議范本2篇
- 2024年生態(tài)旅游度假區(qū)開發(fā)與運(yùn)營合同
- 馬鞍山師范高等??茖W(xué)校《新生專業(yè)導(dǎo)讀課程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度財(cái)富傳承代客理財(cái)專項(xiàng)協(xié)議3篇
- 2025電腦銷售合同樣本
- 民辦學(xué)校教職工入職背景審查制度
- 2024年新人教版四年級數(shù)學(xué)上冊《教材練習(xí)21練習(xí)二十一(附答案)》教學(xué)課件
- 2024年湛江市農(nóng)業(yè)發(fā)展集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 商業(yè)倫理與社會(huì)責(zé)任智慧樹知到期末考試答案2024年
- MOOC 創(chuàng)新思維與創(chuàng)業(yè)實(shí)驗(yàn)-東南大學(xué) 中國大學(xué)慕課答案
- 二級公立醫(yī)院績效考核三級手術(shù)目錄(2020版)
- 6人小品《沒有學(xué)習(xí)的人不傷心》臺詞完整版
- GB/T 16865-1997變形鋁、鎂及其合金加工制品拉伸試驗(yàn)用試樣
- 自閉癥兒童行為檢核表學(xué)前版
- 五年級上冊數(shù)學(xué)專項(xiàng)練習(xí)高的畫法 全國通用
- 民警個(gè)人季度小結(jié)范文(3篇)
評論
0/150
提交評論