程序设计综合训练实验指导书.doc

上传人:飞****2 文档编号:60094950 上传时间:2022-11-13 格式:DOC 页数:14 大小:61.50KB
返回 下载 相关 举报
程序设计综合训练实验指导书.doc_第1页
第1页 / 共14页
程序设计综合训练实验指导书.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《程序设计综合训练实验指导书.doc》由会员分享,可在线阅读,更多相关《程序设计综合训练实验指导书.doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、程序设计综合训练实 验 指 导 书石家庄铁道学院经济管理学院前 言程序设计综合训练是电子商务专业、信息管理与信息系统专业的小学期集中实践。它与程序设计基础课程配合,通过集中训练提高学生的程序设计能力。本实验指导书按照课程实验大纲进行编写。希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,进一步提高程序设计综合训练课程的质量。 本实验指导书由贾玉锋编写。 编者 目 录说明 3 实验一 基本知识综合训练(一) 4 实验二 基本知识综合训练(二) 5 实验三 基本知识综合训练(三) 6实验四 综合性应用程序设计 7附录:错误信息 13 说 明本课程是信息管理与信

2、息系统、电子商务专业的小学期集中实践环节课程。主要目的和任务是通过在Turbo C或VC+集成开发环境中进行综合性、集中程序设计训练。使学生掌握高级语言的程序设计方法,培养学生严谨、朴实的程序设计风格;针对在正常的教学过程中学生暴露出来的各种各样的问题,有针对性的进行的上机实践,在C 语言环境下独立地编制正确、高效的程序,以达到深刻理解和巩固所学的理论知识的目的,为后续课程的学习打下良好基础。实验报告要求1. 每次实验前,认真预习本次实验内容,按实验指导书的要求,需编写的程序,应书写整齐,经检查无误后方能上机。2. 上机输入和调试程序,调试通过后,打印出程序清单并把运行结果记录下来(在条件允许

3、下)。3. 上机结束后,按照实验指导书的具体要求,整理出实验报告(字迹工整),下次上机交给指导教师。4. 实验报告应包括以下内容:(1) 实验题目;(2)实验目的和要求;(3)实验内容(附:程序流程图和程序清单 有条件用打印机打印出来);(4)实验步骤及结果;(5)分析与体会:对运行情况作分析,以及本次实验所取得的经验。如程序未能通过,应分析错误原因。本课程上机时间为3周,分为4个实验项目。实验项目及学时分配如下表所示。序号实验项目名称学时1基本知识综合训练(一)0.52基本知识综合训练(二)0.53基本知识综合训练(三)0.54综合性应用程序设计1.5说明:具体实验题目任课老师可以根据授课对

4、象做相应的调整。实验一 基本知识综合训练(一)一、实验目的与要求1. 加强程序基本结构、数组、字符数组和指针数组的练习,掌握字符数组和字符串函数的使用。2. 掌握与数组有关的算法。3. 进一步提高程序的设计能力和调试能力4. 要求:上机前先编制程序并画出程序框图;独立完成实验;独立完成实验报告。二、实验内容1. 输入一串字符,以“?”结束,统计各字母出现的次数,并按字母出现的多少输出(先输出字母出现多的,次数相同的按照字母表顺序输出,不出现的不输出)。2. 插入排序(在输入的过程中完成排序)。以任意次序读入20个数,将第1个数放入数组a的第一个元素中。以后读入的数应与已经存入数组a中的数进行比

5、较,确定它在从小到大排列中所应处的位置。将该位置及其以后的元素向后推移一个数的位置,将新读入的数填入空出的位置中。这样在数组a中的数总是从小到大排列的,处理完后输出。3. 从键盘上接收一个多至9位整数、2位小数的数值,请将其转换成大写金额,即写成: 亿仟佰拾万仟佰拾元角分的形式。例如:当从键盘上输入 .56 时,输出结果为: 亿仟佰叁拾柒万肆仟玖佰壹拾零元伍角陆分或: 叁拾柒万肆仟玖佰壹拾零元伍角陆分4. 编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词查找,例如:输入:Happy new year 最短单词为new,输出new。5. 用随机函数产生数据,设计二

6、位整数的加、减、乘算式各一题(减法算式应保证被减数大于减数)。让学生回答,由计算机给出正确与否的判断,并最后给出总得分。得分计算方法:算对加、减法各得30分,算对乘法得40分,算错得0分。然后由计算机输出询问信息,学生选择回答,以决定是否继续一次新的测验。 实验二 基本知识综合训练(二)一、实验目的与要求1. 掌握结构体类型变量的定义和使用;2. 掌握链表的概念,掌握对链表的综合操作操作;3. 进一步提高程序的设计能力和调试能力4. 要求:上机前先编制程序并画出程序框图;独立完成实验;独立完成实验报告。二、实验内容1. 设有n个人围做在圆桌周围,从某个位置开始用自 数进行编号为1,2.,n.

