当前位置:文档之家› 实验4

实验4

实验4
实验4

现代光电子技术实验报告实验四光电探测器特性测量实验

专业:电子与通信工程

姓名:何超

学号:1405122310

组号: 4

一、实验目的

过一套“CCD芯片性能参数测试和评价仪器”,实现对CCD芯片内部性能参数的测试和评价。该仪器能够在温度可调(100~298K)的环境下,较宽的光谱范围(300~1100nm)内对CCD芯片进行测试和评价。

二、实验仪器

氙灯光源、单色仪、光纤准直镜、积分球、皮安计、电动位移台、暗室、计算机等。

三、实验原理

量子效率和非均匀性是CCD图像传感器的两个关键性能参数,对成像质量起到最为关键的影响作用:量子效率表征了光敏面对于辐射平均光子数的吸收和累积能力,量子效率的高低直接影响成像器件对入射光子的响应能力,是影响成像质量的第一要素;非均匀性指光敏面上不同位置的像元对相同光辐射响应的差异性,从定义角度出发,非均匀性对于成像质量的作用不言而喻,非均匀性越小的成像器件对拍摄景物的失真效果必然越小,图像还原程度越高。

一)量子效率

量子效率的测量是通过在一定曝光时间内,CCD成像平均灰度值和入射光子数之间存在的线性关系来完成的。成像过程即是一次光电转换的过程,假定转换为绝对线性过程,系统增益为K,而响应度R定义为在给定波长的入射光辐射下,信号电压与曝光量的比值,那么量子效率η即是响应度R与系统增益K的比值。实验中采用的测量标准即是利用图像平均灰度值与入射光辐射照度之间的线性关系,测量计算响应度R与系统增益K的比值得到量子效率η。

量子效率具体测量方法如下:

(1)将待测CCD芯片和标准探测器,以及它们各自的驱动电路放置在暗室中,并调节测量系统各部分仪器的参数。

(2)通过上位机程序控制待测CCD芯片电子快门,调整CCD芯片的积分时间来控制CCD芯片的曝光时间和曝光量。

(3)根据实际测量条件需求和待测CCD芯片的响应波长范围,设定测量波长宽度为10nm、扫描波长范围400nm-780nm、扫描波长的间隔20nm。设置

起始波长为400nm ,是由可见光CCD 芯片响应曲线决定;截止波长为780nm ,可以保证测量波长范围覆盖整个可见光波段。从起始波长400nm 开始,间隔20nm 进行一次波长采样,直到波长达到780nm 为止,得到一系列波长值,以这些波长值作为参数,控制可调单色光源系统产生相应波长的单色光。

(4) 每设置一次单色光波长,通过待测CCD 芯片拍摄两组图像,每组拍摄的图像张数为16,其中,拍摄第一组图像时选取的积分时间需要使待测CCD 芯片达到50%以上的曝光量,所得的这一组图像称之为亮图像;同理,拍摄第二组图像时,使用与拍摄第一组图像相同的积分时间,实际实验操作时曝光时间设置为50ms ,但此时需要完全避光,所得的这一组图像称之为暗图像,将拍摄得到的亮暗图像由通信电路上传到主控计算机以备参数计算使用。

(5) 从第一组亮图像和第二组暗图像中分别抽取首尾两张亮图像和两张暗图像。

(6) 利用抽取的图像计算待测CCD 芯片及其驱动电路的系统增益: 6a)从两张亮图像和两张暗图像中各选取一张,分别计算选取的亮图像和暗图像的平均灰度值1y μ和2y μ:

[][]11

1

1100

y M N y m n m n MN

μ--===∑∑ (1)

[][]2211100

y M N y m n m n MN μ--=

==∑∑ (2) 其中,1y 、2y 分别代表选取的亮图像和暗图像,M 、N 分别为拍摄图像的行像素数和列像素数,这两个尺寸可以从待测CCD 芯片的产品手册中得到或者从图像信息中识别出来;

6b)使用抽取的两张亮图像计算亮图像方差12

y σ:

[][][][]()1

2

21

1100

2A B y M N y m n y m n m n MN σ--=-==∑∑ (3) 其中,A y 、B

y 分别代表抽取的亮图像中的第一张和第二张; 6c)同理,类似于6b ),使用抽取的两张暗图像计算暗图像方差22

y σ:

[][][][]()2

C D 22111002y M N y m n y m n m n MN σ--=-==∑∑ (4)

其中,C y 、D

y 分别代表抽取的暗图像中的第一张和第二张; 6d)根据以上计算得到的参数计算系统增益:

1

2

1

2

22y y

y y

K σσμμ-=- (5)

(7) 利用步骤(5)中抽取的四张图像计算CCD 芯片的响应度R :

1

2p

y y

y

R μμμ-=

(6) 其中,exp

p

y AEt hc μλ

=

为待测CCD 芯片单个像素点的平均光子数,A 为待测

CCD 芯片单个像素点的面积,E 为照射到待测CCD 芯片上的单色均匀光功率,由标准探测器输出的光电流计算得出。exp t 为拍摄亮图像时所使用的积分时间,λ为拍摄抽取亮图像时照射到待测CCD 芯片上的单色光波长,h 为普朗克常数,c 为光速。

(8) 由系统增益K 和响应度R 最终求得待测CCD 芯片的量子效率:

()R K

ηλ=

二)非均匀性

CCD 芯片的暗信号非均匀性DSNU 是遮光时的全部有效像元的输出电压最大或者最小值与平均暗电流ADS 之差,它表征了CCD 芯片在未接受光照时自身暗信号响应输出的波动性;光子响应非均匀性PRNU 是取全部有效像元输出电压的最大最小值之比值,它表征了CCD 芯片在信号光照射下响应信号输出的波动性。两者综合考虑可以获得对CCD 芯片非均匀性参数的综合评价。

