C语言综合程序设计说明书_第1页
C语言综合程序设计说明书_第2页
C语言综合程序设计说明书_第3页
C语言综合程序设计说明书_第4页
C语言综合程序设计说明书_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、c语言综合程序设计说明书一、设计目的 用c语言设计一个具有输入成绩、打印成绩表功能的综合程序,以巩固和加深对c语言的学习。二、设计要求已知有5名学生学号、学科如下:学号姓名数学英语计算机哲学总分名次1010110102101031010410105设计一个菜单程序,完成功能如下:1、输入1时完成输入姓名及各科成绩;2、输入2时完成打印输出总表;3、输入3时完成打印学号,成绩表,总分和名次;4、输入4时,完成退出功能。注:每执行完一个功能,屏幕必须清屏。三、设计思路将设计要求中的1、2、3分别定义为具有相应功能的子函数,再在主函数中进行调用。1、根据设计要求,设计需要用到结构体数组。因此,首先需

2、要定义一个结构体数组,并将其中的学号赋值为从1010110105。2、定义一个具有输入成绩功能的子函数,用循环语句和scanf语句相结合,完成每个学生的信息输入。3、另外定义一个子函数对结构体中的总分进行比较,排出学生名次。4、定义一个输出总表函数,用printf语句和循环语句结合使用,使该函数可以输出结构体中的各项数据。根据设计要求,可将定义的输出总表的函数中的输出姓名项删除,即可得到打印学号、成绩表、总分和名次的函数。四、程序设计环境 windows操作系统 win-tc 五、程序功能模块图主函数调用子函数数1,完成学生信息的输入调用子函数2,完成成绩总表的打印,调用子函数3,完成打印学号

3、,成绩表,总分,名次完成程序的退出输出提示语:对不起!您选择的不是功能键,请重新选择选择功能键:1,2,3,4选择1选择2选择3选择4选择其他六、程序功能流程图主函数main()while(1)输入n的值switch(n)n=1n=2n=3n=4n!=1,2,3,4调用子函数,完成信息录入和排名调用子函数,完成打印输出总表调用子函数,完成打印输出部分信息调用子函数完成退出提示用户输入有错误返回主函数main()主函数功能菜单输输出第一个学生的信息输出第i个学生的信息选择功能键1,2,3,4i=5i=+输入第一个学生的信息输入第i个学生的信息按任意键返回主函数main()i=5i=+ 假 假 真

4、 真 输入子函数-完成信息的录入 输出子函数完成打印表 for i=1 to 5 for j=1 to 5sti.sumstj.sum 真 假sti.mingci+返回主函数main()m=n退出m=y输入mwhile(1) 排名子函数-完成名次的排列 退出子函数-完成退出功能七、程序代码#include#include#include#includestruct student int num; char name20; float score5; float sum; int mingci;st6=0,10101,10102,10103,10104,10105;int shuru() in

5、t i; system(cls); printf(成绩录入nnnn); printf(tt本程序只能输入5个学生的信息ntt为使系统正常工作请按提示操作nntt注意:每输入成一项信息后按enter键确认!nnnn); printf(nn); sqrt(0); /*打开win tc浮点数支持*/ for(i=1;i=5;i+) /*这个循环是输入数据*/ printf(请输入学号为%d学生的姓名:,sti.num); scanf(%s,); printf(请输入该生的数学成绩:); scanf(%f,&sti.score1); printf(请输入该生的英语成绩:); scanf

6、(%f,&sti.score2); printf(请输入该生的计算机成绩:); scanf(%f,&sti.score3); printf(请输入该生的哲学成绩:); scanf(%f,&sti.score4); sti.sum=sti.score1+sti.score2+sti.score3+sti.score4; printf(n您已经完成了5位学生信息的录入nntt请按任意键返回主菜单t); getch(); int mingci() int i,j; for(i=1;i=5;i+) sti.mingci=1; for(j=1;j=5;j+) if(sti.sumstj.sum) sti

7、.mingci+; int shuchu() int i; printf(打印输出总表); printf(nnn); printf(tbbb_n); printf(t学号t姓名tt数学t英语t计算机t哲学t总分t名次n); printf(tbbb_n); for(i=1;i6;i+) /*这个循环是输出数据*/ printf(t%dt%8st%.2ft%.2ft%.2ft%.2ft%.2ft %dn,sti.num,,sti.score1,sti.score2,sti.score3,sti.score4,sti.sum,sti.mingci); printf(tbbb_n);

8、printf(nnnn); printf(您还想完成哪项操作,请选择功能键 1,2,3,4后按 entern); printf(n); printf(t1.录入成绩 2.打印输出总表 3.打印学号、成绩表、总分和名次 4.退出n); int shuchu1() int i; printf(打印学号、成绩表、总分和名次); printf(nnn); printf(tttbbbbbbbbbbbbbb_n); printf(tt学号t数学t英语t计算机t哲学t总分t名次n); printf(tttbbbbbbbbbbbbbb_n); for(i=1;i6;i+) /*这个循环是输出数据*/ prin

9、tf(tt%dt%.2ft%.2ft%.2ft%.2ft%.2ft %dn,sti.num,sti.score1,sti.score2,sti.score3,sti.score4,sti.sum,sti.mingci); printf(tttbbbbbbbbbbbbbb_n); printf(nnnn); printf(您还想完成哪项操作,请选择功能键 1,2,3,4后按 entern); printf(n); printf(t1.录入成绩 2.打印输出总表 3.打印学号、成绩表、总分和名次 4.退出n); int tuichu() char m; while(1) system(cls);

