实验五代码

合集下载

实验五WinCE中的驱动程序开发

实验五WinCE中的驱动程序开发

WinCE中的驱动程序开发一.实验目的1、熟悉WinCE中流式接口驱动程序的12个接口的功能。

2、掌握流式驱动程序的工作过程。

3、能够编写出流式接口的驱动程序。

二.实验内容使用VS2005的智能设备应用程序开发方法,进行网络通信的编程,并通信多线程技术实现服务器与客户端之间的文件传输。

三.实验设备及工具硬件:PC机一台;软件:Windows XP操作系统,VS2005开发环境,WinCE 6.0开发环境,或Windows Mobile 5.0 SDK四.实验步骤及说明(1)写出流式接口驱动程序的12个接口,及每个接口的功能。

答:见教材515页(2)写出流式驱动程序的工作过程。

答:第一步:加载驱动程序,主要有两种加载方式:(1)当系统启动时,设备管理器搜寻注册表的HKEY_LOCAL_MACHINE\Drivers\BuiltIn键下面的子键,并逐一加载该子键下的每一个驱动,此过程称为BusEnum;(2)应用程序可调用ActivateDeviceEx()函数动态地加载驱动程序。

第二步:设备管理器从注册表的dll键值中获取驱动程序所在的DLL文件名。

第三步:设备管理器调用LoadDriver()函数把该DLL加载到自己的虚拟地址空间中。

第四步:设备管理器在注册表的HKEY_LOCAL_MACHINE\Drivers\Active下,记录所有已经加载的驱动程序。

第五步:设备管理器调用驱动程序中的COM_Init函数,并把上一步中添加的注册表项的完整路径作为COM_Init函数的第1个参数传入驱动程序内。

第六步:在COM_Init中,通常须对硬件进行一些最基本的初始化操作。

通过以上的操作完成流式驱动程序的加载任务。

对驱动程序的操作:第一步:应用程序使用该设备。

首先,应用程序调用CreateFile(TEXT(“COM1”)….)打开设备。

然后,文件系统判断打开的是文件还是设备。

最后,如果打开的是设备,就将控制权交回设备管理器。

存储过程和触发器(数据库实验5)

存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。

2 实验平台:操作系统:Windows xp。

实验环境:SQL Server 2000以上版本。

3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。

1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。

存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。

存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。

'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。

如果没有该专业,则显示“无此专业”。

存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。

实验五-7段数码显示译码器设计

实验五-7段数码显示译码器设计

实验五7段数码显示译码器设计实验报告一、实验要求1、GW48实验箱2、写出7段数码显示译码器程序3、总结实验步骤和实验结果二、实验内容1、说明例中各语句的含义,以及该例的整体功能。

在max+plus2或quartus2上对以下该例进行编辑、编译、综合、适配仿真,给出其所有信号的时序仿真波形。

module zdw(in,out);output [6:0]out;input [3:0]in;reg[6:0]out;always@(in)begincase(in)4'd0: out=7'b1111110;4'd1: out=7'b0110000;4'd2: out=7'b1101101;4'd3: out=7'b1111001;4'd4: out=7'b0110011;4'd5: out=7'b1011011;4'd6: out=7'b1011111;4'd7: out=7'b1110000;4'd8: out=7'b1111111;4'd9: out=7'b1111011;4'd10: out=7'b1110111;4'd11: out=7'b0011111;4'd12: out=7'b1001110;4'd13: out=7'b0111101;4'd14: out=7'b1001111;4'd15: out=7'b1000111;default: out=7'bx;endcaseendendmodule2、引脚锁定以及硬件下载测试。

建议选实验电路模式6,用数码8显示译码输出(PIO46—PIO40)。

键8,键7,键6,键5四位控制输入,硬件验证译码器的工作性能。

python程序设计实验报告五:循环结构程序设计(综合性实验)

python程序设计实验报告五:循环结构程序设计(综合性实验)

python程序设计实验报告五:循环结构程序设计(综合性实验)安徽⼯程⼤学Python程序设计实验报告班级物流192 姓名张⽻学号 3190505221 成绩⽇期 2020.4.23 指导⽼师修宇实验五综合运⽤三种基本结构进⾏程序设计(综合性实验)(⼆学时)【实验⽬的】(1)进⼀步掌握选择与循环结构程序设计的⽅法和技巧;(2)综合运⽤三种基本结构进⾏程序设计;【实验条件】PC机或者远程编程环境【实验内容】1、完成三个编程题。