待测CCD 芯片的暗信号非均匀性DSNU 和光子响应非均匀性PRNU 的测量流程如下:

1) 将待测CCD 芯片及其驱动电路放置在暗室中,并调节测量系统各部分仪器的参数。

2) 通过上位机程序控制积分球出口光功率密度和待测CCD 芯片电子快门,

调整光源亮度和CCD 芯片的积分时间来控制CCD 芯片的曝光时间和曝光量。

3) 以待测CCD 芯片量子效率最大所对应的波长λ为参数,利用滤光片使其产生带宽10nm 的单色均匀光。根据选用CCD 芯片的响应度曲线,本实验中选用中心波长为500nm ,半波带宽10nm 的滤光片进行实验。

4) 调整积分球输出功率和CCD 电子快门速度,两者配合使CCD 芯片曝光量达到50%以上,考虑成像精度,对入射光拍摄16张亮图像,记为亮图像序列1y 。

5) 关闭快门,使用相同积分时间,拍摄16张暗图像,记为暗图像序列2y ; 6) 对亮图像序列1y 求其总的灰度平均值1μ和空间方差2

1s :

[][]111111

11100

N M y i j j i M N μ--=

==∑∑ (8) 2

1.2211y stack

m s s L

σ=-

(9)

其中,1y 是由亮图像序列1y 叠加取平均得到的图像,[][]1y i j 表示1y 图像的第i 行j 列的像素值,M1、N1分别为亮图像序列1y 中图像的行像素数和列像素数,

亮图像序列1y 的测量方差可以表示为:

[][]2

2111111111100m N M s y i j j i M N μ?

?--=- ?==??

∑∑ (10)

表示亮图像序列1y 的时域方差可以表示为:

[][]2

2

1.1111111100

y stack y N M i j j i M N σσ--=

==∑∑ (11)

亮图像序列1y 的方差矩阵为:

[][][][][][][][]2

1

111111001y L L i j y l i j y l i j l l L L σ??--=- ? ?==-??

∑∑ (12) 其中,[][][]1y l i j 表示亮图像序列1y 中第l 张图像的第i 行j 列的像素值,L 表示亮图像序列1y 总的图像张数,本实验根据CCD 成像精度取L=16;

7) 同理,根据步骤6),暗图像序列2y 总的灰度平均值2μ和空间方差2

2s 分

别为:

[][]222211

12200

N M y i j j i M N μ--=

==∑∑ (13)

222222'

y stack

m

s s

L σ-=-

(14)

其中,2y 是由暗图像序列2y 叠加取平均得到的图像,[][]2y i j 表示2y 图像的第i 行j 列的像素值,M2、N2分别为图像序列2y 中图像的行像素数和列像素数;

暗图像序列2y 的测量方差可以表示为:

[][]2

222

222

1112020m

N M s y i j j i M N μ??--=- ?==??∑∑ (15)

暗图像序列2y 的时域方差可以表示为:

[][]22

2

2.2211100

22y stack y N M i j j i M N σσ--=

==∑∑ (16) 暗图像序列2y 的方差矩阵为:

[][][][][][][][]2

2

111122001y L L i j y l i j y l i j l l L L σ??

''--=- ? ?==''-?

?

∑∑ (17)

其中,[][][]2y l i j 表示暗图像序列2y 中第l 张图像第i 行j 列的像素值,表示暗图像序列2y 总的图像张数,本实验根据CCD 成像精度取L=16;

8) 根据亮图像序列和暗图像序列的总灰度平均值、和空间方差、,可以计算出待测CCD 芯片的暗信号非均匀性DSNU 和光子响应非均匀性PRNU 为:

2

2

s DSNU K = (18)

22

12

12s s PRNU μμ-=-

(19)

其中,为前面计算出的系统增益。

四、实验过程

第一步:系统准备。

在实验开始前,用户首先应该确定各器件连接正常,包括驱动电源部分的供电,待测件与驱动电源之间的连接,待测件与上位机之间的USB连接(USB数据线直接与电脑相连接,确保连接正常)。并确保光束能垂直入射到CCD平面上。第二步:系统上电。

打开驱动电源的开关,如果供电正常则驱动电源上的指示灯点亮。此时驱动电路完成初始化并配置产生对应CCD芯片的驱动时序,将CCD芯片产生的模拟信号通过模数转换芯片转换成数字信号以供上传。

第三步:参数设置。

打开上位机软件,系统处于就绪等待状态,可以通过软件的菜单设置包括亮图像采集标志、片上增益K、入射波长的大小、入射波长范围分辨率以及标准探测器的入射光功率、曝光时间、修改增益参数等。参数设置确认后,系统进入采集阶段。

第四步:CCD性能参数计算设置参数。

取消勾选亮图像采集标志,点击操作选项中量子效率按钮,即可采集暗图像,暗图像采集完毕后再次点击参数设置,勾选亮图像采集标志,然后点击量子效率按钮,即可采集亮图像并完成量子效率的计算。非均匀性测试过程与量子效率相似,先采集暗图像计算相应参数,然后采集亮图像计算相应参数,并得出非均匀性参数。

五、实验结果及分析

一)实验数据记录:

λ(nm)标准件电

流A(uA)转换后功率值

(uW)

量子效率DSN

U

PRN

U

300 0.1130 0.9187 0.005218 320 0.1128 0.94 0.004942 340 0.1171 1.0095 0.012958

