C语言知识程序设计报告.doc

上传人:一*** 文档编号:2738740 上传时间:2020-05-02 格式:DOC 页数:20 大小:295.76KB
返回 下载 相关 举报
C语言知识程序设计报告.doc_第1页
第1页 / 共20页
C语言知识程序设计报告.doc_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《C语言知识程序设计报告.doc》由会员分享,可在线阅读,更多相关《C语言知识程序设计报告.doc(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-+C语言课程设计报告 题目: 成绩管理系统 专业年级:自动化一班 学号: 姓名: 指导教师: 叶念渝2015年12月17日一.设计内容(1)输入功能:由键盘输入20个学生(姓名)的某门课程 的学习成绩1099分(也可超过)。(2)运算功能:将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。(3)检索功能:用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)。(4)查询功能:对分搜索法检索某个学生的成绩(输入姓名,显示成绩)。二.设计要求(1)可以输入若干名学生信息(包括姓名/成绩等);(2)在源代码中将若干名同学的信息输出;(3)在源代码中能够将若干名同学的成绩排序(升

2、序/降序均可);(4)可以根据不同的查询条件(线性/对分搜索)来查询到相关学生的信息;三.设计思路首先进入软件界面,以菜单为提示的成绩管理系统.分别建立输入学生信息函数输入学生信息,建立排序函数实现排序功能,建立查找函数实现查找功能.通过建立数组在函数运行中进行同步调换实现各信息间分联系,达到信息相对应的目的,在主函数中分别调用各功能函数完成程序目的.四.程序设计流程图子程序入口1.学生信息输入函数i=0;i1&Scorei100重新输入请重新输入yes输入完毕退出子程序2.直接排序法流程图子程序入口 i=0;iN-1;i+max=iscoremaxscorejYNmax=j同步交换姓名和成绩

3、输出姓名和成绩输入完毕退出子程序3.冒泡排序法流程图子程序入口 ii=0;iN-j;i+ /1.输入函数 /学生信息输入函数void input1(char nameN8,int score) int i;for(i=0;iN;i+) printf (n 请输入第%d个学生姓名:,i+1); scanf(%s,&namei); printf (n 请输入第%d个学生成绩:,i+1); scanf(%d,&scorei);dowhile(scorei100)printf(输入有误!n);printf(请重新输入成绩:); scanf(%d,&scorei);while(scorei100); g

