C语言程序设计课程设计XA.docx
- 文档编号:12096143
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:13
- 大小:23.65KB
C语言程序设计课程设计XA.docx
《C语言程序设计课程设计XA.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计XA.docx(13页珍藏版)》请在冰豆网上搜索。
C语言程序设计课程设计XA
C语言程序课程设计
Cprogrammingcurriculumdesign
课程设计大纲
一、学时与学分
总学时:
1.5周总学分:
2
二、课程设计的目的
“C语言课程设计”是在学习“C语言程序设计基础”课程之后进行的一个实践教学环节,课程设计的目的是:
1.针对C语言中的重点和难点内容进行训练,巩固和加深C语言程序设计的能力,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
2.熟练掌握C语言的编程技巧和上机调试程序的方法
3.进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
4.重点掌握:
常用经典算法的程序设计、递归函数的程序设计、链表的处理方法、文件的I/O操作。
为了使学生从课程设计中尽可能取得比较大的收获,对课程设计题目分成二类,一类为基础训练题目,学生从中学习到程序设计的常用算法。
另一类为综合题目。
学生从这两类型题目中各选择部分完成。
三、课程设计的基本要求
设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。
因此必须严格执行良好的实验步骤规范(包括上级操作规范)。
本课程设计的基本步骤与要求是:
1.问题分析及解决方案框架确定
充分地分析和理解问题本身,弄清要求做什么(Whattodo?
)。
在确定解决方案框架过程中(Howtodo?
),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2.详细设计和编码
确定算法的主要流程,再此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。
3.上机前编写程序与检查
上机前程序检查可有效提高调试效率,减少上机调试程序时的无谓错误。
程序检查主要有两种途径:
用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。
把程序中的明显错误事先排除。
4.上机调试程序
5.完成课程设计报告,MicrosoftOfficeWord2003创建
①问题描述:
题目,即要解决的问题是什么。
②设计
设计算法:
主要算法思想,用流程图表示,框图用MicrosoftOfficeVisio2003创建,再插入到WORD文档中。
实现注释:
各项功能的实现程度。
调试报告:
调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等
③附录:
源程序清单和结果。
如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。
四、课程设计的内容
每人从五题中选做三题,选高者可得高分,其中必须有链表操作题(包括建立、插入、删除、打印等);文件操作题(包括建立、输入、输出;文本文件及二进制文件等)。
1.在“一、基本要求题”的1~4题中选做一题;
2.在“一、基本要求题”的5~9题中选做一题;
3.在“二、提高训练题”中选做一题;-加分题
4.在“三、综合训练题”的1~2题中选做一题;
5.在“三、综合训练题”的3~5题中选做一题。
五、课程设计的安排
课程设计安排在第二学期期末,课程设计完成后提交课程设计报告。
计算中心BC1/2按号入座;19周三~五9-12节六5~8节;20周一~四9-12节。
六、考核方式与评分办法
通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。
成绩分优、良、中、及格和不及格五等。
考核标准:
1.程序设计的正确性,程序结构是否合理、编程风格、算法的优劣(50%)。
2.学生的工作态度、动手能力、创新精神及出勤率。
(30%)。
3.总结报告-用MicrosoftOfficeWord2003创建(20%)
考核办法:
1.演示所设计的程序;
2.回答教师所提出的问题;
3.查看课程设计报告;
4.考勤;平时上机情况。
课程设计报告写作格式与要求
一、封面
包括:
课程设计的名称,班级,学号,课程设计人,指导教师,设计日期。
二、内容提要
简述报告的内容
三、目次
四、正文
1.任务名称;
2.实验的目的要求;
3.主要算法思想,及关键数据的数据类型、名称、用途的说明;
4.用MicrosoftOfficeVisio2003创建算法框图;
5.关键算法的源程序代码(要有注释);
6.调试、运行情况的说明。
五、课程设计体会
六、参考文献
注意:
课程设计完成后提交课程设计报告,报告中除封面外每页页脚(页码[居中]),报告必须用A4纸打印。
报告、加注释的源程序及数据文件上传到FTP上。
题目要求
一、基本要求题
注意:
编写子函数的同时,还要编写主函数和其它相关子函数进行调试。
1.子函数为参数
编写子函数为参数的通用函数,只编以下题目中的1小题。
(1)用梯形法求定积分的编程,求函数f(x)=x2+2x+1或自定函数的定积分。
提示:
把积分区间[a,b]等分为n等分(a,b,n的值由程序输入),可得到若干个小梯形,积分面积就近似为这些小梯形面积之和。
(2)用二分法求方程的根,求自定方程的根
(3)其它数值求解算法
2.进制转换
编子函数,实现将输入的一个无符号整数转换为二进制和八进制表示,分别存入字符数组中并输出。
注:
计算机模拟人工是编程中常用的方法,这种方法要求编程者首先分析在人工方式下解决问题的过程,从中找出步骤和规律,然后编写程序,按照人工解决问题的步骤和规律进行操作。
3.位数大小排序
子函数功能说明:
输入一个五位整数,对此整数中的五个数值进行从大到小的顺序排序,形成一个新的五位整数。
同时需要编写主函数和其它相关子函数进行调试。
4.平方回文数
求所有不超过200的N值,N的平方是具有对称性质的回文数。
回文数就是将一个数从左向右读是一样的,如满足题意要求的数有:
N=11,112=121。
5.计算分数的精确值
由于计算机内字长有限,常规的浮点运算都有精度限制,为了得到高精度的计算结果,就必须自行设计算法。
编子函数,使用数组精确计算M/N(0 如果M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号。 ) 提示: 可将商存放在一维数组中,进行除法运算时,可模拟人的手工操作,即每次求出商的一位后,将余数乘以10,再计算商的下一位。 若某次余数为0,则为有限不循环小数。 若某次计算后的余数与前面的某个余数相同时,则M/N是无限循环小数。 6.马克思手稿中的数学题(穷举算法) 马克思手稿中有一道趣味数学题: 有30个人,其中有男人、女人和小孩,在一家饭馆吃饭共花了50先令: 每个男人花3先令,每个女人花2先令,每个小孩花1先令,问男人、女人、小孩各有几人? 7.小孩吃梨问题 小孩买了一些梨,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的梨吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半,并又多吃了一个。 到第18天只剩下一个梨了,问小孩共买了多少梨? 提示: 据初始条件,用倒推法。 8.奇异的三位数 一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。 9.约瑟夫问题 15个基督徒和15个异教徒在海上遇险,必须将一半的人投入大海,其余的人才能幸免于难,于是想了一个办法: 30个人围成一个圆圈,从第一个人开始依次报数,每数到第9个人就将他扔入大海,如此循环直到仅余15个人为止。 问怎样排法,才能使每次投入大海的都是异教徒。 程序输出要求: 程序运行后,显示原始顺序,每次投入大海的人的信息及剩下人的顺序。 提示: ①30个人顺序编号,自增量k报数,k%9==0时,此人投入大海。 投入大海标志为置数组元素值为0(或-1)。 投入大海的人不再报数。 二、提高训练题 1.回文数的形成 任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步骤,则最终可得到一个回文数。 请编程验证。 (回文数就是将一个数从左向右读是一样的,如121,11等)。 (注: 回文数不超过) 回文数的这一形成规则目前还属于一个猜想,尚未获得数学上的验证,有些回文数要经历上百个步骤才能获得,请编程验证,打印形成过程。 如输入整数78,则形成回文数的过程为: 78+87=165,165+561=726,726+627=1353,1353+3531=4884。 提示: 一个函数用来求反序数,另一个函数判断是否为回文数,在主函数中输入输出。 2.人机猜数游戏1 由计算机“想”一个四位数,请人猜这个四位数是多少。 人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数为止。 请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。 提示: 用库函数随机数发生器函数random()产生一个随机数的用法 函数原型: intrandom(intnum); 程序例: #include #include /*printsarandomnumberintherange0to99*/ intmain(void){ intn; randomize();/*初始化随机数发生器*/ n=random(100);/*产生一个0-100的随机数。 */ printf("Randomnumberinthe0-99range: %d\n",n); ; } 3.人机猜数游戏2 程序说明: 游戏的开始由机器产生一个随机数(1~100之间,用库函数random()),然后游戏者在程序的提示下猜数,若输入的数比这个数大,程序提示: YouranswerisHIGH,tryagain.,否则,程序提示: YouranswerisLOW,tryagain.,直到猜对为止。 程序可实现连续猜数,直到游戏者退出。 程序输出要求: 累计游戏者猜对一个数所需次数n,当n<=7时,给出“Congratulation”字样;当7<n<15时,给出“I canbetyoucandoitbetter.”;当n>=15时,用exit(0)库函数退出程序。 4.保龄球计分程序 打保龄球是用一个滚球去撞击10个站立的瓶,将瓶击倒。 一局分10轮,每轮可滚球1次或多次,以击到的瓶数为依据计分,一局得分为10轮得分之和,而每轮的得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,即: 某轮某次滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。 计分规则如下: 1若某一轮的第一次滚球就击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加2次滚球),该轮得分为本次击倒瓶数10与以后2次滚球所击倒瓶数之和。 2若某一轮的第一次滚球未击倒全部10个球,则对剩下未击倒的瓶再滚球一次,如果这2次滚球击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加1次滚球),该轮得分为这2次击倒瓶数10与以后1次滚球所击倒瓶数之和。 3若某一轮2次滚球未击倒全部10个瓶,则本轮不在滚球,该轮得分为这2次滚球所击倒瓶数之和。 实现提示 1模拟10个人各打一局保龄球比赛过程,统计每局各轮得分和累计总分。 2逐人逐轮逐次输入一次滚球击倒的瓶数。 3对10人的得分由低到高排序并显示。 4最后,把排序的存入文件中。 5.简单计算器 请编写一个程序计算表达式: data1opdata2的值。 其中,op为运算符+、-、*、/。 三、综合训练题 1.学生成绩管理系统 (结构体数组、函数、指针、链表及文件等的综合应用) 程序说明: 有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)成绩录入,插入后按学号自动排序,创建链表; (2)成绩文件的存取,创建链表; (3)成绩的多种查询、修改; (4)成绩的多种统计、排序; (5)学生增加、删除、列表。 提示: intnum;/*定义学号*/ charname[20];/*定义姓名*/ floatscore[3];/*定义存贮三门课成绩的数组*/ floataverage;/*定义平均成绩*/ 2.电话簿/通讯录的管理系统 类似学生成绩管理系统,要求有结构体数组、函数、指针、链表及文件等的综合应用。 具有: 增加、删除、查询、修改、统计、排序、列表等功能。 3.迷宫问题 利用栈的先进后出的深度优先搜索,找出一条路径。 4.背包问题 设有不同价值,不同重量的物品n件,求从这n件物品中选取一部分物品的方案,使选中物品的总重量不超过指定的限制重量,且选中物品的价值之和为最大。 算法思想: 设n件物品的重量分别为w0,w1,……,wn-1,物品的价值分别为v0,v1,…,vn-1。 采用递归寻找物品的选择方案。 设前面已有了多种选择的方案,并保留了其中总价值最大的方案于数组option[],该方案的总价值存于变量maxv。 当前正在考察新方案,其物品选择情况保存于数组成cop[]。 假定当前方案已考虑了前i-1件物品,现在要考虑第i件;当前方案已包含的物品的重量之和为tw;至此,若其余物品都选择是可能的话,本方案达到的总价值的期望值设为tv。 算法引入tv是当一旦前方案的总价值的期望值也小于前面方案的总价值maxv时,继续考察当前方案变成无意义的工作,应当终止当前方案,立即去考察下一个方案。 因为当方案的总价值不比maxv大时,该方案不会再被考察。 这同时保证函数后找到的方案比前面的方案更好。 对于第i件物品的选择有两种可能: (1)物品i被选择,这种可能性仅当包含它不会超过方案总重量的限制时才是可行的。 选中后,继续递归去考虑其余物品的选择。 (2)物品i不被选择,这种可能性仅当不包含物品也有可能会找到价值更大的方案的情况。 算法: try(物品i,当前选择已达到的重量和tw,本方案可能达到的总价值为tv){ /*考虑物品i包含在当前方案中的可能性*/ if(包含物品i是可接受的){ 将物品i包含在当前方案中; if(i try(i+1,tw+物品i的重量,tv); else /*又一个完整方案,因它比前面的方案好,以它作为最佳方案*/ 以当前方案作为临时最佳方案保存; 恢复物品i不包含状态; } /*考虑物品i不包含在当前方案中的可能性*/ if(不包含物品i仅是可考虑的) if(i try(i+1,tw,tv-物品i的价值); else /*又一个完整方案,因它比前面的方案好,以它作为最佳方案*/ 以当前方案作为临时最佳方案保存;} 5.八皇后问题 求出在一个n*n的棋盘上,放置n个不能互相捕捉的国际象棋“皇后”的所有布局。 这是来源于国际象棋的一个问题。 皇后可以沿着纵横和两条斜线四个方向相互捕捉。 如图1所示,一个皇后放在棋盘第四行第三列位置上,则棋盘上凡打星号“*”的位置上的皇后就能与第四行第三列位置上的皇后相互捕捉。 从图1得到以下启示,一个合适的解应使得每行.每列上确定有一个皇后,且在一条斜线上也最多只有一个皇后。 * * * * * * * * * * Q * * * * * * * * * * * * * * * 图1皇后相互捕捉位置示意图 算法思想: 求解过程从空配置开始,在第1列至第m列为合理配置的基础上,再配置第m+1列。 直至第n列配置也是合理时,就找到了一个解。 接着改变第n列配置,希望获得下一个解。 另外,在任一列上,可能性有n种配置。 开始时,配置在第一行,以后改变时。 顺次选择第二.第三……直到第n行。 当直至第n行也找不到一个合理的配置时,就要回溯,去改变前一列的配置。 求解皇后问题的算法如下。 算法: {输入棋盘大小值n;/*一个n*n的棋盘*/ m=0;/*从空配置开始*/ good=1;/*空配置皇后不相互捕捉*/ do{ if(good) if(m==n){ 输出解; 改变之,形成下一个侯选解; } else 扩展当前侯选解至下一列; else 改变之,形成下一侯选解; good=检查当前侯选解的合理性; }while(m! =0) } 随机模拟问题 某公司有一个顾客接待站,在单位时间内随机的有n位顾客到接待站来询问。 设每位顾客的接待时间是某个范围内的随机值。 假设接待站只有一位接待员,要求程序模拟统计在设定时间内,接待员的总空闲时间和顾客的平均等待时间。 假定模拟数据已按顾客到达接待站的时间顺序依次存放在某个数据文件中,对应每位顾客有两个数据,到达时间和需要接待的时间。 提示: (1)单位时间可设为一个工作日8小时,可折合成28800秒,则接待员的工作时间为第0秒至第28800秒。 (2)顾客的到达时间也可用秒作为单位。 由于顾客必须在单位时间内到达故取值范围应在0-28800之间。 (3)可用随机函数rand()或random()取得顾客的到达时间和需接待时间。 (4)需事先建立顾客数据文件customs_data(二进制文件),并将顾客数据按到达接待站的时间顺序排序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程设计 XA