没有合适的资源?快使用搜索试试~ 我知道了~
算法与编程实习报告 第一题:统计字母的使用频率 一、题目:统计字母的使用频率 目的与要求 1.目的: 通过编写程序统计字母的使用频率,培养学生综合利用C语言进行程序设计的能力, 熟悉字符串的操作方法,加强函数的运用,提高软件系统分析能力和程序文档建立、归 纳总结的能力。 2.基本要求: 1)要求用C语言编程,在Visual C++环境下调试完成; 2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成; 3)要求应用本课所讲授的程序设计语言知识来解决问题 设计方法和基本原理 1.课题功能描述:本程序的功能,就是要统计英文字母的使用频率。 2.问题详细描述 为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不 超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大 到小输出字母(小写字母)和使用频率(出现的次数)。 3.问题的解决方案 按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考) : 将字符串中的大写字母转换为小写字母 统计输入的字符串中字母的使用频率 按使用频率从大到小进行排序 主函数
资源推荐
资源详情
资源评论
算法与编程实习报告
算法与编程实习报告
第一题:统计字母的使用频率
一、题目:统计字母的使用频率
目的与要求
1.目的:
通过编写程序统计字母的使用频率,培养学生综合利用 C 语言进行程序设计的能力,
熟悉字符串的操作方法,加强函数的运用,提高软件系统分析能力和程序文档建立、归纳
总结的能力。
2.基本要求:
1)要求用 C 语言编程,在 Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题
设计方法和基本原理
1.课题功能描述:本程序的功能,就是要统计英文字母的使用频率。
2.问题详细描述
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度
不超过 200 个字符。统计 26 个英文字母的使用频率,不区分大小写。最后按使用频率从
大到小输出字母(小写字母)和使用频率(出现的次数)。
3.问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参
考):
◆ 将字符串中的大写字母转换为小写字母
◆ 统计输入的字符串中字母的使用频率
◆ 按使用频率从大到小进行排序
主函数中控制输入、函数调用和输出。
主要技术问题的描述
根据三的分析,主要问题在于:
1)为统计字母的使用频率,定义一个长度为 26 的 int 数组存放所统计的各个字母的使
用频率。
2)在统计字母的使用频率时,不要使用 if 语句或 switch 语句,利用字母的 ASCII 码
与数组元素下标之间的关系来求得。
3)按使用频率从大到小进行排序时,建议使用指针数组更为方便。
算法与编程实习报告
创新要求
实现程序功能后,可进行创新设计:
1)使用多文件,即主函数和各个函数分别存放在不同的.c 文件中,在头文件中进行函
数原型声明。
2)读入一篇英文文档,并对其进行字母频率分析。
二、功能描述
1.程序运行第一步进行模式选择:从屏幕读入一串字母或从文件中读取文章(从屏
幕读入时字符串长度不超过 200)。
2.读取文章完毕后,统计各个字母的使用频率,并按从大到小的顺序打印出来,同时,
对使用次数相同的字母按字母表顺序打印,对使用次数为 0 的字母不予打印。
三、解决方案(流程图)
Main 函数
Chang 函数
(大写字母转换为小写字母后返回)
Mode_Num=1?
Cal 函数
(统计某一字母的使用频率)
Fprint 函数
(按顺序打印字母及使用频率)
结束
Fread 函数
(读入一篇文档)
Y
N
开始
算法与编程实习报告
四、主要函数描述
1.Main 函数:负责变量的定义、模式的选择及函数的调用。
2.change 函数:负责将大小写字母统一成小写字母后返回小写字母。
3.calculate 函数:负责统计某一字母的使用频率并输出。
4.read 函数:读入位于 f://单词开头大写.txt,通过调用函数统计字母频率 并相应
输出。
5.fprint 函数:按字母使用频率从大到小的顺序输出字母及其使用频率。
五、主要技术问题
程序如下:
#include <stdio.h>
#include <stdlib.h>
#define N 200
/*判断字母并将大写字母转换为小写字母后返回*/
void change(char *p)
{
int i=0;
for(i=0;*(p+i)!='\0';i++)
*(p+i)=(('a'<=(*(p+i))&&(*(p+i))<='z'))?*(p+i):(*(p+i)+32); //判断字母
} 的值,将所有字母转换成小写
/*统计某一字母的使用频率*/
void calculate(char *p,int * q)
{
int i=0,temp=0;
for(i=0;*(p+i)!='\0';i++)
(*(q+(*(p+i)-'a')))++;//对相应统计字母的数组进行操作,统计相应字母的使用
} 频率
/*找出使用次数最多的字母并按顺序打印*/
void find(int b[])
{
int i=0,max=0,j=0,k=0;
while(k<26) //依次判断各个字母的使用次数
{
for(i=0;b[i]!=-1;i++)
if(b[i]>max)
max = b[i],j=i; //记录最大使用次数为 max
if(max==0)
return;
b[j]=0;
printf("%c %6d\n",'a'+j,max); //按顺序打印各字母及其使用次数
k++;
max=0;
算法与编程实习报告
}
}
/*读入位于 f://单词开头大写.txt,通过调用函数统计字母频率并相应输出*/
void read()
{
FILE *fp;//定义文件指针
char ch;
int i;
int a[27]={0};
a[26]=-1;
if(!(fp=fopen("f:\\单词开头大写.txt","r"))){
printf("ERROR!!");
exit(1);
}
ch=fgetc(fp);
while(ch!=-1){//文档的结束符为-1
if(ch==-1)
continue;
ch=(('a'<=ch&&(ch)<='z'))?ch:(ch+32);//字母大小写统一
if('a'<=ch&&(ch)<='z')
a[ch-'a']++;
ch=fgetc(fp);//获取下一个字符
}
fclose(fp);//关闭文件指针
for(i=0;i<=25;i++)
{
printf("%d", a[i]);//统计并打印该文档中各字母的使用频率
printf(" ");
}
return;
}
void main()//主函数
{
char a[N];
int i;
int b[27]={0},Mode_Num;//Mode_Num 为模式选择
b[26]=-1;
printf("Please choose the MODE:\n1--to read from the screen\n2--to read from
file\n");
scanf("%d",&Mode_Num);
if(Mode_Num==1){
scanf("%s",a);//输入字符串
change(a);//调用 change 函数,将所有字母统一为小写字母
calculate(a,b);//调用 calculate 函数,统计个字母的使用频率
剩余20页未读,继续阅读
资源评论
小虾仁芜湖
- 粉丝: 84
- 资源: 9357
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功