一、题目:统计字母的使用频率
二、功能描述
输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数)。
三、解决方案(流程图)
提示用户输入字母
获取字母,并存在数组c[]中
计算每个字母使用的次数,存在数组sum[]中
显示结果
字母排序
四、主要函数描述
void sort(char *a,int *sum) //定义函数 函数功能:排序
{
int i,j,k,temp1,temp2;
for(i=0;i<26;i++) //采用选择排序
{
for(j=i+1;j<26;j++)
{
if(sum[j]>sum[i])
{k=j;
temp1=a[i];temp2=sum[i];
sum[i]=sum[k];sum[k]=temp2;
a[i]=a[k];a[k]=temp1;}
}
}
}
void main()
{
char c[200];
int sum[26],i,j;
char a[26];
printf("1.欢迎使用字母频数统计程序\n");
printf("2.请输入字母~(^-^)~\n");
for(i=0;i<26;i++) //初始化数组
{ a[i]=i;
sum[i]=0;
}
for(i=0;(c[i]=getchar())!='\n';i++);//输入选项
c[i]='\0';
for(i=0;c[i]!='\0';i++)
{
if(c[i]>='A'&&c[i]<='Z') c[i]+=32; //大写字母转小写
sum[c[i]-'a']++;
}
sort(a,sum); //执行函数排序
for(j=0;j<26;j++)
{
printf("%c\t",a[j]+'a');
printf("%d",sum[j]);
printf("\n");
}
}
五、主要技术问题
1) 为统计字母的使用频率,定义一个长度为26的int数组存放所统计的各个字母的使用频率。
2) 在统计字母的使用频率时,不要使用if语句或switch语句,利用字母的ASCII码与数组元素下标之间的关系来求得。
3) 按使用频率从大到小进行排序时,建议使用指针数组更为方便。
六、结论
此次编程实现了统计字母的使用频率功能。
通过编程实现本题所述的功能,锻炼了我综合利用C语言进行程序设计的能力,熟悉了字符串的操作方法,加强了函数的运用,提高了软件系统分析能力和程序文档建立、归纳总结的能力。
温馨提示:答案为网友推荐,仅供参考