7、然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m+1个)又从容不迫开始报数,数到m的人便是第二个出列的人.如此继续下去直到最后一个人出列为止。要求输出这个出列的顺序。这个问题称为约瑟夫问题。具体要求如下:(1) nmk由键盘输入,输入前要有提示。(2) 在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该存储空间。(3) 在输出时,各编号之间用两个空格来分隔。(4) 分别用n=8,m=4,k=1以及n=10,m=12,k=4调试运行你的程序.方法提示:设以自然数1,2,n为元素构成一个环形队列,并用一个长度为n+1的一维数组a存放各元素,即数组元素ai表示元

8、素i的下一个元素.显然,在开始时,该数组的各元素如下:ai=i+1,i=1,2, ,n-1an=1(为直观起见,其中数组元素a0不用),随着报数的进行,不断地有元素从队列中出来,这个数组中的元素值也在不断地变化,即当有元素出列后,某些元素i的下一个元素就不一定是i+1了. 一般来说,假设当前要出列的元素为k,它的前一个元素为1,则有a1=k,且k的下个元素为ak.即当前状态为,1,k,ak, 当k出列以后,将变为 ,1,ak, 此时1的下一个元素已不是k,而是原来k的下一个元素ak.由此可知,元素k出列以后,要做以下两件工作:(1) 将当前要出列的元素k输出;(2) 将元素ak的值赋给a1,即

9、将元素1的下一个元素改为原来k的下一个元素ak.下面再确定下一个要出列的元素.由上可知,当元素k出列后,下一轮的第一个报数者应是ak,我们将它赋给k,而当它报完数以后,又将它赋给1,且又将下一个报数者ak赋给k.这就是说,在报数的过程中,k始终指向当前报数者,1指向刚报完数的元素,ak是下一个要报数的元素.当经过m-1次后,k指向的元素就要数到m,它便是要出列者.由此可知,每一次的报数,需要作以下两个操作:1=k,k=ak2. 将一条链表上相邻的二个结点合并成一个结点,即将第一个结点与第二结点合并(合并后新节点的data为原来两个节点data的和),将第三个结点与第四个结点合并,。若链表上的结

10、点个数为奇数,则最后的一个结点不合并,直接作为合并后链表上的最后一个结点。链上结点的数据结构为:stuct node int data; struct node *next; ;3. 从键盘上输入若干个数,以-1结束,按照与输入相反的顺序建立一个链表,并输出。要求建立链表和输出链表用函数实现。选作题:1. 读入一串字符,以“?”结束,将其中的字母组成先进先出的链表并输出链表。2. 读入一串字符,以“?”结束,将其中的字母组成先进后出的链表并输出链表。3. 读入一批数,以负数结束,将正数组成排序的链表并输出,然后读入一个数,从链表中删除该数并输出。再读入一个数,将它插入排序链表中并输出。(用函数

11、)4. 建立某航班的乘客订票链表。该链表的每个结电包括乘客号和订票张数,且链表是按乘客号排序的。第一个结点比较特殊,它的乘客号为-1,订票张数为该航班已经订的张数(开始为0)。每当输入一个乘客号及定票张数时,系统应首先检查已订票张数是否超过该航班允许订票张数(例如200),若超过只能订较少的票或者不能订。然后检查在链表中有无乘客号相同的,若有则在原订票张数上增加,否则插入。当输入订票张数为负数时,表示退票,退票必须能查到同号的结点,否则为错。退票张数只能退原定张数。如果已全退,应将结点删除。修改头结点,输出每次实际订票张数、退票张数及出错信息。当输入乘客号为-100时结束并输出链表。实验三 基

12、本知识综合训练(三)一、实验目的与要求1. 掌握使用文件打开、关闭、读、写等文件操作函数;2. 学会用缓冲文件系统对文件进行的综合操作;3. 进一步提高程序的设计能力和调试能力;4. 要求:上机前先编制程序并画出程序框图;独立完成实验;独立完成实验报告。二、实验内容(6选3)1. 编写程序将两个数据递增的整数文件合并,形成一个新的文件,要求保持数据的递增性。2. 有5个学生,每个学生有3门课的成绩,从键盘上输入以上数据,计算平均成绩,将原有的数据和计算出的平均成绩存放在磁盘文件中。3. 将3题中的学生数据,按平均分进行排序处理,将已经排序的学生数据存入一个新文件中。4. 对4题已经排好序的文件

13、进行插入处理,插入一个学生的数据,计算平均成绩,然后按照平均成绩的顺序插入。插入后建立一个新文件。5. 将一个文本文件中的字符进行加密后另存到。加密规则为:字母用下一个字符替换,如:a换成b,.z换成a。其他不变。6. 下表为学生的学习情况(必做) 学号(num) 姓名(name) 年龄(age) 成绩(grade) 20101Zhangming 19 95.6 20102Whangyi 18 92.3 20103Shaoyi 20 81.4 20104Lilin 19 88.9 20105Goujingjing 18 88.7 20106Hanxing 19 86.5 20107Maming

