计算机与程序设计语言—课程设计报告_第1页
计算机与程序设计语言—课程设计报告_第2页
计算机与程序设计语言—课程设计报告_第3页
计算机与程序设计语言—课程设计报告_第4页
计算机与程序设计语言—课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二一二二一三学年第一学期信息科学与工程学院计算机与程序设计语言课程设计报告课程名称:计算机与程序设计语言班 级: 电气信息2012级 1206 班学 号: 姓 名: 指导教师: 二0一二年十二月目录:1. 题目大意2. 需求分析3. 总体设计4. 程序流程图5. 详细设计(程序源代码)6. 程序运行结果7. 课程感悟8. 参考资料一:文件数据的处理1.两个文件:data1.txt和data2.txt,两个文件中都有很多数字,用空格隔开。如:45 78 85 45 63 21 47 86运行程序,计算这两个文件中数字的交集,并且排好序,存放在jiao.txt中;计算这两个文件中数字的并集,并且排

2、好序,存放在bing.txt中。2.需求分析 在电脑硬盘内,有两个数据文件date1.txt和date2.txt,要把这两个文件中的数据读出来,并设计程序求出两组数据的交集和并集。求出交集和并集后,用冒泡法进行排序,最后要把两组排序后的数字分别存储到文件jiao.txt和bing,txt中。3.总体设计 首先,可以采用文件打开的办法将两个文件中的数据读出来,并把它们分别放到整型数组date1和date2中。如果读入失败,也可以选用手动从键盘输入,并利用格式化输入的方法把这两组数据写到硬盘的文件中。然后,利用两个for循环控制数组的个数,如果date1和date2中的元素相同,则放到另一个数组中

3、,以此类推,求出两组数据的交集和并集,分别放到两个数组jiao和bing中。第三,采用冒泡法对两个数组jiao和bing中的元素进行从小到大的排序。最后,利用格式化输出函数fprintf()把这两个数组中的元素写到硬盘的jiao.txt文件和bing.txt文件中。至此,该问题已经得到解决。4.程序框图采用文件打开的方式把两个文件中的数据读出来,分别放到两个整型数组date1 和date2中。如果不能读入,则采用手动输入的方式。 对两个数组中的数据进行比较,分别把交集和并集放到jiao和bing中采用冒泡法对交集和并集排序格式化输出到文件中,并分别放到jiao.txt和bing.txt5.详细

4、设计 附 源代码与程序分析 #include /编译预处理 #include int main() file *fp1,*fp2,*fp3,*fp4;/定义四个指针变量 int date115,date215,jiao15,bing30;/四个数组 int i,j,k=0,l=0; fp1=fopen(e:date1.txt,r); fp2=fopen(e:date2.txt,r); if(fp1 = fopen(e:date1.txt,r)=null)|(fp2 = fopen(e:date2.txt,r)=null) printf(该文件还没有被建立,不能打开,请手动输入:n);/ 判断该

5、文件能否打开,如果不能 ,则手动输入,且输入的必须是15个数字,不然会是很奇怪的结果 printf(请输入第一个文件的数据:n); for(i = 0;i 15;i+) /因为该文件没有建立,所以无法打开 scanf(%d,&date1i); /需手动输入再建立 printf(请输入第二个文件的数据:n); for(i = 0;i 15;i+) scanf(%d,&date2i); fclose(fp1); fclose(fp2); fp1=fopen(e:date1.txt,w); fp2=fopen(e:date2.txt,w); for(i=0;i15;i+) fprintf(fp1,%

6、4d,date1i);/ 手动输入后,格式化输出到文件 fprintf(fp2,%4d,date2i); fclose(fp1);/养成好习惯,及时关闭打开的文件,节约内存 fclose(fp2); else for(i = 0; i 15; i+) fscanf(fp1,%d,&date1i);/如果读取成功,直接把数据读到数组中 fscanf(fp2,%d,&date2i); for(i = 0; i 15; i+) for(j = 0; j 15 ;j+) if(date1i = date2j)/比较相同的数,放到jiao 中,这种求交集的方法,可能会是同一个数字出现两次 jiaok =

7、 date1i;k+;break; if(j = 15) bingl = date1i;l+;/把date1与date2中的不同数字赋给并集 for(i = 0; i 15; i+) bingl = date2i;l+;/把date2copy给并集 for(i = 1; i k ; i+) /冒泡法对交集排序,k为jiao数组的元素个数 for(j = 0; j jiao j+1) int temp; /定义一个中间变量 temp = jiaoj; jiaoj = jiaoj+1; jiaoj+1 = temp; for(i = 1; i l ; i+)/冒泡法对并集排序,l为bing数组的元

8、素个数 for(j = 0; j bing j+1) int temp; /定义一个中间变量 temp = bingj; bingj = bingj+1; bingj+1 = temp; fp3 = fopen(e:jiao.txt,w);/以“写”的方式打开文件 fp4 = fopen(e:bing.txt,w); printf(交集 :n); for(i = 0; i k ; i+) printf(%5d,jiaoi); /将交集在屏幕上打印 fprintf(fp3,%5d,jiaoi);/将交集格式化输出到jiao.txt文件上 printf(n); printf(并集:n); for(

9、i = 0; i l ; i+) printf(%5d,bingi); / 将并集打印到屏幕上 fprintf(fp4,%5d,bingi); /将并集格式化输出到bing.txt文件上 if(i%10=0) printf(n);/美化屏幕 fclose(fp3);fclose(fp4); /关闭文件 printf(n); printf(恭喜你,该程序已经成功运行,请到硬盘查看!n); 6.程序的运行结果第一种情况:e盘中提前没有新建文件date1.txt和date2.txt输入数据后显示情况如下点击回车后运行结果如下:如上所示,该程序已经运行结束,现在可以在e盘中发现多了四个txt文本文件夹

