第一篇:c语言实习报告
西安科技大学
《C/C++语言程序设计》
课程设计报告
题 目
院、系(部)
专业及班级 姓 名 日 期
1设计目的
设计一个职工信息管理系统,使之能提供以下功能: 1)录入职工信息并保存 2)显示所有职工信息 3)查询职工信息 4)修改职工信息并保存 5)删除职工信息 需求说明: 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,并且要求职工号不重复;
录入的职工信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作; 职工信息的显式要求有一定的规范格式;
对职工信息应能够分别按工资及按学历两种方式进行,要求能返回所有符合条件的职工的信息; 对职工信息的修改应逐个地进行,一个职工信息的更改不应影响其他的职工记录;
所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况。总体设计
1.该系统可以按功能进行模块划分,其模块图如下:
系统模块图
其中:
信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等;
信息浏览模块完成已录入职工信息的显示;
信息查询模块完成职工信息的查询,查询时对应有按工资查询和按学历查询两种方式; 信息修改模块完成职工信息的修改功能; 信息删除模块完成职工信息的删除功能;
菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种
操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;
2.数据结构
本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理
3.程序流程
系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:
程序流程图 详细设计
对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下: ① 信息输入模块:
打开职工信息文件; while(继续输入){ 读入职工信息;
将读入信息添加到职工信息文件中;
提示是否继续输入; } 关闭职工信息文件;
② 信息浏览模块:
打开职工信息文件; while(不到文件结束){ 从文件中顺序读出一个职工的信息;
按指定格式输出该职工的信息; } 关闭职工信息文件;
③ 信息查询模块:
while(仍继续查询){ if(按工资查询){ 读入查询的职工工资条件;
打开职工信息文件;
while(不到文件结束){ 顺序读出一个职工的信息;
if(该职工信息的工资符合条件)输出该职工的信息; } 关闭职工信息文件;
提示共有几条符合条件的记录; } else if(按学历查询){ 读入学历查询的条件;
打开职工信息文件;
while(不到文件结束){
顺序读出一个职工的信息;
if(该职工信息的学历符合条件)输出该职工的信息;
} 关闭职工信息文件; 提示符合条件的记录数; }
else 提示输入不合适;
提示是否继续查询; }
④ 信息修改模块:
while(继续修改){
从给出信息文件中所有的记录情况; 提示并读入待修改的记录的职工的职工号; 打开职工信息文件;
查找并读出该职工的信息到一个中间变量中; 提示并读入要针对该职工的哪个属性进行修改; 根据用户的选择提示并读入所要修改属性的新值; 在该职工的中间变量中修改刚刚读入的属性值; 提示是否确定要进行修改;
如果用户确定则将中间变量重新写回到原职工信息文件中; 关闭职工信息文件; } ⑤ 信息删除模块:
while(继续删除){ 显示所有职工的信息;
提示并读入待删除的职工的职工号;
打开职工信息文件;
查找是否有符合条件的职工记录; if(有符合条件的记录){ 提示是否确认该删除操作; if(用户确认此操作){ 创建一个新的临时文件;
打开原信息文件;
while(原信息文件中记录未读完){ 读出原信息文件中的下一条记录;
if(此条记录不是待删除记录)写入临时文件中去; }
关闭原信息文件; 关闭临时文件; 读方式打开临时文件;
写方式重建与原信息文件同名的新信息文件; 将临时文件中的内容写入到新信息文件中去; 关闭新信息文件; 关闭临时文件; 删除临时文件; } } else 提示没有符合条件的记录存在; } ⑥ 菜单选择模块:
给出信息提示; 清屏;
绘制菜单(包含输入、显示、查询、修改、删除、退出); 提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
数据结构:
性别: enum Sex{ male, female };学历 :enum Education{ high, junior, college, master, doctor};日期 :struct Date { int year;int month;int day;};职工信息:struct Info {
char num[5];/* 职工号 */ char name[8];/* 姓名 */ enum Sex sex;/* 性别 */ struct Date birthday;/* 出生年月*/ enum Education education;/* 学历 */ char duty[8];/* 职务 */ double wage;/* 工资 */ char addr[12];/* 地址 */
char phone[8];/* 电话 */ };
第二篇:语言类实习报告
语言类实习报告3篇
语言类实习报告
篇1
设计报告
一,试验目的:
通过上机实习,娴熟把握循环语句、选择语句、指针以及结构体的运用技巧。在实习中通过实际操作,编写程序,发觉问题,最终解决问题,提升对c语言有用性的理解,在实践中巩固各学问点。
C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点,上机实习可以关心我们更好地理解这种结构式的中级语言以及其各种各样的数据类型和高效率的运算程序,为我们进一步学习C++打下坚实基础。
同时,在实习过程中,通过相互发觉问题,共同解决问题,不仅熬炼了我们的合作力量,而
且也让我们发觉了一些自己的个人误区以及其他人简单犯的错误,从而在今后的学习中更加谨慎,达到事半功倍的效果;通过询问老师,也让我们养成了不耻下问的好习惯,这将很有利于以后的学习。
闲乐-一个人闲。不如大家一块儿乐/retype/zoom/9861aabdfd0a79563c1e72ad?pn=2
//定义一个数组a[11],用以存放同学的成果
printf(“从键盘输入10个同学成果:
“);
for(i=0;i
一、听课,仔细学习,虚心求教
实习开头的两个星期,在指导老师的带领下,我们开头听课,做好听课记录,仔细学习前辈的教学阅历,我的体会是在教学前必需营造好的教学环境,教学过程中要把同学的学习爱好调动起来,使他们在欢乐中主动地学习,教学之后布置相应的练习进行巩固。我的指导老师是一位刚进入训练行业不久的女老师。虽然老师还很年轻,但在同学中的威望很高,可以在上课前就整理好班级的课堂秩序。在教学方面,老师依据课文的不同采纳不一样的教学方法,如对于文言文采纳传统式的教学,而说明文则采纳新式的'教学方法,通过多媒体教学手段的帮助,通过图片、音频、视频文件的展现,加深同学对课文的理解。而在教学任务完成,则布置相应的作业,如对于文言文课文的作业布置一般是完成练习,而对于说明文的作业一般是仿写一篇说明文,关于小说的学习,如《台阶》一文,布置了写一段“XXX,我想对你说”的小短文,200字左右,这样,就能加深同学对于《台阶》课文中表达的人文精神的理解。
二、备课,备教材、备同学、备教法
教学就是教与学,两者是相互联系,不行分割的,有教者就必定有学者。同学是被教的主体。因此,了解和分析同学状况,有针对地教对教学胜利与否至关重要。最初接触教学的时候,我还不懂得了解同学对教学的重要性,只是用心讨论书本,教材,想方设法令课堂生动,同学易接受。
备教材。要保证好的教学效果,不能单单营造活跃的课堂气氛,搞花架子,而应当从教学内容中找到同学的兴奋点。因此,课前预备肯定要充分。为了上好每一堂课,我都仔细讨论课文,找出重点,难点,有针对性地讲。为了令教同学动,不沉闷,我还为此查资料,参考教参以及网上优秀教案和视频,整理教案,预备相关教具,授课时就心中有数了。在教学过程中,语速、教学进程应依据教学内容的性质、重要性和大多数同学的适应程度敏捷把握,该快则快,应慢则慢。
备同学。我班上同学的语文水平层次不一,中等生、差生占较大多数,尖子生相对较少。因此,课文讲得太深,很难照看到整体,最初我备课时没有考虑到这点,因此,教学效果不很抱负。从今可以看出,了解及分析同学实际状况,做到因材施教,对授课效果有挺直影响。这就是训练学中提到的“备教法的同时要备同学”。在教学反思中,我深深地理解了这一理论。
备教法。教学中,备课是一个必不行少,非常重要的环节,备同学,又要备教法。备课不充分或者备得不好,会严峻影响课堂气氛和主动性,办公室里的一位老前辈对我说:“备课备不好,倒不如不上课,否则就是白费心机。”因此,每次上课之前,我都花费大量的时
间在备课之上,认仔细真钻研教材和教法,参考网络上的优秀视频和教案,有的课用讲读方法比较好,有的课同学自读,老师进行引导比较好,有的用多媒体教学手段比较直观形象等等,每节课都有比较相宜的方法。在备课时,我都仔细地讨论课文,或向老师虚心请教,从而选择教学方法。
备课的体会。一堂预备充分的课,会令同学和老师都获益不浅。备课充分,能调动同学的学习主动性,增加教学效果。但同时老师又要具有驾驭课堂的力量,由于同学的行为也会挺直影响课堂教学。在中**语为汉语的这种大环境之下,同学对语文既熟识又生疏,所以要教好语文,就要让同学宠爱语文,让他们对语文产生爱好。为此,我在网上“取经”,就是尽量多讲一些与课文相关的文化故事,让他们产生学习爱好,更主动学习语文。由于只有语文水平提高,才能提高同学们的语文写作力量。
三、授课,启发爱好,创新方法
课堂教学
在启发同学课堂爱好时,我采纳如下方法:以课文相应的情感进行教学,这包括老师在教学过程中所用法的语调、表情、动作等;这一学龄的同学对美感已经有肯定的追求,所以在教学中,可以用美丽感人的语言激发爱好,“辞不行不修,说不行不善”,闪烁着才智完辉的语言具有丰富的表现力;以生动形象的比方激发爱好。
课后辅导
班上同学对于语文这门课程的理解不一样,因此,导致他们对语文的重视程度也相应不同,这样的话,语文水平自然层次不一,出现好差分化现象,严峻影响全班语文素养的提高。为此,我制定了详细的方案和目标。对语文不抱负的同学进行有方案的辅导。我把这批同学分为两类。第一类是学习主动性不高的同学,对这些同学,我实行集体辅导,给他们安排固定任务,不让他们有偷懒的机会,让他们发挥应有水平;其次类有学习主动性,但力量不强的同学。我对这部分同学进行适当引导,耐烦教育,肯定要留意言辞,避开损害同学,渐渐提高他们的语文水平。
作业批改
批改作业,我订正每个错误,在批语中强调订正的重要性,并依据各个同学的状况勉励之,开导之。对那些在我要求订正之后依旧不订正的同学,我在课后找同学谈话,做好他的思想工作。改作文,我花的精力更多,由于我发觉可以通过作文了解同学的性格、生活、爱好等各方面状况,对于每一篇作文都写上相应的评语,鼓舞他们写得更好。仔细批改每一篇作文,对语言表达的通顺与否、有无错字进行指导。对于好句子,段落,或者作文,在相应的位置写上评语鼓舞,将优秀的作文当成.在全班朗读。而对于错误的地方,则批上错误缘由。这样的做法,可以提高同学写作业的主动性,从而提高语文水平。
授课的体会
上课肯定要设法令同学投入,不让其分心,这就很讲究方法了。上课内容丰富,现实。教态自然,讲课生动,难易适中照看全部,就自然能够吸引住同学。所以,老师每天都要有充分的精神,让同学感受到一种自然气氛。这样,授课就事半功倍。回看自己的授课,我感到有点愧疚,由于有时我并不能很好地做到这点。当同学在课堂上无心向学,违反纪律时,我的心情就受到影响,并且把这带到教学中,让原本正常的讲课受到冲击,发挥不到应有的水平,以致影响教学效果。我以后必需努力克服,讨论方法,实行有利方法解决当中困难。
实习的内容除了专业课的教学实习,还有班主任工作的实习。在这段时间,通过对指
导老师刘老师以及办公室其他班主任的学习,以及在初二(1)班的实践,我有以下几点心得。
1、深化同学之中,消退同学与老师之间的隔阂感,让他们打快乐扉。在休息时间,我会主动找同学进行沟通,在沟通的过程中去发觉他们的心理问题。比如,甘德福同学总是在上课的时候讲闲谈,不遵守课堂秩序。我课下找他谈天,发觉他讲闲谈的缘由是自制力不足,且学习主动性不足。针对这样的问题,我同他分析上学与不上学的利与弊,并告知他同学时代的老师也是自制力不足,与他共享我克服这一问题的方法。经过半个多小时的谈话之后,甘德福的表现向着好的方向转变,上课也不再走神,也会仔细听讲。
2、定期的开展形式多样的主题班会,达到训练的目的。针对同学之间应当互帮互助,我开展了《举手之劳》的主题班会,以印度甘地坐火车把剩下的鞋扔下火车的故事导入班会,再进行深化且贴近生活的分析,告知同学为什么要互帮互助,怎么互帮互助,关心他们培育乐于助人的良好品行。通过这次班会,班上同学之间的关系更加融洽。
3、奖惩适当。为了鼓舞进步的同学,要给以嘉奖,而对于犯错的同学,则要适当惩处。这也就是说,奖惩也是班主任所应具备的力量。首先肯定要敬重同学的独立人格,爱护好同学的自信念、自尊心。其次,惩处的目的不是为惩处而惩处同学,而是为训练同学而惩处同学,换句话说,惩处是手段,训练才是目的;再者,要给犯错的同学接受教训,改正错误的机会。
4、通过周记,了解同学状况,实现师生心与心沟通。由于我的专业课实习是语文教学,而语文的指导老师给同学布置了周记的任务。因此,我可以同学每周的周记了解他们的心理状况,大部分同学会在周记中写自己现实生活中的欢乐与苦恼,如与伴侣相处不开心,同家人发生了小冲突,期中考试没有考好等,有的问题我挺直在周记上赐予答复。有的问题我则会通过其他的途径赐予答复。通过周记这个小平台,同学一些小的心理问题也就能够得到很好的解决,我和同学之间能够实现心与心的沟通。
以上就是我在实习期间学习到的学问与阅历。由于阅历颇浅,很多地方存在不足,盼望在将来的日子里,能在各位老师,前辈的指导下,不断学习,努力进取,取得更好成果。
第三篇:C语言实习报告123
C语言课程设计报告
第1章 目的任务
1.1实训目的(1)巩固C语言所学基本课程;
(2)提高C语言编程的综合应用能力;
(3)学会C语言程序的编译、调试方法。
1.2实训任务
(1)掌握C语言中的基本数据输入、输出;
(2)熟练掌握C语言中的三种基本结构的使用;
(3)熟练使用C语言中的数组;
(4)熟练使用C语言中的函数;
(几)熟练使用C语言中的指针;
(6)熟练使用C语言中的结构体。
第2章 主程序子程序
2.1主函数main
main()函数是C程序的主函数,也是入口函数,所有C程序的执行都从main开始至main结束。主函数使用了do… while语句和switch语句,在主函数中定义一个变量k,通过输入k的值,实现输入、输出、修改、排序、查询函数的调用以及程序的退出。
2.2 creat
通过scanf函数接受通讯录信息,创建通讯录并将其存入文件中。
2.3output
通过指针打开文件,实现对通讯录的访问。
2.4 search
通过scanf函数,输入所要查询的信息,找到相对应的指针连接到相应文件,实现查找功能。
2.5append
通过指针打开相应文件,运用scanf函数进行对信息内容的添加。
2.6 modify
打开文件,通过fscanf函数对其中内容进行修改,并利用循环体进行保存。
2.7 delete
先运用结构体,并输入所要修改的信息,通过指针找到对应信息并进行修改。
第3章 错误
1、电话的输出为乱码,原因:数据类型写为“%d”与定义类型不一致,将其改为“%s”。
2、在输入函数中出现警告:变量“j”在函数中定义但并未在output函数中使用,将“j”删除。
3、在output函数中出现语法错误,将输入法切换为英文输入状态输入“:”。
4、在modify中需要逻辑“0”或“非0”,使用字符数组namekey[8],利用strcpy函数实现字符类数据的的顺序调换。
5、在delete中缺少“}”,添加上“}”。
第4章 实训总结
4.1思维方式方法
根据程序系统功能要求可以将程序分解为以下功能模块:
创建通讯录;
输入学生通讯信息;
在通讯录中查找;
添加通讯录信息;
修改通讯录信息;
删除通讯录信息;
4.2实训感想体会
上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
历时9天的《C语言程序设计》已经结束了,在这几天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点。
其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺。
再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便。
第四,在实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查。第五,通过实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。
第六,通过实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。第七,实训过程中,充分发挥团队协作精神,共同进步,帮助我顺利完成实训课程。
总之,通过实习使我自身的知识体系得到巩固、提高以及使团队工作的能力得到锻炼。
第四篇:c语言实习报告
目 录
一、前言„„„„„„„„„„„„„„„„„„„„„„„„„2
二、引言„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1系统开发工具„„„„„„„„„„„„„„„„„„„„ 2 2.2实习目的„„„„„„„„„„„„„„„„„„„ 3 2.3实习基本内容与要求„„„„„„„„„„„„„„„„„3 2.4实习时间安排„„„„„„„„„„„„„„„„„„„„ 3 2.5实习地点„„„„„„„„„„„„„„„„„„„„„„ 3 2.6实习内容„„„„„„„„„„„„„„„„„„„„„„„„„„„ 3
三、学生成绩管理系统分析„„„„„„„„„„„„„„„„„3.1系统概况„„„„„„„„„„„„„„„„„„„„„„4 3.2需求分析„„„„„„„„„„„„„„„„„„„„„„4 3.3总体功能要求„„„„„„„„„„„„„„„„„„„„5 3.3.1总体功能模块„„„„„„„„„„„„„„„„„„ 5 3.3.2各函数的功能和实现„„„„„„„„„„„„„„„„ 6 3.3.3各部分流程图„„„„„„„„„„„„„„„„„„„„„„„ 6 3.3.4性能要求„„„„„„„„„„„„„„„„„„„„„„„„„ 8
四、详细设计„„„„„„„„„„„„„„„„„„„„„„„8 4.1关键部分的代码、说明及运行结果图„„„„„„„„„„„„„„„8
1、全局定义部分„„„„„„„„„„„„„„„„„„„„„8
2、主程序部分„„„„„„„„„„„„„„„„„„„„„„8
3、输入信息部分„„„„„„„„„„„„„„„„„„„„„10
4、输出信息部分„„„„„„„„„„„„„„„„„„„„„12
5、排序部分„„„„„„„„„„„„„„„„„„13
6、插入信息部分„„„„„„„„„„„„„„„„„„14
7、删除部分„„„„„„„„„„„„„„„„„„15 4.2总程序„„„„„„„„„„„„„„„„„„„„„„„„16
五、实习心得体会„„„„„„„„„„„„„„„„„„„„„24
六、附录:参考文献„„„„„„„„„„„„„„„„„„„„25
一、前言
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例如,检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本低等。这些优点能极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发学生成绩管理系统很有必要。
学生成绩管理系统是为了适应现代化学校的管理,加快推进数字化校园的建设、充分利用校园网,利用网络、多媒体等计算机应用技术和手段,提高办公效率、改善质量的高效管理学校系统。
学生成绩管理系统是系科综合管理系统的重要组成部分,为学校学生层面的管理提供了一个有用的数字化学生成绩管理系统的工具,在学校学生管理中起着举足轻重的作用。
为了培养自己正确的程序设计思想,使平时学习的理论联系实际,培养自己严肃认真,实事求是的科学态度和勇于探索的创新精神,培养自己综合运用所学知识与实践经验,分析和解决相应领域的工程技术问题或进行软件项目开发的能力。学院依照课程教学大纲和课程设计大纲提出了本次课程设计的题目及要求。
要求掌握C程序的基本结构和C语言基本的数据结构,熟悉C程序的编辑、编译、调试和运行过程,了解程序设计的一般方法、结构化程序设计的思想,熟悉算法的描述工具—N—S流程图的使用及常用算法,能够熟练地阅读用C语言编写的程序,能够运用结构化程序设计编写C程序。
二、引言
2.1系统开发工具简介
WIN-TC是一个TC2 WINDOWS平台开发工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具 令你在编程过程中更加游刃有余,如虎添翼。本软件用于编写C语言程序。2.2实习目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。
使学生在掌握C语言的基本语法的基础上,能够更好的理解和运用其解决实际问题。在实践实习操作中让学生对结构化程序设计有更进一步深刻的认识与了解,提高学生的实践操作能力。2.3、实习基本内容与要求: 用链表实现简单的学籍管理
1、总体功能要求
(1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分;
(2)节点的插入:按学号的顺序插入;(3)删除链表中的节点:按学号或者姓名;(4)链表的输出:按学号排序、按总分排序。
2、性能的要求:
(1)各个功能分别用函数实现;(2)节点信息让用户通过键盘输入;(3)总分通过计算获得;(4)有简单的操作界面;
(5)尽可能考虑程序的容错性、可操作性。
3、写实习报告以及心得体会
2.4实习时间安排
2011年7月12日 在服务器上下载应用程序、实习报告模板,练习书本第11章的例题
2011年7月13日 在自己的机器上程序设计 2011年7月14日 程序设计
2011年7月15日 撰写实习报告及心得体会 2011年7月16日 交实习报告 2.5 实习地点:c1 2楼机房 2.6实习内容
对学生信息(包括姓名、学号、语文、数学、英语、平均分、总分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、退出、保存.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改、排序和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。
三、学生成绩管理系统分析
3.1系统概况
本次实习是通过建立一个学生学籍管理系统来更好的认识和掌握C语言中链表这一重要的知识内容.本系统实现的功能如下:
1.创建学生学籍信息,每个学生学籍信息包括:学号、姓名、语文、数学、英语、平均分、总分;
2.插入信息:按照学号由小到大的循序插入信息;
3.查找信息:通过选择按照学号或者姓名来查找到该学生的信息; 4.删除信息:通过选择按照学号或者按照姓名删除某个学生学籍信息; 5.输出信息:通过选择按学号(由小到大)或者总分(由小到大)或者平均分(由小到大)来输出信息;
6.保存信息:对学生学籍系统中的信息以记事本的学生进行保存。
本系统的亮点是在运用模块来组建该学生学籍管理系统,也就是说各个功能以模块的实现,通过主函数来调用模块,实现管理功能,这样程序结构清晰,容易检查到错误所在模块,减少了调试的压力。其次,是运用结构体来组织数据,数据结构规范,通过指针的操作很容易实现简单的查找、删除、输出等操作。最后,容错性较好,比如输入成绩输入时按照我们百分制输入,必须输入1-100之间的数字,如果输入的不是1-100中的数据,在系统将显示信息错误信息,要求重新输入。
软件配备:TurboC2.0,Windows 2000/20003/xp等; 硬件配备:内存:512MB及以上;
外存:60GB及以上; CPU: 奔4及以上; 3.2需求分析
1、用C语言实现系统;
2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1)、每一条记录包括一个学生的学号、姓名、3门课成绩
(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。(4)、查询功能:完成按姓名查找学生记录,并显示。(5)、成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!3.3总体功能要求
3.3.1总体功能模块 学生成绩管理信息系统的主界面,包括六个内容:信息输入,信息输出,信息删除,信息的排序,信息的查找和信息的保存。
信息输入包括创建信息和信息添加:其中创建的学生信息包括学生的学号,姓名,性别以及语文,数学,英语三门课程的成绩。信息添加的内容也是创建的所有学籍信息。
信息删除是按照学生的学号进行删除。
信息的排序也可以分为三种方法进行:一是按照学号进行排序,二是根据学生语文、数学、英语三门课程的总分进行排序,三是根据学生语文、数学、英语三门课程的平均分进行排序。
信息的查找时按照学生的学号进行查找。
信息的保存是通过程序与文件的链接进行的,可以直接将学生成绩以记事本的形式保存到指定文件夹中。
总 体 功 能 模 块 图
3.3.2各函数的功能和实现
1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。
2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出成绩的平均分数、最高和最低分数。
3、成绩查询模块:可用void find(STUDENT *data, int len)来实现。找到就输出此学生全部信息。
4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现
5、排序模块:用函数void sort(STUDENT *data, int len)来实现
6、统计功能能:用函数void stat(STUDENT *data, int len)来实现
7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
3.3.3各部分流程图 1.学生信息输入流程图 2.学生信息输出流程图
3.删除的流程图
4.插入信息的流程图 5.对信息的排序流程图
3.3.4性能要求
1、功能分别用函数实现;
2、信息让用户通过键盘输入;
3、通过计算获得;
4、简单的操作界面;
5、可能考虑程序的容错
四、详细设计
4.1关键部分的代码、说明及运行结果图
1、全局定义部分
#include
2、主程序部分
main()/*主函数*/
{struct student *head,*stu;long del_num;int N;a: printf(“The student information management system n”);printf(“n(LIST)n”);printf(“ 1.Create a new namelistn”);printf(“ 2.Print the namelistn”);printf(“ 3.Delete a record from the namelistn”);printf(“ 4.insert a recordn”);printf(“ 5.sort the programmen”);printf(“ 0.exit the programmen”);printf(“please enter the number:”);scanf(“%d”,&N);switch(N){case 0:exit(0);goto end;case 1: printf(“input records:n”);head=creat();print(head);break;case 2: print(head);break;case 3: printf(“ninput the delete number :”);scanf(“%1d”,&del_num);while(del_num!=0){head=del(head,del_num);print(head);printf(“ninput the deleted number:”);scanf(“%1d”,&del_num);}break;case 4: printf(“ninput the insert record:”);stu=(struct student *)malloc(LEN);printf(“nplease input number :”);scanf(“%ld”,&stu->num);printf(“please input name”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);9 printf(“please input english score:”);scanf(“%d”,&stu->english);while(stu->num!=0){head=insert(head,stu);print(head);printf(“ninput theinsert record:”);stu=(struct student*)malloc(LEN);printf(“nplease input number:”);scanf(“%ld”,&stu->num);printf(“please input name:”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);printf(“please input english score:”);scanf(“%d”,&stu->english);break;case 5: head=sort(head);print(head);break;
}goto a;end:;} }
3、输入信息部分 /*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);10 goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } head=NULL;while(p1->num!=0){ n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ 11
验证成验证成绩 goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);} 输入界面如下:
4、输出信息部分
/*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 12 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);}
5、排序部分
struct student *sort(struct student *head)/*{int i=0;struct student *p,*q,*t,*h1;h1=head->next;head->next=NULL;while(h1!=NULL){t=h1;h1=h1->next;p=head;q=head;while(t->total>p->total&&p!=NULL){q=p;p=p->next;} if(p==q){t->next=p;head=t;} else {t->next=p;q->next=t;} } p=head;while(p!=NULL){i++;p->order=i;p=p->next;} printf(“sort sucess!n”);return(head);}
如按总分排序,界面如下:
排序函数*/
按学号排序,界面如下:
6、插入信息部分
/*插入结点函数*/ struct student *insert(struct student *head,struct student *stud){struct student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){head=p0;p0->next=NULL;} else {while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;} if(p0->num<=p1->num){if(head==p1)head=0;else p2->next=p0;14 p0->next=p1;} else {p1->next=p0;p0->next=NULL;} } n=n+1;p1->order=n;return(head);}
7、删除部分 /*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);} 界面如下:删除后
4.2、总程序
#include
int n;/*n为全局变量,定义为节点个数*/ /*创建链表,带回一个指向链表头的指针*/ struct student *creat(vonum){ struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student*)malloc(LEN);/*开辟一个新单元*/ 16 printf(“nInput student's number:(press 0 to exit)”);/*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } head=NULL;while(p1->num!=0){ n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);17 scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*验证成绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);}
/*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 18
验证成绩 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);}
/*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);}
/*插入节点*/ struct student *insert(struct student *head,struct student *stud)/*stud是一个指针变量,从实参传来待插入节点的地址给stud*/ { struct student *p0,*p1,*p2;p1=head;/*使p1指向第一个节点*/ p0=stud;/*p0指向要插入的节点*/ if(head==NULL)/*原来的链表是空表*/ {head=p0;p0->next=NULL;/*使p0指向的节点作为头节点*/ 19 } else { while((p0->num>p1->num)&&(p1->next!=NULL)){ p2=p1;/*使p2指向刚才p1指向的节点*/ p1=p1->next;/*p1后移一个节点*/ } if(p0->num
num){ if(head==p1)head=p0;/* else p2->next=p0;/* p0->next=p1;} else {p1->next=p0;p0->next=NULL;} /* } n=n+1;/*节点数加1*/ return(head);}
/*exchange the element of chain*/ void swap(struct student* q1,struct student* q2){long temp_num;char temp_name;char temp_sex[10];int temp_chinese;int temp_math;int temp_english;int temp_sum;char s1[20];
temp_num=q1->num;q1->num=q2->num;q2->num=temp_num;
strcpy(s1,q1->name);strcpy(q1->name,q2->name);strcpy(q2->name,s1);
temp_sex[10]=q1->sex[10];q1->sex[10]=q2->sex[10];q2->sex[10]=temp_sex[10];
插到原来第一个节点之前*/ 插到p2指向的节点之后*/ 插到最后的节点之后*/ temp_chinese=q1->chinese;q1->chinese=q2->chinese;q2->chinese=temp_chinese;
temp_english=q1->english;q1->english=q2->english;q2->english=temp_english;
temp_math=q1->math;q1->math=q2->math;q2->math=temp_math;
temp_sum=q1->sum;q1->sum=q2->sum;q2->sum=temp_sum;}
/*sort by num*/ struct student * sort_num(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->num>p2->num)p1=p2;p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);}
/*sort by totalscore form high to low*/ struct student * sort_sum(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->sum
sum)p1=p2;21 p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);}
/*主程序*/ main(){struct student *head,*stu;char aa;long del_num;M: printf(“n************welcome System************nn”);
to
the
School
Management printf(“***************************************************************n”);printf(“n************
made by GIS1011 chenliuqing 1020209124 ************n”);printf(“* 1.Input students' records 2.Print students' records *n* 3.Delete records 4.Insert records *n* 5.Sort by number 6.Sort by totalscore *n* 7.System Information 8.Exit *n ”);
printf(“********************END****************************************n”);printf(“********* ***************n”);aa=getch();aa=tolower(aa);switch(aa){ case'1': printf(“nInput students' records”);head=creat();/*返回头指针*/ print(head);/*输出全部节点*/ break;/*调用输出链表函数*/ case'2':print(head);/*输出全部节点*/ break;/*调用删除节点函数*/ case'3': printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);while(del_num!=0){head=del(head,del_num);/*返回头指针*/ print(head);/*输出全部节点*/
please
choose
the
number
before
command 22 printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);} break;/*调用插入节点函数*/ case'4': printf(“nInput the inserted record”);stu=(struct student*)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);if(stu->num!=0){ printf(“Input student's name:”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m):”);scanf(“%s”,stu->sex);printf(“Input chinese score: ”);scanf(“%d”,&stu->chinese);printf(“Input math score: ”);scanf(“%d”,&stu->math);printf(“Input english score: ”);scanf(“%d”,&stu->english);} while(stu->num!=0){ head=insert(head,stu);print(head);/*输出全部节点*/ printf(“Input the inserted record”);stu=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);printf(“Input student's name: ”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,stu->sex);printf(“Input Chinese score:”);scanf(“%d”,&stu->chinese);printf(“Input math score:”);scanf(“%d”,&stu->math);printf(“Input english score:”);scanf(“%d”,&stu->english);} break;/*调用按学号(从小到大)排序函数*/ case '5': head=sort_num(head);print(head);/*输出全部节点*/ 23 break;/*调用按总分(从高到低)排序函数*/ case '6': head=sort_sum(head);print(head);/*输出全部节点*/ break;case'7':printf(“n~~~~~~~~~~~~System Information~~~~~~~~~~~~n”);printf(“School Management SystemnMade Time:2010-7-24nVersion number:1.0nn”);printf(“~~~~~~~~~~~~~~~~~~ /*显示系统信息*/ break;case'8':exit();/*退出程序*/ /*调用创建链表函数*/
} goto M;/*返回、显示主菜单*/ }
END
By
xugaohongnFinish
~~~~~~~~~~~~~~~~~~nnn”);
五、实习心得体会
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。通过本次C语言程序设计的实习,我学得了很多知识,虽然在之前老师没有详细讲链表的内容,但是我通过自己看书,同学一起讨论,会用链表处理简单的实际问题了,并对链表的建立、结点的插入、删除节点以及链表的输出等一系列链表知识有了较为深刻的认识。而且自己的实际操作能力也有了提高。
回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能 24 真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体„„通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。但我们总结出了一点点的经验如下:
1、要对系统的功能和要求做出详细的分析,并合理分解任务。
2、把分解出来的子任务,做给一个相对独立的模块。
3、在设计一个模块之前,要简单构想一下总界面的显视情况。
4、针对构想出来的界面进行程序的编写。
六、附录:
参考文献
教材和主要参考书目:(1)教材:《C程序设计》,谭浩强编著,清华大学出版社(2)主要参考书目: ①《C程序设计教程》,谭浩强编著,清华大学出版社; ②《C语言程序设计——习题与实验指导》,谭浩强编著,清华大学出版社。
第五篇:C语言实习报告
新疆昌吉学院
《C语言程序设计》 教学实习报告
部门:信息技术分院
专业:计算机应用技术 班级:2010高职应用
姓名: 指导教师:
《C语言程序设计》教学实习报告
2010高职应用班
一、实习时间:
2011 年 6 月 13 日至
2011 年月 17 日
二、实习地点:第一微机室
三、实习目的:(小4宋体,约150字)
(1)能进一步熟悉C程序的编辑、编译、连接和运行的过程;
(2)通过C语言环境下的应用实例,能有编写程序的能力,掌握编程的思路和方法,掌握C语言程序设计的基本概念和基本技能;
(3)在程序调试过程中,能根据运行结果,运用相应的手段,正确地找出并解决程序中的逻辑错误;
(4)可以掌握不同类型数据之间赋值的规律;
(5)通过解题、程序设计和上机实践,能加深对所学概念的理解,使得理论与实践相结合的学习方法;
(6)通过C语言程序设计的课程实习,我们能具有使用计算机解决相关问题的能力,为今后学习其他计算机应用课程打下较好的程序设计基础。
四、实习内容及方法:
实训一 C语言的编程环境:
1、Turbo C运行环境。
了解TC的基本环境,熟悉常用菜单项和快捷键。
2、C程序的编辑、编译、连接和运行过程。掌握C程序的运行步骤,初步了解C程序的特点。
3、VC6.0环境的熟悉,能按照软件并在软件中能够调试简单的C语言程序。实训二 C语言数据类型、运算符及表达式:
案例3:字母转换问题。本案例在执行时,将提示输入一个字母,如果输入的是小写字母,程序将输入的小写字母转换为大写字母并输出,否则按原样输出。步骤:
1、定义变量,和变量类型;
2、寻找大小写字母的 ASC||码值得关系;
3、输入输出变量。代码:
结果:
实训三 C程序的三种基本结构的应用
案例1:输入某年某月某日,判断这一天是这一年的第几天? 解题步骤:
1、定义变量年year月month、日day、和第几个月的天数总和sum;
2、定义month变量作为switch语句的测试条件;
3、从键盘上输入年、月、日的值;
4、输出这一年的第几天sum。程序分析:
输入某年某月某日,判断这一天是这一年的第几天?那么需要考虑三个变量,年,月,日。
首先,年主要要考虑的因素是否是闰年的问题。月要考虑的是那一个月的问题。因为不同月的天数不一样。日嘛,就不用说了。
还有就是,月份是一月或者二月,那么就不需要考虑是否闰年的问题,因为不需要计算二月总共多少天。
上述程序,首先是在默认闰年的情况下计算某月前面所有月的天数和,然后加上当月的零头天数,最后才是判断当月是否大于二月,如果大于二月,那么必须考虑闰年的问题,再接着判断是否闰年,如果非闰年总天数减一,是闰年不变,因为在开始计算的过程中时默认闰年的。代码:
main(){ int day,month,year,sum,leap;clrscr();printf(“nplease input year,month,dayn”);scanf(“%d%d%d”,&year,&month,&day);switch(month){ case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(“data error”);break;} sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;printf(“it is the %dth day.”,sum);getch();}_ 案例4:求200-300之间所有素数,每5个换行。程序分析:先将1挖掉(为什么?因为1不是素数)用2去除它后面的各个数,把能被2整除的数挖掉,用3去除它后面各数,把3的倍数挖掉,用循环体分别将4、5„各数作为除数去除这些数以后的各数。直到除数后面的数已全部挖掉为止
代码:
main(){ int i,j,n=0;clrscr();for(i=200;i<=300;i++){ for(j=2;j<=i;j++)if(i%j==0)break;if(j>=i){ printf(“%4d”,i);n++;} if(n%5==0)printf(“n”);} getch();}_
案例8:打印输出九九乘法表。解题步骤:
1、定义行变量、列变量。
2、循环输出行乘列的值。
3、每行最后输出一个换行符。程序分析:
两个循环嵌套时,第一个循环语句为外循环,第二个循环语句为内循环,外循环执行一次,内循环从头到尾执行一遍(可能执行多次循环体),因此本题的执行次数为:1+2+3+4+5+6+7+8+9=45次。
代码:
结果:
实训四 数组的定义和使用:
案例
3、打印杨辉三角,输出前10行数据。解题步骤:(1)定义变量;
(2)确定数组的行与列;(3)FOR循环给数组赋值。(4)输出这个数组。程序分析:
杨辉三角是(a+b)的n次幂的展开式系数,如:(a+b)系统数是1 1(a+b)2展开后的系数是 1 2 1(a+b)3展开后的系数是 1 3 3 1 从而得到杨辉三解的系数规律(指数为n):
1、共有n+1组系数,且第K组(从0)开始有K+1个数。
2、每组最后一位与第一位均为1
3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的前一行同一列与前一列之各。代码:
#include “stdio.h” main(){ int i,j,a[10][10];for(i=0;i<10;i++)for(j=0;j<10;j++)a[i][j]=0;for(i=0;i<10;i++){ a[i][0]=1;a[i][i]=1;} 6 for(i=0;i<10;i++){ for(j=0;j<10;j++)printf(“%d ”,a[i][j]);printf(“n”);} 结果:
实训五 函数的应用:
案例3:用函数和递归实现求n!程序分析:
(1)首先在有限递归中,必须有一个测试避免递归调用的条件,即当满足该条件时,不再递归。而在递归函数中,应该是先测试,后进行递归调用。在本例中,if语句就是这种测试条件,当n等于0时,则不再递归,即退出该递归函数。
(2)在递归函数中,至少要有一个递归调用的语句,并且该语句的参数应该逐渐逼近递归结束的条件。其中,该语句参数n-1是逐次减1,当n为0时,则不再调用递归函数。
(3)完成该递归函数。
代码:
结果:
实训六 指针的应用
案例1:分析并对比如下2个程序,写出运行结果,并上机验证。
1.1 main(){int *p1,*p2,*p,a,b;a=5;b=9;p1=&a;p2=&b;if(a
a=5 , b=9 Max=9 , min=5
五、结论(小4宋体,约1500字)
1、收获:
(1)通过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,当一个程序写完以后,经常会有很多错误。不过,通过这几天的实训和小组讨论,逐渐让自己积攒了一些经验,有些错误可以很快就看出来。
(2)这次实训让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了较多的兴趣和更深层的认识。
(3)C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌 8 套,条理很清楚,不是一个零散的知识,而是一门较有逻辑思维能力培养的学科。
2、不足:
(1)通过实训我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫同组的帮忙,虽然说一定意义上增加了同学之间的感情,但是会养成一种依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到没有别人帮助的时候也可以完成一些简单的程序编写与错误排除。
(2)还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,感觉C语言还是很有意思的课程。
(3)自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,在上课的时候老师就讲,学习C语言最重要的是学习C语言的逻辑思维,不管以后从事什么行业,学习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!
六、致谢
感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的相互探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础。