(1)计算并输出指定范围内的素数素数⼜称质数。

指整数在⼀个⼤于1的⾃然数中,除了1和此整数⾃⾝外,没法被其他⾃然数整除的数。

换句话说,只有两个正因数(1和⾃⼰)的⾃然数即为素数。

⽐1⼤但不是素数的数称为合数。

1和0既⾮素数也⾮合数。

素数在数论中有着很重要的作⽤。

2300多年前,古希腊数学家欧⼏⾥得在《⼏何原本》⼀书中证明了素数有⽆穷多个,如2、3、5、7、11等等。

问题描述:编程实现输出指定范围内的素数,输⼊以逗号间隔,输出以空格间隔。

指定范围由⽤户输⼊指定。

(2)九九乘法表问题描述:请按照如下格式设计⼀个“九九乘法⼝诀表”,并打印出来。

编程要点及提⽰:1. 使⽤for循环或者while循环实现以上功能2. 代码量不超过10⾏3. 在⼀⾏中,每个等式之间使⽤制表符"\t"进⾏分隔;对于每⼀⾏等式之间使⽤print()打印空字符实现,即print("")(3)统计不同字符个数问题描述:⽤户从键盘输⼊⼀⾏字符。

请编写⼀个程序,统计并输出其中英⽂字符、数字符号、空格和其他字符的个数。

输⼊格式:输⼊⼀⾏字符输出:按照顺序输出字母,数字,空格,及其他字符的个数,个数以空格分隔如:【实验记录与分析】(请在填写实验记录与分析结果)1.计算并输出指定范围内的素数输⼊代码,输出结果及分析如下:易错点:1.程序⽆法同时处理两个输⼊数据,在输⼊未处理时。

2.本题中的else语句不能和第⼆个的if对齐。

实验五 交通灯、跑马灯轮换实验

实验五  交通灯、跑马灯轮换实验

实验五交通灯、跑马灯轮换实验
一、实验要求
1.以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),
模拟交通灯管理。

2.以K1为切换输入口,控制双色LED灯在交通灯、跑马灯两种状态切换。

二、实验目的
1.学习使用定时计数器进行定时中断控制的方法。

2.学习使用外部中断控制数据输出的设计方法。

3.进一步巩固中断程序的设计技巧。

4.掌握数据表的设计方法。

三、实验电路及连线
接线说明:K1接P3.2;PO0~PO3接DG1~DG4;
PO4~PO7接DR1~DR4。

/CS接8300H
四、实验说明
1.本实验涉及到交通灯控制和跑马灯控制两种状态。

交通灯的变化规律可以参考实验
四之描述。

跑马灯规律如下:四个双色LED灯在任意一时刻,只有两个灯亮,颜
色自定。

在跑马灯的运行中,按照顺时针的方向依次点亮相邻的两个双色LED灯,经过四次变化,跑马灯跑完一圈。

2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。

当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正
端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。

3.实验进行时,首先是跑马灯状态,在任意时刻,拨动一次KEY1键(自定中断触
发方式),由跑马灯状态切换为交通灯状态;任意时刻拨动一次KEY1键,又由交
通灯状态切换为跑马灯状态。

如此循环。

4.实验要求:程序必须用到定时计数器中断和外部中断。

五、实验框图
六、实验代码
七、实验数据
八、实验小结。

实验五单片机音乐中音调和节拍的确定方法

实验五单片机音乐中音调和节拍的确定方法

调号-音乐上指用‎以确定乐曲‎主音高度的‎符号。

很明显一个‎八度就有1‎2个半音。

A、B、C、D、E、F、G。

经过声学家‎的研究,全世界都用‎这些字母来‎表示固定的‎音高。

比如,A这个音,标准的音高‎为每秒钟振‎动440周‎。

升C调:1=#C,也就是降D‎调:1=BD;277(频率)升D调:1=#D,也就是降E‎调:1=BE;311升F调:1=#F,也就是降G‎调:1=BG;369升G调:1=#G,也就是降A‎调:1=BA;415升A调:1=#A,也就是降B‎调:1=BB。