10、:date1.txt date2.txt jiao.txt bing.txt.第二种情况:e盘中已经提前建好文本文件,则运行时结果如下二:统计字符出现的频率1. 文件conf.txt中保存了很多字母,如:akdsjfkasdfjaksfjdaksdfjaskldjfaieakjdkfkadsjfiwejfkasdjf运行程序,计算这个文件中各个字母出现的频率,频率=出现的次数/总字母数。将频率存储在文件rate.txt中。格式为:a:3.2%k:3.8%2.需求分析 在这个问题中,一样用到了文件处理方面的知识,我们要把文件conf.txt中的很多个字母读出来,并计算各个字母出现的频率,先把它们

11、各自出现的频率打印在屏幕上,然后用格式化输出的方法输出到e盘的rate.txt文本文件中。注意:区分大小写!3.总体设计 第一步,要建立一个字符数组char string1000,存放conf.txt文件中的字符,这个数组最好设大一点,因为不确定有多少个字符(暂且设为1000)。第二步,使用两对数组char str126和float a26,char str2和float b分别存放大小写各个字符和各个字符出现的次数。第三步,在计算各个字符出现次数的同时统计字符的总字数(注意:写入时,字符的个数不能超过定义的个数1000)。第四步,计算频率,注意数据类型的强制转换。最后一步,输出:有两次输出,

12、一次是在屏幕上,且每两个换行一次。另一次输出是在硬盘文件上,采用格式化输出的方法将结果写到硬盘上。 4.程序流程图要建立一个字符数组char string1000,存放conf.txt文件中的字符使用两对数组char str126和float a26,char str2和float b分别存放大小写各个字符和各个字符出现的次数 在计算各个字符出现次数的同时统计字符的总字数(注意:写入时,字符的个数不能超过定义的个数1000)输出:有两次输出,一次是在屏幕上,且每两个换行一次。另一次输出是在硬盘文件上,采用格式化输出的方法将结果写到硬盘上。5.详细设计 附:程序代码和程序注释 #include

13、#include int main() int i,j = 0,k; float a26 = 0,b26=0;/ 字符与数字是相通的 ,分别计数大小写的个数。 float num = 0;/计数(总字母数) char str126, str226;/26个英文字母 char string1000;/存放 conf.txt中的字符 char ch; file *fp1,*fp2; for(i = 0;i 26; i+)/26个字母 str1i = a +i; str2i = a +i; if(fp1 = fopen(e:conf.txt,r)=null)/温馨提示 printf(cant ope

14、n conf.txt any key exit!); getchar(); exit(0); while(!feof(fp1) fscanf(fp1,%c,&stringj+); /把文件中的字符读到数组string中 fclose(fp1); for(i = 0;(ch = stringi)!=0;i+) for(k = 0; k 26; k+) if(ch = str1k) /判断该字符是哪个,并 ak+;break; / 把相应的整型数组计数 for(k=0;k26;k+) if(ch=str2k) bk+;break; num +;/字符总数 fp2 = fopen(e:rate.tx

15、t,w); printf(统计结果如下:n); for(i = 0; i 26&ai!=0; i+) /打印每个字符出现的频率,没出现的不显示,且每行显示两个 printf(%ct%f%t,str1i,100*ai/num);/计算频率 fprintf(fp2, %ct%f%n,str1i,100*ai/num);/格式化输出 if(i%2!=0) /每行输出两个 printf(n); printf(n); for(i=0;i26&bi!=0;i+) printf(%ct%f%t,str2i,100*bi/num); fprintf(fp2, %ct%f%n,str2i,100*bi/num)

16、; if(i%2!=0) /每行输出两个 printf(n); fclose(fp2);/关闭文件 printf(恭喜你!本程序你已经成功运行!请到e盘查看!n); printf(n);6.程序的运行结果首先,在运行程序之前,我们需要在e盘中新建一个文本文档conf.txt.并向里面输入不超过1000的字符,保存。示例如下:输入字符:大小写都有! 运行结果:见下页所示:还可以改成以%号形式输出可以看到,输出屏幕上大小写字符的频率都有。此时,打开e盘,会发现多了一个rate.txt文档,里面输入的有各个字符出现的频率:至此为止,该问题已经得到全部解决。三:课程设计感悟本次课程设计到现在为止,已经告一段落了。虽然这个课程设计把我搞的头昏脑涨,但是我想它对我的c语言的提高还是有很大帮助的。看着自己的劳动成果,心里还是有一种愉快的感觉的,毕竟这将近10天的辛苦没有白费。通过这次课程设计,我对数组又有了更加深刻的认识。当时,为了完成对字符出现的频率进行统计时,我把书上关于数组的知识又从前到后看了一遍。虽然说不能完全掌握吧,至少比刚开始要好了许多。当看着c-free软件报的错误越来越少时,心中不禁有了一种自豪感,至少我通过自己的努力进一步的了解了c语言。还有一点就是通过这次课程设计,我明白了查询资料的重要性:知识是不会自己跑到你的脑袋中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论