c语言程序设计报告

上传人:ph****6 文档编号:68435872 上传时间:2022-04-02 格式:DOC 页数:16 大小:84.50KB
返回 下载 相关 举报
c语言程序设计报告_第1页
第1页 / 共16页
c语言程序设计报告_第2页
第2页 / 共16页
c语言程序设计报告_第3页
第3页 / 共16页
点击查看更多>>
资源描述
-课 程 设 计 报 告课程设计名称: C程序设计 系 别:学 生 姓 名 :班 级 :学 号 :成 绩 :指 导 教 师 :开 课 时 间 :2011-2012学年二学期第一章菜单设计1.1设计题目及要求11.2设计思路31. 3流程图41. 4具体实现41.5程序运行截图7第二章使用数组合指针统计成绩82.1设计题目及要求82.2设计思路82.3流程图92.4具体实现92.5程序运行截图11第三章学生成绩管理系统123.1设计题目及要求123.2设计思路133.3流程图143.4具体实现143.5程序运行截图20小结.23参考文献24第一章 菜单设计1. 1设计题目及要求一菜单容:程序运行后,给出5个菜单项的容和输入提示:1 FindNum2 FindRoot3 Bear4 Diamond5 Goodbye二、设计要求使用数字1-5来选择菜单项,其它输入则不起作用:三、增加菜单项的处理功能l FindNum功能:一只老鼠咬坏了账本,公式中符号代表是被老鼠咬掉的地方。要想恢复下面的等式,应在中填上哪个一样的数字l FindRoot这里要求编制一个求方程a*2+b*+c=0的根程序l Bear此题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊。以后每天都吃前一天的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米l Diamondl Goodbye!1. 2设计思路菜单是应用程序的界面,此题的任务是设计一个比拟实用的菜单,通过菜单项选择择不同的功能。设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。具体方法:首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试构造可知,中选择相应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!(1)使用switch语句实现功能选择(2)应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供应switch语句使用1. 3流程图开场输入15的数字处理输入给switch语句调用相应函数GoodbyeDiamondBearFindRootFindNum完毕1. 4具体实现程序的源代码如下:#include #include #include #include void FindNum ();void FindRoot();void Bear();void Diamond();int main ()int a;printf(菜单容:n);printf(1.FindNum n);printf(2.FindRoot n);printf(3.Bear n);printf(4.Diamond n);printf(5.Goodbye n);printf(n);printf(*n ); / 打印的界面printf(请输入相应选择项:n);while(1)scanf(%d,&a);switch(a)case 1:FindNum();break; case 2:FindRoot();break; case 3:Bear();break; case 4:Diamond();break; case 5:printf(Goodbyen);e*it(0);default:printf(您输入有误,请重新输入n); break;return 0;void FindNum () / FindNum函数int i,j;printf(一只老鼠咬坏了账本n);printf(公式中符号代表是被老鼠咬掉的地方n);printf( 即表示为 3()*6237=()3*3564n); for(i=0;i10;i+) for(j=0;j0)*1=(-b+sqrt(delta)/(2*a);*2=(-b-sqrt(delta)/(2*a);printf(方程的根为*1=%4f,*2=%4fnn,*1,*2); else if(delta=0) *1=(-b+sqrt(delta)/(2*a); *2=(-b-sqrt(delta)/(2*a); printf(方程的根为*1=*2=%4fnn,*1,*2); else printf(方程无根nn);void Bear() / Bear 函数int day, *1; printf(狗熊到玉米地吃了玉米); printf(第一天吃了一半又拿走一个回去喂小狗熊。n); printf(第二天又去吃了剩下的一半,走是任然带一个回去。n); printf(以后每天都吃前一天剩下的一半,拿走一个。n); printf(到了第十天时,地里只剩下一个玉米。求地里一共有多少玉米?n); day=10; *1=1; while (day0) *1=(*1+1)*2; day-; printf(玉米总数=%dnn,*1); void Diamond() / Diamond函数int m,i,j,t,n;printf(请输入您要打印的钻石列数(奇数)n); scanf(%d,&m);n=(m+1)/2;for (i=1;i=n;i+)for(j=1;j=n-i;j+)printf( );for (t=1;t=2*i-1;t+) printf(*);printf(n);for(i=1;i=(m-1)/2;i+)for(t=1;t=i;t+)printf( );t=1;for(j=1;j=(m-1)-2*i+1;j+)printf(*);printf(n);1. 5程序运行截图第二章 使用数组合指针统计成绩2. 1设计题目及要求设计题目:假设给定班级各科考试平均成绩的原始资料如下:数学:75物理:80外语:83政治:85体育:86人数:30要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩。要求的输出结果如下:原始信息如下:数学:75物理:80外语:83政治:85体育:86人数:30平均成绩:0最低分数科目的成绩:0最低分数的科目:全班各科平均成绩如下:数学:75物理:80外语:83政治:85体育:86人数:30统计结果如下:人数:30平均成绩:81最低分数科目的成绩:75最低分数的科目:数学2. 2设计思路将数组a的容存入到分配的存中,使用指针实现对存容的存取和计算。为字符分配存,并将字符数组的容也存入所分配的存中,使用这些指针实现设计要求。实现本设计功能的方法很多,对存放原始数据的要求如下:l 使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科目的成绩l 使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目l 使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。l 使用字符指针指向字符数组这个题目的要求超出一般的教材,但对理解指针很有用途。2. 3流程图完毕开场统计班级平均成绩最低科目成绩输入班级人数和各科平均成绩最低科目2. 4具体实现程序源代码如下:int subject(int *c,int n);int lowest(int *b);int average( int *b);#include void main ()int i,b;int a9=75,80,83,85,86,30 ;char *name5=数学,物理,外语,政治,体育;char *meanlow4=人数,平均成绩,最低分数科目成绩,最低分科目;printf(原始信息如下:n);for(i=0;i5;i+)printf(%s:%dn,namei,ai);printf(%s:%dn,meanlowi,ai+5);printf(全班各科平均成绩如下:n);for(i=0;i5;i+)printf(%s:%dn,namei,ai);printf(统计结果如下:n);printf(%s:%dn,meanlow0,a5);printf(%s:%dn,meanlow1,average(a);printf(%s:%dn,meanlow2,lowest(a);b=subject(a,5);printf(%s:%sn,meanlow3,nameb);int average( int *b)/求平均成绩int sum=0 ,i,aver;for(i=0;i5;i+)sum=sum+bi;aver=sum/5;return aver;int lowest(int *b)/求最低成绩int t=b0,i;for(i=0;ibi) t=bi;return t;int subject(int *c,int n)/求最低成绩的科目int i, t=c0,m=0;for(i=1;ici) t=ci;m+;return m;2. 5程序运行截图第三章 学生成绩管理系统3. 1设计题目及要求1.设计要现的功能较多,所以将它们分为几个局部表达。建立文件l 可以使用默认文件名或指定文件名将记录存储到文件;l 文件保存成功返回0,失败返回-1;l 设置保存标志savedTag作为是否对记录进展存储操作的信息;l 写同名文件将覆盖原来文件的容;增加学生记录l 可在已有记录后面追加新的记录l 可以随时用它增加新的记录,它们仅保存在构造数组中;l 可以将一个文件读入,追加在已有记录之后;l 如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;l 如果没有记录存在,给出提示信息。显示记录l 如果没有记录可供显示,给出提示信息;l 可以随时显示存中的记录文件存储l 可以按默认名字或指定名字存储记录文件;l 存储成功返回0.,否则返回-1;l 更新存储标志;读取文件l 可以按照默认名字或指定名字将记录文件读入存;l 读取成功返回0,否则返回-1;l 可以将指定或默认文件追加到现有记录并更新记录的尾部;l 可以将文件连续追加到现有记录并更新记录的名词;l 更新存储标志;删除记录l 可以按学好、名词方式删除记录;l 给出将删除记录的信息,经确认后在删除;l 如果已经是空表,删除时给出提示信息并返回菜单;l 如果没有要删除的信息,输出没有找到的信息;l 应该更新其他记录的名词;l 删除操作权限于存,只有执行存记录时,才能覆盖原记录;修改记录l 可以按*、名次方式修改记录容;l 给出将修改记录的信息,经确认后进展修改;l 如果已经是空表,应给出提示信息并返回主菜单;l 如果没有找到需要要改的信息,输出提示信息;l 应该同时更新其他记录的名词;l 修改操作权限于存,只有进展存储操作时,才能覆盖原记录;l 更新存储标志;查询记录l 可以按*、名次方式修改记录容;l 能给出查询记录的信息;l 如果查询的信息不存在,输出提示信息;对记录进展排序l 可以按学好进展升序或降序排序;l 可以按名称进展升序和降序排序;l 可以按名词进展升序或降序排序;l 如果属于选择错误,可以立即退出排序;l 更新存储标志;头文件l 使用条件编译定义头文件;l 函数原型声明;l 数据构造及包含文件;测试程序l 应列出测试大纲对程序进展测试;l 应保证测试用例测试到程序的各种边缘情况;2. 总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:l 要求使用对文件方式实现设计;l 要求在各个文件实现构造化设计;l 每个模块作为一个单独的C文件,每个文件的函数如表121所示,表中给出了各个函数的功能说明;宏和数据构造等放在头文件中,并使用条件编译3. 2设计思路1 主函数: 主函数 main,功能: 通过调用 creat, search, del, add, print, ststistics, save, ta*is 等函数,实现学生成绩查询2 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单项选择择3用switch语句可以实现这些选择。可以用简洁的伪码对它们进展描述4程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文件,可以重新建立一个文件;如果已经有记录,可以先把文件容读入,然后把新记录追加到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。3. 3流程图开场完毕录入学生成绩通过switch对数据进展处理保存学生成绩3. 4具体实现#include#include#include#include#define N 30#define M 3typedef struct studentchar number10;char name20;float scoreM;float aver;STU;STU stuN;int n;void inputscore(void);void savescore(void);void avergescore(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);void main()short int flag=0;menu();doflag=1;switch(getch()case 1 : inputscore();break; /*输入成绩*/case 2 : lookscore();break;/*查看成绩*/case 3 : searchscore();break;/*查找成绩*/case 4 : statistic();break;/*成绩统计*/case 5 : modify();break;/*修改成绩*/case 6 : add();break;/*添加成绩*/case 7 : delscore();break;/*删除成绩*/case 8 : savescore();break;/*保存成绩*/case 9 :e*it(0);/*退出程序*/default : printf(输入有误n);printf(按任意键继续n);getch();menu();while (flag=1);void menu(void) system(cls);printf(n);printf(*欢送进入学生成绩管理系统*n);printf( 菜单 n);printf(输入成绩-1n);printf(查看成绩及成绩排序-2n);printf(查询学生成绩-3n);printf(成绩统计-4n);printf(修改成绩-5n);printf(添加成绩-6n);printf(删除成绩-7n);printf(保存成绩-8n);printf(退出系统-9n);printf(*n);printf(请输入您的选择n);/*输入各个同学的学生信息*/void inputscore(void)int i,j;system(cls);printf(请输入学生总数:n);scanf(%d,&n);printf(提示:*输入*时请输入位数为8位的数字*n);/*因二维表上下需对正故有此要求*/for(i=0;in;i+)printf(请输入学生%d的* :n,i+1);scanf(%s%s,stui.number,stui.name);printf(请输入学生成绩:n);printf(数学t英语t计算机n);for(j=0;jM;j+)scanf(%f,&stui.scorej);printf(成功输入n);/*计算各个同学的平均分*/void avergescore(void)int i,j;for(i=0;in;i+)stui.aver=0;for(j=0;jM;j+)stui.aver+=stui.scorej;stui.aver=stui.aver/M;/*查看学生成绩及根据平均分对学生进展排序*/void lookscore(void)int i,j,k;STU t;avergescore();system(cls);for(i=0;in-1;i+)for(k=i,j=i+1;jstuk.aver)k=j;if(k!=j)t=stuk;stuk=stui;stui=t;printf(名次t*ttt数学t英语t计算机t平均分n);for(i=0;in;i+)printf(%dt%st%st,i+1,stui.number,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2f,stui.aver);printf(n);/*通过输入*查找学生成绩*/void searchscore(void)char a10;int i,j;system(cls);printf(请输入需查询的学生*n);scanf(%s,a);for(i=0;in;i+)if(strcmp(a,stui.number)=0)printf(名次t*ttt数学t英语t计算机t平均分n);printf(%dt%st%st,i+1,stui.number,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2f,stui.aver);printf(n);break;elseprintf(未找到该学生信息n);void statistic(void)STU *p=stu;int i,j;float count=0.0,sum=0.0;system(cls);for(i=0;iaver;printf(该班级平均分为%4.2fn,sum/n);/*平均分计算*/for(i=0;iaver=60)count+;printf(该班级及格率为%4.2f%n,count/n*100);/*及格率计算*/count=0.0;for(i=0;iaver=90)count+;printf(该班级优秀率为%4.2f%n,count/n*100);/*优秀率计算*/for(i=0;in;i+)for(j=0;jscorej-(p+i)-aver)*(p+i)-scorej-(p+i)-aver);sum=sum/n;printf(学生%s的成绩方差为%4.2fn,(p+i)-name,sum);printf(平均分低于60的学生n);for(i=0;in;i+)if(stui.aver60)printf(%sn,stui.name);/*修改学生成绩*/void modify(void)char a10;int i,j;system(cls);printf(请输入需要修改成绩的学生*n);scanf(%s,a);for(i=0;in;i+)if(strcmp(a,stui.number)=0)printf(名次t*ttt数学t英语t计算机t平均分n);printf(%dt%st%st,i+1,stui.number,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2f,stui.aver);printf(n);printf(请重新输入该学生的* :n);scanf(%s%s,stui.number,stui.name);printf(请重新输入学生成绩:n);printf(数学t英语t计算机n);for(j=0;jM;j+)scanf(%f,&stui.scorej);printf(修改成功n);break;elseprintf(未找到该学生信息n);/*添加学生成绩*/void add(void)int a,i,j;system(cls);printf(请输入新增加的学生人数:n);scanf(%d,&a);n=n+a;for(i=n-a;in;i+)printf(请输入学生%d的* :n,i+1);scanf(%s%s,stui.number,stui.name);printf(请输入学生成绩:n);printf(数学t英语t计算机n);for(j=0;jM;j+)scanf(%f,&stui.scorej);printf(添加成功n);/*删除学生成绩*/void delscore(void)int i,j,c;char m,a10;system(cls);printf(请输入学生*n);scanf(%s,a);for(i=0;in;i+)if(strcmp(a,stui.number)=0)printf(名次t*ttt数学t英语t计算机t平均分n);printf(%dt%st%st,i+1,stui.number,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2f,stui.aver);printf(n);c=i;break;elseprintf(未找到该学生信息n);printf(是否删除该学生成绩(y/n)n);scanf(%s,&m);if(m=y)for(i=c;in-1;i+)stui=stui+1;n=n-1;printf(删除成绩成功n);elseprintf(删除成绩失败n);/*保存学生成绩*/void savescore(void)FILE *fp;int i,flag=1;char m;system(cls);puts(是否保存学生成绩(y/n);scanf(%s,&m);if(m=y)if(fp=fopen(score.dat,wb)=NULL)printf(文件翻开失败n);return;for(i=0;in;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(保存失败n);flag=0;if(flag=1)printf(保存成功!n);fclose(fp);elsereturn;3. 5程序运行截图小结这次为期两周的C语言课程设计,让我在稳固已学理论知识的同时又学习到了编程能力,学会了利用网上资源和图书馆资源查找资料,在他人的经历和成功中汲取营养,吸收成为自己的知识。让我深刻领悟到了自主学习的意义,以前,总是不喜欢自己查资料,喜欢说不会,喜欢问别人,懒惰,确实是个不好的习惯。 在这两周时间里,我首先利用查找的资料编写源程序,接着就对其进展编译。由于所学知识还不够丰富,自身的编程能力也比拟匮乏,我在编译过程中出现了许多错误,比方在构造体、数组和指针的应用上有很多问题。我通过在百度文库中找到了*些程序,或者局部程序的源代码,我认真的分析程序的写法,并在读懂得根底上加以利用修改,由于第三道程序略显复杂,我花了好长时间来读,来写,在查阅资料和教师、同学们的帮助下,我一次次的编译、一次次的修改,终于完成了本次课程设计!就是在这一次次的尝试过程中,让我明白了在实践中学习、在实践中进步,理论和实践才是提高学习能力的最正确途径。同时,也学会了做课程设计所需的步骤及如何对其进展规划整理,为以后的毕业设计打下了根底,我希望学校以后多多提供应我们这样的时机,这期间我最快乐的时候,就是自己想不到的程序,通过查阅资料,并加以领悟,变成自己会的东西,如果不是这次学习,我都不知道,自己还是渴望承受新知识的,对学习还是挺有兴趣的!最后为自己在这两周的学习画上圆满的句号,迎接期末的冲刺。参考文献1 谭浩强,C程序设计,清华大学 2001.22 学院 学生课程设计3 C语言学生成绩管理系统源程序. z.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!