360 0.8260 7.5779 0.838309 380 1.638 13 0.621198 400 2.295 14.7115 0.576879 420 2.885 16.2079 0.491103 440 3.155 15.6188 0.3083 460 4.056 17.9469 0.414117 480 4.433 17.8032 0.393694 500 4.164 15.25 0.347663 520 4.254 14.323 0.448012 540 4.232 13.184 0.470842 560 4.211 12.241 0.479443 580 4.103 11.210 0.506919 600 3.847 9.941 0.535463 620 3.829 9.431 0.537072 640 3.319 7.773 0.616091 660 3.028 6.774 0.663667 680 2.913 6.278 0.665583 700 2.389 4.9667 0.731645 720 3.561 7.1649 0.547071 740 3.189 6.2461 0.557515 760 2.526 4.7932 0.559209

780 1.603 2.9685 0.489813 800 1.722 3.1196 0.415281

二)实验数据分析

量子效率-波长函数曲线图

光子响应非均匀性PRNU函数曲线图

暗信号非均匀性DSNU函数曲线图

六、实验结论

通过控制测量环境杂散光干扰以及多次调节均匀光源与待测器件的相对位置等工作,参数测量系统在多次实验中的数据能够维持相对稳定的水平。暗信号非均匀性DSNU约为65%至119%,光子响应非均匀性PRNU约为1.4%至2.2%。

通过实验数据分析,可以看出暗信号非均匀性DSNU数值非常高且不稳定,而光子响应非均匀性PRNU数值相对较小且非常稳定,导致这一结果的原因是多方面的:首先,这与测试环境温度导致的暗噪声波动有着密切关系。目前测试环境设定为常温(约25℃)条件,当外部无光源入射时,CCD芯片自身暗电流在这一温度下波动频率快且幅度较大,噪声的随机性和不稳定性造成暗图像非均匀性DSNU非常大且不稳定;而当外部均匀光源垂直入射时,各像素点响应基准信号增大,相对而言暗噪声波动对于光子响应非均匀性PRNU的影响较小,因此PRNU的值相对较小且稳定。其次,图像采样速度对实验结果也有重大影响。当采样间隔非常小时,暗电流波动也会相应减小,暗图像非均匀性DSNU 数值也会减小并稳定在一个较为合理的水平。

从测量实验角度出发,CCD成像器件非均匀性参数的测量对实验温度条件有着较为严格的要求,严格控制环境温度恒定,才能得出最为准确的实验结果。从相机制造工艺角度出发,成像器件的模拟前端制造工艺仍需继续改进以减弱自身串扰信号对响应信号的影响,从而提高成像质量。

杂散光,就是仪器单色器在给定标称波长(测定所选择的波长处)所接收的辐射中,夹杂有不属于入射辐射光束或入射光束带通以外的辐射光线通量(I ′)与总辐射光线通量(I0)之比,即I ′/I0。杂散光是光谱仪器的误差源之一。

由于杂散光的存在,测量值小于真值。杂散光越大,高吸光度测量的误差值就越

大。

杂散光在仪器的制造中不可能从根本上消除,如果使用中的仪器杂散光明显变大,应考虑以下几方面的原因:

1)光学部件被灰尘玷污或由于环境潮湿、长时间不开机导致发霉。要求仪器的存放环境清洁、干燥、仪器内部的干燥剂经常更换;对于长期不使用的仪器应该定期开机一次,以保持机内干燥。对于已经被玷污的光学零件,可以用脱脂软布蘸纯净的乙醚、丙酮混合液擦拭;对于单色系统内部的光栅、反射镜可用一种专用的光栅清洁纸处理。经如上处理后,不但能减小杂散光,而且光能量也会有明显提高,提高仪器信噪比。

2)单色系统密封性差。良好的密封性不但能防止灰尘进入,也要可以防止潮气进入。使用者在平时使用维护过程中应注意杂散光变化,避免杂散光超差。

实验四-排序-实验报告

数据结构实验报告 实验名称:实验四排序 学生姓名: 班级: 班内序号: 学号: 日期:2012年12月21日 1、实验要求 题目2 使用链表实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、冒泡排序 3、快速排序 4、简单选择排序 5、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据。 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)。

4、对2和3的结果进行分析,验证上述各种算法的时间复杂度。编写测试main()函数测试线性表的正确性。 2、程序分析 存储结构 说明:本程序排序序列的存储由链表来完成。 其存储结构如下图所示。 (1)单链表存储结构: (2)结点结构 struct Node { int data;

Node * next; }; 示意图: 关键算法分析 一:关键算法 (一)直接插入排序 void LinkSort::InsertSort() 直接插入排序是插入排序中最简单的排序方法,其基本思想是:依次将待排序序列中的每一个记录插入到一个已排好的序列中,直到全部记录都排好序。 (1)算法自然语言 1.将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录; 2.将无须去的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录; 3.重复执行2,直到无序区中没有记录为止。 (2)源代码 void 2. 3. 4.重复执行2和3 直接插入排序过程

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

四年级上册科学实验报告

1.实验名称:室内外温度的测量与比较 实验目的:测量室内外温度 实验器材:温度计、线、笔 实验步骤: 1、取一支温度计用线拴好。 2、将温度计悬挂3、读数。 4、比较。 实验结果:室内外温度存在差距,通过对大气温度的测量,可以了解当地的气温。 2.实验名称:气温的测量 实验目的:测量温度的变化 实验器材:温度计 实验步骤: 1、阳光下和背阴处测量温度; 2、测量一天中,清晨、商务、中午、下午、傍晚的气温。 实验结果:1、阳光下的温度高,背阴处的温度低2、一天中,中午的时候气温最高,清晨的时候气温最低; 3.实验名称:用简易雨量器测量降水量 实验目的: 实验器材:雨量器 实验步骤:1、用喷水壶模拟降水,记录好时间。2、把雨量器改在水平桌面,读出刻度。3、换算成24小时,核对雨量等级。 实验结果:根据24小时内测的降水量,对照等级表,确定了下雨的等级。 4.实验名称:观察食盐、沙在水中的状态 实验目的:食盐、沙能否在水中溶解 实验器材:烧杯2个、搅拌棒2根、沙、食盐、水。 实验步骤: 1、取一小匙食盐,放入盛水的烧杯内,用搅拌棒轻轻搅拌。你有什么发现? 2、取一小匙淘洗干净的沙,放入盛水的烧杯内,用搅拌棒轻轻搅拌。你有什么发现? 3、比较食盐和沙在水中的状态。 实验结果:食盐在水中溶解了,沙在水中没有溶解。 5.实验名称:面粉在水中溶解了吗 实验目的:面粉能否在水中溶解 实验器材:烧杯1个、搅拌棒1根、面粉、水。