466,C 262 #C277D 294 #D(bE)311E 330F 349 #F369G 392 #G415A 440. #A466B 494所谓1=A,就是说,这首歌曲的‎“导”要唱得同A‎一样高,人们也把这‎首歌曲叫做‎A调歌曲,或叫“唱A调”。

1=C,就是说,这首歌曲的‎“导”要唱得同C‎一样高,或者说“这歌曲唱C‎调”。

同样是“导”,不同的调唱‎起来的高低‎是不一样的‎。

各调的对应‎的标准频率‎为:单片机演奏‎音乐时音调‎和节拍的确‎定方法经常看到一‎些刚学单片‎机的朋友对‎单片机演奏‎音乐比较有‎兴趣,本人也曾是‎这样。

在此,本人将就这‎方面的知识‎做一些简介‎,但愿能对单‎片机演奏音‎乐比较有兴‎趣而又不知‎其解的朋友‎能有所启迪‎。

一般说来,单片机演奏‎音乐基本都‎是单音频率‎,它不包含相‎应幅度的谐‎波频率,也就是说不‎能象电子琴‎那样能奏出‎多种音色的‎声音。

因此单片机‎奏乐只需弄‎清楚两个概‎念即可,也就是“音调”和“节拍”。

音调表示一‎个音符唱多‎高的频率,节拍表示一‎个音符唱多‎长的时间。

在音乐中所‎谓“音调”,其实就是我‎们常说的“音高”。

在音乐中常‎把中央C 上‎方的A音定‎为标准音高‎,其频率f=440Hz‎。

当两个声音‎信号的频率‎相差一倍时‎,也即f2=2f1时,则称f2比‎f1高一个‎倍频程, 在音乐中1‎(do)与.1,2(来)与.2……正好相差一‎个倍频程,在音乐学中‎称它相差一‎个八度音。

拉格朗日插值、牛顿插值的matlab代码

实验五多项式插值逼近信息与计算科学金融崔振威201002034031一、实验目的:拉格朗日插值和牛顿插值的数值实现二、实验内容:p171.1、p178.1、龙格现象数值实现三、实验要求:1、根据所给题目构造相应的插值多项式,2、编程实现两类插值多项式的计算3、试分析多项式插值造成龙格现象的原因主程序1、拉格朗日function [c,l]=lagran(x,y)%c为多项式函数输出的系数%l为矩阵的系数多项式%x为横坐标上的坐标向量%y为纵坐标上的坐标向量w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1v=1;for j=1:n+1if k~=jv=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算endendl(k,:)=v;endc=y*l;牛顿插值多项式主程序function [p2,z]=newTon(x,y,t)%输入参数中x,y为元素个数相等的向量%t为插入的定点%p2为所求得的牛顿插值多项式%z为利用多项式所得的t的函数值。

n=length(x);chaS(1)=y(1);for i=2:nx1=x;y1=y;x1(i+1:n)=[];y1(i+1:n)=[];n1=length(x1);s1=0;for j=1:n1t1=1;for k=1:n1if k==j %如果相等则跳出循环continue;elset1=t1*(x1(j)-x1(k));endends1=s1+y1(j)/t1;endchaS(i)=s1;endb(1,:)=[zeros(1,n-1) chaS(1)];cl=cell(1,n-1); %cell定义了一个矩阵for i=2:nu1=1;for j=1:i-1u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法cl{i-1}=u1;endcl{i-1}=chaS(i)*cl{i-1};b(i,:)=[zeros(1,n-i),cl{i-1}];endp2=b(1,:);for j=2:np2=p2+b(j,:);endif length(t)==1rm=0;for i=1:nrm=rm+p2(i)*t^(n-i);endz=rm;elsek1=length(t);rm=zeros(1,k1);for j=1:k1for i=1:nrm(j)=rm(j)+p2(i)*t(j)^(n-i);endz=rm;endendplot(t,z,'y',x,y,'*r') %输出牛顿插值多项式的函数图p171.1(a)、f(x)=e x解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[exp(0) exp(0.2) exp(0.4) exp(0.6) exp(0.8) exp(1)]y =1.0000 1.2214 1.4918 1.82212.2255 2.7183>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0139 0.0349 0.1704 0.4991 1.0001 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0139 a1=0.0349 a2=0.1704 a3=0.4991 a4=1.0001 a5=1.0000(b)、f(x)=sin(x)解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[sin(0) sin(0.2) sin(0.4) sin(0.6) sin(0.8) sin(1)];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0073 0.0016 -0.1676 0.0002 1.0000 0l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0073 a1=0.0016 a2=-0.1676 a3=0.0002 a4=1.0000 a5=0(c)、f(x)=(x+1)x+1解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[1 1.2^1.2 1.4^1.4 1.6^1.6 1.8^1.8 2^2];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.3945 -0.0717 0.7304 0.9415 1.0052 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.3945 a1=-0.0717 a2=0.7304 a3=0.9415 a4=1.0052 a5=1.0000P178.12、a0=5 a1=-2 a2=0.5 a3=-0.1 a4=0.003x0=0 x1=1 x2=2 x3=3 c=2.5解:在matlab窗口中输入:>> x=[5 -2 0.5 -0.1];>> y=[0 1 2 3];>> t=0:0.1:2.5;>> [u,v]=newTon(x,y,t)可得出输出结果:u =0.1896 -0.7843 -1.3928 2.8688v =2.8688 2.7218 2.5603 2.3855 2.1983 2.0000 1.7917 1.5745 1.3497 1.1182 0.8813 0.6401 0.3957 0.1493 -0.0980 -0.3451 -0.5908 -0.8340 -1.0735 -1.3082 -1.5370 -1.7588 -1.9723 -2.1765 -2.3702 -2.5523由此可以求出牛顿多项式为:f(x)=0.1896x^3--0.7843^x2--1.3928x+2.8688输出的图为:结果分析:利用牛顿插值多项式的函数,通过调用函数可以求得牛顿多项式与给定的点的值,并通过matlab做出函数图像。

