当前位置:首页 > 算法与编程实验报告
算法与编程
实 验 报 告
班级:10083412 姓名:储飞 学号:10081235 指导老师:朱芳
第一题
一、题目:
一、题目:统计字母的使用频率 二、目的与要求 1. 目的:
通过编写程序统计字母的使用频率,培养学生综合利用C语言进行程序设计的能力,熟悉字符串的操作方法,加强函数的运用,提高软件系统分析能力和程序文档建立、归纳总结的能力。 2. 基本要求:
1)要求用C语言编程,在Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题 三、设计方法和基本原理 1. 课题功能描述
本程序的功能,就是要统计英文字母的使用频率。 2. 问题详细描述
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数)。 3. 问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
l 将字符串中的大写字母转换为小写字母 l 统计输入的字符串中字母的使用频率 l 按使用频率从大到小进行排序 主函数中控制输入、函数调用和输出。 四、主要技术问题的描述
根据三的分析,主要问题在于:
1) 为统计字母的使用频率,定义一个长度为26的int数组存放所统计的各个字母的使用频率。
2) 在统计字母的使用频率时,不要使用if语句或switch语句,利用字母的ASCII码与数组元素下标之间的关系来求得。
3) 按使用频率从大到小进行排序时,建议使用指针数组更为方便。 五、创新要求
实现程序功能后,可进行创新设计:
1) 使用多文件,即主函数和各个函数分别存放在不同的.c文件中,在头文件中进行函数原型声明。
2) 读入一篇英文文档,并对其进行字母频率分析。
二、设计思路(流程图)
首先,从屏幕读取一段字母,字符数小于200。为了便于统计,先把字符串中的大写字母转换为小写字母,所以我先建立了一个转换函数,逐个判断字符串中的字符是否为大写字母,若为大写字母则转换为小写字母并通过指针赋给原字符。接下来要统计字母使用频率,根据题目要求,我使用ASCII码来统计每个字母的使用频率,我以“a——97”为基准,其他的字母通过与97相减的差来代表各自频率。最后是相应字母和频率的排序,我采用了冒泡排序,在排列频率的同时对相应频率对应的字母也进行了排序,然后输出结果。
开 始 输入字符串
三、程序源代码及相关说明
/************************************************* 第一题:统计字母的使用频率 班级:10083412
姓名:储飞 学号:10081235 2011.6
*************************************************/ #include
/************************************************* 函数:zhuan
功能:判断字母并将大写字母转换为小写字母后返回 入口参数:字符指针
出口参数:相应的小写字母
*************************************************/ void zhuan(char *p) { for(;*p!='\\0';p++) if(*p>='A'&&*p<='Z') *p+=32;
结 束 zhuan函数 将大写字母转换成小写字母 字母和频率排序 }
/************************************************* main函数
*************************************************/ void main() { int a[26],i,n,c=0,j,t; char w[200],*q,z[27]={'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'},tt; for(i=0;i<26;i++) a[i]=0; printf(\请输入一串连续字符:\ gets(w); zhuan(w); //调用转换函数,将大写字母转换为小写字母 q=w; for(;*q!='\\0';q++){ n=*q-97; //字母ASCII码相对‘a’(97)的大小 a[n]+=1; //各字母出现次数 } for(i=0;i<25;i++) //使用冒泡排序对频率进行排序 for(j=0;j<25-i;j++){ if(a[j] 四、实验心得 通过这次“统计字母频率”算法编程的实习,我学习并掌握了函数的调用、形参为指针或数组的传递方法以及读取文件数据的方法。但是由于在一开始没有想到好的对字母排序的方法导致了走了很多弯路,对于题目中要求的指针数组使用起来还不是很有把握,所以选择了比较保守的冒泡排序。
共分享92篇相关文档