实验步骤: 1、取一小匙面粉,放入盛水的烧杯内,用搅拌棒搅拌。2、你发现了什么? 实验结果:面粉在水中没有溶解 6.实验名称:高锰酸钾的溶解 实验目的:高锰酸钾在水中溶解吗 实验器材:烧杯、高锰酸钾、钥匙、搅拌棒、水。 实验步骤: 1、水里放入几粒高锰酸钾,观察并描述高锰酸钾和水的变化。 2、用搅拌棒搅拌,再观察、描述高锰酸钾和水的变化。 实验结果:高锰酸钾在水中溶解了 7.实验名称:观察不同物质在水中的溶解 实验目的:观察不同物质在水中的溶解 实验器材:面粉、沙、食盐、高锰酸钾各一份,烧杯4个、钥匙、水。 实验步骤: 1、将四种物质分别放入盛有相同水的烧杯内,观察物质在水中的状态。 2、根据实验现象完成教材26页记录表。 实验结果:食盐、高锰酸钾在水中溶解了,面粉、沙在水中没有溶解。 8.实验名称:观察胶水和洗发液是怎样溶解的 实验目的:观察胶水和洗发液是怎样溶解的 实验器材:烧杯2个、钥匙、搅拌棒2根、水。 实验步骤: 1、取一小匙胶水或洗发液,倒入盛水的玻璃杯中。 2、先轻轻搅拌,观察有什么现象,再充分搅拌,继续观察。 实验结果:胶水或洗发液在水中溶解了 9.实验名称:观察醋、酒精和食用油是怎样溶解的 实验目的:观察醋、酒精和食用油是怎样溶解的 实验器材:试管3个、醋、酒精、食用油、三支滴管、水。 实验步骤: 1、在三个试管中,各盛约15毫升的水。分别用滴管往试管中加入2毫升醋、酒精和食用油。充分震荡后,静置一会儿。 2、观察实验结果:醋和酒精在水中溶解了,食用油不能溶解于水。 10,实验名称:观察气体在水中的溶解能力 实验目的:观察气体在水中的溶解能力 实验器材:汽水、注射器、橡皮塞。 实验步骤: 1、打开汽水用注射器吸出约1/3管汽水,再用橡皮塞封住管口。 2、观察汽水析出的气泡。慢慢地往外拉活塞,再慢慢地往回推,反复3 次.

排序操作实验报告

数据结构与算法设计 实验报告 (2016 — 2017 学年第1 学期) 实验名称: 年级: 专业: 班级: 学号: 姓名: 指导教师: 成都信息工程大学通信工程学院

一、实验目的 验证各种简单的排序算法。在调试中体会排序过程。 二、实验要求 (1)从键盘读入一组无序数据,按输入顺序先创建一个线性表。 (2)用带菜单的主函数任意选择一种排序算法将该表进行递增排序,并显示出每一趟排序过程。 三、实验步骤 1、创建工程(附带截图说明) 2、根据算法编写程序(参见第六部分源代码) 3、编译 4、调试 四、实验结果图 图1-直接输入排序

图2-冒泡排序 图3-直接选择排序 五、心得体会 与哈希表的操作实验相比,本次实验遇到的问题较大。由于此次实验中设计了三种排序方法导致我在设计算法时混淆了一些概念,设计思路特别混乱。虽然在理清思路后成功解决了直接输入和直接选择两种算法,但冒泡

排序的算法仍未设计成功。虽然在老师和同学的帮助下完成了冒泡排序的算法,但还需要多练习这方面的习题,平时也应多思考这方面的问题。而且,在直接输入和直接选择的算法设计上也有较为复杂的地方,对照书本做了精简纠正。 本次实验让我发现自己在算法设计上存在一些思虑不周的地方,思考问题过于片面,逻辑思维能力太过单薄,还需要继续练习。 六、源代码 要求:粘贴个人代码,以便检查。 #include #define MAXSIZE 100 typedef int KeyType; typedef int DataType; typedef struct{ KeyType key; DataType data; }SortItem,SqList[MAXSIZE]; /*******直接插入顺序表*******/ void InsertSort(SqList L,int n) { int i,j,x; SortItem p; for(i=1;i

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

小学科学四年级上册实验报告