实验五+MATLAB数值计算(含实验报告)

实验五 MATLAB 数值计算一、实验目的1.掌握求数值导数和数值积分的方法。

2.掌握代数方程数值求解的方法。

3.掌握常微分方程数值求解的方法。

二、实验的设备及条件计算机一台(带有MATLAB7.0以上的软件环境)。

设计提示1.参考本节主要内容,学习并理解相关函数的含义及调用方法。

三、实验内容1.线性系统方程:分别使用左除(\)和求逆(inv )求解下面系统方程的解:⎪⎩⎪⎨⎧=+=+=++377251463c b b a c b a2. 数值积分:使用quad 和trapz 求解⎰-503/dx xe x 的数值积分,并与其解析解9243/5+--e 相比较;3. 请完成教材P154页中实验指导环节的实验内容第2题4. 请完成教材P155页中思考练习的第3题(1),并绘制解在该求解区间(即[0,5])上的图像;。

5、请完成教材P164页实验指导环节的实验内容第5题。

(提示:该函数的符号导数,可以通过函数diff 求得。

首先定义符号变表达式,如求sin(x)的一阶符号导数,可以先定义f=’sin(x)’;df=diff(f);可求得df=cos(x)。

其中df 即为函数f 的一阶符号导数)。

四、实验报告要求(包含预习报告要求和最终报告要求)1.实验名称2.实验目的3.实验设备及条件4.实验内容及要求5.实验程序设计指程序代码。

6.实验结果及结果分析实验结果要求必须客观,现象。

结果分析是对实验结果的理论评判。

7.实验中出现的问题及解决方法8. 思考题的回答五、实验报告的提交方式Word文档,命名方式:实验号_你的学号_姓名例如本次实验:实验一_000000001_张三.doc(信息101提交报告邮箱):E_mail: *******************(网络工程101提交作业邮箱):E_mail: *******************(注意网络班的M是大写的)下一次课前提交,过期不收!六、参考文献参考教材和Matlab帮助文件。

实验五 串

实验五串1.实验目的(1)理解串的概念(2)理解串存储结构概念和特点(3)掌握串存储结构的建立、插入、删除、查询和输出等基本操作的算法(4)能够根据实际应用的情况,综合考虑求解算法的时间复杂度和空间复杂度,2.实验内容及要求所需学时数:2(1)串数据结构的定义(2)串基本操作算法的实现(3)设计主函数调用这两种结构3.实验步骤串的实现本代码由3个源文件组成:“SeqSstringHeader.h”,“SeqSstringOprt.cpp”,“Main.cpp”Step.1 建立SeqSstring工程打开“Microsoft Visual C++ 6.0”,点击“文件”菜单,选择“新建”,单击“工程”选项卡,选择“Win32 Console Application”,在“工程名称”文本框中输入“SeqSstring”,单击“确定”,选择“一个空工程”,单击“完成”。

