第45套:?
函數(shù)fun的功能是:把形參a所指數(shù)組中的偶數(shù)按原順序依次存放到a[0]、a[1]、a[2]、……中,把奇數(shù)從數(shù)組中刪除,偶數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7,刪除奇數(shù)后a所指數(shù)組中的數(shù)據(jù)為:4、2、6、8,返回值為4。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#define?N?9?
int?fun(int?a[],?int?n)?
{?int?i,j;?
j?=?0;?
for?(i=0;?i<n;?i++)?
/**********found**********/?
if?(___1___==?0)?{?
/**********found**********/?
___2___?=?a[i];?j++;?
}?
/**********found**********/?
return?___3___;?
}?
main()?
{?int?b[N]={9,1,4,2,3,6,5,8,7},?i,?n;?
printf("\nThe?original?data?:\n");?
for?(i=0;?i<N;?i++)?printf("%4d?",?b[i]);?
printf("\n");?
n?=?fun(b,?N);?
printf("\nThe?number?of?even?:%d\n",?n);?
printf("\nThe?even?:\n");?
?
for?(i=0;?i<n;?i++)?printf("%4d?",?b[i]);?
printf("\n");?
}?
解題思路:?
第一處:判斷a[i]是否是偶數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:a[i]?%?2。?
第二處:數(shù)組a中的元素位置由j來控制,每增加一個元素,則j加1,所以應(yīng)填:a[j]。?
第三處:返回刪除奇數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值。?
┌????10?(n=1)?
fun(n)=┥?
└????fun(n-1)+2?(n>1)?
例如,當(dāng)給n輸入5時,函數(shù)值為18;當(dāng)給n輸入3時,函數(shù)值為14。?
請改正程序中的錯誤,使它能得出正確結(jié)果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?
給定源程序:?
#include?<stdio.h>?
/************found************/?
fun?(?n?)?
{?int?c;?
/************found************/?
if(n=1)?
c?=?10?;?
else?
c=?fun(n-1)+2;?
return(c);?
}?
main()?
{?int?n;?
printf("Enter?n?:?");?scanf("%d",&n);?
printf("The?result?:?%d\n\n",?fun(n));?
}?
解題思路:?
第一處:形參n沒有定義類型,所以應(yīng)改為:fun?(int?n)。?
第二處:判斷相等的符號是==。?
***************************************************?
假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:使字?符串中尾部的*號不得多于n個;若多于n個,則刪除多余的*號;若少于或等于n個,則什么也不做,?字符串中間和前面的*號不刪除。?
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,若n的值為4,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:****A*BC*DEF*G****;若n的值為7,則字符串中的內(nèi)容仍為:****A*BC*DEF*G*******。n的值在主函數(shù)中輸入。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。?
注意:?部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
void?fun(?char?*a,int?n?)?
{?
}?
main()?
{?char?s[81];?int?n;?
printf("Enter?a?string:\n");gets(s);?
printf("Enter?n?:?");scanf("%d",&n);?
fun(?s,n?);?
printf("The?string?after?deleted:\n");puts(s);?
NONO();?
}?
解題思路:?
本題是考察字符串的操作。?
1.?使用while循環(huán)語句和字符串指針p掃描出尾部的*號。?
2.?找出字符串最右邊字母后出現(xiàn)'*'的第1位置。?
3.?使用while循環(huán)來處理右邊'*'是否大于n個,若大于,則取n個'*'。?
4.?最后給字符串加上結(jié)束符。?
參考答案:?
void?fun(?char?*a,int?n?)?
{?
char?*p=a?;?
int?j=0;?
while(*p)?p++;?p--;?/*?字符串的長度?*/?
while(*p?==?'*')?p--;?/*?字符串右的'*'?*/?
p++;?
while(j<n?&&?*p)?{?
p++?;?
j++;?
}?
*p?=?0?;?
?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第46套:?
給定程序中,函數(shù)fun的功能是:利用指針數(shù)組對形參ss所指字符串?dāng)?shù)組中的字符串按由長到短的順序排序,并輸出排序結(jié)果。ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?N?5?
#define?M?8?
void?fun(char?(*ss)[M])?
{?char?*ps[N],*tp;?int?i,j,k;?
for(i=0;?i<N;?i++)?ps[i]=ss[i];?
for(i=0;?i<N-1;?i++)?{?
/**********found**********/?
k=?__1__?;?
for(j=i+1;?j<N;?j++)?
/**********found**********/?
if(strlen(ps[k])?<?strlen(__2__)?)?k=j;?
?
/**********found**********/?
tp=ps[i];?ps[i]=ps[k];?ps[k]=?__3__?;?
}?
printf("\nThe?string?after?sorting?by?length:\n\n");?
for(i=0;?i<N;?i++)?puts(ps[i]);?
}?
main()?
{?char?ch[N][M]={"red","green","blue","yellow","black"};?
int?i;?
printf("\nThe?original?string\n\n");?
for(i=0;i<N;i++)puts(ch[i]);?printf("\n");?
fun(ch);?
}?
解題思路:?
本題是按字符串的長短進(jìn)行排序。?
第一處:外循環(huán)每循環(huán)一次,k應(yīng)保存當(dāng)前的i值,所以應(yīng)填:i。?
第二處:使用內(nèi)循環(huán)對i+1后面的字符串長度進(jìn)行比較,所以應(yīng)填:ps[j]。?
第三處:交換內(nèi)容,所以應(yīng)填:tp。?
***************************************************?
已知一個數(shù)列從第0項開始的前三項分別為0,0,1,以后的各項都是其相鄰的前三項之和。給定程序MODI1.C中函數(shù)fun的功能是:計算并輸出該數(shù)列前n項的平方根之和。n的值通過形參傳入。?
例如,當(dāng)n=10時,程序的輸出結(jié)果應(yīng)為:23.197745。?
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<math.h>?
/************found************/?
fun(int?n)?
{?double?sum,?s0,?s1,?s2,?s;?int?k;?
sum?=?1.0;?
if?(n?<=?2)?sum?=?0.0;?
s0?=?0.0;?s1?=?0.0;?s2?=?1.0;?
for?(k?=?4;?k?<=?n;?k++)?
{?s?=?s0?+?s1?+?s2;?
sum?+=?sqrt(s);?
s0?=?s1;?s1?=?s2;?s2?=?s;?
}?
/************found************/?
return?sum?
}?
main?(?)?
{?int?n;?
printf("Input?N=");?
scanf("%d",?&n);?
printf("%f\n",?fun(n)?);?
?
}?
解題思路:?
第一處:由于函數(shù)返回是實數(shù),所以必須定義返回的類型,只有整型或無結(jié)果返回可以忽略,其他必須定義返回的類型,所以要在此行前加上double或float。?
第二處:該行缺少分號。?
***************************************************?
編寫函數(shù)fun,它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。?
例如,當(dāng)n?=?10,x=0.3時,函數(shù)值為1.349859。?
注意:?部分源程序在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<math.h>?
double?fun(double?x?,?int?n)?
{?
}?
main()?
{?
printf("%f\n",?fun(0.3,10));?
NONO();?
}?
解題思路:?
本題是根據(jù)給定的公式計算結(jié)果。使用for循環(huán)語句依次求出每一項的值,分別進(jìn)行累加并把結(jié)果存入變量s中,最后把s作為函數(shù)值返回。其中,jc函數(shù)是計算階乘的。?
參考答案:?
#include?<stdio.h>?
#include?<math.h>?
long?jc(int?n)?
?
{?
long?s?=?1?;?
int?i?;?
for(i?=?1?;?i?<=?n?;?i++)?s?*=?i?;?
return?s?;?
}?
double?fun(double?x?,?int?n)?
{?
double?s?=?1.0,?y?=?x?;?
int?i?;?
for(i?=?1?;?i?<=?n?;?i++)?{?
s?+=?y?/?(double)jc(i)?;?
y?*=?x?;?
}?
return?s?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第47套:?
給定程序中,函數(shù)fun的功能是:找出形參s所指字符串中出現(xiàn)頻率最高的字母(不區(qū)分大小寫),并統(tǒng)計出其出現(xiàn)的次數(shù)。?
例如,形參s所指的字符串為:abcAbsmaxless,程序執(zhí)行后的輸出結(jié)果為:?
letter?'a'?:?3?times?
letter?'s'?:?3?times?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#include?<ctype.h>?
void?fun(char?*s)?
{?int?k[26]={0},n,i,max=0;?char?ch;?
while(*s)?
{?if(?isalpha(*s)?)?{?
/**********found**********/?
ch=tolower(__1__);?
n=ch-'a';?
/**********found**********/?
k[n]+=?__2__?;?
}?
s++;?
/**********found**********/?
if(max<k[n])?max=?__3__?;?
}?
printf("\nAfter?count?:\n");?
for(i=0;?i<26;i++)?
if?(k[i]==max)?printf("\nletter?\'%c\'?:?%d?times\n",i+'a',k[i]);?
}?
main()?
{?char?s[81];?
printf("\nEnter?a?string:\n\n");?gets(s);?
fun(s);?
}?
解題思路:?
本題是找出字符串中出現(xiàn)頻率最高的字母并統(tǒng)計出其次數(shù)。?
第一處:將當(dāng)前字母轉(zhuǎn)換為小寫字母,所以應(yīng)填:*s。?
第二處:把該字母出現(xiàn)的個數(shù)累加到指定的數(shù)組中,所以應(yīng)填:1。?
第三處:如果當(dāng)前該字母出現(xiàn)次數(shù)大于最大次數(shù)max,那么把該次數(shù)賦值給max,所以應(yīng)填:?k[n]。?
***************************************************?
給定程序MODI1.C中函數(shù)?fun?的功能是:求S的值。?
例如,當(dāng)k為10時,函數(shù)值應(yīng)為:1.533852。?
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<math.h>?
/************found************/?
void?fun(?int?k?)?
{?int?n;?float?s,?w,?p,?q;?
?
n?=?1;?
s?=?1.0;?
while?(?n?<=?k?)?
{?w?=?2.0?*?n;?
p?=?w?-?1.0;?
q?=?w?+?1.0;?
s?=?s?*?w?*w/p/q;?
n++;?
}?
/************found************/?
return?s?
}?
main?(?)?
{?
printf("%f\n",?fun?(10));?
}?
解題思路:?
第一處:由于函數(shù)返回是實數(shù),所以必須定義返回的類型,只有整型或無結(jié)果返回可以忽略,其他必須定義返回的類型,所以要在此行前加上double或float。?
第二處:缺少分號。?
***************************************************?
編寫函數(shù)fun,它的功能是:計算并輸出下列級數(shù)和:?1?1?1?
S?=?──?+?──?+?…?+?───?
1×2?2×3?n(n+1)?
例如,當(dāng)n?=?10時,函數(shù)值為:0.909091。?
注意:?部分源程序在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
double?fun(?int?n?)?
{?
}?
main()?/*?主函數(shù)?*/?
{?
printf("%f\n",?fun(10));?
NONO();?
}?
解題思路:?
本題是根據(jù)公式計算結(jié)果。使用for循環(huán)語句進(jìn)行計算。但要注意的是:在除法運(yùn)算中,如果除數(shù)和被除數(shù)都是整數(shù),所以所除的結(jié)果也是整數(shù),因此1應(yīng)取實數(shù)或進(jìn)行實型的類型轉(zhuǎn)換。?
參考答案:?
double?fun(?int?n?)?
{?
double?s?=?0.0?;?
int?i?;?
for(i?=?1?;?i?<=?n?;?i++)?s?=?s?+?1.0?/?(i?*?(i?+?1))?;?
return?s?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?