C语言课程设计

发布 2022-09-30 18:24:28 阅读 5683

目录。一、 需求分析。

二、 概要设计。

三、 详细设计。

四、 测试结果。

五、 课程设计总结。

参考文献。附录。

一、需求分析。

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月 计算机科学与技...