数据结构实验3报告doc(精选11篇)
一.实验要求:利用CPTH 实验仪的开关做为控制信号,将指定寄存器的内容读到数据总线DBUS上。
二.实验目的:
1、了解模型机中多寄存器接数据总线的实现原理。
2、了解运算器中移位功能的实现方法。
三.实验电路:CPTH 中有7 个寄存器可以向数据总线输出数据,但在某一特定时刻只能有一个寄存器输出数据,由X2,X1,X0决定那一个寄存器输出数据。
数据输出选择器原理图
连接线表
四.实验数据及步骤:
实验1:数据输出实验
置下表的控制信号,检验输出结果
实验2:移位实验
ALU直接输出和零标志位产生原理图
ALU左移输出原理图
ALU右移输出原理图
直通门将运算器的结果不移位送总线。当X2X1X0=100 时运算器结果通过直通门送到数据总线。同时,直通门上还有判0 电路,当运算器的结果为全0 时,Z=1,右移门将运算器的结果右移一位送总线。当X2X1X0=101 时运算器结果通过右通门送到数据总线。具体内部连接是:
Cy 与 CN →DBUS7
ALU7→DBUS6
ALU6→DBUS5
ALU5→DBUS4
ALU4 → DBUS3
ALU3 → DBUS2
ALU2 → DBUS1
ALU1 → DBUS0 Cy 与 CN → DBUS7 当不带进位移位时(CN=0):
0 →DBUS7 当带进位移位时(CN=1):
Cy →DBUS7
左移门将运算器的结果左移一位送总线。当X2X1X0=110 时运算器结果通过左通门送到数据总线。具体连线是:
ALU6 →DBUS7 ALU5→ DBUS6 ALU4→ DBUS5 ALU3→ DBUS4 ALU2→ DBUS3 ALU1→ DBUS2 ALU0→ DBUS1 当不带进位移位时(CN=0):
0 → DBUS0 当带进位移位时(CN=1):
Cy→
DBUS0
将55H写入A寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据55H
置控制信号为:
按住STEP脉冲键,CK由高变低,这时寄存器A的黄色选择指示灯亮,表明选择A寄存器。放开STEP键,CK由低变高,产生一个上升沿,数据55H被写入A寄存器。
S2S1S0=111 时运算器结果为寄存器A内容
注意观察:
移位与输出门是否打开无关,无论运算器结果如何,移位门都会给出移位结果。但究竟把那一个结果送数据总线由X2X1X0输出选择决定。
五.心得体会:
一、数据类型
在数据处理之前需要对数据的类型进行分析, 其目的是为了分别对待, 使数据分析的结论有效。数据分类的依据主要从三方面考虑:数据的来源、数据的取值特点以及数据表征的原始意义。
1. 数据来源
在中小学实验教学问题研究的过程中, 数据来源一般可分为两大类型:一种是通过问卷回收而得到的数据 ( 以下简称“问卷数据”) , 另一类是依靠互联网而直接采集到的大数据 ( 以下简称“大数据”) , 将要使用的数据挖掘技术针对这两种数据的处理方式是不同的。
由于大数据存在稀疏性、重复性、时效性、不稳定性以及强噪声性等特点, 有时还会出现所谓维数灾难 (curse of dimensionality) 等问题, 所以处理起来需要考虑的因素很多, 数据挖掘技术在解决这些问题时投入了相当大的力量。而问卷数据在生成之初就建立了科学的框架, 严格控制变量, 数据有效性远大于大数据, 所以与其对应的数据挖掘技术与大数据的数据挖掘有着本质的不同。例如, 在大数据处理中被极为推崇的聚类分析, 在问卷数据处理中几乎不使用, 因为问卷数据所表征的变量性质已经先天地被确定了下来, 没有必要再进行人工分类。本文主要讨论问卷数据的处理问题。
2. 数据数值
问卷数据的数值有3 种类型。
(1) 连续数据。这是最多、最常见的数据, 例如学生的成绩、教师的工龄、设备的金额等。
(2) 离散数据。这更多的是因为对变量赋值而产生的数据, 例如用里克特5 级量化得到的数据, 数值分布1, 2, 3, 4, 5 分别对应选项值A, B, C, D, E。
(3) 二值数据。表示是或否、对或错、男或女等数据只有两个取值1 或0, 称为二值数据。
不同数值类型的数据在处理时不能够随意放在一起, 不加区分。同时, 对它们的处理方式也有不同, 应给予充分注意。
3. 数据表征
表征原是心理学概念, 它是信息在头脑中的呈现方式。在这里我们用它说明数据归属变量所代表那个原来事物的属性, 或者说事物属性通过数据在系统中的呈现方式。问卷数据的数据表征有两种类型。
(1) 定性数据。这是一般不参与计算的数据, 而只具有标识的特性, 如学生编号ID就属于这类数据。
(2) 定量数据。用于参与计算的数据, 采集来的大部分数据属于此类, 如学生动手实验平均时间、教师学科、实验室生均活动面积等。
二、数据处理的目的与任务
数据处理的目的主要是用于对事物的特性进行描述和对事物的发展进行预测。对于大数据, 数据挖掘技术的主要任务有4 个:关联分析、预测建模、聚类分析以及异常检测[1]。而对于问卷数据处理, 除了聚类分析意义不大外, 其他任务都保留了下来。
1. 异常检测
异常检测任务在问卷数据处理中表现为消除数据的干扰噪声。在问卷填写和问卷回收编码整理中, 会出现个别不可避免的错误, 这将产生一些无效数据, 主要表现在:数据缺失、奇异数据、离群数据等。数据缺失是漏填或漏录造成, 奇异数据包括变量类型填写错误或数字类型填写错误 ( 如:使用了全角字录入) , 离群数据则是指数据类型无误但数值大小明显偏离正常值。这些无效数据在进行统计计算之前必须进行检测和处理, 对它们予以剔除, 称为数据的预处理。
2. 预测建模
预测建模任务在问卷数据处理中就是预测被研究对象事物的发展趋势。代表被研究对象事物发展的应该有一些产出变量和指标, 例如, 学生能力水平变量的变化可以反映出实验教学的发展情况, 实验教学评价指标也可以反映其发展情况, 建立预测模型对学生能力水平和实验教学评价指标进行预测是数据处理的一项最为重要的任务。
3. 关联分析
关联分析任务在问卷数据处理中就是找到变量之间相互影响的因素。发现变量之间的相关性强度是统计分析中最为常用的一个方法, 对于实验教学研究这种方法能够帮助找到变量之间的因果关系, 而得到决定产出变量的那个输入变量是我们进行教育教学研究孜孜以求的任务。例如, 若能够通过关联分析协助找到决定学生能力提高的那些因素, 而且只要普遍地控制这些因素就可以达到预期目的, 这件事就变得十分有意义。但是需要注意的是, 关联分析只能发现变量之间的相关关系, 而绝非因果关系, 如果需要得到因果关系还要做大量的后期研究工作。
三、数据处理方法实例
以下通过3 个实例说明对问卷数据进行处理的过程, 其中数据预处理属于异常检测, 马尔科夫分析属于预测建模, 多元线性回归属于关联分析。
1. 数据预处理
在数据处理初始阶段, 应对数据中那些不合理的异常数值进行剔除, 常用的方法是数据频次分析和分布图像分析。图2 是根据采集到国内某地区统计的1 200 个小学实验室个数得到的分布直方图, 这些数据未经过预处理。运用SPSS软件得到此图的命令为:在“Graphs”菜单命令中选择“Histogram”选项。
由图2 可见, 样本数 ( 学校个数) N=1200, 学校具有实验室数的平均值 (Mean) 为5.8, 标准差 (Std.Dev) 为7.25。同时还可以从分布图上看出, 数据存在着大量的离群数值, 而且最大离群值已经超过220 ( 即一个小学有200 多个实验室已经非常不可信了) 。进一步, 用SPSS的频次分析功能 (“Analyze”→“Descriptive Statistics” →“Frequencies”) 可得数据频次统计分析表 ( 如图3 所示) 。由图3 分析表可见, 具有实验室数在20 个以内的学校已经占全部学校总数的99.3%, 具有20 个以上实验室数的学校只有8 个, 其中有59 个、77 个、221 个实验室的学校各有1 个。显然应将这3 个学校的数据剔除掉。进一步根据实际情况分析, 还可将具有30 个以上实验室学校的数据剔除掉。
剔除离群数据, 可以借助SPSS软件完成 (“Data”→“Select Cases”→“If Condition”→“if”→“选择筛选条件”→“Continue”→“Unselected Cases Are-Deleted”) 。上述数据经筛选剔除后再进行频次统计分析和输出数据分布直方图 ( 如图4 所示) 。
2. 马尔科夫分析
马尔可夫 (Markov) 分析又称为蒙特- 卡罗 (MoteCarlo) 法, 是用于分析随机事件发展趋势的统计测量工具。这里我们根据国内某地区1 675 所中小学校2006 年和2007 年实验室标准化配备的统计数据, 利用马尔科夫分析对其到2010 年达标的情况进行预测。表1 是各校2006 年和2007 年达标评估得分学校数量迁移情况。评估分数被分为5 个分数段 (60 分以上为达标) , 第2 行第2 列数据38 表示在2006 年得分为30 分以下, 而在2007 年得分仍然为30 分以下的学校共有38 个;第2 行第3 列数据22 表示在2006 年得分为30 分以下, 而在2007 年得分上升为30 ~ 40 分之间的学校有22 个;第3 行第2 列数据6 表示在2006 年得分为30 ~ 40 分之间, 而在2007 年得分下降为30 分以下的学校有6 个;其他数据以此类推。
将表1中的数据进行行归一化处理后得到表2所示的归一化迁移表。所谓行归一化, 就是计算出每个数字在本行全部数字之和中所占比例, 使每行比例数字之和等于1。
由归一化后的2006 ~ 2007 年达标学校数量迁移表可得迁移矩阵A, 因为该矩阵的每行之和为1, 所以被称为概率矩阵。概率矩阵的特点是其n次幂仍然是一个概率矩阵。迁移矩阵A为:
从2006 年到2010 年一共经历了4 年。根据马尔可夫分析的方法, 计算出迁移矩阵A的4 次幂矩阵A[4] ( 即A[4]= A·A·A·A) , 然后对A[4]提供的数据进行分析, 即可预测达标情况。使用MATLab软件计算概率矩阵A的4次幂矩阵如下:
A[4]矩阵中的第5 列的5 个元素表达出的信息为:0.088 2 表示在2006 年30 分以下的学校到2010 年达标 (60 分以上) 的概率为0.088 2;0.184 4 表示在2006年30 ~ 40 分的学校到2010 年达标的概率为0.184 4;0.344 1 表示在2006 年40 ~ 50 分的学校到2010 年达标的概率为0.344 1;0.569 9 表示在2006 年50 ~ 60分的学校到2010 年达标的概率为0.569 9;0.773 5 表示在2006 年50 ~ 60 分的学校到2010 年达标的概率为0.773 5。
由表2 可见, 2006 年30 分以下、30 ~ 40 分、40 ~ 50 分、50 ~ 60 分、60 分以上5 个分数段学校的数量分别为69, 295, 665, 542, 104; 学校总数为1 675。于是可以计算出各分数段的学校比例分别为:0.041 2、0.176 1、0.397 0、0.323 6、0.062 1 ( 即:69/1675, 295/1675, 665/1675, 542/1675, 104/1675) 。最后计算出2010 年全部学校达标 (60 分以上) 的平均概率为:
这个数据被解释为:按现行的实验室配备标准和实验室达标评价指标体系进行评估, 到2010 年应有40.52% 的学校可以达标。
3. 多元线性回归分析
表3 为某市7 个区县 (DMU1 ~ DMU7) 初中校图书的数量 ( 单位为册) 与仪器设备经费投入 ( 单位为万元) 的情况, 同时列出了逐年学生中考的平均成绩。对这些数据进行的回归分析是希望查看学生学业水平与哪些投入因素相关。
分析工具使用SPSS。在“Analyze”菜单命令中选择“Regression”的“Linear”选项, 将中考成绩 (Y) 设为因变量, 而将理科设备 (X1) 、文科设备 (X2) 、艺术设备 (X3) 、健康设备 (X4) 、教育技术设备 (X5) 、图书资料 (X6) 设为自变量, 回归方法“Method”选择“Backward” ( 反向剔除法) , 最后得到如表4 所示的计算结果。
表中数据显示出:第一次回归计算保留了全部6 个自变量 (X1 ~ X6) , 其中因变量Y与自变量X6 的相关性很差 ( 相关系数为-1.808×10-5) 。第二次回归计算剔除了X6, 但显示出X1 与Y的相关性也较差 ( 相关系数为8.806×10-3) 。第三次回归计算剔除了X1, 只保留了X2 ~ X5。最后得到的多元线性回归方程为:Y =0.117X2 + 0.108X3 – 0.310X4 + 0.01442X5。方程表明, 首先学生学业水平 (Y) 与学校图书资料 (X6) 、理科设备 (X1) 的配备和投入基本无关, 与教育技术设备 (X5) 投入呈现弱相关性;同时反映出学生学业水平与健康设备投入 (X4) 之间具有负相关性, 即投入越多对学业水平提高越是不利;而学生学业水平仅与文科设备 (X2) 、艺术设备 (X3) 之间具有稍高一些的相关性。
需要对此进行说明的是中考成绩只反映学生显性知识获得的情况, 而学生能力水平的提高或许会与学校实验仪器设备的投入具有直接关系。另外, 图书对一个人的影响是迟效的, 即会在长期大量阅读后才能发生巨大作用, 短期效果并不明显, 所以在此例中对图书的分析也容易理解。应该指出, 这些也正是我们将要进行重点研究的课题。
参考文献
说明报告
志愿服务开展如何是一个城区、一个社区文明程度的重要标志之一。XXXX社区自XXXX社区市民学校成立以来一直在招募志愿者,组建志愿服务队。志愿服务队伍是构建和谐社会的有生力量,是创建全国文明城区不可或缺的中流砥柱,是党和政府联系群众的桥梁和纽带。
为提升居民群众对创建全国文明城区的知晓率,激发广大群众参与创建、支持创建的热情。XXXX社区组织志愿者服务队开展了多次志愿服务活动,创建全国文明城区进网格宣传活动、每月月底清洁大扫除活动、文明交通劝导活动、关爱空巢老人活动、四点半课堂活动等等。志愿服务在社区的广泛深入开展,对于服务居民群众、弘扬文明新风、提高市民素质,促进全国文明城区建设具有十分重要的意义,也是城市的一道美丽的风景线。
志愿服务工作是一项长期系统的工作,XXXX社区充分认识到开展志愿服务活动对构建和谐社区,创建全国文明城市的重要性。我社区将积极推进社区志愿服务工作的深入开展,继续做好志愿者的招募工作,不断探索开展志愿服务的新思路,走出具有屏山社区特色的社区志愿服务工作新路子。
XXX街道办事处XXXX社区
会话管理(实验报告)班级:网络111
一、实验目的
1.了解Web服务器对客户会话跟踪的各种方法; 2.重点掌握使用HttpSession对象跟踪会话的方法; 3.掌握使用Cookie技术跟踪会话的方法; 4.了解URL重写和隐藏表单域的方法。
二、实验原理
HTTP协议是无状态的协议。在很多情况下,Web服务器必须能够跟踪客户的状态。比如,对于一个购物网站,在一个时刻可能有多个客户购物,Web服务器必须能够区分不同的客户。一般情况下,Web服务器为每个客户配置了虚拟的购物车(ShoppingCart)。当某个客户请求将一个商品放入购物车时,Web服务器必须根据发出请求的客户的身份,找到该客户的购物车,然后把商品放入其中。
Web服务器跟踪客户的状态通常有4种方法:
(1)使用HttpSession对象管理会话;(2)使用持久的Cookie对象;(3)使用URL重写机制;(4)使用隐藏的表单域。
三、实验内容与步骤
(一)使用HttpSession对象管理会话。在名为ch05的Web项目下,创建一个名为ShowSessionInfo的Servlet。代码
import java.io.IOException;
姓名:李坤
学号:201106090117 import java.io.PrintWriter;import java.sql.Date;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;
public class ShowSessionServlet extends HttpServlet {
response.setContentType(“text/html;charset=gb2312”);HttpSession session = request.getSession(true);String heading = null;String info=“Information about your session”;
Integer accessCount =(Integer)session.getAttribute(“accessCount”);if(accessCount==null){ public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
accessCount = new Integer(1);
heading = “Welcome,enter this page first time!”;
}
else
{
heading = “Welcome Back!”;
accessCount = accessCount+1;
}
session.setAttribute(“accessCount”,accessCount);
PrintWriter out = response.getWriter();
out.println(“”);
1.掌握使用if~else语句和switch~case语句实现分支结构的方法。
2.掌握使用三种循环语句实现循环结构的方法。
二、实验内容
1.显示两级成绩
程序填空,不要改变与输入输出有关的语句。
输入一个学生的数学成绩,如果它低于 60,输出“Fail”,否则,输出“Pass”。
文件命名---学号B1.C
源程序:
#include
/*运用if~else实现分支结构*/ printf(“Fail.n”);
/*mark<60为真时执行*/ } else{ printf(“Pass.n”);
/*mark<60为假时执行*/ }
return 0;
/*程序的结束状态*/ }
2.求三角形的面积和周长
程序填空,不要改变与输入输出有关的语句。
输入三角形的三条边 a, b, c,如果能构成一个三角形,输出面积area 和周长perimeter(保
留2 位小数);否则,输出“These sides do not correspond to a valid triangle”。
在一个三角形中,任意两边之和大于第三边。三角形的面积计算公式: aere*area = s(s-a)(s-b)(s-c)其中:s =(a+b+c)/2 文件命名---学号B2.C
源程序:
#include
/*运用if~else实现分支结构,逻辑与的运用要到位*/
s=(a+b+c)/2;printf(“perimeter=%.2fn”,a+b+c);
/*调用printf()函数输出周长*/ printf(“area=%.2fn”,sqrt(s*(s-a)*(s-b)*(s-c)));/*平方根函数sqrt()*/ } else{ printf(“These sides do not corrrespond to a valid trianglen”);/*if条件语句为假时执行*/ } return 0;}
3.计算个人所得税
程序填空,不要改变与输入输出有关的语句。
输入一个职工的月薪 salary,输出应交的个人所得税tax(保留2 位小数)。
tax = rate *(salary-850)当 salary <= 850 时,rate = 0;当 850 < salary <= 1350 时,rate = 5;当 1350 < salary <= 2850 时,rate = 10;当 2850 < salary <= 5850 时,rate = 15;当 5850 < salary 时,rate = 20;文件命名---学号B3.C
源程序:
#include
/*运用else-if语句求解多分段函数*/ rate=0;} else if(salary<=1350){
rate=5;} else if(salary<=2850){
rate=10;} else if(salary<=5850){
rate=15;} else{ rate=20;} tax = rate *(salary-850);printf(“tax=%0.2fn”, tax);}
/*else-if语句的分支*/
/*else-if语句的分支*/
/*else-if语句的分支*/
/*调用printf()函数输出结果*/
4.求1+1/2+1/3+......+1/n 程序填空,不要改变与输入输出有关的语句。读入 1 个正整数 n(n<=50),计算并输出1+1/2+1/3+......+1/n(保留3 位小数)。
文件命名---学号B4.C 源程序:
#include
for(i=1;i<=n;i++){
sum*/
sum=sum+1.0/i;
} printf(“%.3fn”, sum);
}
/*输入提示“n<=50,Enter n:”*/
/*对sum赋初值0*/
/*使用for循环,循环执行n次,计算
/*调用printf()函数输出sum的值*/
5.求n!程序填空,不要改变与输入输出有关的语句。读入 1 个正整数 n(n<=50),计算并输出 n!。
文件命名---学号B5.C 源程序:
#include
/*输入提示*/ scanf(“%d”, &n);i=1,sum=1;do
/*do~while循环语句*/ { sum=sum*i;
/*循环体语句*/ i++;}while(i<=n);printf(“%.3fn”, sum);
/*调用printf()函数输出sum的值*/
}
6.统计素数并求和
程序填空,不要改变与输入输出有关的语句。
输入 2 个正整数m 和n(1<=m,n<=500),统计并输出m 和n 之间的素数的个数以及这些素数的和(素数就是只能被1 和自身整除的正整数,1 不是素数,2 是素数)。注:嵌套循环
文件命名---学号B6.C
#include
/*调用求平方根函数,需要包含数学库*/
int main(){ int count, digit, i, j, k, m, n, sum;printf(“Enter m,n,n<=500:”);
/*输入提示*/ scanf(“%d%d”, &m, &n);
/*调用scanf()函数输入m,n*/ count=0,sum=0;
/*count与sum分别记录素数个数与和,用于控制输出格式*/ for(j=m;j<=n;j++){
/*循环嵌套*/ k=sqrt(j);for(i=2;i<=k;i++)
/*for循环,注意素数的判断*/
if(j%i==0)
/*若m能被某个i整除,则j即m不是素数,循环提前结束*/ break;if(i>k&&j!=1){
/*如果m是素数*/ count++;sum=sum+j;} } printf(“count=%d, sum=%dn”, count, sum);}
三、收获、体会及问题
收获、体会:总的来说,这次实验的完成较实验一来说轻松了许多,因为对代码有了近一步的熟悉,实验的完成过程相对得心应手了许多。本次实验我基本掌握了运用三种循环语句循环结构的方法,对do~while、if~else、switch~case三种语句有了更深的理解,并能够准确的将之运用到编程的过程中,同时三类语句的作用与实现方法我也有了近一步的认识。
三、白噪声信道模拟实验
一、实验目的
1、了解白噪声产生原因。
2、了解多径干扰对信号的影响。
二、实验内容
观察白噪声对信号的干扰。
三、基本原理
在移动通信中,严重影响移动通信性能的主要噪声与干扰大致可分为3类:加性正态白噪声、多径干扰和多址干扰。
这里加性是指噪声与信号之间的关系服从叠加原理的线性关系,正态则是指噪声分布遵从正态(高斯)分布,而白则是指频谱是平坦的,仅含有这类噪声的信道一般文献上称为AWGN信道。这类噪声是最基本的噪声,非移动信道所特有,一般简称这类噪声为白噪声。这类噪声以热噪声、散弹噪声及宇宙噪声为代表,其特点是,无论在时域内还是在频域内它们总是普遍存在和不可避免的。
热噪声是在电阻一类导体中,自由电子的布朗运动引起的噪声。导体中的每一个自由电子由于其热能而运动。电子运动的途径,由于和其他粒子碰撞,是随机的和曲折的,即呈现布朗运动。所有电子运动的总结果形成通过导体的电流。电流的方向是随机的,因而其平均值为零。然而,电子的这种随机运动还会产生一个交流电流成分。这个交流成分称为热噪声。
散弹噪声是由真空电子管和半导体器件中电子发射的不均匀性引起的。散弹噪声的物理性质可由平行板二极管的热阴极电子发射来说明。在给定的温度下,二极管热阴极每秒发射的电子平均数目是常数,不过电子发射的实际数目随时间是变化的和不能预测的。这就是说,如果我们将时间轴分为许多等间隔的小区间,则每一小区间内电子发射数目不是常量而是随机变量。因此,发射电子所形成的电流并不是固定不变的,而是在一个平均值上起伏变化。总电流实际上是许多单个电子单独作用的总结果。由于从阴极发射的每一个电子可认为是独立出现的,且观察表明,每1安培多平均电流相当于在1秒钟内通过约6×1018个电子,所以总电流便是相当多的独立小电流之和。于是,根据中心极限定理可知,总电流是一个高斯随机过程。也就是说散弹噪声是一个高斯随机过程。
宇宙噪声是指天体辐射波对接收机形成的噪声。它在整个空间的分布是不均匀的,最强的来自银河系的中部,其强度与季节、频率等因素有关。实测表明,在20~300MHz的频率范围内,它的强度与频率的三次方成反比。因而,当工作频率低于300MHz时就要考虑到它的影响。实践证明宇宙噪声也是服从高斯分布律的,在一般的工作频率范围内,它也具有平坦的功率谱密度。
从通信系统来看,白噪声是最基本的噪声来源。但是从调制信道的角度来看,到达或集中于解调器输入端的噪声并不是上述白噪声本身,而却是它的某种变换方式——通常是一种带通型噪声。这是因为,在到达解调器之前,起伏噪声通常要经过接收转换器,而接收转换器主要作用之一是滤出有用信号和部分的滤除噪声,因此,它可等效为一个带通滤波器。它的输出噪声是带通型噪声。由于这种噪声通常满足“窄带”的定义,故常称它为窄带噪声。又考虑到带通滤波器常常是一种线性网络,其输入端的噪声是高斯白噪声。因此,它的输出窄带噪声应是窄带高斯噪声。
四、实验原理
1、实验模块简介
本实验需用到基带成形模块、IQ调制解调模块及信道模拟模块。(1)基带成形模块 产生PN31伪随机序列作为信源;将基带信号进行串并转换;按调制要求进行基带 成形,形成两路正交基带信号。(2)IQ调制解调模块
产生调制及解调用的正交载波;完成射频正交调制及小功率线性放大;完成射频 信号正交解调。(3)信道模拟模块
采用数字信号处理算法模拟白噪声、慢衰落及多径干扰三种信道。
2、电路说明
IQ调制模块输出的10.7M已调信号,送入信道模拟模块,首先进行降频理,将频率降为1.5M,主要目的是为了A/D采样及数字处理方便。1.5M信号经信号 调理电路以适合A/D采样。在FPGA时序电路的控制下,A/D芯片将模拟信号转 换为数字处理送入FPGA中进行处理。
FPGA中有四个独立的处理模块,分别是模拟信号采样控制及信号通道、白噪声产生、慢衰信号产生及信号多径时延模块。根据使用者选择的不同输出 不同的信号。
当用户选择白噪声信道,FPGA输出两路数字信号,一路是原信号、一路是 白噪声信号,经D/A转换后变为两路模拟信号。两路信号可以分别进行幅度调 节,以满足试验需求。两路信号经加法器相加后成为白噪声干扰信号,送入混 频电路,将频率变回为10.7M送出,完成白噪声干扰。
五、实验框图
OUT1SUM混频放大输出
混频信号调理ADA/D噪声产生D/A幅度调节相加9.2M本振OUT2原信号D/A幅度调节9.2M本振3
六、实验步骤
1、在实验箱上正确安装基带成形模块(以下简称基带模块)、IQ调制解调模块(以下简称IQ模块)及信道模拟模块(以下简称信道模块)。
2、关闭实验箱电源,按如下方式连线:(点击
查看连线)
a﹑用台阶插座线完成如下连接
源端口 目的端口
连线说明
基带模块:PN31 IQ模块:I-IN 提供PN31伪随机序列
b﹑用同轴电缆线完成如下连接
源端口
目的端口
连线说明
IQ模块:输出(J2)信道模块:输入 将调制信号送入模拟信道中
* 检查连线是否正确,检查无误后打开电源。
3、示波器探头接信道模块“AD”测试点,调节“AD幅度”电位器,使“AD”处信号峰峰值为1V左右。
4、按下“选择”键,选择白噪声信道,“白噪”指示灯亮。
5、用示波器观测“OUT2”测试点,调节“OUT2 幅度”电位器改变原始信号幅度。
6、用示波器观测“OUT1”测试点,输出为白噪声信号,调节“OUT1 幅度”电位器幅度改变噪声信号的大小。
7、将“OUT2 幅度”电位器顺时针旋到底,“OUT1 幅度”电位器逆时针旋到底,用示波器观测“输出”点信号波形,此时信号输出幅度最大,无噪声输出。
8、顺时针调节“OUT1 幅度”电位器,增大噪声信号,用示波器观测“输出”点信号波形,观测噪声对信号的影响。
七、实验结果及图片
1、信道模块“AD”测试点,“AD”处信号峰峰值为1V左右
2、“OUT2”测试点
3、“OUT1”测试点
4、“输出”点信号波形(注:此时未加入噪声)
5、“输出”点信号波形(注:此时有加入噪声)
一、实验目的
1、掌握常用的排序方法,并掌握用高级语言实现排序算法的方法。
2、深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用。
3、了解各种方法的排序过程及其依据的原则,并掌握各种排序方法的时间复杂度的分析方法。
二、实验要求及内容
要求编写的程序所能实现的功能包括:
1、从键盘输入要排序的一组元素的总个数
2、从键盘依次输入要排序的元素值
3、对输入的元素进行快速排序
4、对输入的元素进行折半插入排序
三、实验代码及相关注释
#include
typedef struct { int key;}RedType;
typedef struct { RedType r[100];int length;}SqList;
//1 快速排序的结构体
typedef struct {
int data[100];
int last;}Sequenlist;//2 折半插入排序的结构体
int Partition(SqList &L, int low, int high)
//1 寻找基准
{
L.r[0]=L.r[low];//子表的第一个记录作基准对象
int pivotkey = L.r[low].key;//基准对象关键字 while(low while(low L.r[low] = L.r[high];//小于基准对象的移到区间的左侧 while(low L.r[high] = L.r[low];//大于基准对象的移到区间的右侧 } L.r[low] = L.r[0];return low;} void QuickSort(SqList &L, int low, int high) //1 快速排序 { //在序列low-high中递归地进行快速排序 if(low < high) { int pivotloc= Partition(L, low, high); //寻找基准 QuickSort(L, low, pivotloc-1);//对左序列同样递归处理 QuickSort(L, pivotloc+1, high);//对右序列同样递归处理 } } Sequenlist *Sqlset() //2 输入要折半插入排序的一组元素 { Sequenlist *L; int i; L=(Sequenlist *)malloc(sizeof(Sequenlist)); L->last=0; cout<<“请输入要排序的所有元素的总个数:”; cin>>i; cout< cout<<“请依次输入所有元素的值:”; if(i>0) { for(L->last=1;L->last<=i;L->last++) cin>>L->data[L->last]; L->last--; } return(L);} middlesort(Sequenlist *L) //2 折半插入排序 { int i,j,low,high,mid;for(i=1;i<=L->last;i++){ L->data[0]=L->data[i]; low=1; high=i-1; while(low<=high) { mid=(low+high)/2; if(L->data[0] high=mid-1;//插入点在前半区 else low=mid+1;//插入点在后半区 } for(j=i;j>high+1;j--){ L->data[j]=L->data[j-1];} //后移 L->data[high+1]=L->data[0];//插入 } return 0;} int main(){ gg: cout<<“请选择功能(1.快速排序 2.折半插入排序 3.退出程序):”;int m;cin>>m;cout< if(m==1){ SqList L;int n;cout<<“请输入要排序的所有元素的总个数:”;cin>>n;cout< cin>>L.r[i].key; } cout< QuickSort(L,1,L.length); for(int j=1;j<=L.length;j++) { cout< } cout< cout< } if(m==2){ Sequenlist *L; int i; L=Sqlset(); cout< middlesort(L); cout<<“折半插入排序后为:”; for(i=1;i<=L->last;i++) { cout< } cout< cout< goto gg;} if(m==3){ exit(0); cout< 四、重要函数功能说明 1、Sequenlist *Sqlset() 输入要折半插入排序的一组元素 2、int Partition(SqList &L, int low, int high) 寻找快速排序的基准 3、void QuickSort(SqList &L, int low, int high) 快速排序 4、middlesort(Sequenlist *L) 折半插入排序 五、程序运行结果 下图仅为分别排序一次,可多次排序,后面有相关截图: 六、实验中遇到的问题、解决及体会 1、起初编写快速排序的程序时,我是完全按照老师PPT上的算法敲上去的,然后建立了一个SqList的结构体,调试运行时出现错误,仔细查看才意识到Partition函数中L中应该包含元素key,而我建立结构体时没有注意,然后我将key这个元素补充进去,继续调试,又出现错误,提示我Partition没有定义,我就觉得很奇怪,我明明已经写了函数定义,为什么会这样,当我又回过头来阅读程序时,我发现QuickSort函数中调用了Partition函数,但是我的Partition函数的定义在QuickSort函数的后面,于是我将Partition函数放到了QuickSort函数的前面,再次调试运行,就可以正常运行,得出结果了。这让我懂得,编程一定要认真仔细,不可大意马虎,否则又会花很多时间回过头来检查修改程序,得不偿失。 运行程序错误截图: 2、本来我是编写了两个程序,分别实现快速排序和折半插入排序的功能,但我后来想我是否可以将其合二为一,于是我想到用if选择语句用来实现不同的功能,从键盘输入功能选项m,if(m==1),可以进行快速排序,if(m==2),可以进行折半插入排序,于是我继续思考,我是否可以在一次运行程序中,多次对含有不同元素的序列进行排序,于是我用了goto语句,每次排序一次后,自动循环到选择语句,当不需要在排序的时候,可以从键盘输入3,退出程序,这样一来,程序变得更加实用和清晰明朗。这让我懂得,想要编出好的程序,要善于思考,在实现所需功能的前提下,多想问题,看是否能使程序更加实用简便。 修改程序前两个运行结果截图 (两个程序,调试运行两次,每次只能进行一次排序) 1、快速排序程序运行结果截图: 2、折半插入排序程序结果截图: 程序重要模块修改截图: 修改程序后运行截图: 通过在主函数中调用对栈操作的这些函数,完成对数据进制的转换。测试数据:将 9分别转换成 2-9等不同进制输出。详细设计 linkstack* set(//建立空堆栈 { linkstack *l;//定义堆栈类指针 l=NULL;//将指针付为空值 返回栈 l;} linkstack* push(linkstack *k,int a//向堆 栈中插入数据 { linkstack *l;//建立栈指针 l=(linkstack*malloc(sizeof(linkstack;/申请地址 l->data=a;向栈的数据域赋值 l 的指针域指向下一个结构体 k=l;返回堆栈 k;} int empty(linkstack *k//判断堆栈是否为空 { if(k==NULL//如果堆栈为空 return 1;//返回 1 else//否则 return 0;//返回 0 } int gettop(linkstack *k//取栈顶元素 { return k->data;//返回栈顶元素 } 详细设计 … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … void main(//主函数 { linkstack *m;//定义堆栈指针 int a,b,c;//定义整型变量 m=set(;调用建栈函数建栈 printf(“t请 输 入 要 转 换 的 数 字 :nt”;scanf(“%d”,&a;输入要转换的数 printf(“t请输入要转换成多少进制(范 围 2-9:nt”;scanf(“%d”,&c;while(a如果 a 不为 0 { b=a%c;//求余 m=push(m,b;a=a/c; } printf(“t该数的 %d进制表示为:”,c;while(!empty(m//如果不为空 { printf(“%d ”,gettop(m;//输出栈 顶元素 m=pop(m;//栈顶元素出栈 } printf(“nt”;} 指导教师:日期:年 月 日 合 肥 学 院 学 生 实 验 报 告 函数的返回的类型与接收函数值的变量类型不对,不能正常编译。程序结果如下图所示: 该软件按为在 dos 下运行的软件,第一步提示用户输入要转换的数据;输入数据后,会提示输入要转换成多少进制的数;然后就会输出结果。 教师签字: 日期: 年 月 日 测试结果 调试分析 操作说明 迷宫问题实验报告 ——实验二 专业:物联网工程 班级:物联网1班 学号:15180118 姓名:刘沛航 一、实验目的 本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以0和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。 二、实验内容 用一个m*m长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序对于任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 三、程序设计 1、概要设计 (1)设定栈的抽象数据类型定义 ADT Stack{ 数据对象:D={ai|ai属于CharSet,i=1、2…n,n>=0} 数据关系:R={|ai-1,ai属于D,i=2,3,…n} 基本操作: InitStack(&S) 操作结果:构造一个空栈 Push(&S,e) 初始条件:栈已经存在 操作结果:将e所指向的数据加入到栈s中 Pop(&S,&e) 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元素,并删除栈顶元素 Getpop(&S,&e) 初始条件:栈已经存在 操作结果:若栈不为空,用e返回栈顶元 StackEmpty(&S) 初始条件:栈已经存在 操作结果:判断栈是否为空。若栈为空,返回1,否则返回0 Destroy(&S) 初始条件:栈已经存在 操作结果:销毁栈s }ADT Stack (2)设定迷宫的抽象数据类型定义 ADT yanshu{ 数据对象:D={ai,j|ai,j属于{‘ ’、‘*’、‘@’、‘#’},0<=i<=M,0<=j<=N} 数据关系:R={ROW,COL} ROW={|ai-1,j,ai,j属于D,i=1,2,…M,j=0,1,…N} COL={|ai,j-1,ai,j属于D,i=0,1,…M,j=1,2,…N} 基本操作: InitMaze(MazeType &maze, int a[][COL], int row, int col){ 初始条件:二维数组int a[][COL],已经存在,其中第1至第m-1行,每行自第1到第n-1列的元素已经值,并以值0表示障碍,值1表示通路。 操作结果:构造迷宫的整形数组,以空白表示通路,字符‘0’表示障碍 在迷宫四周加上一圈障碍 MazePath(&maze){ 初始条件:迷宫maze已被赋值 操作结果:若迷宫maze中存在一条通路,则按如下规定改变maze的状态;以字符‘*’表示路径上的位置。字符‘@’表示‘死胡同’;否则迷宫的状态不变 } PrintMaze(M){ 初始条件:迷宫M已存在 操作结果:以字符形式输出迷宫 } }ADTmaze (3)本程序包括三个模块 a、主程序模块 void main(){ 初始化; 构造迷宫; 迷宫求解; 迷宫输出; } b、栈模块——实现栈的抽象数据类型 c、迷宫模块——实现迷宫的抽象数据类型 2、详细设计 (1)坐标位置类型: typedef struct{ int row;//迷宫中的行 int col;//......的列 }PosType;//坐标 (2)迷宫类型: typedef struct{ int m,n;int arr[RANGE][RANGE];}MazeType;//迷宫类型 void InitMaze(MazeType &maze, int a[][COL], int row, int col)//设置迷宫的初值,包括边缘一圈的值 Bool MazePath(MazeType &maze,PosType start, PosType end)//求解迷宫maze中,从入口start到出口end的一条路径 //若存在,则返回true,否则返回false Void PrintMaze(MazeType maze)//将迷宫打印出来 (3)栈类型: typedef struct{ int step;//当前位置在路径上的“序号” PosType seat;//当前的坐标位置 DirectiveType di;//往下一个坐标位置的方向 }SElemType;//栈的元素类型 typedef struct{ SElemType *base;SElemType *top;int stacksize;}SqStack;栈的基本操作设置如下: Void InitStack(SqStack & S) //初始化,设S为空栈(S.top=NUL)Void DestroyStack(Stack &S)//销毁栈S,并释放空间 Void ClearStack(SqStack & S)//将栈S清空 Int StackLength(SqStack &S)//返回栈S的长度 Status StackEmpty(SqStack &S)?、若S为空栈(S.top==NULL),则返回TRUE,否则返回FALSE Statue GetTop(SqStack &S,SElemType e) //r若栈S不空,则以e待会栈顶元素并返回TRUE,否则返回FALSE Statue Pop(SqStack&S,SElemType e)//若分配空间成功,则在S的栈顶插入新的栈顶元素s并返回TRUE //否则栈不变,并返回FALSE Statue Push(SqStack&S,SElemType &e)//若分配空间程控,则删除栈顶并以e带回其值,则返回TRUE //否则返回FALSE Void StackTraverse(SqStack &S,Status)(*Visit)(SElemType e))//从栈顶依次对S中的每个节点调用函数Visit 4求迷宫路径的伪码算法: Status MazePath(MazeType &maze,PosType start, PosType end){ //求解迷宫maze中,从入口start到出口end的一条路径 InitStack(s);PosType curpos = start;int curstep = 1;//探索第一部 do{ if(Pass(maze,curpos)){ //如果当前位置可以通过,即是未曾走到的通道块 FootPrint(maze,curpos);//留下足迹 e = CreateSElem(curstep,curpos,1);//创建元素 Push(s,e);if(PosEquare(curpos,end))return TRUE;curpos =NextPos(curpos,1);//获得下一节点:当前位置的东邻 curstep++;//探索下一步 }else{ //当前位置不能通过 if(!StackEmpty(s)){ Pop(s,e);while(e.di==4 &&!StackEmpty(s)){ MarkPrint(maze,e.seat);Pop(s,e);//留下不能通过的标记,并退回步 } if(e.di<4){ e.di++;Push(s,e);//换一个方向探索 curpos = NextPos(e.seat,e.di);//设定当前位置是该方向上的相块 }//if }//if }//else }while(!StackEmpty(s));return FALSE;} //MazePath 四、程序调试分析 1.首先呢,想自己读入数据的,回来发现那样,很麻烦,所以还是事先定义一个迷宫。 2.栈的元素类型 一开始有点迷惑,后来就解决了 3.本题中三个主要算法;InitMaze,MazePath和PrintMaze的时间复杂度均为O(m*n)本题的空间复杂度也是O(m*n) 五、用户使用说明 1.本程序运行在windows系列的操作系统下,执行文件为:Maze_Test.exe。 六、程序运行结果 1.建立迷宫: 2.通过1功能建立8*8的迷宫后,通过2功能继续建立迷宫内部: 通过建立自己设定单元数目建立迷宫内墙。3.通过3功能观察已建立的迷宫结构: 4.通过4功能确立迷宫起点和终点: (此处像我们随机选择4,4和2,7分别为起点终点) 5.执行5功能,判断是否有路径走出迷宫: 这种情况无法走出迷宫。 我们再次观察图像设4,4和1,6分别为起点终点,再运行5功能。 观察到可以成功解开迷宫步数从1依次开始。 七、程序清单 #include // 列值 #define MAXLENGTH 25 // 设迷宫的最大行列为25 typedef int MazeType[MAXLENGTH][MAXLENGTH];// 迷宫数组[行][列] typedef struct // 栈的元素类型 { int ord;// 通道块在路径上的"序号" PosType seat;// 通道块在迷宫中的"坐标位置" int di;// 从此通道块走向下一通道块的"方向"(0~3表示东~北)}SElemType; // 全局变量 MazeType m;// 迷宫数组 int curstep=1;// 当前足迹,初值为1 #define STACK_INIT_SIZE 10 // 存储空间初始分配量 #define STACKINCREMENT 2 // 存储空间分配增量 // 栈的顺序存储表示 typedef struct SqStack { SElemType *base;// 在栈构造之前和销毁之后,base的值为NULL SElemType *top; int stacksize; // 构造一个空栈S int InitStack(SqStack *S){ // 为栈底分配一个指定大小的存储空间 (*S).base =(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base) (*S).top =(*S).base; return 1; // 栈底与栈顶相同表示一个空栈 (*S).stacksize = STACK_INIT_SIZE;exit(0);}SqStack;// 顺序栈 // 栈顶指针 // 当前已分配的存储空间,以元素为单位 } // 若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。int StackEmpty(SqStack S){ if(S.top == S.base) else } // 插入元素e为新的栈顶元素。int Push(SqStack *S, SElemType e){ if((*S).top-(*S).base >=(*S).stacksize)// 栈满,追加存储空间 { } *((*S).top)++=e;return 1;} // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。int Pop(SqStack *S,SElemType *e){ if((*S).top ==(*S).base) 左 return 1;} // 定义墙元素值为0,可通过路径为1,不能通过路径为-1,通过路径为足迹 // 当迷宫m的b点的序号为1(可通过路径),return 1;否则,return 0。int Pass(PosType b){ if(m[b.x][b.y]==1) else return 0;return 1;return 0;*e = *--(*S).top; // 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向 (*S).base =(SElemType *)realloc((*S).base ,(*S).top =(*S).base+(*S).stacksize;(*S).stacksize += STACKINCREMENT;((*S).stacksize + STACKINCREMENT)* sizeof(SElemType));exit(0);if(!(*S).base)return 0;return 1;} void FootPrint(PosType a) // 使迷宫m的a点的序号变为足迹(curstep),表示经过 { m[a.x][a.y]=curstep;} // 根据当前位置及移动方向,返回下一位置 PosType NextPos(PosType c,int di){ PosType direc[4]={{0,1},{1,0},{0,-1},{-1,0}};// {行增量,列增量} // 移动方向,依次为东南西北 c.x+=direc[di].x;c.y+=direc[di].y;return c;} // 使迷宫m的b点的序号变为-1(不能通过的路径)void MarkPrint(PosType b){ m[b.x][b.y]=-1;} // 若迷宫maze中存在从入口start到出口end的通道,则求得一条 // 存放在栈中(从栈底到栈顶),并返回1;否则返回0 int MazePath(PosType start,PosType end){ SqStack S;PosType curpos;SElemType e; InitStack(&S);curpos=start;do { if(Pass(curpos)){// 当前位置可以通过,即是未曾走到过的通道块 FootPrint(curpos);// 留下足迹 e.ord=curstep;e.seat.x=curpos.x;e.seat.y=curpos.y;e.di=0;Push(&S,e);// 入栈当前位置及状态 curstep++;// 足迹加1 if(curpos.x==end.x&&curpos.y==end.y)// 到达终点(出口) } else return 1;curpos=NextPos(curpos,e.di);{// 当前位置不能通过 } if(!StackEmpty(S)){ } Pop(&S,&e);// 退栈到前一位置 curstep--;while(e.di==3&&!StackEmpty(S))// 前一位置处于最后一个方向(北){ } if(e.di<3)// 没到最后一个方向(北){ } e.di++;// 换下一个方向探索 Push(&S,e);curstep++;// 设定当前位置是该新方向上的相邻块 curpos=NextPos(e.seat,e.di); MarkPrint(e.seat);// 留下不能通过的标记(-1)Pop(&S,&e);// 退回一步 curstep--;}while(!StackEmpty(S));return 0;} // 输出迷宫的结构 void Print(int x,int y){ int i,j; for(i=0;i } } void main(){ PosType begin,end;int i,j,x,y,x1,y1,n,k;for(j=0;j //清屏函数 printf(“***************************************************nnn”);printf(“ 1请输入迷宫的行数,列数n”);printf(“ 2请输入迷宫内墙单元数n”);printf(“ 3迷宫结构如下n”);printf(“ 4输入迷宫的起点和终点n”);printf(“ 5输出结果n”);printf(“ 0退出n”);printf(“nn请选择 ”);scanf(“%d”,&n);switch(n){ case 1:{ printf(“请输入迷宫的行数,列数(包括外墙):(空格隔开)”); scanf(“%d%d”, &x, &y); for(j=1;j { for(i=1;i for(j=1;j // 迷宫左边列的周边即左边墙 m[j][y-1]=0;// 迷宫右边列的周边即右边墙 for(i=0;i // 迷宫上面行的周边即上边墙 m[x-1][i]=0;// 迷宫下面行的周边即下边墙 物 联 网 班 -15180118-刘沛 航 } }break; case 2: {printf(“请输入迷宫内墙单元数:”); scanf(“%d”,&j); printf(“请依次输入迷宫内墙每个单元的行数,列数:(空格隔开)n”); for(i=1;i<=j;i++) { scanf(“%d%d”,&x1,&y1); } m[x1][y1]=0; }break; case 3:{ Print(x,y);printf(“刘沛航建立的迷宫,定义墙元素值为0,可通过路径为1,输入0退出”);scanf(“%d”,&k);}break; case 4:{ printf(“请输入起点的行数,列数:(空格隔开)”); scanf(“%d%d”,&begin.x,&begin.y); printf(“请输入终点的行数,列数:(空格隔开)”); scanf(“%d%d”,&end.x,&end.y);}break; case 5:{ if(MazePath(begin,end))// 求得一条通路 { (六)实验名称:数据库及SQL语言 班级_______ 姓名__________ 学号______实验日期: 实验机时:3 学时实验成绩: ----------------- 一.实验目的: 1、学习数据库设计的一般过程及相关技术; 2、学习access数据库管理系统; 3、掌握数据库的输入、查询、更新操作。 二.实验内容: 1、需求陈述:某校图书馆要建立一个图书数据管理系统。该图书馆的图书(书名、分类号、作者、出版社)存放在不同的借阅室(室名),读者(姓名、系名、类别)在书架上找到所需图书后,可以到服务台办理借阅(借阅时间)。 设计要求: 分析需求,建立数据库的概念模型; 将概念模型转换为关系模型(注意:是否需要作规范化处理); 写出创建基本表的SQL语句; 写出以下查询要求的SQL语句: (1)所有“高等数学习题集”书的信息; (2)读者“李林”借了什么书? (3)“社会学原理”在哪个借阅室? 2、在access数据库管理系统中建立所设计的关系表; 3、向各表中输入一组实验数据(元组)(注意:关系完整性); 4、对数据库进行查询。 三.实验结果: 1、实体-关系图; 2、数据库表; 3、创建基本表的语句; 实验项目:选择结构程序设计 实验日期:2012年3月26日 实验原理:利用 if 或switch 语句实现多分支选择结构程序设计 实验仪器:PC 实验内容及步骤: 内容:利用scanf函数读入变量x的值,利用if或switch 语句判断x所在的区间,并求函数在x 处的函数值 步骤: 1、程序设计: (1)定义变量;(2)利用scanf给变量x赋值;(3)利用 if 或 switch 判断x所在范围执行相应计算,以求得函数在x 处的函数值;(4)输出相应函数值 2、输入程序、调试并运行通过。 实验报告 实验目的要求:抄写指导手册上相应章节的目的要求 实验环境:windows XPTC或 VC 实验内容:完整抄写P77页4.5小题 实验步骤:直接写代码 实验结果:根据实验题目自己输入相应值并观察程序输出结果 【数据结构实验3报告doc】推荐阅读: 《数据结构》实验报告——排序05-30 福州大学数据结构实验报告-线性表06-24 实验数据结构与算法06-23 数据处理上机实验报告06-25 北邮数据库实验报告07-07 sql数据库实验报告07-27 基尔霍夫定理的验证实验报告(含数据处理)09-16 数据结构和算法06-10 数据结构课程总结06-27 数据结构期末总结07-13数据结构实验3报告doc 篇8
数据结构迷宫问题实验报告 篇9
数据结构实验3报告doc 篇10
选择结构实验报告 篇11