程序设计基础实训题目
- 格式:doc
- 大小:501.50 KB
- 文档页数:19
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++)P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h〉#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x-—){for(i=0;i〈120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include〈reg51。
h〉#include<intrins。
h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x—-){for(i=0;i〈120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include〈intrins.h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x——){for(i=0;i〈120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i〈7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51。
2012年6月项目实训任务书课程名称:程序设计基础实训II课程编码:JX课程类别:专业基础必修课学分数:2学时数:32开课学期:2实训题目:ATM存取款系统的改进与完善一、已知技术参数和设计要求:银行ATM存取款系统业务描述如下:银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。
为了模拟真实的ATM业务环境,本系统必须实现存款、取款、查询、转账、修改密码以及开户的功能。
用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登陆ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。
本系统各个业务有如下注意点:(1)登陆系统用户登陆之前,必须在登陆界面输入其银行账户,通过其正确输入的银行账户登陆系统。
(2)开户业务要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。
同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。
(3)存款业务客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。
(4)取款业务客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但是取款金额必须大于目前的账户余额。
(5)查询业务客户登陆系统后,可以选择查询业务,查询账户余额。
(6)转账业务客户登陆系统后,可以选择转账业务,进行转账。
注意的是转账的目的账户必须是本系统已经存在的银行账户。
(7)修改密码客户登陆系统后,可以选择修改密码业务,进行密码修改。
二、各阶段具体要求:1、系统总体设计阶段(1)根据需求分析划分功能模块(2)分析并设计各个功能模块之间的关系(3)对于各个功能模块,设计相应的数据结构(必须使用链表完成全部功能)(4)设计相应的算法(必须包括排序和检索功能,且基于链表进行排序和检索)2、详细设计阶段(1)对于每个功能模块,应划分成操作层和数据层(2)对于每个操作层,应尽量考虑用户操作的简单,便捷(3)对于每个数据层,必须使用链表进行管理(4)在用链表进行管理时,必须用到链表检索和排序(5)对于数据层的操作完的数据必须保存到文件中(包括文件读、写操作)3、编码实现阶段(1)完成代码编写(2)要求代码编写规范(不得使用全局变量、所有功能模块必须使用函数封装主函数main()的行数不得超过代码总长度的25%)(3)代码必须有相应的注释(注释行数不得少于代码的10%,函数功能、变量名、算法、重要的循环、分支都必须用注释说明)4、系统测试阶段(1)完成功能调试(2)要求完成必要的测试工作5、交付实施阶段(1)提交可正常执行的系统,程序代码(2)撰写项目实训报告书(3)要求按照文档书写规范,严格地书写文档(4)注意:不允许使用代码、图片和表格填充报告空间。
国开电大JavaScript程序设计实训一:设计系统主页实训一:设计系统主页1. 题目设计系统主页。
2. 目的(1)熟悉Web前端项目开发环境。
(2)掌握如何建立Web前端项目,学会规划项目结构。
(3)掌握动态生成页面内容的方法。
(4)理解如何使用Flash显示图片新闻。
(5)会在应用系统中编写播放动态新闻的程序。
3. 内容建立项目结构,并设计一个系统的主页,在主页中嵌入Flash播放新闻。
4. 要求(1)建立Web前端项目,规划好程序结构。
(2)使用document.write()方法生成播放Flash的JavaScript代码。
(3)可以方便地增减播放的图片新闻数量。
(4)单击图片时能够打开对应的新闻页面。
实验百度7JavaScript程序设计1一、实验目的:1.掌握程序语言的基本结构;2.深刻理解有关函数中变量的作用域和各类控制语句的功能;二、实验要求:理解Javascript语法知识;三、实验内容:1.先练习课堂上讲的例子。
2、控制语句,用2种方式实现(if语句、switch语句);根据时间段的不同,在网页中显示不同的问候语,若小时数在12点以前,则输出“早上好!”的问候语,颜色为绿色;若在12点至18点,则输出“下午好!”颜色为黄色;18点以后输出“晚上好!”颜色为黑色。
[参考代码]方法1:function MyObject(name,size)/doc/d911783062.html,=name;this.size=size;}MyObject.prototype.tellsize=function(){alert("sizeof"+/doc/d911783062.html,+"is"+this.size);}var myObject=new MyObject("tiddles","7.5meters");myObject.tellsize();function Vehicle(){}Vehicle.prototype.wheelCount=4;Vehicle.prototype.curbWeightInPounds=4000;Vehicle.prototype.refuel=function(){return"Refueling Vehicle with regular87octane gasoline";}Vehicle.prototype.mainTasks=function(){return"Driving to work,school,and the grocery store";}function SportsCar(){}SportsCar.prototype=new Vehicle();SportsCar.prototype.curbWeightInPounds=3000;SportsCar.prototype.refuel=function()return"Refueling SportsCar with premium94octane gasoline"; }SportsCar.prototype.mainTasks=function(){return"Spirited driving,looking good,driving to the beach";}function discribe(vehicle){var str="";str="\n\nNumber of wheels:"+vehicle.wheelCount;str+="Crub Weight:"+vehicle.curbWeightInPounds;str+="\n\n Refuel Method:"+vehicle.refuel();str+="\n\n Main Tasks:"+vehicle.mainTasks(); document.getElementById("Info").innerText+=str;}function createVehicle(){var vehicle=new Vehicle();discribe(vehicle);}function createSportsCar(){var sportCar=new SportsCar();discribe(sportCar);}。
C语言程序设计练习题(答案)1.1上机实训项目实验1实验步骤1、进入VC环境从“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”,这时进入VC集成环境的主菜单窗口,屏幕显示如图1_1所示。
图1-1 VC集成环境的主菜单窗口2、VC环境下C程序的编辑、连接和运行(1)新建一个源程序①在VC环境中选择“文件”菜单,然后单击“新建”菜单项。
如图1-2所示图1-2 选择新建② 在弹出的新建对话框中设置好相应的内容,如图2-2所示。
要事先准备好保存文件的目录,例d:\lx 目录。
在图1-3中“文件”一栏的源程序文件的扩展名一定要输入C 语言程序的扩展名“.c ”。
设置好后,单击“OK ”,就回到了VC++的编辑界面,即将进行输入和编辑的源程序文件example.c 文件存放在D 盘的LX 目录下。
图1-3 新建对话框的设置③ 在图1-4的工作区中,输入源程序2.设置源程序的文件名,扩展名一定要为“.c ”且一定要输入扩展名1.单击该处3.设置存放目录图1-4 输入、编辑源程序④输入源程序文件后可在主菜单栏中选择“文件”(FILE),并在其下拉菜单中选择“保存”(SAVE),如图1-5所示。
图1-5 保存源程序⑤源程序的编译如图2-6所示,单击主菜单的“编译”(Build),在其下拉菜单中选择“编译example.c”(Compile example.c),或者单击工具栏上的“编译”按钮,如图1-6所示。
在单击“编译”后,屏幕上会出现一个如图1-7所示的对话框。
内容是“This build command requires an activeproject worksapce,Would you like to create a default project worksapce?”,要创建一个默认的项目工作区,单击“是(Yes)”,表示同意,将开始编译;单击“No ”,表示不同意,将取消编译。
python程序设计实训题目
当涉及到实训题目,有很多不同的选择,因为实训题目可以涉
及很多不同的主题和概念。
以下是一些可能的 Python 程序设计实
训题目:
1. 创建一个学生管理系统,其中可以添加、删除和查找学生信息,包括姓名、年龄和成绩。
2. 编写一个简单的计算器程序,可以执行加减乘除等基本运算。
3. 开发一个简单的待办事项应用,可以添加、删除和编辑待办
事项,并且可以按照日期进行排序。
4. 设计一个简单的电子商务网站后端,包括用户登录、商品展示、购物车管理等功能。
5. 编写一个简单的文本编辑器,可以打开、编辑和保存文本文件。
这些是仅供参考的一些可能的实训题目,具体的题目可以根据
课程要求和学生能力进行调整和定制。
希望这些题目可以帮助您开始思考您的实训课题。
实训二:显示数据列表1. 题目显示数据列表。
2. 目的(1)掌握流程控制语句的使用。
(2)掌握函数的使用。
(3)理解闭包的概念。
(4)应会设计基本的应用程序。
3. 内容在所设计的项目中,实现显示数据列表。
数据以表格的方式显示,不同的行显示不同的颜色。
当单击每行数据的标题时,将会弹出窗口,显示详细信息。
4. 要求(1)数据存放在数组中,用程序实现数据显示。
(2)以闭包的方式定义工具,窗口函数封装在工具中。
(3)通过循环生成数据行,用条件判断实现不同行显示不同的颜色。
代码示例:Number.prototype.NaN0=function(){return isNaN(this)?0:this;}function getPosition(e){var left=0;var top=0;while(e.offsetParent){left+=e.offsetLeft+(e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);top+=e.offsetTop+(e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);e=e.offsetParent;}left+=e.offsetLeft+(e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0); top+=e.offsetTop+(e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0); return{x:left,y:top};} $('table#thailand-qh tbody tr').each(function(){$('td:even',this).css('font-weight','bold');$('td:eq(0)',this).css({'text-align':'left','font-weight':'normal'});});$('table#thailand-qh tbody tr:odd').addClass('thailand-qh-tbody-tr-odd');$('table#thailand-qh tbody tr:even').addClass('thailand-qh-tbody-tr-even');}; function GetIframeInnerHtml(objIFrame){var iFrameHTML = "";if (objIFrame.contentDocument){// For NS6iFrameHTML = objIFrame.contentDocument.innerHTML;}else if (objIFrame.contentWindow){// For IE5.5 and IE6iFrameHTML = objIFrame.contentWindow.document.body.innerHTML;}else if (objIFrame.document){// For IE5iFrameHTML = objIFrame.document.body.innerHTML;}return iFrameHTML;}</script><iframe src="test.htm" id="frmIn" name="frmIn"></iframe><input type="button" value="click" onclick="alert(GetIframeInnerHtml(document.all.frmIn))">。
基础实训131. 求代数和设n 为正整数,求和nn s /12/114/13/12/1143/12/1132/1121±+-±+-+-++---+= 式中各项符号为二正一负,分母符号为一正一负。
正整数n 从键盘输入,输出和s 四舍五入精确到小数点后5位。
输入n=100 输出:输入n=2011 输出:// 求代数和#include <stdio.h>#include<math.h>void main(){ long j,n;double ts,s;printf(" 请输入n: ");scanf("%d",&n);j=0;ts=0;s=0;while(j<n){ j=j+1;if(j%2==0)ts=ts-(double)1/j; // ts 为各项的分母elsets=ts+(double)1/j;if(j%3==0)s=s-sqrt(j)/ts; // 求代数和selses=s+sqrt(j)/ts;}printf(" s=%.5f \n",s);}请输入n: 100 s=324.74013请输入n: 2011 s=28924.48725变通:设2<n ≤2011,当n 为何值时,和s 最接近2011?2. 幂积序列设x,y为非负整数,试计算集合x⋅=y≥xM y,0}0{≥|32的元素不大于指定整数n的个数k,并求这些元素从小到大排序的第m项f。
输入n,m, 输出k,f。
n=10000,m=50 输出:n=10000000,m=100 输出:幂积序列复杂在“积”字上,即幂积序列的项既可以是2的幂,3的幂,也可以是这双幂的乘积。
我们应用枚举求解。
(1)设计要点集合元素由2的幂与3的幂及其乘积组成,设元素从小到大排序的第k项为f(k)。
显然,f(1)=1,f(2)=2。
设置a循环,a从3开始递增1至n,对每一个a(赋值给j),逐次试用2试商,然后逐次试用3试商。
一、参考题目及选题(1)学生信息管理系统设计问题描述:学生信息包括:学号, 姓名, 年龄, 性别, 出生年月, 政治面貌, 籍贯, 家庭住址, 电话, E-mail等。
试设计一学生信息管理系统, 使之能提供以下功能:(1)系统以菜单方式工作(2)学生信息录入功能(学生信息用文件保存)(3)学生信息浏览功能(4)学生信息排序、查询功能对信息进行排序, 可以按学号, 按姓名, 按性别, 按出生年月日, 按籍贯进行查询(5)信息统计a) 可以按性别, 按出生年, 按籍贯统计学生人数b) 可以按班级统计学生人数c) 可以按政治面貌统计学生人数按班级统计学生党员人数, 团员人数, 以及所占比例, 设计并输出统计报表。
(6)学生信息的删除与修改●设计要求:●界面比较美观;有一定的容错能力, 比如输入的成绩不在0~100之间, 就提示不合法, 要求重新输入;●最好用链表的方式实现。
算法分析:首先, 一个学生包括这么多的属性, 应该考虑定义一个结构, 其次, 我们应该考虑数据的存储形式:是定义一个数组来存储, 还是定义一个链表呢?在这里假如我们以数组的方式来存储, 当然可以, 但是我们知道, 假如我们定义一个数组的话, 我们首先必须知道学生人数大概是多少, 以便我们确定数组的大小, 但是题目中没有给出, 而且题目要求中有大量的删除、插入操作, 所以用链表的方式比较方便。
对于菜单的实现, 其实也比较简单, 首先我们用printf语句把程序的功能列出来, 然后等待用户输入而执行不同的函数, 执行完了一个功能后又回到菜单。
文件的读写操作大家参照书中的有关文件的章节。
(2)、学生综合测评系统每个学生的信息为: 学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。
考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%, 10%, 10%, 20%。
程序设计基础实训手册西安电子科技大学软件学院程序设计课程组2010年9月程序设计基础实训手册 .............................................................................. 错误!未定义书签。
前言............................................................................................................ 错误!未定义书签。
程序设计基础实训单元实验 .................................................................... 错误!未定义书签。
单元实验题目一 .................................................................................. 错误!未定义书签。
实验目的:熟悉C语言的文件操作.......................................... 错误!未定义书签。
单元实验题目二 .................................................................................. 错误!未定义书签。
实验目的:掌握常用的排序算法 .............................................. 错误!未定义书签。
单元实验题目三 .................................................................................. 错误!未定义书签。
实验目的:掌握栈和队列的基本结构及应用 .......................... 错误!未定义书签。
单元实验题目四 .................................................................................. 错误!未定义书签。
实验目的:掌握图的基本存储结构及图的遍历运算 .............. 错误!未定义书签。
单元实验题目五 .................................................................................. 错误!未定义书签。
实验目的:掌握图的最小生成树求解方法 .............................. 错误!未定义书签。
单元实验题目六 .................................................................................. 错误!未定义书签。
实验目的:掌握图的最短路径求解方法 .................................. 错误!未定义书签。
程序设计基础实训综合实验 .................................................................... 错误!未定义书签。
题目一图书管理信息系统的设计与实现 .................................. 错误!未定义书签。
题目二简单文本编辑器实现 ...................................................... 错误!未定义书签。
题目三五子棋游戏的设计与实现 .............................................. 错误!未定义书签。
题目四全国交通咨询模拟 .......................................................... 错误!未定义书签。
题目五订票系统 .......................................................................... 错误!未定义书签。
题目六年级成绩管理系统 .......................................................... 错误!未定义书签。
附录1单元实验报告模板 .......................................................................... 错误!未定义书签。
附录2综合实验报告模板 .......................................................................... 错误!未定义书签。
2第3页共19页前言1. 程序设计基础实训的教学目的和要求程序设计基础实践是完成C程序设计和数据结构课程的理论和实验后,需要进行的一个程序设计实践训练。
目的是巩固和提高同学们的程序设计能力。
要求同学们认真完成实验要求,并提交实验报告。
目前的实验内容分为单元实验和综合实验两部分,具体要求如下:(1)单元实验要求每个学生独立完成。
单元实验共需提交4份实验报告,其中单元实验一和二中选择一题书写并提交报告,实验三~六中选择三题书写并提交实验报告,报告模板见附录I。
(2)综合实验分组实施。
从综合实验题目选择一题,由小组成员分工合作完成问题的分析、设计、编程调试及实验报告的书写,报告模板见附录II。
2. 实验前的准备工作回顾并复习实验中涉及的相关内容,上机实验前完成程序的设计工作,准备好调试和运行时所需的测试数据,包括各类输入数据及正确的输出数据。
3. 关于实验报告的说明(1)按照附录中的模板书写实验报告;(2)报告主体只有程序清单的实验报告以不及格报告评分并登记成绩;(3)认定为内容雷同的实验报告(包括内容完全相同、个别句子作少量修改等情况),以不及格报告评分并登记成绩。
程序设计基础实训单元实验单元实验一实验目的:熟悉C语言的文件操作【问题描述】需要长期保存的数据可以文件方式存储在外存上,C语言提供了一组文件操作函数:fopen、fclose、fgets、fputs、fgetc、fputc、fscanf、fprintf、fread、fwrite、rewind、fseek、feof等,应了解这些函数的用法并加以应用。
【基本要求】1. 用随机函数产生1000个整数,保存在文件(intfile.dat)中,然后将文件中的数据读取出来显示。
(1)用fprintf函数写入数据,要注意整数之间需要有分隔符号,所有数据写入后关闭文件;(%d\t)(2)重新打开文件,用fscanf函数逐个读取并显示数据;(3)用fseek函数对文件指针进行定位,仅读取需要的数据。
例如,分别将文件指针定位到第5个整数、第10个整数,读取这两个整数并显示;分别将文件指针定位到倒数第5个整数、倒数第10个整数,读取这两个整数并显示。
2. 建立一个由5名学生信息组成的文件(studinfo.dat),其中,每个学生都有学号、姓名、性别和三门课程的成绩。
(1)用结构体类型描述学生的基本信息,其中:学号和姓名用字符串表示,其长度定义参照本校的情况,课程名自行定义,成绩采用百分制;(2)学生信息由键盘输入,先存入结构体变量;(3)用fwrite函数将结构体变量的值写入文件studinfo.dat;(4)用fread函数从文件studinfo.dat中读取数据并按一定格式显示在屏幕上(例如,每行显示一个学生信息,各项信息之间要有一定的间隔,所有学生的所有信息对齐显示等)【测试数据】用随机函数或自行输入数据进行测试。
4第5页 共19页单元实验二实验目的:掌握常用的排序算法【问题描述】简单排序算法主要包括冒泡排序、简单选择排序和直接插入排序,它们都是时间复杂度为)(2n O 的排序方法,需要熟练掌握。
快速排序算法是由C.A.R. Hoare 在1961年发明的一种内排序算法。
一般来说,快速排序算法要显著的快于其他的)log (n n O 算法,其最坏情况发生的概率也可以通过改进设计(三者取中选取枢轴元素、分区较小时改用直接插入排序等)尽量减小。
堆排序算法( Heap Sort )是由斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W .Floyd ,1991年计算机先驱奖获得者)和威廉姆斯(J .Williams)在1964年共同发明。
堆排序是一树形选择排序。
其特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系(参见二叉树的顺序存储结构),在当前无序区中选择关键字最大(或最小)的记录。
堆排序的时间,主要由建立初始]堆和反复重建堆这两部分的时间开销构成,其最坏时间复杂度为)log (n n O ,其平均性能较接近于最坏性能。
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
归并排序算法是建立在归并操作上的一种有效的排序算法。
该算法是采用分治法(Divide and Conquer )的一个非常典型的应用。
归并(Merge )排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。
然后再把有序子序列合并为整体有序序列。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
若将两个有序表合并成一个有序表,称为2-路归并。
【基本要求】1. 用随机函数产生1000个整数,保存在文件(intfile.dat )中,然后将文件的前300个整数读入数组A ,接下来的400个整数读入数组B ,最后的300个整数读入数组C ,用简单排序算法中的冒泡法对数组A 、简单选择排序方法对数组B 和直接插入排序方法对数组C 中的元素分别排序并输出排序结果到文件;2.将问题1中所有1000个整数读入数组A ,用快速排序算法、堆排序算法和归并排序算法对数组A 中的元素排序并输出排序结果到文件;【选做要求】1. 产生两个已经排序的整数数据文件,将两个文件的数据归并成一个有序序列存入文件保存。
2. 选用任意一种排序算法,对单元实验一所产生的学生信息文件studinfo.dat ,读取其中的所有学生信息:3.(1)按学号排序输出学生信息;4.(2)按姓名排序输出学生信息;5.(3)按三门课程的平均分从高到低排序输出学生信息(除了学生基本信息外,还要输出每个学生的平均成绩),最后再加一行输出信息:每门课程的平均成绩。