目录。一、 需求分析。
二、 概要设计。
三、 详细设计。
四、 测试结果。
五、 课程设计总结。
参考文献。附录。
一、需求分析。
1、文件数据的处理。
1)输入的形式和输入值的范围:向两个命名分别为和的文件中分别输入若干随机数字,两个数字之间用空格隔开,数字的范围应在-2147483648~2147483647之间。
2)输出的形式:程序运行之后会在指定的位置创建两个命名分别为和的文件,在这两个文件中分别有符合要求的数字,每两个数字之间用空格隔开。
3)程序所能达到的功能:此程序能分别求出和两个文件中数字的交集和并集,并把所求出的数字分别放进和两个文件中。
2、统计字符出现的频率。
1)输入的形式和输入值的范围:向文件中输入若干的连续字符,这些字符可以是数字和大小写的英文字母,数字范围为0~9,字母范围为a~z和a~z。
2)输出的形式:此程序运行后会在文件中输入各个字符出现的频率,其格式形如:k:
2.94%,前面某一字符,接着是此字符出现的频率,保留两位小数,每一个字符各占一行,没在文件**现的字符也输出,其频率为0。
3)程序所能达到的功能:程序能从文件中读取字符,并计算各个字符出现的频率,把所求的结果输入到文件中,此程序支持数字和大小写的字母。
二、概要设计。
1、文件数据的处理。
本程序定义了四个文件指针,分别为*fa、*fb、*fc和*fd它们分别指向和定义了一个指针型数组*a和五个整型变量:i、j、x、y、t。
主程序流程:程序先判断四个文件是否能打开,如果不能则在频幕上输出“cannot open”,接着分别把文件和中的数字读入到数组a中,此时x的值为文件中数字的个数,y为两个文件中数字的总数,数组a的前x个数为文件中的数字,其余为令一文件的数字。然后分别判断两个文件中是否含有重复的数字,重复的数字只保留一个其余赋0,接着把数组中的数字按从小到大排列。
然后求数组中重复的数字,并把非零数输入到文件中,此即为所要求的交集,把数组中非零的数字输入到文件中,此即为所要求的并集,程序到此结束。
本程序主要用到了文件的格式化读/写函数:fscanf( )fprintf()函数,还用到了for循环语句和if语句。
2、统计字符出现的频率。
此程序主要定义了两个文件型指针*fa和*fb分别指向和两个文件,定义了一个字符型数组a和四个整型变量len、i、j、num。
主程序流程:本程序在一开始同样先判断能否打开和这两个文件,如果不能打开,则在屏幕上输出“cannot open”。然后用fgets()函数把文件中的字符读入到数组a中,并用strlen()函数计算字符串长度并赋给len,接着计算每个字符出。
现的次数,最后把计算好的频率用fprintf()函数输入到文件中。
此程序主要用到了字符串读取函数fgets()和文件的格式化写入函数fprintf()函数,此外还用到了for循环语句和if语句。
三、详细设计。
1、文件数据的处理。
本程序算法步骤:
1) 用四个if语句判断能否打开所用到的文件,如果不能打开都输出“cannot open”。
2) 分别用两个for循环把文件和中的数字读入到数组a中,其中把第一个文件中的数字的个数赋给x,把两个文件中的数字的总个数赋给y,数组a总共有数字y个。读取数字过程中用到了判断文件是否结束的函数feof()。
3) 用两层for循环来去除重复的数字,for循环中的第一个if语句用来求第一个文件中重复的数字,并把其中一个保留下来,其余的赋零,第二个if语句来判断第二个文件中重复的数字,其余同第一个。
4) 接下来的两层for循环的作用为把数组a中的数字按从大到小的顺序排列出来。
5) 再用两层for循环,循环中的第一个if语句计算数组a中的重复数字,并用fprintf()函数把重复的但不为零的数字写入到文件中,此即为所要求的交集,第二个if语句把上一个算出的重复数字中的一个赋零,为下一步的求并集做准备。
6) 用一个for循环语句把排序好的数组a中的非零数写入到文件中此即为所求的并集。
源程序及其详细注释:
#include<>
#include<>
#include<>
main()
file *fa,*fb,*fc,*fd;
定义四个文件型指针。
int *a,i,j,x,y,t;
if((fa=fopen("c:\t"))null)
printf("cannot open");exit(0);}
if((fb=fopen("c:\t"))null)
printf("cannot open");exit(0);}
if((fc=fopen("c:\\wt"))null)
printf("cannot open");exit(0);}
if((fd=fopen("c:\\wt"))null)
printf("cannot open");exit(0);}
以上四个if语句为判断能否打开各个文件,如不能则输出“cannot open”且终止程序。
for(i=0;!feof(fa);i++)
把文件中的数字读入到数组a中直到结束,并把数字个数赋给x
for(i=x;!feof(fb);i++)
把文件中的数字同样读到数组a中,排在第一个文件的后面,并把两个文件中的所有数字的个数赋给y
for(i=0;i for(j=i+1;j
把余下的数字做同样的操作。
for(i=0;i for(j=0;j if(a[j]>a[j+1])
对数组a中的所有数字按从大到小的顺序进行排序。
for(i=0;i for(j=i+1;j
取相同的数字中的一个赋零。
for(i=0;i if(a[i]!=0) fprintf(fd,"%d ",a[i]);
把a中非零数字写入到文件中,即为所求并集。
2、统计字符出现的频率。
本程序算法步骤:
1)用两个if语句判断能否打开所用的两个文件,如果不能则输出“cannot open”,并终止程序。
2)用fgets()把文件中的字符串读入到数组a中,并用strlen()函数求出字符串的长度赋给len。
3)用for循环语句求出各个字符出现的次数,并赋给num,最后把每个字符对应的num除以len,转化成百分比形式写入到文件中,即为所求频率。
源程序及其详细注释:
#include<>
#include<>
main()
file *fa,*fb;
定义两个文件型指针。
char a[100];
int len,i,j,num;
定义一个字符型数组a,及四个整型变量。
if((fa=fopen("c:\t"))null)
printf("cannot open");exit(0);}
if((fb=fopen("c:\\wt"))null)
printf("cannot open");exit(0);}
两个if语句来判断文件是否能打开,如果不能,则输出“cannot open”,并终止程序。
fgets(a,100,fa);
把文件中的字符串读入到数组a中。
len=strlen(a);
求字符串的长度。
for(i=48;i<=122;i++)
num=0;
每循环一次num都赋初值为0
if(i>57&&i<65) continue;
if(i>90&&i<97) continue;
如果遇到非数字和字母对应的ascii码值直接进入下一次循环。
for(j=0;jif(a[j]==i) num=num+1;
求指定字符出现的次数,并赋给num
fprintf(fb,"%c:%5.2f%%",i,100*(float)num/len);}
C语言课程课程设计
课程设计报告。课程名称 c语言程序设计 系别 xxx 专业班级 xxx班 学号 xxxxxxxxxx 姓名 xxx 课程题目 10或100以内儿童加减乘除算术游戏。完成日期 2013.6.14 19 指导老师 xxx 2013年 6月 21日。附件 一 程序模块图。二 源程序。include inc...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。xx xx学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 课程类别 专业基础课。制订时间 2010年11月 计算机科学与技术系制。c语言程序课程设计教学...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。珠海学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 2010级计算机科学与技术系各专业。课程类别 专业基础课。制订时间 2010年11月 计算机科学与技...