第47套:
给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。
例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:
letter ‘a’ : 3 times
letter ‘s’ : 3 times
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#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) ) {
ch=tolower(__1__);
n=ch-'a';
k[n]+= __2__ ;
}
s++;
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);
}
解题思路:
本题是找出字符串中出现频率最高的字母并统计出其次数。
第一处:将当前字母转换为小写字母,所以应填:*s。
第二处:把该字母出现的个数累加到指定的数组中,所以应填:1。
第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填:
k[n]。
给定程序MODI1.C中函数 fun 的功能是:求S的值。
例如,当k为10时,函数值应为:1.533852。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <math.h>
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++;
}
return s
}
main ( )
{
printf("%f\n", fun (10));
}
解题思路:
第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。
第二处:缺少分号。
编写函数fun,它的功能是:计算并输出下列级数和:
1 1 1
S = ── + ── + … + ───
1×2 2×3 n(n+1)
例如,当n = 10时,函数值为:0.909091。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。
给定源程序:
#include <stdio.h>
double fun( int n )
{
}
main() /* 主函数 */
{
printf("%f\n", fun(10));
NONO();
}
解题思路:
本题是根据公式计算结果。使用for循环语句进行计算。但要注意的是:在除法运算中,如果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数或进行实型的类型转换。
参考答案:
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 ;
}