小学科学四年级上册实验报告 一、食物营养成分的检验实验 实验目的:学会检验食物中的淀粉、脂肪、和蛋白质的方法。 实验材料:碘酒、米饭、滴管、白纸、酒精灯、碟子、花生、瘦肉等。 实验过程: 1、把少量米饭放在碟子上,用滴管向米饭上滴2—3滴碘酒,观察发生的现象。 2、把花生放在白纸上用力挤压,观察白纸上留有的痕迹。 3、将切成细条的瘦肉放在酒精灯火焰上烧,注意闻一闻,有什么气味? 实验现象及结论: 1、加入碘酒后,米饭变成蓝黑色,这说明大米中含有淀粉。 2、在白纸挤压花生后,会在纸上留下油迹。说明花生内含有脂肪。 3、将瘦肉在火上烧后,会闻到一股难闻的、烧焦羽毛的气味.说明瘦肉中含有蛋白质。 二、物体在水中的溶解实验 实验目的:认识溶解的特点,理解溶解的定义。 实验材料:三个烧杯、玻璃棒、药匙、食盐、高锰酸钾、沙子。 实验过程: 1、先在三个烧杯中倒入约三分之二的清水。 2、用药匙取适量的食盐,高锰酸钾,沙子分别放入三个烧杯中,用玻璃棒搅拌,仔细观察三个烧杯中有什么现象发生。 实验现象:食盐,高锰酸钾在水中不见了,并且均匀的分散在水中,沙子在水中没有变化。 实验结论:溶解的定义,不溶解的定义 注意事项:1,搅拌方法 2,通过颜色观察高锰酸钾在水中均匀分布情况 3,通过尝的方法了解食盐在水中均匀分布情况 三、不同材料的溶解实验 实验目的:通过实验判断不同材料在水中是否溶解。(进一步理解溶解现象)实验材料:烧杯,玻璃棒,小苏打,面粉,粉笔末,洗衣粉,木屑等。 实验过程:同上

实验结论:有的物体在水中能溶解,有的物体在水中不能溶解. 四、物体溶解快慢与哪些因素有关的实验 实验目的:了解加快物体在水中溶解的方法。 实验材料:烧杯、玻璃棒、药匙、高锰酸钾或(食盐、冰糖)、小锤、热水、冷水等。 实验过程:实验一: 1、在两个烧杯中分别倒入等量的温度相同的冷水。 2、把颗粒大小相同的高锰酸钾分别放入两个烧杯中。 3、用玻璃棒搅拌其中一个烧杯中的水,观察高锰钾溶解的快慢情况。 实验现象:搅拌的烧杯中的高锰酸钾溶解得快,不搅拌的烧杯中高锰酸钾溶解得慢。 实验结论:搅拌可以加快溶解。 实验二: 1、在两个烧杯中分别倒入等量的热水和冷水 2、把颗粒大小相同的高锰酸钾放入两个烧杯中,过一会钟,观察两个烧杯中高锰酸钾溶解情况 实验现象:热水中高锰酸钾溶解的快,冷水中高锰酸钾溶解的慢。 实验结论:用热水可以加快溶解。 实验三 1、在两个烧杯中分别倒入等量的温度相同的冷水。 2、取两块大小相同的高锰酸钾颗粒,将其中一块研成粉末,然后分别同时放入两个烧杯中,观察比较高锰酸钾溶解的快慢。 实验现象:研成粉末的高锰酸钾溶解的快,未研成粉末的高锰酸钾溶解的慢。实验结论:把物体研成粉末可以加快理解。 注意:此实验是典型的对比实验,实验中只有一个条件不同,其他条件应相同。 五、沉淀实验 实验目的:通过实验使学生知道沉淀是净化水的一种方法,能除掉水中一部分不溶解的杂质。 实验材料:烧杯2个、玻璃棒2根、明矾、混浊水。 实验过程:

北京理工大学数据结构实验报告4

《数据结构与算法统计》 实验报告 ——实验四 学院: 班级: 学号: 姓名:

一、实验目的 1、熟悉VC 环境,学会使用C 语言利用顺序表解决实际问题。 2、通过上机、编程调试,加强对线性表的理解和运用的能力。 3、锻炼动手编程,独立思考的能力。 二、实验内容 从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。 三、程序设计 1、概要设计 为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。 (1)抽象数据类型: ADT SqList{ 数据对象:D={|,1,2,,,0}i i a a Elem Set i n n ∈=≥ 数据关系:R1=11{,|,,1,2,,}i i i i a a a a D i n --<>∈= 基本操作: InPut(SqList &L) 操作结果:构造一个线性表L 。 OutPut(SqList L) 初始条件:线性表L 已存在。 操作结果:按顺序在屏幕上输出L 的数据元素。 InsertSort(SqList &L) 初始条件:线性表L 已存在。 操作结果:对L 的数据元素进行插入排序。 QuickSort(SqList &L) 初始条件:线性表L 已存在。 操作结果:对L 的数据元素进行快速排序。 SelectSort(SqList &L) 初始条件:线性表L 已存在。 操作结果:对L 的数据元素进行选择排序。 }ADT SqList ⑵主程序流程 由主程序首先调用InPut(L)函数创建顺序表,调用InsertSort(L)函数进行插入排序,调用OutPut(L)函数显示排序结果。 再由主程序首先调用InPut(L)函数创建顺序表,调用QuickSort(L)函数进行交换排序,调用OutPut(L)函数显示排序结果。 再由主程序首先调用InPut(L)函数创建顺序表,调用SelectSort(L)函数进行选择排序,调用OutPut(L)函数显示排序结果。 ⑶模块调用关系

计组-4位乘法器实验报告

实验4位乘法器实验报告 姓名:X XX 学号:X XX 专业:计算机科学与技术课程名称:计算机组成同组学生姓名:无 实验时间:实验地点:指导老师:XXX 一、实验目的和要求 1.熟练掌握乘法器的工作原理和逻辑功能 二、实验内容和原理 实验内容: 根据课本上例3-7的原理,来实现4位移位乘法器的设计。 具体要求:1. 乘数和被乘数都是4位 2. 生成的乘积是8位的 3. 计算中涉及的所有数都是无符号数 4.需要设计重置功能 5.需要分步计算出结果(4位乘数的运算,需要四步算出结果) 实验原理: 1.乘法器原理图

