《新编C语言程序设计教程》课件第14章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《新编C语言程序设计教程》课件第14章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新编C语言程序设计教程 新编 语言程序设计 教程 课件 14
- 资源描述:
-
1、第 14章 C语言程序设计实例 第第 14章章 C语言程序设计实例语言程序设计实例 实例一实例一 成绩处理程序成绩处理程序实例二实例二 电子词典程序电子词典程序实例三实例三 野人渡河程序野人渡河程序第 14章 C语言程序设计实例 实例一实例一 成绩处理程序成绩处理程序 1.问题描述问题描述 进行若干个学生、若干门课程的成绩处理,要求计算:(1)每门课程的平均分和方差。(2)每个学生的总分、平均分及方差。(3)按总分对学生由高分到低分排序。第 14章 C语言程序设计实例 2.数据说明数据说明 (1)学生人数假定不超过1000人,课程门数假定不超过30门,分别用符号常量N、M描述。(2)实际学生人
2、数、实际课程门数分别用整型量n、m描述。(3)M门课程名称用二维字符数组sname描述。(4)学生数据考虑学号num、姓名name、M门课程成绩,用结构体stt描述。M门课程成绩用一维数组score描述。N个学生数据用结构体数组sta描述。第 14章 C语言程序设计实例 (5)每门课程的平均分和方差分别用一维实型数组avs1、sus1描述。(6)每个学生的总分、平均分及方差分别用一维实型数组total、avs2和实型量sus2描述。(7)排序结果引入一序号数组sort保存。以上变量定义为全局变量,同时利用这些变量在函数之间传递数据。(8)数据源文件、处理结果文件分别用字符指针变量ps、pt与文
3、件指针变量fps、fpt描述。第 14章 C语言程序设计实例 (9)引入中间整型变量i、j、k,i用于循环中控制学生,j用于循环中控制课程,k对应总分最高的学生序号。(10)数据源文件前面存放学生实际学生人数、实际课程门数与课程名称;处理结果文件中学生数据增加总分、平均分及名次,课程的平均分和方差、学生的平均分和方差存放于文件的最后。第 14章 C语言程序设计实例 3算法分析算法分析 (1)整个程序由主控模块main()、输入模块input()、每门课程的平均分和方差计算模块asfun()、每个学生的平均分及方差计算模块tasfun()、排序模块sortfun()、输出模块output()六个
4、模块组成。各模块之间顺序执行。(2)实际学生人数n、实际课程门数m、原始成绩数据由键盘输入或从磁盘数据文件读取。第 14章 C语言程序设计实例 (3)原始成绩数据由键盘输入时,将送磁盘文件SCORE.DAT保存。(4)方差计算公式为数据平方和的平均值减去数据平均值的平方。方差大,表示数据相互之间差别较大;方差小,表示数据相互之间差别较小。(5)排序采用选择排序方法,利用序号数组保存学生名次,无需交换数据。(6)处理结果与原始成绩数据合并后用另一磁盘文件STUDEN.DAT保存。第 14章 C语言程序设计实例 4.参考程序参考程序include stdio.hinclude math.hdefi
5、ne N 1000define M 30void input();void asfun();void tasfun();void sortfun();void output();第 14章 C语言程序设计实例 int n,m;struct sttint num;char*name;float scoreM;staN;char snameM16;float avs1M,svs1M;float totalN,avs2N,svs2;int sortN;第 14章 C语言程序设计实例 main()/*主控函数*/clrscr();input();asfun();tasfun();sortfun();o
6、utput();第 14章 C语言程序设计实例 void input()/*获取数据*/char ch;int i,j;char *ps;FILE*fps;printf(请选择数据源(K键盘输入 F磁盘文件读取):n);ch=getch();switch (ch)case K:/*数据从键盘输入*/case k:printf(请输入实际学生人数:);scanf(%d,&n);printf(请输入实际课程门数:);第 14章 C语言程序设计实例 scanf(%d,&m);if(n1000|m30)printf(数据无效!);exit(0);printf(请输入%d门课程名称:,m);for(j=
7、0;jm;j+)scanf(%s,snamej);for(i=0;in;i+)printf(请输入第%d个学生学号,姓名,%d门课程成绩:,i+1,m);scanf(%d%s,&stai.num,stai.name);for(j=0;jm;j+)scanf(%f,&stai.scorej);第 14章 C语言程序设计实例 ps=SCORE.DAT;/*送磁盘文件保存*/if(fps=fopen(ps,wb)=NULL)printf(文件建立错误!);exit(0);fwrite(&n,2,1,fps);fwrite(&m,2,1,fps);fwrite(sname,16,m,fps);fwri
8、te(sta,sizeof(struct stt),n,fps);fclose(fps);break;case F:/*数据从磁盘文件读取*/case f:第 14章 C语言程序设计实例 printf(“请输入数据文件名:”);scanf(%s,ps);if(fps=fopen(ps,rb)=NULL)printf(文件打开错误!);exit(0);fread(&n,2,1,fps);fread(&m,2,1,fps);fread(sname,16,m,fps);fread(sta,sizeof(struct stt),n,fps);fclose(fps);break;第 14章 C语言程序设
9、计实例 defautl:printf(数据源选择错误!);exit(0);void asfun()/*计算每门课程的平均分和方差*/int j;float tM,tsM;for(j=0;jm;j+)tj=0;tsj=0;for(i=0;in;i+)第 14章 C语言程序设计实例 tj+=sta i.scorej;tsj+=sta i.scorej*sta i.scorej;avs1j=tj/n;sus1j=tsj/n-avs1j*avs1j;void tasfun()/*计算每个学生的总分、平均分和方差*/int i,j;float ta=0,ts=0;for(i=0;in;i+)totali
10、=0;第 14章 C语言程序设计实例 for(j=0;jm;j+)totali+=sta i.scorej;avs2i=totali/n;ta+=avs2i;ts+=avs2i*avs2i;sus2=ts/n?(ta/n)*(ta/n);void sortfun()/*按总分排序*/int i,j,k;for(i=0;in;i+)k=i;for(j=i+1;jtotalk)k=j;sorti=k+1;第 14章 C语言程序设计实例 void output()/*输出数据*/int i,l,j;int is;char*pt;FILE*fpt;clrscr();/*输出数据送屏幕*/printf(
11、%d个学生%d门课程成绩数据如下:n);printf(学号 姓名 );for(j=0;jm;j+)printf(%16s,snamej);printf(|总分 平均分 名次n);for(i=0;in;i+)for(l=0;ln;l+)第 14章 C语言程序设计实例 if(sortl=i+1)is=l;printf(%8d%12s,stais.num,stais.name);for(j=0;jm;j+)printf(%16.2f,stais.scorej);printf(|%8.2f%8.2f%6dn,totalis,avs2is,sortis);printf(课程平均分 );for(j=0;j
12、m;j+)printf(%16.2f,avs1j);printf(n);printf(方差 );for(j=0;jm;j+)printf(%16.2f,sus1j);第 14章 C语言程序设计实例 printf(%16.2n,sus2);pt=STUDENT.DAT;/*输出数据送磁盘*/if(fpt=fopen(pt,wb)=NULL)printf(文件建立错误!);exit(0);fwrite(&n,2,1,fpt);fwrite(&m,2,1,fpt);fwrite(sname,16,m,fpt);for(i=0;ii;j-)strcpy(wordsj,wordsj-1);strcpy(
13、explsj,explsj-1);strcpy(wordsi,word);strcpy(explsi,expls);len+;第 14章 C语言程序设计实例 continue();void delete()/*删除*/char wordSTRLEN1;int i,j;flag=1;while(flag)printf(请输入待删除的单词:);第 14章 C语言程序设计实例 scanf(%s,word);i=search1(0,len-1,word);if(i=-1)printf(无此单词!n);else for(j=i;jlen-1;j+)strcpy(wordsj,wordsj+1);strc
14、py(explsj,explsj+1);len-;continue();第 14章 C语言程序设计实例 void modify()/*修改*/char wordSTRLEN1,explSTRLEN2;int i;flag=1;while(flag)printf(请输入待修改的单词:);scanf(%s,word);i=search1(0,len-1,word);if(i=-1)printf(无此单词!n);else printf(输入新释义:);scanf(%s,expl);第 14章 C语言程序设计实例 strcpy(explsi,expl);continue();void quit(fil
15、e)/*退出*/char file;int i;FILE*fp;char ch;printf(是否存入词典(Y/N)?);第 14章 C语言程序设计实例 ch=getch();if(ch=Ych=y)if(fp=fopen(file,w)=NULL)printf(不能打开文件%s!n,file);exit(0);for(i=0;i=8?i-8:0;i2=i=len-8?i+8:len-1;for(i=i1;i=i2;i+)printf(%-20s%-40sn,wordsi,explsi);continue();int search1(1,r,word)/*查找单词位置*/int l,r;cha
展开阅读全文