第48套:?
給定程序中,函數(shù)fun的功能是:將形參s所指字符串中的數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值,計(jì)算出這些數(shù)值的累加和作為函數(shù)值返回。?
例如,形參s所指的字符串為:abs5def126jkm8,程序執(zhí)行后的輸出結(jié)果為:22。?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#include?<ctype.h>?
int?fun(char?*s)?
{?int?sum=0;?
while(*s)?{?
/**********found**********/?
if(?isdigit(*s)?)?sum+=?*s-?__1__?;?
/**********found**********/?
__2__;?
}?
/**********found**********/?
return?__3__?;?
}?
main()?
{?char?s[81];?int?n;?
printf("\nEnter?a?string:\n\n");?gets(s);?
n=fun(s);?
printf("\nThe?result?is:?%d\n\n",n);?
}?
解題思路:?
本題是把字符串中是數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值并進(jìn)行累加。?
第一處:'0'字符對(duì)應(yīng)的ASCII值是48,因此數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)數(shù)值時(shí)只要減去48,即是該數(shù)字字符對(duì)應(yīng)的數(shù)值,所以應(yīng)填:48。?
第二處:到字符串下一個(gè)位置,所以應(yīng)填:s++。?
第三處:返回累加和sum,所以應(yīng)填:sum。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算小于形參k的最大的10個(gè)能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳入,若k的值為500,則函數(shù)值為4622。?
請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
int?fun(?int?k?)?
{?int?m=0,?mc=0,?j?;?
while?((k?>=?2)?&&?(mc?<?10))?
{?
/************found************/?
if?((k%13?=?0)?||?(k%17?=?0))?
{?m?=?m+?k;?mc++;?}?
k--;?
}?
return?m;?
/************found************/?
?
_____?
main?(?)?
{?
printf("%d\n",?fun?(500));?
}?
解題思路:?
第一處:判斷相等的條件是==,而不是=,所以只能在比較處再添加一個(gè)=。?
第二處:經(jīng)過(guò)編譯可知,"{"和"}"沒(méi)有配對(duì),所以在橫線處加上"}"。?
***************************************************?
編寫(xiě)函數(shù)fun,它的功能是:求小于形參n同時(shí)能被3與7整除的所有自然數(shù)之和的平方根,并作為函數(shù)值返回。?
例如若n為1000時(shí),程序輸出應(yīng)為:s?=?153.909064。?
注意:?部分源程序在文件PROG1.C文件中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。?
給定源程序:?
#include?<math.h>?
#include?<stdio.h>?
double?fun(?int?n)?
{?
}?
main()?/*?主函數(shù)?*/?
{?
printf("s?=%f\n",?fun?(?1000)?);?
NONO();?
}?
解題思路:?
本題是求小于形參n同時(shí)能被3與7整除的所有自然數(shù)之和的平方根,并作為函數(shù)值返回。?
參考答案:?
double?fun(?int?n)?
?
{?
double?sum=0.0;?
int?i;?
for(i=21;?i<=n;?i++)?
if((i?%?3==0)?&&?(i?%?7==0))?sum+=i;?
return?sqrt(sum)?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第49套:?
給定程序中,函數(shù)fun的功能是:將形參s所指字符串中所有ASCII碼值小于97?的字符存入形參t所指字符數(shù)組中,形成一個(gè)新串,并統(tǒng)計(jì)出符合條件的字符個(gè)數(shù)作為函數(shù)值返回。?
例如,形參s所指的字符串為:Abc@1x56*,程序執(zhí)行后t所指字符數(shù)組中的字符串應(yīng)為:A@156*。?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
int?fun(char?*s,?char?*t)?
{?int?n=0;?
while(*s)?
{?if(*s?<?97)?{?
/**********found**********/?
*(t+n)=?__1__?;?n++;?}?
/**********found**********/?
?
__2__?;?
}?
*(t+n)=0;?
/**********found**********/?
return?__3__?;?
}?
main()?
{?char?s[81],t[81];?int?n;?
printf("\nEnter?a?string:\n");?gets(s);?
n=fun(s,t);?
printf("\nThere?are?%d?letter?which?ASCII?code?is?less?than?97:?%s\n",n,t);?
}?
解題思路:?
本題是根據(jù)條件組成新的字符串并統(tǒng)計(jì)出符合條件的個(gè)數(shù)n。?
第一處:把符合條件的當(dāng)前字符存放到t字符串中,所以應(yīng)填:*s。?
第二處:到字符串下一個(gè)位置,所以應(yīng)填:s++。?
第三處:返回符合條件的字符個(gè)數(shù)n,所以應(yīng)填:n。?
***************************************************?
給定程序MODI1.C中函數(shù)?fun?的功能是:由形參給定n個(gè)實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)在平均值以上(含平均值)的實(shí)數(shù)個(gè)數(shù)。?
例如,n=8時(shí),輸入:193.199,195.673,195.757,196.051,196.092,196.596,?196.579,196.763?
所得平均值為:195.838745,在平均值以上的實(shí)數(shù)個(gè)數(shù)應(yīng)為:5?
請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
int?fun(float?x[],?int?n)?
{?
/************found************/?
int?j,?c=0,?float?xa=0.0;?
for?(j=0;?j<n;?j++?)?
xa?+=?x[j]/n;?
printf("ave?=%f\n",xa);?
for?(j=0;?j<n;?j++?)?
/************found************/?
if?(x[j]?=>?xa)?
c++;?
return?c;?
}?
main?(?)?
{?float?x[100]?=?{193.199,?195.673,?195.757,?196.051,?196.092,?196.596,?196.579,?196.763};?
printf("%d\n",?fun?(x,?8));?
}?
解題思路:?
第一處:兩種類型變量定義之間應(yīng)該用分號(hào),所以應(yīng)改為:int?j,?c=0;?float?xa=0.;。?
第二處:在C語(yǔ)言中,大于等于應(yīng)表達(dá)為>=。?
***************************************************?
編寫(xiě)函數(shù)fun,其功能是:根據(jù)以下公式求P的值,結(jié)果由函數(shù)值帶回。m與n?為兩個(gè)正整數(shù)且要求m?>?n。?
m!?
P?=?───?
n!(m-n)!?
例如:m=12,n=8時(shí),運(yùn)行結(jié)果為495.000000。?
注意:?部分源程序在文件PROG1.C文件中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。?
給定源程序:?
#include?<stdio.h>?
float?fun(int?m,?int?n)?
{?
}?
main()?/*?主函數(shù)?*/?
{?
printf("P=%f\n",?fun?(12,8));?
NONO();?
}?
解題思路:?
本題是計(jì)算階乘。?
參考答案:?
#include?<stdio.h>?
long?jc(int?m)?
{?
long?s=1;?
int?i?;?
for(i=1;i<=m;i++)?s=s*i?;?
return?s;?
}?
?
float?fun(int?m,?int?n)?
{?
float?p;?
p=1.0*jc(m)/jc(n)/jc(m-n)?;?
return?p;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第50套:?
給定程序中,函數(shù)fun的功能是:有N×N矩陣,以主對(duì)角線為對(duì)稱線,對(duì)稱元素相加并將結(jié)果存放在左下三角元素中,右上三角元素置為0。例如,若N=3,有下列矩陣:?
1?2?3?
4?5?6?
7?8?9?
計(jì)算結(jié)果為1?0?0?
6?5?0?
10?14?9?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#define?N?4?
/**********found**********/?
void?fun(int?(*t)___1___?)?
?
{?int?i,?j;?
for(i=1;?i<N;?i++)?
{?for(j=0;?j<i;?j++)?
{?
/**********found**********/?
___2___?=t[i][j]+t[j][i];?
/**********found**********/?
___3___?=0;?
}?
}?
}?
main()?
{?int?t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},?i,?j;?
printf("\nThe?original?array:\n");?
for(i=0;?i<N;?i++)?
{?for(j=0;?j<N;?j++)?printf("%2d?",t[i][j]);?
printf("\n");?
}?
fun(t);?
printf("\nThe?result?is:\n");?
for(i=0;?i<N;?i++)?
{?for(j=0;?j<N;?j++)?printf("%2d?",t[i][j]);?
printf("\n");?
}?
}?
解題思路:?
第一處:形參t的定義,整數(shù)數(shù)組其寬度為N,所以應(yīng)填:[N]。?
第二處:對(duì)稱元素相加,其結(jié)果仍存放在左下三角元素中,所以應(yīng)填:t[i][j]。?
第三處:右上三角元素置為0,所以應(yīng)填:t[j][i]。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算函數(shù)F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。?
例如,當(dāng)x的值為9、y的值為11、z的值為15時(shí),函數(shù)值為?-3.50。?
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?
給定源程序:?
#include?<stdio.h>?
#include?<math.h>?
#include?<stdlib.h>?
/************found************/?
#define?FU(m,n)?(m/n)?
float?fun(float?a,float?b,float?c)?
{?float?value;?
value=FU(a+b,a-b)+FU(c+b,c-b);?
/************found************/?
Return(Value);?
}?
?
main()?
{?float?x,y,z,sum;?
printf("Input?x?y?z:?");?
scanf("%f%f%f",&x,&y,&z);?
printf("x=%f,y=%f,z=%f\n",x,y,z);?
if?(x==y||y==z){printf("Data?error!\n");exit(0);}?
sum=fun(x,y,z);?
printf("The?result?is?:?%5.2f\n",sum);?
}?
解題思路:?
第一處:define定義錯(cuò)誤,所以應(yīng)改為:#define?FU(m,n)?((m)/(n))。?
第二處:return錯(cuò)寫(xiě)成Return,變量value錯(cuò)寫(xiě)成Value。?
***************************************************?
規(guī)定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:將字符串中的前導(dǎo)*號(hào)全部刪除,中間和尾部的*號(hào)不刪除。?
例如,字符串中的內(nèi)容為:*******A*BC*DEF*G****,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:A*BC*DEF*G****。在編寫(xiě)函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。?
注意:?部分源程序在文件PROG1.C中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。?
給定源程序:?
#include?<stdio.h>?
void?fun(?char?*a?)?
{?
}?
main()?
{?char?s[81];?
printf("Enter?a?string:\n");gets(s);?
fun(?s?);?
printf("The?string?after?deleted:\n");puts(s);?
NONO();?
}?
解題思路:?
本題是考察字符串的操作。?
1.?利用循環(huán)掃描出字符串左邊第1個(gè)字符不是'*'的字符。?
2.?再利用循環(huán)把以后的字符依次移動(dòng)原字符串首地址開(kāi)始存放。?
3.?最后給字符串a加上結(jié)束符。?
參考答案:?
void?fun(?char?*a?)?
{?
int?j=0;?
char?*p?=?a?;?
while(*p?==?'*')?p++?;?
while(*p)?{?
a[j++]?=?*p?;?
p++;?
}?
a[j]=0?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?