2.本实验的要求: 1.需要设计按钮和相应开关,来增加乘数和被乘数 2.每按一下M13,给一个时钟,数码管的左边两位显示每一步的乘 积 3.4步计算出最终结果后,LED灯亮,按RESET重新开始计算 三、主要仪器设备 1.Spartan-III开发板1套 2.装有ISE的PC机1台 四、操作方法与实验步骤 实验步骤: 1.创建新的工程和新的源文件 2.编写verilog代码(top模块、display模块、乘法运算模块、去抖动模块以及 UCF引脚) 3.进行编译 4.进行Debug 工作,通过编译。

5.. 生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能 操作方法: TOP: module alu_top(clk, switch, o_seg, o_sel); input wire clk; input wire[4:0] switch; output wire [7:0] o_seg; // 只需七段显示数字,不用小数点 output wire [3:0] o_sel; // 4个数码管的位选 wire[15:0] disp_num; reg [15:0] i_r, i_s; wire [15:0] disp_code; wire o_zf; //zero detector initial begin i_r <= 16'h1122; //0x1122 i_s <= 16'h3344; //0x3344 end alu M1(i_r, i_s, switch[4:2], o_zf, disp_code); display M3(clk, disp_num, o_seg, o_sel); assign disp_num = switch[0]?disp_code:(switch[1] ? i_s : i_r); endmodule

数据库实验报告 (4)

一实验题目 .索引的建立和删除操作 .视图的创建、修改、更新和查询操作 二实验目的 .掌握数据库索引建立与删除操作,掌握数据库索引的分类,并了解建立数据库索引的意义、作用。 .掌握视图的创建和查询操作,理解视图的使用,理解实图在数据库安全性中的作用。 三实验内容 1.索引的建立和删除操作 (1)在表中,建立按照升序的惟一性索引。 (2)在表中,建立按照学号升序和课程号降序的唯一性索引。 (3)在表中,按照生日建立一个非聚簇索引。 (4)在表中,建立一个按照课程名升序的聚簇索引。 (5)删除索引。 2.视图的创建、修改、更新和查询操作 (1)建立一个关于所有女生信息的视图。 (2)将各系学生人数,平均年龄定义为视图 (3)建立一个视图反映学生所选课程的总学分情况。 (4)建立一个所有学生课程成绩的视图,包括基本学生信息,课程信息和成绩。 (5)在视图基础之上,建立一个两门课以上成绩不及格的学生情况视图。 (6)建立一个至少选修了门课及门课以上的学生信息的视图。 (7)修改视图,要求只显示年以前出生的女生信息。 (8)在视图查询不及格超过门课的学生信息。 (9)删除视图。 (10)通过视图,将“王丹”的名字修改为“汪丹”,并查询结果。 (11)通过视图,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,),并查询结果。 (12)通过视图,删除年出生的女生信息,并查询结果。 (13)通过视图,将“汪丹”的名字修改为“王丹”,是否可以实现,请说明原因。 (14)通过视图,将“”学生的平均分改为分,是否可以实现,请说明原因。 四实验要求 .要求掌握索引的类型,以及创建索引时的注意事项,例如每个表只能创建一个聚集索引,可以创建非聚集索引最多为个,等等。 .理解创建视图的目的和意义。掌握创建视图时需要考虑的原则:只能在当前数据库中创建视图、视图名不得与该用户的表名相同、可在视图上建立视图、定义视图不能包括等关键字、不能建立临时视图,等等。 .报告中由同学写明具体的操作意图(文字描述)、操作命令(语句)、和执行结果(文字描述适当截图)。

数据库上机实验报告4

数据库上机实验报告 4 学号:姓名:日期:年月日 实验目的:(1)练习连接查询;(2)练习视图的创建与使用;(3)学习使用ODBC的方法;(4)体验T-SQL的功能;体验存储过程的功能;体验表值函数、标量值函数的作用;体验ranking等功能。 1 练习视图及连接查询。 (1)创建一个视图,视图名为viNF,视图内容为select id,count(*) as nf from friends group by id。执行成功后,将SQL语句复制到下方。 (2)基于viNF视图,查找拥有最多好友的用户、最少好友的用户。执行成功后,将SQL语句复制到下方。 (3)基于users表和viNF视图进行连接查询。分别进行内连接、全外连接、左外连接、右外连接四种操作。执行成功后,将SQL语句复制到下方,并回答:四种结果表,哪两个的结果是一致的,为什么? (4)将题(3)中全外连接保存为一个新的视图viUAF。 2 通过ODBC用Excel打开users表。 3 体验T-SQL。 回顾实验2中的题目: 定义最低价格为成本价;依据此成本价做如下计算: 连接Goods,Goods_Extent,Sellers表,按照总利润,输出前10名;要求输出表的格式为(商品名称,卖家名称,商品价格,运费,卖家信誉,卖家好评率,历史销量,历史利润,期内销量,期内利润,总销量,总利润) 利用如下语句进行查询,体会和之前有什么不同。如感兴趣,自己可以仿照写一个变量定义、赋值及应用的例子。 declare @cost as float; select @cost=min(good_price)from goods; select top 10 good_name as商品名称, goods.seller_name as卖家名称, good_price as商品价格, good_shipping as运费,

教科版四年级上科学实验报告单

教科版四年级上科学实验报告单 武冈市新东中心小学四年级科学实验报告单年级四年级学生姓名班级实验名称温度与气温实验时间 9月4日 选择每天测量气温的环境,完成“天气日历”中温度的测量和记录。实验目的 仪器器材温度计、百叶箱 1、用温度计测量一天中不同时间的气温; 2、测量清晨、上午、中午、下午、傍晚的气温(选择同一地点); 实验过程 3、把测得的气温填在记录表中。 实验结果优良 教师批注实验有序实验成绩优 实验报告单 年级四年级学生姓名实验名称风向和风速实验时间 9月9日 用自制的风向标和小风旗测量风向和风速,并使用适当的方法纪录观察结果。实验目的 仪器器材风向标、小风旗 1、学生分组用风向标测试风向。 实验过程 2、学生分组用小风旗测试风速。 3、总结风力大小。 实验结果优良 教师批注实验有序,效果良好。实验成绩优 实验报告单 年级四年级学生人数实验名称水能溶解一些物质实验时间 9月18日