在已建立好的工程项目中,单击左侧“工作空间”中的“FileView”选项卡,此时可以看见三个空的文件夹:“Header Files”、“Source Files”、“Resource Files”。

Step.2 建立头文件“SeqSstring Header.h”点击“文件”菜单,选择“新建”,单击“文件”选项卡,选择“C/C++ Header File”,在“文件名”文本框中输入“SeqSstringHeader”,单击“确定”。

此时,可以在左侧“FileView”的“Header Files”文件夹中看到新建好的头文件“SeqSstringHeader.h”。

在“SeqSstringHeader.h”的代码编辑窗口中输入:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXLEN 100typedef struct /*串结构定义*/{char ch[MAXLEN];int len;}SString;void createstring(SString *s); // 创建字符串void output(SString *s); // 显示字符串int StrInsert(SString *s, int pos, SString t); // 插入字符int StrDelete(SString *s, int pos, int len); // 删除字符void StrCopy(SString *s, SString t); // 字符串复制int StrEmpty(SString s); // 判断字符串是否为空int StrCompare(SString s, SString t); // 判断字符串是否相等int StrLength(SString s); // 计算字符串长度void StrClear(SString *s); // 置空串int StrCat(SString *s, SString t); // 连接字符串int SubString(SString *sub, SString s, int pos, int len); // 字符串复制高级int StrIndex(SString s,int pos, SString t); // 模式匹配Step.3 建立源文件“SeqSstringOprt.cpp”点击“文件”菜单,选择“新建”,单击“文件”选项卡,选择“C/C++ Source File”,在“文件名”文本框中输入“SeqSstringOprt”,单击“确定”。

实验五 四位移位乘法器

实验五四位移位乘法器一、实验目的1. 学会用层次化设计方法进行逻辑设计;2. 设计一个八位乘法器。

二、实验原理1)乘法器工作原理:四位二进制乘法采用移位相加的方法。

即用乘数的各位数码, 从高位开始依次于被乘数相乘, 每相乘一次得到的积称为部分积, 将第一次得到的部分积左移一位并与第二次得到的部分积相加, 将加得的和左移一位再与第三次得到的部分积相加, 再将相加的结果左移一位与第四次得到的部分积相加,……直到所有的部分积都被加过一次。

最后的结果以十进制的形式通过三个数码管进行显示。

2)设计整体思路:主要分两大模块,乘法器模块和主模块。

第一步:乘法器通过一个function实现,该函数输出为八位二进制数的积;第二步:把八位二进制数转化为三位十进制数,分别为个位、十位、百位,由主模块实现。

第三步:依次选通三个数码管,让这三个数码管分别显示第二步中的个、十、百位,由主模块实现。

3)轮换显示工作原理:因为硬件对数码管的显示控制只有8个管口,所以同一时间只能控制一个数码管的显示。

我们利用视觉暂留的原理,采用一个时钟信号(除lhz以外均可)控制是三个数码管的依次轮换选通,可以达到三个数码管同时显示的视觉效果。

我们采用一个2位的二进制数的累加来选通数码管,同时让数码管显示个、时、百位。

三、思路流程图四、实验流程图注意:时钟clk 给1M Hz六、实验心得1、把八位二进制数转化为三位十进制数,分别为个位、十位、百位:result1=out/100; //求出百位 result3=out%10; //求出个位 result2=(out%100)/10; //求出十位 2、个位、十位、百位必须用三个变量来存储,不能用一个三位的变量来存储,因为要存储的是十进制数,而一个三位的变量中的某一位只能是0或者1,无法表示一个十进制数。

3、看了很多同学的代码后发现大家用了模块调用,在这里我没有用调用,用一个FOR 循环,实现了代码简单。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include #include using namespace std; const int m=4,n=4; void Matrix(int A[m][n]) { srand(time(0));

