在给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。
例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:
letter ’a’:3 times
letter ’s’:3 times
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构。
文件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))
/**********found**********/
ch=tolower( (1) );
n=ch-’a’:
/**********found**********/
k[n]+= (2) ;
s++:
/**********found**********/
if(max
printf("\nAfter count: \n");
for(i=0;i<26;i++)
if(k[i]==max)printf("\nletter \’%c\’: %d times\n",i+’a’,k[i]);
void main( )
char s[81];
printf("\nEnter a string: \n\n");
gets(s);
fun(s);
参考答案:k[n]
解析: 函数fun的算法是:先统计出各类字母(不区分大小写)的个数放入数组k中,并在统计的过程中求出最大值。数组k中恰好26个元素,k[0]存放a或A的个数,k[1]存放b或B的个数,……,以此类推。在while循环中,首先判断*s是否是英文字母,若是,则通过tolower函数将字母一律转换成小写,再通过ch-’a’求出ch与小写字母a的ASCII码之差,恰好得到数组k对应元素的下标,并且应该使该元素增加1,因此,第1空处应填入*s,第2空处应填入1。该字符统计完毕后,s自加1,指向下一个字符。再将max和当前的k[n]进行大小比较,若最大值max比k[n]小,则需对max重新赋值为k[n],循环完毕最大值存放在max变量中,因此第3空处应填入k[n]。最后通过for循环找到最大值对应的字母并进行输出。