观察和描述食盐、沙、面粉在水中的容易溶解和不容易溶解的现象,能使用过滤装实验目的置分离几种固体与水的混合物。 仪器器材食盐、沙、面粉、烧杯、筷子、玻棒、水槽、漏斗、滤纸、铁架台 1、食盐+水沙+水 2、用筷子轻轻搅拌,观察,盐和沙分别又发生了什么变化,同时什么也实验过程可能发生什么变化,生:水。师:对,水会发生什么变化呢, 3、面粉+水 实验结果良好 教师批注实验准备充分实验成绩良 实验报告单 年级四年级学生人数实验名称液体之间的溶解现象实验时间 9月30日能借助实验进一步观察多种物质之间的溶解现象,根据溶解的主要特征区分一些实验目的常见的溶解现象。 仪器器材玻璃杯、滴管、酒精、食用油、注射器、试管、试管夹、酒精灯、火柴 1、学生第一次使用试管振荡的方法,在实验之前,教师先介绍和演示试 管振荡。 2、学生开始实验。在三个试管中,分别加入醋、酒精和食用油。实验过程(让学生仔细观察醋和酒精如何扩散,充分描述醋和酒精在水中的溶解过程。记录在记录表上。) 3、交流实验观察结果。 实验结果优良 教师批注实验有序实验成绩优 实验报告单

(完整word版)查找、排序的应用 实验报告

实验七查找、排序的应用 一、实验目的 1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。 2、学会比较各种排序与查找算法的优劣。 3、学会针对所给问题选用最适合的算法。 4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。 二、实验内容 [问题描述] 对学生的基本信息进行管理。 [基本要求] 设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、性别、成绩1、成绩2、总成绩等信息。要求实现以下功能:1.总成绩要求自动计算; 2.查询:分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现); 3.排序:分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。 [测试数据] 由学生依据软件工程的测试技术自己确定。 三、实验前的准备工作 1、掌握哈希表的定义,哈希函数的构造方法。 2、掌握一些常用的查找方法。 1、掌握几种常用的排序方法。 2、掌握直接排序方法。

四、实验报告要求 1、实验报告要按照实验报告格式规范书写。 2、实验上要写出多批测试数据的运行结果。 3、结合运行结果,对程序进行分析。 五、算法设计 a、折半查找 设表长为n,low、high和mid分别指向待查元素所在区间的下界、上界和中点,key为给定值。初始时,令low=1,high=n,mid=(low+high)/2,让key与mid指向的记录比较, 若key==r[mid].key,查找成功 若keyr[mid].key,则low=mid+1 重复上述操作,直至low>high时,查找失败 b、顺序查找 从表的一端开始逐个进行记录的关键字和给定值的比较。在这里从表尾开始并把下标为0的作为哨兵。 void chaxun(SqList &ST) //查询信息 { cout<<"\n************************"<=1;j--) if(ST.r[j].xuehao

实验报告四综述

成都信息工程大学遥感图像处理上机报告

1. 实验项目名称 遥感图像光谱增强处理 2. 实验目的 主成分分析:为了去除波段之间多余信息、将多波段的图像信息压缩到比原波段更有效的少数几个转换波段。 主成分逆变换:将主成分变换的图像重新恢复到RGB 彩色空间。缨帽变换:根据多光谱遥感中土壤、植被等信息在多维光谱空间中信息分布结构对图像 做的经验性线性正交变换。图像融合:将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术 等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。 3. 实验原理 主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的p 个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。 缨帽变换又称KT 变换。是一种经验性的多波段图像的线性变换,是Kauth 和Thomas(1976) 在研究MSS 图像反映农作物和植被的生长过程时提出的。在研究过程中他们发现MSS 四个波段组成的四维空间中,植被的光谱数据点呈规律性分布,像缨帽状,因此将这种变换命名为缨帽变换。 图像融合就是通过一种特定算法将两幅或多幅图像合成为一幅新图像。该技术有基本的体系,主要包括的内容有:图像预处理,图像融合算法,图像融合评价,融合结果。图像融合系统的层次划分为:像素层融合、特征层融合、决策层融合,目前绝大多数融合算法研究都集中在这一层次上。 4. 数据来源

数据库实验报告4

数据库实验报告4