10、printf(nnnnn); printf(ttt您确认要退出吗?(y/n)n); printf(nn); printf(ttty 确认退出n); printf(tttn 返回主菜单nnnn); printf(tt请选择功能键 y 或 n 后按 entert); scanf(%c,&m); if(m=y) exit(0); else if(m=n) main(); main() int i,j; char n; system( graftabl 936 ); system(cls); printf( 08-09学年第2学期c语言综合程序设计*应用电子技术08-1班: 肖红福 丁传飞*n); p

11、rintf(n); printf(nnnn); printf(ttt1.录入成绩nttt2.打印输出总表nttt3.打印学号、成绩表、总分和名次nttt4.退出nnnnn); printf(tt请选择功能键 1,2,3,4后按 entert); while(1) scanf(%c,&n); switch(n) case 1: system(cls); shuru(); mingci(); main(); break; case 2: system(cls); shuchu(); break; case 3: system(cls); shuchu1(); break; case 4: tuic

12、hu(); default : printf(对不起!您输入的数字不是功能键,请从新选择n); 八、程序运行结果 注:本程序因调用函数system( graftabl 936 ),因此直接用win-tc的英文环境即可运行。1、进入程序界面,如图8.1所示:图8.1 进入程序选择界面2、输入1后按enter 进入成绩录入界面如图8.2所示:图8.2 进入成绩录入界面3、按提示完成成绩的录入,如图8.3 所示:图8.3 成绩的录入界面4、完成成绩的录入后输入2后按enter 打印出总表:图8.4 打印总表界面5、完成成绩的录入后选择3后按enter,打印出学号、成绩表、总分和名次,如图8.5所示:

13、图8.5 打印出学号、成绩表、总分和名次表界面6、输入4后,按eneter进入退出界面如图8.6所示:图8.6退出界面九、设计总结 1、定义结构体数组 struct student本次设计的程序需要定义结构体,起出我们是把各科成绩分开逐个定义: float shuxue;float yingyu;float jisuanji;float zhexue;但后面发现这样定义过于繁杂,而且不易给其赋值和打印。然后我们将结构体中学生的成绩定义为一个数组float score5;,为与各个学生的学号对应,增强程序的可读性,我们定义的成绩数组score可以存储六科成绩,其中score0不用,从score1

14、开始,分别存储学生的数学、英语、计算机和哲学成绩。2、定义输入子函数 int input()在定义输入函数时我们遇到了这样的一个问题:我们用循环语句和输入函数scanf对结构体数组赋值,但是在运行时,输入数据程序就突然跳出了。后来在网上查到,这是由于只不过,tc有关于float(浮点数)的bug而已。解决这个问题有一个方法,就是先在程序中用浮点数进行一次赋值或运算即可,因此我们在定义的输入子函数input时先调用函数sqrt(0);求0的平方根,但舍弃结果/这句的作用,可以让tc打开浮点数支持。3、定义排名函数int mingci() 原先我们想用教材上(p102)所举出的“冒泡”排序法,对学

15、生的总分进行排序,然后按从高到底的顺序排列出来,即可打印出名次,编辑的代码如下:int mingci() int i,j,num1; float cj1,cj2,cj3,cj4,sum1; char name1; for(i=1;i6;i+) for(j=i+1;j6;j+) if(sti.sumstj.sum) num1=sti.num; sti.num=stj.num; stj.num=num1; strcpy(name1,); strcpy(,); strcpy(,name1); cj1=sti.score1; sti.sc

16、ore1=stj.score1; stj.score1=cj1; cj2=sti.score2; sti.score2=stj.score2; stj.score2=cj2; cj3=sti.score3; sti.score3=stj.score3; stj.score3=cj3; cj4=sti.score4; sti.score4=stj.score4; stj.score4=cj4; sum1=sti.sum; sti.sum=stj.sum; stj.sum=sum1; 但这样的排序不仅代码过多,而且输出的结果是按总分从高到底的排列,它把学生的学号顺序打乱了。后来通过与其他同学的交流

17、发现还有好的方法,即:用循环语句把学生的总分进行比较,然后得出学生的名次,代码如下:int mingci() int i,j; for(i=1;i=5;i+) sti.mingci=1; for(j=1;j=5;j+) if(sti.sum运行程序关闭程序调整位置”的调整模式来调整对应位置,比较麻烦,而且程序代码不太美观,不易查看。后来 ,我们在书上查到有制表符t、b,用制表符来对表的标签和学生信息的对应位置做调整比较方便,只需用相同制表服将printf()函数中的信息隔开,输出的表的标签与学生的信息就回相对应了。5、设计主函数 main()本设计需要程序具有菜单功能,因此在主函数中我们选择了switch()循环语句。为防止跳出循环而出错,我们又在switch()外加上了一个while(1)的死循环。这样,程序就不会因为跳出循环而结束。另外,在switch()上,加一个if语句,当用户输入的信息有误时给用户提示,提高程序的容错率。6、程序运行环境为使程序能在不用超级工具(中文dos运行环境)的条件下运行出中文,我们在主函数中加入了函数system( graftabl 936 ),该函数可以实现在英文运行环境下使程序能显示中文。但需要注意的是该函

温馨提示

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

评论

0/150

提交评论