4、etchar();/2.成绩排序输出(直接排序法)void sort1(char nameN8,int score)int i,j,max,temp1;char temp2100;for(i=0;iN-1;i+) max=i;for (j=i+1;jN;j+)if(scoremaxscorej) max=j;temp1=scorei;scorei=scoremax;scoremax=temp1;strcpy(temp2,namei); /字符串复制函数strcpy()strcpy(namei,namemax);strcpy(namemax,temp2);printf(The sorted re

5、sult:n);for(i=0;iN;i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/3.成绩排序输出(冒泡法)void sort2(char nameN8,int score) int i,j,t; char h100; for(j=0;jN;j+) for(i=0;iscorei+1) t=scorei; scorei=scorei+1; scorei+1=t; strcpy(h,namei); strcpy(namei,namei+1); strcpy(namei+1,h); printf(The sorted result:n);for(i=0;iN;

6、i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/4.线性搜索法检索学生的成绩void search1(char nameN8,int score) /定义线性搜索法函数 getchar();int a,i;char b; char str8;while(1) printf(请输入学生的姓名:); gets(str); for(i=0;iN;i+) a=strcmp(str,namei);if(a=0)break; if(a!=0) printf(查无此人!); else if(a=0) printf(姓名:%10s 成绩:%3dn,namei,scorei);

7、 getchar(); printf(继续查询吗Y/N:); b=getchar(); getchar(); if(b=y)|(b=Y) continue; elsebreak; /5.对分搜索法检索学生的成绩void search2(int score,char nameN8) int a,b,c,i;char d; while(1)a=0;b=N-1;printf(请输入学生成绩:);scanf(%d,&c);getchar();while(a=b) i=(a+b)/2; if(scorei=c)break; if(scoreic)b=i-1;if(scorei!=c)printf(无此成

8、绩n);else printf(姓名:%10s 成绩:%3dn,namei,scorei); printf(继续查询吗Y/N:); d=getchar(); if(d=y)|(d=Y) continue; elsebreak;void main()int scoreN;char nameN8;int a,b; printf( * 学生成绩管理系统 *n); printf( * 1.输入学 生 信息 *n); printf( * 2.直 接 排 序 法 *n); printf( * 3.冒 泡 排 序 法 *n); printf( * 4.线 性 搜 索 法 *n); printf( * 5.对

9、 分 搜 索 法 *n); b=1;while(b=1)printf(请输入序号 :);scanf(%d,&a); printf(n);switch(a) case 1: printf(输入学生信息n ); input1(name,score); break; case 2: printf(直 接 排 序 法n ); sort1(name,score); break; case 3: printf(冒 泡 排 序 法n ); sort2(name,score); break; case 4: printf(线 性 搜 索 法n ); search1(name,score); break; ca

10、se 5: printf(对 分 搜 索 法n ); search2(score,name); break; case 6:while(0);break; default: printf(errorn);printf(1 继续程序,2结束程序n);scanf(%d,&b);jscorei+1名字分数同步进行交换输出姓名和成绩交换完毕退出子程序4.线性搜索法流程图子程序入口输入姓名a!=0如果a=strcmp(str,namei)a是否等于0如果a=0 输出姓名和成绩输出“查无此人” 是否继续YN输入完毕退出子程序5.对分搜索法流程图子程序入口调用排序函数对成绩进行排序a=0;b=n-1acsc

11、oreicscorei=ca=i+1a=i-1scorei=cNY输出“无此成绩” 输出查找的人的信息Y继续查找输入完毕退出子程序主程序入口6. 主程序case(1-6)N 进入相应的分函数界面输入完毕退出5 设计及调剂的过程中遇到的问题和解决方法 (1).输入人的姓名时为什么要用二维数组?因为输入了多个人的名字所以我们要建立一个名字的二维数组。 (2).在输入函数中我开始用的是if语句定义输入范围结果只提示一次错误。后来我加了一个do-while循环,就可以一直执行下去了。 (3).在冒泡排序法中没有理解strcpy函数的用法把字符串复制到字符串中去了,真正用法是将字符串复制的字符数组中去。

12、 (4).将直接排序法和冒泡排序法弄混了,平时直接习惯有冒泡法,后来只有从书上一步一步的分析其数值的变化。终于本质上的理解了两种排序的作用是如何实现的。冒泡法是每比较一轮产生一个最小(大)的数放在第一个位置,而直接排序法是找出数值最小(大)的小标与第一个调换。 (5).在设计主函数时我用的是switch函数调用分函数,在进行搜索时我没加循环结果只能查找一个人的不能进行查多个人和判断是否能查到此人。后来我在搜索法中加了个while循环问题就解决了。(6) .在调试过程中我遇到的主要问题是输出姓名时第一个人的名字输出不出来,后来我一句句的看源程序,也不知道为什么。我问班上同学才知道我用的是gets

13、(namei);输入字符串占用了一个字符所以输出第一姓名时名字数输不出来,我把它改成 scanf(%s,&namei);就可以输出了。从这件事中我明白了要学会多思考即使你是参考书上的也要每一步弄懂,不然一个小的细节就会导致程序出问题,我还是对这两种输入字符串函数没有本质的了解。(7) .程序有许多小问题都是在自己一遍遍调试下更正了,比如程序差东西、有问题等,做好一个程序编程还是要自己慢慢探索,理解每一个函数语句。 六心得体会与感受 C语言课程设计总有两周时间,在第一次上课老师交给我们任务不知从何下手到最后将整套学生管理系统的程序准确无误的编出来,对我来说无疑又是一大进步,在这段时间里我遇到了不

14、少的问题。产生了许多的疑问,但是随着自己的追随问题的根源,不断的温习书本上的知识,反复进行上机的操作,思路一步一步的清晰起来了,所遇到的一些问题也逐渐得到就解决,本不是那么情愿做的程序到因为解决了一些问题所产生的成就感反到激起了我兴趣。于是借着心中的那一股劲,反复的程序进行摸索,把以前很多没学好的地方都捡了起来,还学会了很多新的知识。这一切都源于老师对我们的严格要求,还有自己的刻苦专研才有了这样的成果。如果老师要求没有那么严格,或者是自己不去努力是做不出来学生管理系统的。 在设计的过程中,在我印象中最深刻的挺多的。冒泡和直接排序法的比较,在二维数组的比较时也遇到了一些问题,主要是对二维数组的概

15、念不清楚,性质不了解,所以在运用时就有一些错误。当然在设计过程中因为输入法的错误、函数层次不清晰变量名重复定义,也花了很多时间去解决。所以在这次编程过程中,不仅仅只是完成作业而已,更多的是要用一种肯专研的学习态度,养成一个良好学习习惯。作为一个合格的编程人员不仅仅要有专业知识,还要有一个良好的编程习惯和一颗仔细的心,更需要一种负责认真编程态度。七源程序#include #include #define N 5/1.输入函数 /学生信息输入函数void input1(char nameN8,int score) int i;for(i=0;iN;i+) printf (n 请输入第%d个学生姓名

16、:,i+1); scanf(%s,&namei); printf (n 请输入第%d个学生成绩:,i+1); scanf(%d,&scorei);do /do-while循环while(scorei100)printf(输入有误!n);printf(请重新输入成绩:); scanf(%d,&scorei);while(scorei100); getchar(); /字符输入函数/2.成绩排序输出(直接排序法)void sort1(char nameN8,int score)int i,j,max,temp1;char temp2100;for(i=0;iN-1;i+) max=i;for (j

17、=i+1;jN;j+)if(scoremaxscorej) max=j;temp1=scorei;scorei=scoremax;scoremax=temp1;strcpy(temp2,namei); /字符串复制函数strcpy()strcpy(namei,namemax);strcpy(namemax,temp2);printf(The sorted result:n);for(i=0;iN;i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/3.成绩排序输出(冒泡法)void sort2(char nameN8,int score) int i,j,t; c

18、har h100; for(j=0;jN;j+) for(i=0;iscorei+1) t=scorei; scorei=scorei+1; scorei+1=t; strcpy(h,namei); strcpy(namei,namei+1); strcpy(namei+1,h); printf(The sorted result:n);for(i=0;iN;i+)printf(姓名:%10s 成绩:%3dn,namei,scorei);/4.线性搜索法检索学生的成绩void search1(char nameN8,int score) /定义线性搜索法函数 getchar();int a,i

19、;char b; char str8;while(1) printf(请输入学生的姓名:); gets(str); /输入一段字符串 for(i=0;iN;i+) a=strcmp(str,namei); /strcmp函数(字符串比较函数)if(a=0)break; if(a!=0) printf(查无此人!); else if(a=0) printf(姓名:%10s 成绩:%3dn,namei,scorei); getchar(); printf(继续查询吗Y/N:); b=getchar(); getchar(); if(b=y)|(b=Y) continue; elsebreak; /

20、5.对分搜索法检索学生的成绩void search2(int score,char nameN8) int a,b,c,i;char d; while(1)a=0;b=N-1;printf(请输入学生成绩:);scanf(%d,&c);getchar();while(a=b) i=(a+b)/2; if(scorei=c)break; if(scoreic)b=i-1;if(scorei!=c)printf(无此成绩n);else printf(姓名:%10s 成绩:%3dn,namei,scorei); printf(继续查询吗Y/N:); d=getchar(); if(d=y)|(d=Y

21、) continue; elsebreak;void main()int scoreN;char nameN8;int a,b; printf( * 学生成绩管理系统 *n); printf( * 1.输入学 生 信息 *n); printf( * 2.直 接 排 序 法 *n); printf( * 3.冒 泡 排 序 法 *n); printf( * 4.线 性 搜 索 法 *n); printf( * 5.对 分 搜 索 法 *n); b=1;while(b=1) /while循环printf(请输入序号 :);scanf(%d,&a); printf(n);switch(a) /swi

22、tch语句实现多分支选择结构 case 1: printf(输入学生信息n ); input1(name,score); break; case 2: printf(直 接 排 序 法n ); sort1(name,score); break; case 3: printf(冒 泡 排 序 法n ); sort2(name,score); break; case 4: printf(线 性 搜 索 法n ); search1(name,score); break; case 5: printf(对 分 搜 索 法n ); search2(score,name); break; case 6:while(0);break; default: printf(errorn);printf(1 继续程序,2结束程序n);scanf(%d,&b);运行情况:1.主菜单界面2.信息输入界面3.直接排序法排序界面4. 冒泡排序法排序界面5. 线性搜索法(输入姓名查找成绩)6. 对分搜索法(输入成绩查找姓名)7. 退出程序界面

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com