《数据库原理》实验报告 题目:实验四视图与索引学号姓名班级日期Xxxx Xx xxxxx 2016.10.20 一. 实验内容、步骤以及结果 1.在Student数据库中,利用图形用户界面,创建一个选修了“数据库原理”课程并且是 1986年出生的学生的视图,视图中包括学号,性别,成绩三个信息。 2.用两种不同的SQL语句创建第五版教材第三章第9题中要求的视图(视图名:V_SPJ) 方法一: create view V_SP as select sno,pno,qty from spj where spj.jno in (select jno from j where j.jname='

三建') 方法二: create view V_SPJ as select sno,pno,qty from spj,j where j.jno=spj.jno and j.jname='三建'

INTO V_SPJ(SNO,PNO,QTY) VALUES( 's5','p3',900) 提示: -SPJ表中JNO允许为空时,数据可以插入基本表,此时JNO为NULL,由 于JNO为NULL,所以视图中没有该 条数据。 -SPJ表中JNO不能为空时,可以使用instead of触发器实现。 (1)修改视图V_SPJ中的任意一条数据的供 应数量。 update V_SPJ set qty=111 where sno='s1' and pno='p1'

(2)删除视图V_SPJ中的任意一条数据(注意 所创建视图可以视图消解时,才能正常删除,否则会删除失败;也可以考虑用 instead of触发器实现)。 DELETE V_SPJ where sno='s1' and pno='p1' and qty=111 用instead of触发器实现 CREATE TRIGGER trdV_SPJ ON V_SPJ INSTEAD OF DELETE AS BEGIN Delete from V_SPJ WHERE sno='s1' and pno='p1' and qty=111 END

四年级科学(上册)实验报告

实验目的: 认识空气有的性质。 实验材料: 透明玻璃杯、卫生纸、胶带、水槽、水、干抹布;空饮料瓶、气球 实验步骤:方法一 1、将一团卫生会紧塞在一个透明玻璃杯杯底; 2、将杯子倒立竖直压入水中,水面淹没杯底为止,尽量避免水槽里的水溢出来; 3、慢慢竖直提起杯子,并把杯口和外壁上的水用抹布擦干; 4、慢慢取出杯底的纸团,纸团会湿吗? 注意事项: 1、纸团应该塞紧在杯底,以免杯口朝下时落下,必要的话可以用胶带固定一下。 2、实验过程中杯子始终都是倒立杯口朝下,并保持竖直。 方法二: 1、将气球皮放进一个空饮料瓶中,用力吹,气球吹得大吗? 实验结果: 方法一:纸团。 方法二:气球。 实验结论: 空气有的性质。 年班

实验目的: 认识空气虽然很轻但是。 实验材料: 细木棍一根、空气充得同样多且颜色相同的气球两只、细线、胶带、针 实验过程: 1、将两只空气充的同样多的气球分别用细线绑在细木棍的两端; 2、调节细木棍中间的绳套使其左右平衡; 3、用针在其中一只气球口附近扎几个小眼,使气球慢慢漏气。 实验结果: 。 实验结论: 空气。 年班

教版小学科学4年级上册《我们周围的空气》单元实验报告3 实验目的: 认识空气具有。 实验材料: 1、气球 2、扇子(书) 实验过程: 1、让充满空气的气球口对着自己的脸,松开气球口,有什么感觉? 2、用扇子或书在自己的脸旁扇一扇,有什么感觉? 实验结果: 。 实验结论: 空气。 年班

教版小学科学4年级上册《我们周围的空气》单元实验报告4 实验目的: 认识到空气。 实验材料: 塑料袋、注射器、橡皮(手指) 实验步骤: 1、用手压一只装满空气的塑料袋,有什么感觉? 2、注射器吸满空气,用手堵住注射器的口,另一只手推活塞,有什么变化? 实验结果: 1、塑料袋; 2、注射器。 实验结论: 空气。 年班

算法排序问题实验报告

《排序问题求解》实验报告 一、算法的基本思想 1、直接插入排序算法思想 直接插入排序的基本思想是将一个记录插入到已排好序的序列中,从而得到一个新的,记录数增1 的有序序列。 直接插入排序算法的伪代码称为InsertionSort,它的参数是一个数组A[1..n],包含了n 个待排序的数。用伪代码表示直接插入排序算法如下: InsertionSort (A) for i←2 to n do key←A[i] //key 表示待插入数 //Insert A[i] into the sorted sequence A[1..i-1] j←i-1 while j>0 and A[j]>key do A[j+1]←A[j] j←j-1 A[j+1]←key 2、快速排序算法思想 快速排序算法的基本思想是,通过一趟排序将待排序序列分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序序列为数组A[1..n],首先选取第一个数A[0],作为枢轴(pivot),然后按照下述原则重新排列其余数:将所有比A[0]大的数都排在它的位置之前,将所有比A[0] 小的数都排在它的位置之后,由此以A[0]最后所在的位置i 作为分界线,将数组A[1..n]分成两个子数组A[1..i-1]和A[i+1..n]。这个过程称作一趟快速排序。通过递归调用快速排序,对子数组A[1..i-1]和A[i+1..n]排序。 一趟快速排序算法的伪代码称为Partition,它的参数是一个数组A[1..n]和两个指针low、high,设枢轴为pivotkey,则首先从high 所指位置起向前搜索,找到第一个小于pivotkey 的数,并将其移到低端,然后从low 所指位置起向后搜索,找到第一个大于pivotkey 的数,并将其移到高端,重复这两步直至low=high。最后,将枢轴移到正确的位置上。用伪代码表示一趟快速排序算法如下: Partition ( A, low, high) A[0]←A[low] //用数组的第一个记录做枢轴记录 privotkey←A[low] //枢轴记录关键字 while low=privotkey do high←high-1 A[low]←A[high] //将比枢轴记录小的记录移到低端 while low

C上机实验报告 实验四

精品文档 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

西北工业大学-操作系统实验报告-实验四

实验四进程与线程 一、实验目的 (1)理解进程的独立空间; (2)理解线程的相关概念。 二、实验内容与要求 1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知识,了解C 语言程序编写的相关知识; 2、理解进程的独立空间的实验内容及步骤 (1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并输出每次操作后的结果; (2)使用系统调用 fork()创建子进程,观察该变量的变化; (3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变化。 3、理解线程的实验步骤 (1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()中和新线程shared进行循环加/减操作,观察该变量的变化; (3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变化。 4、对整个实验过程进行分析总结,给出详细步骤; (1) 观察上述进程执行结果,并分析原因;

(2) 提交源程序清单,并附加流程图与注释。 三、实验过程 1、进程的与线程的创建和构造 (1).进程的创建和构造 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。 新的进程通过克隆旧的程序(当前进程)而建立。fork() 和 clone()(对于线程)系统调用可用来建立新的进程。 (2)线程的创建和构造 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间 流程图如下所示:

相关主题
文本预览
相关文档 最新文档