14、yu 20 93.2 20108Gaofang 18 82.1 20109Linfang 19 98.4 20110 Zhangjayi 17 79.8要求如下:l 将上面的内容按结构体类型写入随机文本文件st.dat中。l 对此文件按成绩从低到高进行排序(用冒泡法),并输出排序结果。l 输入一个分数范围如(80-89.9),统计此分数段内的学生数。l 输入一个分数,用折半(对分)查找法查找获此分数的学生的学习情况并输出。 实验四 综合性应用程序设计一、实验目的与要求1. 通过一个综合程序设计,复习和学习C语言知识,将变量、数组、指针、结构体及文件的应用融为一体,通过编程掌握分析问题的方法,掌

15、握利用高级语言程序设计解决问题的方法,进一步提高实践动手能力和程序调试能力。2. 要求:上机前先编制程序并画出程序框图;独立完成实验;独立完成实验报告。二、实验内容(2选1)1、学生管理系统已知有20个学生记录(包括学号、姓名、班级、性别、出生年月、成绩)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。要 求: 编程序实现查询、排序、插入、删除等功能。具体要求如下:(1)要求显示如下界面 *1-查询2-排序3-插入4-删除5-退出*通过选择1-4来确定要做哪一个操作。(2)若选1,则出现如下界面*1.1-按学号查询1.2-按姓名查询1.3-按成绩查询*通过选择1.1

16、-1.3来确定要做哪一个操作,其中:按学号查询用二分法实现;按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。(3)若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。(4)若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。(5)若选4,删除指定学生的记录,并把结果保存到文件student.dat中。(6)若选5,则退出程序。(7)以上各个功能均编写成子函数,由主函数调用实现。2、工资报表管理系统已知N个职工的姓名、职工编号、基本工资、附加工资和扣除工资。要求:编写函数: 计算每个职工的实

17、发工资; 按职工编号由小到大顺序排列,相应数据也要随之调整; 要求输入一个职工编号,用折半查找法找出该职工的数据,从主函数输入要查找的职工号,输出该职工的数据; 将排列后的所有职工的数据存放在磁盘文件“gzbb.dat”中,磁盘文件的格式如下: Gong Zi Bao Biao* bh xm jbgz fjgz kcgz sfgz zhou peng *name:XX-XX-XXdate:XX-XX-XX 注意:在name与date中填入个人姓名与制表日期以上各个功能均编写成子函数,由主函数调用实现。根据题意此题用5个函数完成:l main 函数:总控函数l compute函数:计算函数(求每

18、个职工的实发工资)l sort函数:排序函数(按职工编号从小到大排列)l search函数:查找函数(按给定的职工编号进行查找)l output函数:输出排列后的所有职工数据(建立磁盘数据文件)取系统日期函数:struct date d ; getdate(&d) struct date 在头文件dos.h中定义。选作实验: 求皇后问题一 实验目的要求1 练习为数组动态分配与释放存贮空间。2 掌握回溯法这种算法的设计方法。二 实验内容和步骤由n2个方块排成n行n列的正方形称为“n元棋盘”。如果两个皇后位于n元棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。要求输入使n元棋盘上的n个皇

19、后互不攻击的所有布局。具体要求如下:(1) n由键盘输入,输入前要有提示。(2) 在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该存贮空间。(3) 分别用n=4,5,6运行你的程序。方法提示:首先定义一个长度为n+1的一维数组a,其中每一个元素ai(i=1,2,n)随时记录第I行上的皇后所在的列号(为直观起见,其中数组元素a0不用)。容易验证,第i行与第j行上的皇后在某一对角线上的充要条件为 |ai-aj|=|j-1|而它们在同一列上的充要条件为 ai=aj回溯法求解皇后问题的方法如下。从第一行(即i=1)开始进行以下过程。设前i-1行上的皇后已布局好,即它们均互不攻击

20、。现在考虑安排第i行上的皇后的位置,使得与前i-1行上的皇后也互不攻击。为了实现这一点,可以从第i行皇后的当前位置ai开始向右进行搜索:(1) 若ain,则将第i行皇后放在第一列,且回退一行,考虑第i-1行上的皇后与前i-2行上的皇后均互不攻击的下一个位置。此时如果已退到第0行(实际没有这一行),则过程结束。(2) 若ain,则需检查第i 行上的皇后与前i-1行上的皇后是否互不攻击。若有攻击,则将第i行上的皇后右移一个位置(即ai=ai+1),重新进行这个过程;若无攻击,则考虑安排下一行上的皇后位置,即i=i+1。(3) 若当前安排好的皇后是在最后一行(即第n行),则说明已经找到了n个皇后互不攻击的一个布局,将这个布局输出(即输出ai,i=1,2,n)。然后将第n行上的皇后右移一个位置(即an=an+1),重新进行这个过程,以便寻找另一种布局。

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

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

本站为文档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