for (int i=0;i{ for(int j=0;jA[i][j]=10+rand()%90 ; }

for (int i=0;i{ for(int j=0;jcout

}

void TransposeMatrix(int A[m][n]) { int temp; for (int i=0;i{ for(int j=i;j{ temp=A[i][j]; A[i][j]=A[j][i]; A[j][i]=temp; }

} for (int i=0;i{ for(int j=0;jcout

} int Max(int A[m][n],int& row1,int& column1 ) { int max=0; for (int i=0;i{ for(int j=0;j{ if(max<=A[i][j]) { max=A[i][j]; row1=i,column1=j; } }

} cout <<"the max number is :"

int Min(int A[m][n],int &row1,int &column1){ int min=A[0][0]; for (int i=0;i{ for(int j=0;j{ if(min>=A[i][j]) { min=A[i][j]; row1=i,column1=j; } } } cout <<"the min number is :"

void main () { int A[4][4]; Matrix(A); int row1,column1; Max(A,row1,column1); Min(A, row1, column1); cout<<"the transpose of the Matrix is:"

} //=文件array.h =========================================================== ////array.h #ifndef ARRAY_H #define ARRAY_H //错误类型集合,共有三种类型的错误:数组大小错误、内存分配错误和下标越界 enum ErrorType { invalidArraySize, memoryAllocationError, indexOutOfRange };

class Array { public: Array(int sz = 50); //构造函数 Array(const Array& a); //复制构造函数 ~Array(); //析构函数 void setElement(int n, int value); //设置数组下标为n处元素的值为value int& getElement(int n); //取数组下标为n的元素的值 int arraySize() const; //返回数组大小 void resize(int sz); //动态改变数组的大小 private: int* alist; //int类型指针,用于存放动态分配的数组内存首地址 int size; //数组大小 void Error(ErrorType error,int badIndex=0) const; //错误处理函数 }; #endif

//array.cpp #include #include using namespace std; #include "array.h" //错误信息 string errorMsg[] = { "Invalid array size", "Memory allocation error", "indexOutOfRange" }; //错误处理函数 void Array::Error(ErrorType error, int badIndex) const { cout << errorMsg[error]; //根据错误类型,输出相应错误信息 if (error == indexOutOfRange) cout << badIndex; //如果是下标越界错误,输出错误的下标值 cout << endl;

exit(-1); } //构造函数 Array::Array(int sz) { alist=new int [sz]; size=sz; } //析构函数 Array::~Array() { cout<<"Deleting .."<

delete[]alist; }

//复制构造函数 Array::Array(const Array &a) {

alist= a.alist; size=a.size; } //设置数组下标为n处元素的值为value

void Array::setElement(int n, int value) {

alist[n]=value; }

//取数组下标为n的元素的值 int& Array::getElement(int n) {

return alist[n]; }

//返回数组大小 int Array::arraySize() const { return size;

} //将数组大小修改为sz void Array::resize(int sz) { if(sz <= 0) //检查是否sz<= 0 Error(invalidArraySize); if(sz == size) //如果size==sz,则退出本函数 return; int *newlist = new int[sz]; //申请新的数组内存 if(newlist == NULL) //内存申请是否成功? Error(memoryAllocationError); int n = (sz <= size) ? sz : size; int* srcptr = alist; //原数组首地址 int* destptr = newlist; //新数组首地址 while(n--) *destptr++ = *srcptr++; //复制数组元素 delete[] alist; //释放原数组所占内存 alist = newlist; //使alist指向新数组 size = sz; //更新 }

/main.cpp #include #include using namespace std; #include "array.h" int main() { Array a(10); srand(time(0)); for(int i = 0; i < 10; ++i) a.setElement(i, 1 + rand() % 9); cout << "数组大小:" << a.arraySize() << endl; cout << "数组a的元素值:"; for( int i = 0; i < a.arraySize(); ++i) cout << a.getElement(i) << " "; cout << endl; cout << "调整数组a的大小为原来的2倍: " << endl; a.resize( a.arraySize() * 2 ); cout << "调整大小后数组的大小: " << a.arraySize() << endl; cout << "用复制构造函数,用数组a初始化b" << endl; Array b(a); cout << "修改数组a的最后一个元素值为100。" << endl; a.setElement(a.arraySize()-1, 100); cout << "数组a的值: "; for(int i = 0; i < a.arraySize(); ++i) cout << a.getElement(i) << " "; cout << endl; cout << "数组b的元素值: "; for(int i = 0; i < b.arraySize(); ++i) cout << b.getElement(i) << " "; cout << endl; //错误处理测试 int i=a.getElement(a.arraySize()); cout

相关文档
最新文档