文档库 最新最全的文档下载
当前位置:文档库 › C++实验报告2015

C++实验报告2015

C++实验报告2015
C++实验报告2015

《测绘程序设计(https://www.wendangku.net/doc/d28000671.html,)》

上机实验报告

(Visual C++.Net)

班级:

学号:

姓名:

序号:

二零一五年六月

目录

实验1 Visual C++.Net环境和程序设计初步……………………………………………………错误!未定义书签。

实验2 控制结构程序设计 (5)

验3 数组与指针、函数 (18)

实验4 类的创建 (26)

实验5 文件 (30)

实验6 图形程序设计 (36)

实验7 点云数据处理 (44)

实验8 平差程序设计基础 (50)

总结 (58)

.

实验1 Visual C++.net环境和简单程序设计

一、实验目的

?掌握Visual https://www.wendangku.net/doc/d28000671.html,的安装和启动。

?了解VC++ 2008的菜单系统、工具栏和各种基本窗体。

?理解VC++.net开发应用程序的步骤。

?掌握基于对话框的程序设计。

?掌握按钮、文本框和标签框的基本使用方法

?掌握使用MSDN帮助文档

设计思路:在按钮下面添加程序。根据海伦公式添加4个变量a.b.c.s的编辑框。

界面设计:

主要代码:

class CMyGJJ_0145130602_ex1Dlg : public CDialog

{

// 构造

public:

CMy GJJ_0145130602_ex1Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据

enum { IDD = IDD_MY GJJ_0145130602_ex1_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

HICON m_hIcon;

// 生成的消息映射函数

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

afx_msg void OnBnClickedOk();

afx_msg void OnBnClickedCancel();

double m_a;

double m_b;

double m_c;

double m_s;

afx_msg void OnBnClickedButton1();

};

HCURSOR CMyGJJ_0145130602_ex1Dlg::OnQueryDragIcon() {

return static_cast(m_hIcon);

}

double culsjx(double x,double y, double z)

{

double ret,p;

p = (x+y+z)/2;

ret = sqrt(p*(p-x)*(p-y)*(p-z));

return ret ;

}

void CMyGJJ_0145130602_ex1Dlg::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

//OnOK();

UpdateData(TRUE);

m_s = culsjx(m_a ,m_b,m_c);

UpdateData(FALSE);

}

void CMy GJJ_0145130602_ex1Dlg::OnBnClickedCancel() {

// TODO: 在此添加控件通知处理程序代码

//OnCancel();

m_a=0;

m_b=0;

m_c=0;

m_s=0;

UpdateData(FALSE);

}

void CMyGJJ_0145130602_ex1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 exit(0);

}

运行结果:

实验2 控制结构程序设计

一、实验目的

? 掌握VC++.net 语言的基本语法;

? 理解顺序结构、选择结构和循环结构程序设计的特点及应用; ? 掌握对基于对话框的MFC 应用程序设计方法; ? 掌握一些简单算法。

1.编写一个方位角计算程序。提示:先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。

dx

dy arctg

A ='

设计思路:x,y同时大于0在第一象限,方位角等于arctan(y/x);X>0,Y<0在第二象限,方位角等于arctan(y/x)+90;X<0,Y<0在第三象限,方位角等于arctan(y/x)+180;X<0,Y>0在第四象限,方位角等于arctan(y/x)+270;

界面设计:

主要代码:

class CGJJ_0602_ex21Dlg : public CDialog

{

// 构造

public:

CGJJ_0602_ex21Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据

enum { IDD = IDD_GJJ_0602_EX21_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

HICON m_hIcon;

// 生成的消息映射函数

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

double x1;

double x2;

afx_msg void OnEnChangeEdit4();

double y1;

double y2;

double A;

double象限;

afx_msg void OnEnChangeEdit1();

afx_msg void OnBnClickedOk();

afx_msg void OnBnClickedCancel();

afx_msg void OnBnClickedButton1();

afx_msg void OnEnChangeEdit3();

};

void CGJJ_0602_ex21Dlg::OnBnClickedOk()

{

x1=0;

y1=0;

x2=0;

y2=0;

UpdateData(0);

}

void CGJJ_0602_ex21Dlg::OnBnClickedCancel() {

// TODO: 在此添加控件通知处理程序代码

OnCancel();

}

void CGJJ_0602_ex21Dlg::OnBnClickedButton1() {

// TODO: 在此添加控件通知处理程序代码

UpdateData(1);

A=((y2-y1)/(x2-x1));

if ((y2-y1)>0&&(x2-x1)>0)

象限=1;

else if ((y2-y1)>0&&(x2-x1)<0)

象限=2;

else if ((y2-y1)<0&&(x2-x1)<0)

象限=3;

else

象限=4;

UpdateData(0);

}

运行结果:

2.设计同一参考椭球下的三维地心坐标(笛卡儿坐标系)与大地坐标系转换的程序。(提示:用do …while 迭代,B 、H 初始为0进行迭代,直到H 的精度达到0.00001米)

注意:东经0~180(Y>0),西经:0~-180(Y<0)

式中,B 、L 、H 为椭球面上的大地纬度、大地经度、大地高;X 、Y 、Z 为空间直角坐标;N 为卯酉圈曲率半径,e 为椭球的偏心率,a 为椭球的长半径,b 为椭球的短半径。 (WGS84椭球参数:长半径a=6378137m ,扁率α=1/298.257223563)

设计思路:先设计好对话框,根据以上公式添加变量然后根据公式编写代码。 界面设计:

()

???

? ?

?+-?+=)/(1)(arctan

222H N N e Y X Z B N

B

Y X H -+=

cos 2

2?

?

? ??=X Y L arctan B

e a N 22sin 1-=

2

2

2a b a e -=

2

2

α-=e ??

??

???+-=+=+=B

H e N Z L B H N Y L

B H N X sin ])1([sin cos )(cos cos )(2

主要代码:

class CGJJ_0602_ex22Dlg : public CDialog

{

// 构造

public:

CGJJ_0602_ex22Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据

enum { IDD = IDD_GJJ_0602_EX22_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

HICON m_hIcon;

// 生成的消息映射函数

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

double B;

double L;

double H;

double X;

double Y;

double Z;

afx_msg void OnBnClickedButton2();

afx_msg void OnBnClickedButton1();

};

#define PI 3.14159265358979323846

const double f=1/298.257223563;

double N,e=sqrt(2*f-f*f); //扁率f,第一偏心率e,卯酉圈半径N

double a=6378137;

void CGJJ_0602_ex22Dlg::OnBnClickedButton1()

{

UpdateData(TRUE); //笛卡尔坐标转换为大地坐标

double dH,H0;

double B2,L2,S,S1;

int D,M,D1,M1;

if(fabs(X)>=1e-5)

L=atan(Y/X)*180/PI;

else L=0;

if(X>0)

{

L=L;

}

else if(X<0&&Y>0) //计算经度

{

L=L+180;

}

else

{

L=L-180;

}

if((fabs(X)>=(1e-5))||(fabs(Y)>=(1e-5)))

{

B=atan(Z/sqrt(X*X+Y*Y));

H=0;

do

{

N=a/sqrt(1-e*e*sin(B)*sin(B));

H0=sqrt(X*X+Y*Y)/cos(B)-N;

B=atan(Z/(sqrt(X*X+Y*Y)*(1-e*e*N/(N+H)))); //迭代运算得到H,B

dH=H0-H;

H=H0;

}

while(fabs(dH)>=(1e-5)); //当H的精度达

到.00001时跳出循环

}

else

{

B=0;

N=a/sqrt(1-e*e*sin(B)*sin(B));

H=sqrt(X*X+Y*Y)/cos(B)-N;

}

B=B*180/PI;

B=B+(1e-10);

L=L+(1e-10);

D=int(B);

D1=int(L);

B2=(B-D)*60; //弧度转换成度分秒格式

L2=(L-D1)*60;

M=int(B2);

M1=int(L2);

S=(B2-M)*60;

S1=(L2-M1)*60;

B=D+M/100+S/(1e4);

L=D1+M1/100+S1/(1e4);

UpdateData(FALSE);

}

void CGJJ_0602_ex22Dlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

double b,l,b1,l1;

int D,M,D1,M1;

double S,S1;

D= int(B);

D1 = int(L);

M = int((B - D) * 100);

M1= int((L - D1) * 100);

S = ((B-D) * 100 - M) * 100;

S1 = ((L-D1) * 100 - M1) * 100;

b1= D+ M / 60 + S / 3600; //度分秒转化为弧度

l1= D1 + M/ 60 + S1 / 3600;

b=(b1/180)*PI;

l=(l1/180)*PI;

N=a/sqrt(1-e*e*sin(b)*sin(b));

X=(N+H)*cos(b)*cos(l); //大地测量坐标转化为笛卡尔坐标 Y=(N+H)*cos(b)*sin(l);

Z=(N*(1-e*e)+H)*sin(b);

UpdateData(FALSE);

}

运行结果:

3.编写一个后方交会计算程序。

3.1基本原理及计算公式

若将Pa、Pb、Pc看成权,则P点的坐标即为三个已知点的加权平均值

设计思路:用于输入3个已知点的坐标和三个观测角α、β和γ,以及用于输出待定点坐标的文本框(12个)、静态标签框和Button按钮。根据公式以上公式编写代码。

界面设计:

主要代码:

class CGJJ_0602_ex23Dlg : public CDialog

{

// 构造

public:

CGJJ_0602_ex23Dlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据

enum { IDD = IDD_GJJ_0602_EX23_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

HICON m_hIcon;

// 生成的消息映射函数

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

double XA;

double XB;

double YB;

double YA;

double XC;

double YC;

double XP;

double YP;

doubleα;

doubleγ;

doubleβ;

afx_msg void OnBnClickedButton1();

};

#define PI 3.14159265358979323846

void CGJJ_0602_ex23Dlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

double afAB,afAC,afBC,afBA,afCA,afCB,A,B,C,Pa,Pb,Pc;

int D1,M1,D2,M2;

double S1,S2,α,β,γ,α,β,γ;

//将alfa转换成度

D1=int(α);

M1=int((α-D1)*100);

S1=((α-D1)*100-M1)*100;

α=D1+M1/60+S1/3600;

α=α*PI/180;

//将bet转换成度

D2=int(β);

M2=int((β-D2)*100);

S2=((β-D2)*100-M2)*100;

β=D2+M2/60+S2/3600;

β=β*PI/180;

//计算gama1的值

γ=180-β-α;

γ=γ*PI/180;//将gama1的值转换成弧度

//计算已知点的三个内角

afAB=atan((YB-YA)/(XB-XA));

afAC=atan((YC-YA)/(XC-XA));

afBA=atan((YA-YB)/(XA-XB));

afBC=atan((YC-YB)/(XC-XB));

afCA=atan((YA-YC)/(XA-XC));

afCB=atan((YB-YC)/(XB-XC));

A=afAB-afAC;

B=afBC-afBA;

C=afCA-afCB;

//判断点是否在危险圆上若不在则计算P点坐标

if(α+β+C<170||α+β+C>190)

{

Pa=(tan(α)*tan(A))/(tan(α)-tan(A));

Pb=(tan(β)*tan(B))/(tan(β)-tan(B));

Pc=(tan(γ)*tan(C))/(tan(γ)-tan(C));

XP=(XA*Pa+XB*Pb+XC*Pc)/(Pa+Pb+Pc);

YP=(YA*Pa+YB*Pb+YC*Pc)/(Pa+Pb+Pc);

}

else//若在则弹出“该点位于危险圆上”

MessageBox(_T("该点位于危险圆上"));

UpdateData(FALSE);

//OnCancel();

}

运行结果:

实验3 数组与指针、函数

一、实验目的

掌握函数的定义、引用及应用方法。

二、实验内容

1.编写一个求任意多边形面积的程序。提示:通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。要求计算部分写成函数的形式,使计算程序与界面无关。

动态数组

创建动态数组

结构体的定义

多边形面积计算原理及算法

计算原理:

例如上图:

))((2

1

))((21))((21))((214114344323321221y y x x y y x x y y x x y y x x P -++-++-++-+=

面积计算的算法:

经整理后得:)11,,2,1())((211

11=+==-+=∑=++i n i n i Y Y X X P n

i i i i i 时,;当

2高斯投影正反算计算函数设计

编写高斯投影正算与反算的两个函数,并设计简单界面对函数计算的正确性进行测试。

正算公式:

反算公式:

???

???????

??

?''-++-'

'+''+-''+''''=''+-''+''++-'

'+''''+=52224255

322336

4256

4

4223222)5814185(cos 120)1(cos 6cos )5861(cos sin 720)495(cos sin 24cos sin 2l t t t B N l t B N l B N y l t t B B N l t B B N l B B N X x ηηρηρρρηηρρB

e a N 22sin 1-=

tan

t B =B

e cos '=ηa

b

a e 2

2-=

b

b a e 2

2

-=

'ρ'

'l '

'是弧度转换为秒的转换单位,

是经度L 同当前带中央子午线的差值,单位为秒。

X 为当前点到赤道的子午线长度。

)

8sin 6sin 4sin 2sin )(1(864202B A B A B A B A B A e a X ++++-

=a

e

长半轴

第一偏心率

移动通信实验线性分组码卷积码实验

实验二抗衰落技术实验(4学时) 1.线性分组码实验 2.卷积码实验 姓名: 学号: 班级: 日期: 成绩:

1、线性分组码实验 一、实验目的 了解线性分组码在通信系统中的意义。 掌握汉明码编译码及其检错纠错原理,理解编码码距的意义。二、实验模块 主控单元模块 2号数据终端模块 4号信道编码模块 5号信道译码模块 示波器 三、实验原理

汉明码编译码实验框图 2、实验框图说明 汉明码编码过程:数字终端的信号经过串并变换后,数据进行了分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。 注:为方便对编码前后的数据进行对比观测,本实验中加入了帧头指示信号。帧头指示信号仅用于线性分组码编码时将输入信号的比特流进行分组,其上跳沿指示了分组的起始位置。 四、实验步骤 (注:实验过程中,凡是涉及到测试连线改变或者模块及仪器仪表的更换时,都需先停止运行仿真,待连线调整完后,再开启仿真进行后续调节测试。) 任务一汉明码编码规则验证 概述:本项目通过改变输入数字信号的码型,观测延时输出,编码输出及译码输出,验证汉明码编译码规则。 1、登录e-Labsim仿真系统,创建实验文件,选择实验所需模块和示波器。 2、按表格所示进行连线。 3、调用示波器观测2号模块的DoutMUX和4号模块的编码输出TH4编码数据,

6、此时系统初始状态为:2号模块提供32K编码输入数据,4号模块进行汉明码编码,无差错插入模式,5号模块进行汉明码译码。 7、实验操作及波形观测。 0000 0001 0010

0100 0101

0111 1000

C语言实验报告3

实验报告 实验名称:最简单的C程序设计——顺序程序设计成绩: 实验日期: 2011 年 10 月 24 日实验报告日期: 2011 年 10 月24 日 实验者:桂婷 一、实验目的 1、掌握C语言中使用最多的一种语句——赋值语句的使用方法。 2、掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 3、进一步掌握编写程序和调试程序的方法。 二、实验内容 1、输入程序并运行结果。 2、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。编程序,用scanf输入数据,输出计算结果/。 3、计算存款利息。 有1000元,想存5年,可探子以下5种办法存: (1)一次存5年期; (2)先存2年期,到期后将本息再存3年期; (3)先存3年期,到期后将本息再存2年期; (4)存1年期,到期后将本息存再存1年期,连续存5次; (5)存活期存款。活期利息每一季度结算一次。 三、实验步骤: 1、

总结:1、变量在定义时就赋了初值。 2、两次的printf语句输出都指定了要输出数据的长度和小数点。2、 总结:1、程序在定义时只对部分变量赋了初值,这是允许的。 2、在计算时,乘号是用*表示,不能省略。 3、同样,在输出时指定了输出格式,长度,小数点位数。 3、

总结:1、用scanf语句输入数据,要与指定的格式一样。 2、程序用到了数学公式,调用“include ” 4、实验出现的问题、实验结果分析 1、程序在运行时是自上而下同,自左向右的。运到调用函数则会跳 转,但调用完了仍然回到主函数中。 2、printf语句中的常量是按原样输出的。 3、注意赋值语句的使用。 五、实验小结和思考 1、如果在程序2中不指定输出的长度和小数位数,看运行结果。 2、在程序3中不包含“include ”会怎样? 3、程序3若不给变量赋初值会出现什么情况。

数据库上机实验7实验报告

上机实验七——视图的建立及操作 一、实习目的: 掌握创建、删除、和查询视图的方法,验证可更新视图和不可更新视图。 二、实习准备: 1.复习第三章3.6节视图 2. 完成习题三第16题中的各项操作的SQL语句。 3.了解可更新视图和不课更新视图 三、实习内容:验证习题三第16题中的各项操作的SQL语句。 ①建立01311班选修了1号课程的学生视图Stu_01311_1 CREATE VIEW Stu_01311_1 AS SELECT * FROM Grade WHERE Cno='1'AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ②建立01311班选修了1号课程并且成绩不及格的学生视图Stu_01311_2 CREATE VIEW Stu_01311_2 AS SELECT * FROM Grade

WHERE Cno='1'AND Gmark<60 AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ③建立视图Stu_year,由学生学号、姓名、出生年份组成 CREATE VIEW Stu_year AS SELECT Sno,Sname,year=2001-Sage FROM Student ④查询1990年以后出生的学生姓名 SELECT Sname FROM Student WHERE 2001-Sage<1990; ⑤查询01311班选修了1号课程并且成绩不及格的学生的学号、姓名、出生年份SELECT Sno,Sname,2014-Sage FROM Student WHERE Clno=01311 AND EXISTS(

实验九 (2,1,5)卷积码编码译码技术

实验九 (2,1,5)卷积码编码译码技术 一、实验目的 1、掌握(2,1,5)卷积码编码译码技术 2、了解纠错编码原理。 二、实验内容 1、(2,1,5)卷积码编码。 2、(2,1,5)卷积码译码。 三、预备知识 1、纠错编码原理。 2、(2,1,5)卷积码的工作原理。 四、实验原理 卷积码是将发送的信息序列通过一个线性的,有限状态的移位寄存器而产生的编码。通常卷积码的编码器由K级(每级K比特)的移位寄存器和n个线性代数函数发生器(这里是模2加法器)组成。 若以(n,k,m)来描述卷积码,其中k为每次输入到卷积编码器的bit数,n 为每个k元组码字对应的卷积码输出n元组码字,m为编码存储度,也就是卷积编码器的k元组的级数,称m+1= K为编码约束度m称为约束长度。卷积码将k 元组输入码元编成n元组输出码元,但k和n通常很小,特别适合以串行形式进行传输,时延小。与分组码不同,卷积码编码生成的n元组元不仅与当前输入的k元组有关,还与前面m-1个输入的k元组有关,编码过程中互相关联的码元个数为n*m。卷积码的纠错性能随m的增加而增大,而差错率随N的增加而指数下降。在编码器复杂性相同的情况下,卷积码的性能优于分组码。 编码器 随着信息序列不断输入,编码器就不断从一个状态转移到另一个状态并同时输出相应的码序列,所以图3所示状态图可以简单直观的描述编码器的编码过程。因此通过状态图很容易给出输入信息序列的编码结果,假定输入序列为110100,首先从零状态开始即图示a状态,由于输入信息为“1”,所以下一状态为b并输出“11”,继续输入信息“1”,由图知下一状态为d、输出“01”……其它输入信息依次类推,按照状态转移路径a->b->d->c->b->c->a输出其对应的编码结果“110101001011”。 译码方法 ⒈代数 代数译码是将卷积码的一个编码约束长度的码段看作是[n0(m+1),k0(m+1)]线性分组码,每次根据(m+1)分支长接收数字,对相应的最早的那个分支上的信息数字进行估计,然后向前推进一个分支。上例中信息序列 =(10111),相应的码序列 c=(11100001100111)。若接收序列R=(10100001110111),先根据R 的前三个分支(101000)和码树中前三个分支长的所有可能的 8条路径(000000…)、(000011…)、(001110…)、(001101…)、(111011…)、(111000…)、(110101…)和(110110…)进行比较,可知(111001)与接收

卷积信号实验报告

信号与系统上机实验报告一连续时间系统卷积的数值计算 140224 班张鑫学号 14071002 一、实验原理 计算两个函数的卷积 卷积积分的数值运算实际上可以用信号的分段求和来实现,即: 如果我们只求当 t = n? t1 是r ( t )的值,则由上式可以得到: ?t足够小时,r(t2)就是e(t)和f(t)卷积积分的数值近似值由上面的公式可 当1 以得到卷积数值计算的方法如下: (1)将信号取值离散化,即以为周期,对信号取值,得到一系列宽度间隔为 的矩形脉冲原信号的离散取值点,用所得离散取值点矩形脉冲来表示原来的连续时间信号; (2)将进行卷积的两个信号序列之一反转,与另一信号相乘,并求积分,所得为t=0时的卷积积分的值。以为单位左右移动反转的信号,与另一信号相乘求积 分,求的t<0和t>0时卷积积分的值; (3)将所得卷积积分值与对应的t标在图上,连成一条光滑的曲线,即为所求卷积积分的曲线。 1

信号与系统上机实验报告一二、处理流程图 三、C程序代码 #include"stdafx.h" #include"stdio.h" //#include "stdilb.h" float u(float t) { while (t>= 0) return(1); while (t<0) return(0); } float f1(float t) { return(u(t+2)-u(t-2)); } float f2(float t) { return(t*(u(t)-u(t-2))+(4-t)*(u(t-2)-u(t-4))); } int_tmain(int argc, _TCHAR* argv[]) {

C语言实验报告

《C语言程序设计实训1》报告 设计题目:基于数组的学生信息管理系统学院名称:信息科学技术学院

专业:计算机科学与技术 班级: 姓名:学号 指导教师: 提交日期: 2014年12月22日 一、实验内容 编写并调试程序,实现学校各专业班级学生信息的管理。10个学生的信息存储在文件中。在头文件中定义学生信息的结构体类型,包括: 学号、姓名、专业、班级、3门成绩;和符号常量N(学生数)。(同一班 级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)

二、实验要求 (1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择, 调用相应的函数。 STU student[N]; 函数 #include "" void main() { int i,n,id,num,m,sub,corse;将从文件中读取10个人的信\n"); printf("\n2.您将从文件中随机读取第n(0<=n<=9)个学生的信息\n") printf("\n3.您将根据某一班级某一专业总分超过多少进行查找\n"); printf("\n4.您将求某一课程分数最高的学生序号的下标\n"); printf("\n5.您将对平均成绩由低到高进行简单选择排序法\n ");

printf("\n6.您将对某一个班的平均成绩由低到高进行起泡排序法\n"); printf("\n7.您将对某门专业的学生的某门课程成绩由低到高进行直接插入排序法\n"); printf("\n8.您将把学生信息存入文件\n"); scanf("%d",&id); getchar(); switch(id){ case 1: { printf("\n从文件中读取信息\n"); Input(students,sizeof(students)/sizeof(STU));Sort_select 函数 #include "" void Sort_select(STU * p) { int i,j,k; float sum,ave[N],t; STU tem; for(i=0;i

C实验报告7参考答案

《高级语言程序设计》实验报告班级:学号:姓名:成绩: 实验7 函数程序设计 一、实验目的 1.掌握函数定义的方法。 2.掌握函数实参与形参的传递方式。 3.掌握函数的嵌套调用和递归调用的方法。 4.了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1 (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。纠正程序中存在的错误,以实现其功能。程序以文件名存盘。 #include <> #include <> void sub( char s[], char t[] ) { int i, d; d=strlen( s ); for( i=1; i< d ; i++ ) for( i=0; i< d ; i++ ) t[i]=s[d-1-i] ; for( i=0; i #include<> #define ARR_SIZE = 80; #define ARR_SIZE 80 void Inverse(char str[]) void Inverse(char str[]);

卷积编码实验报告

实验名称:___ 卷积编码_______ 1、使用MATLAB进行卷积编码的代码编写、运行、仿真等操作; 2、熟练掌握MATLAB软件语句; 3、理解并掌握卷积编码的原理知识。 二、实验原理 卷积码是由Elias于1955 年提出的,是一种非分组码,通常它更适用于前向纠错法,因为其性能对于许多实际情况常优于分组码,而且设备较简单。 卷积码的结构与分组码的结构有很大的不同。具体地说,卷积码并不是将信息序列分成不同的分组后进行编码,而是将连续的信息比特序列映射为连续的编码器输出符号。卷积码在编码过程中,将一个码组中r 个监督码与信息码元的相关性从本码组扩展到以前若干段时刻的码组,在译码时不仅从此时刻收到的码组中提取译码信息,而且还可从与监督码相关的各码组中提取有用的译码信息。这种映射是高度结构化的,使得卷积码的译码方法与分组译码所采用的方法完全不同。可以验证的是在同样复杂度情况下,卷积码的编码增益要大于分组码的编码增益。对于某个

特定的应用,采用分组码还是卷积码哪一种更好则取决于这一应用的具体情况和进行比较时可用的技术。 (一)卷积编码的图形表示 卷积码的编码器是由一个有k 个输人位,n 个输出位,且有m 个移位寄存器构成的有限状态的有记忆系统,其原理如图1所示。 图1 卷积码编码器的原理图 描述这类时序网络的方法很多,它大致可分为两大类型:解析表示法与图形表示法。在解析法中又可分为离散卷积法、生成矩阵法、码多项式法等;在图形表示法中也可分为状态图法、树图法和网络图法等。 图2给出的是一个生成编码速率为1/2 卷积码的移位寄存器电路。输人比特在时钟触发下从左边移人到电路中,每输入一位,分别去两个模2加法器的输出值并复用就得到编码器的输出。对这一编码,每输入一比特就产生两个输出符号,故编码效率为

数据库实验报告记录7

数据库实验报告记录7

————————————————————————————————作者:————————————————————————————————日期:

《数据库原理》实验报告 题目:实验七事务与并发控制学号姓名班级日期Xxxx Xx Xxx 2016.11.10 一. 实验内容、步骤以及结果 假设学校允许学生将银行卡和校园卡进行绑定,在 student 数据库中有如下的基本表,其中校园卡编号 cardid 即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡 ID,工行卡 ID,银行卡余额 campus_card(studcardid,balance) //校园卡 ID,校园卡余额数据创建的代码:

1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分) 修改后的结果: 2.针对本题的数据库和表,分别用具体的例子展现四种数据不一致问题:丢失修改、 读脏数据、不可重复读和幻读(删除和插入)。(40分,每种数据不一致10分) 丢失修改: --事务一: begin tran declare @balance decimal(10,2) select @balance=balance from campus_card where studcardid='20150033' waitfor delay'00:00:05' set @balance=@balance-10 update campus_card set balance=@balance where studcardid='20150033' commit tran go select balance from campus_card where studcardid='20150033'

MATLAB实现卷积码编译码-

本科生毕业论文(设计) 题目:MATLAB实现卷积码编译码 专业代码: 作者姓名: 学号: 单位: 指导教师: 年月日

目录 前言----------------------------------------------------- 1 1. 纠错码基本理论---------------------------------------- 2 1.1纠错码基本理论 ----------------------------------------------- 2 1.1.1纠错码概念 ------------------------------------------------- 2 1.1.2基本原理和性能参数 ----------------------------------------- 2 1.2几种常用的纠错码 --------------------------------------------- 6 2. 卷积码的基本理论-------------------------------------- 8 2.1卷积码介绍 --------------------------------------------------- 8 2.1.1卷积码的差错控制原理----------------------------------- 8 2.2卷积码编码原理 ---------------------------------------------- 10 2.2.1卷积码解析表示法-------------------------------------- 10 2.2.2卷积码图形表示法-------------------------------------- 11 2.3卷积码译码原理---------------------------------------------- 15 2.3.1卷积码三种译码方式------------------------------------ 15 2.3.2V ITERBI译码原理---------------------------------------- 16 3. 卷积码编译码及MATLAB仿真---------------------------- 18 3.1M ATLAB概述-------------------------------------------------- 18 3.1.1M ATLAB的特点------------------------------------------ 19 3.1.2M ATLAB工具箱和内容------------------------------------ 19 3.2卷积码编码及仿真 -------------------------------------------- 20 3.2.1编码程序 ---------------------------------------------- 20 3.3信道传输过程仿真-------------------------------------------- 21 3.4维特比译码程序及仿真 ---------------------------------------- 22 3.4.1维特比译码算法解析------------------------------------ 23 3.4.2V ITERBI译码程序--------------------------------------- 25 3.4.3 VITERBI译码MATLAB仿真----------------------------------- 28 3.4.4信噪比对卷积码译码性能的影响 -------------------------- 28

卷积码实验报告

苏州科技大学天平学院电子与信息工程学院 信道编码课程设计报告 课设名称卷积码编译及译码仿真 学生姓名圣鑫 学号1430119232 同组人周妍智 专业班级通信1422 指导教师潘欣欲 一、实验名称 基于MAATLAB的卷积码编码及译码仿真 二、实验目的 卷积码就是一种性能优越的信道编码。它的编码器与译码器都比较容易实现,同时它具有较强的纠错能力。随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。本实验简明地介绍了卷积码的编码原理与Viterbi译码原理。并在SIMULINK模块设计中,完成了对卷积码的编码与译码以及误比特统计整个过程的模块仿真。最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。经过仿真与实测,并对测试结果作了分析。 三、实验原理

1、卷积码编码原理 卷积码就是一种性能优越的信道编码,它的编码器与解码器都比较易于实现,同时还具有较强的纠错能力,这使得它的使用越来越广泛。卷积码一般表示为(n,k,K)的形式,即将 k个信息比特编码为 n 个比特的码组,K 为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的 n 各码元不经与当前组的 k 个信息比特有关,还与前 K-1 个输入组的信息比特有关。编码过程中相互关联的码元有 K*n 个。R=k/n 就是编码效率。编码效率与约束长度就是衡量卷积码的两个重要参数。典型的卷积码一般选 n,k 较小,K 值可取较大(>10),但以获得简单而高性能的卷积码。 卷积码的编码描述方式有很多种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述,树图描述,网格图描述等。 2、卷积码Viterbi译码原理 卷积码概率译码的基本思路就是:以接收码流为基础,逐个计算它与其她所 有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正就是最大似然的准则。卷积码的最大似然译码与分组码的最大似然译码在原理上就是一样的,但实现方法上略有不同。主要区别在于:分组码就是孤立地求解单个码组的相似度,而卷积码就是求码字序列之间的相似度。基于网格图搜索的译码就是实现最大似然判决的重要方法与途径。用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。这样一直进行到最后第 L 级(L 为发送序列的长度)。由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi 译码正就是基于这种想法。对于(n, k, K )卷积码,其网格图中共 2kL 种状态。由网格图的前 K-1 条连续支路构成的路径互不相交,即最初 2k_1 条路径各不相同,当接收到第 K 条支路时,每条路径都有 2 条支路延伸到第 K 级上,而第 K 级上的每两条支路又都汇聚在一个节点上。在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加

2016年C语言实验报告

通知 各位老师: 本学期非计算机专业《计算机程序设计基础(C语言)》课实验报告要求: 1.统一用《武汉科技大学实验报告》本写。本学期交三次实验报告。 ①循环结构程序设计。 ②数组。 ③函数。 要求学生在完成以下实验报告,参考《C语言程序设计课程实验与题解》中的要求认真完成。 实验1 循环结构程序设计 一、实验目的 1.熟悉用while语句,do-while语句和for语句实现循环的方法。 2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。 3.熟悉break语句和continue语句用法的不同之处。 二、实验内容 【例】以下程序,输出下三角形状的乘法九九表。 #include void main() { int i,j; for (i=1;i<=9;i++) /* 打印表头*/ printf(" %4d",i); printf("%c",'\n'); for (i=0;i<=50;i++) printf("%c",'_'); printf("%c",'\n'); for (i=1;i<=9;i++) /* 循环体执行一次,打印一行*/ { for (j=1;j<=i;j++) printf(" %4d",i*j); /* 循环体执行一次,打印一个数据*/ printf("%c",'\n'); /* 每行尾换行*/ } printf("%c",'\n'); } 输入并执行该程序,观察输出结果,试着修改程序打印上三角形状的乘法九九表。 三、编程序并上机调试运行。 1.打印出所有“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和正好等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。 解题思路:根据题目要求只要分别求出一个三位数的个位、十位、百位上的数字,然后判断是否满足(某一三位数a=a的百位的立方+a的十位的立方+a的个位的立方)这个公式,满足这个三位数就是“水仙花数”。 2.李先生岁数的平方与他的夫人的岁数之和是1053,而他的夫人的岁数的平方与他

matlab实验报告

MATLAB 数学实验报告 指导老师: 班级: 小组成员: 时间:201_/_/_

Matlab 第二次实验报告 小组成员: 1 题目:实验四,MATLAB 选择结构与应用实验 目的:掌握if 选择结构与程序流程控制,重点掌握break,return , pause语句的应用。 问题:问题1:验证“哥德巴赫猜想” ,即:任何一个正偶数(n>=6)均可表示为两个质数的和。要求编制一个函数程序,输入一个正偶数,返回两个质数的和。 问题分析:由用户输入一个大于6 的偶数,由input 语句实现。由if 判断语句判断是否输入的数据符合条件。再引用质数判断函数来找出两个质数,再向屏幕输出两个质数即可。 编程:function [z1,z2]=gede(n); n=input('please input n')

if n<6 disp('data error'); return end if mod(n,2)==0 for i=2:n/2 k=0; for j=2:sqrt(i) if mod(i,j)==0 k=k+1; end end for j=2:sqrt(n-i) if mod(n-i,j)==0 k=k+1; end end if k==0 fprintf('two numbers are') fprintf('%.0f,%.0f',i,n- i) break end

end end 结果分析 如上图,用户输入了大于6的偶数返回两个质数5和31,通过 不断试验,即可验证哥德巴赫猜想。 纪录:if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰,更快的解决问题。 2题目:实验四,MATLAB选择结构与应用实验 目的:用matlab联系生活实际,解决一些生活中常见的实际问 题。

信 卷积实验报告

信号与系统实验报告学院:电子信息与电气工程学院 班级: 13级电信<1>班 学号: 20131060104 姓名:李重阳

实验三 信号卷积实验 一、实验目的 1、理解卷积的概念及物理意义; 2、通过实验的方法加深对卷积运算的图解方法及结果的理解。 二、实验原理说明 卷积积分的物理意义是将信号分解为冲激信号之和,借助系统的冲激响应,求解系统对任意激励信号的零状态响应。设系统的激励信号为x (t ),冲激响应为h (t ),则系统的零状态响应为()()()*y t x t h t ==()()x t h t d ττ∞-∞-?。 1、两个矩形脉冲信号的卷积过程 两信号x (t )与h (t )都为矩形脉冲信号,如图3-1所示。下面由图解的方法(图3-1)给出两个信号的卷积过程和结果,以便与实验结果进行比较。 图3-1 两矩形脉冲的卷积积分的运算过程与结果 2、矩形脉冲信号与锯齿波信号的卷积 信号f1(t )为矩形脉冲信号, f2(t )为锯齿波信号,如图3-2所示。根据卷积积分的运算方法得到f1(t )和f2(t )的卷积积分结果f (t ),如图3-2(c )所示。 图3-2 矩形脉冲信号与锯齿脉冲信号的卷积积分的结果 3、本实验进行的卷积运算的实现方法 在本实验装置中采用了DSP 数字信号处理芯片,因此在处理模拟信号的卷积积分运算时,是先通过A/D 转换器把模拟信号转换为数字信号,利用所编写的相应程序控制DSP 芯片实现数字信号的卷积运算,再把运算结果通过D/A 转换为模拟信号输出。结果与模拟信号的直接运算结果是一致的。数字信号处理系统逐步和完全取代模拟信号处理系统是科学技术发展的必然趋势。图3-3为信号卷积的流程图。 图3-3 信号卷积的流程图 三、实验内容 1、检测矩形脉冲信号的自卷积结果。 用双踪示波器同时观察输入信号和卷积后的输出信号,把输入信号的幅度峰峰值调节为4V ,再调节输入信号的频率或占空比使输入信号的时间宽度满足表中的要求,观察输出信号有何变化,判断卷积的结果是否正确,并记录表3-1。 实验步骤如下: ①将函数发生器的SW702置于“方波”上。 ②连接函数发生器H701与数字滤波器的PB01,在TPB01上可观察到输入波形。将示波器接在TPB01上观测输入波形,并调节函数发生器模块上的频率旋钮与幅度旋钮,使信号频率为1KHz ,幅度为4V 。(注意:输入波形的频率幅度要在H701与PB01连接后,在TPB01上测试。) ③将红色拨动开关SWB01调整为“0001”。 ④按下复位键S1。 ⑤将示波器的CH1接于TP901;CH2接于TP903。可分别观察到输入信号的波形与卷积后的输出信号的波形。 表3-1 输入信号卷积后的输出信号

c语言实验报告

丽水学院计算机实验报告

丽水学院计算机实验报告 一、实验目的 1.熟悉Visual C++和C-Free等集成环境,掌握运行一个C程序的基本步骤,包括编辑、编译、连接和运行。 2.掌握算术表达式和赋值表达式的使用。 3.掌握基本输入、输出函数的使用。 4.能够编程实现简单的数据处理。 二、实验环境 硬件:Pentium以上的计算机。 软件:Windows XP操作系统、Visual C++和C-Free等集成环境。 三、实验内容和结果 1.编程题1 在屏幕上显示一个短句“What is a computer?” 思考: (1)如何在屏幕上显示你自己的学号,姓名和班级? (2)如何在屏幕上显示数字、英文字母和汉字等信息?例如:“你在机房吗?” 编程题1源程序: #include<> void main() { printf("What is a computer?\n");

} 程序运行结果: What is a computer? 思考题(1): #include<> void main() { printf(",小王,班级\n"); } 思考题(2): #include<> void main() { printf("英文字母abcdefgABCDEFG\n"); printf("汉字:哇哈哈啊哈和\n"); } 2.编程题2 在屏幕上显示下列图形。 * * * * * * * * * *

思考:如何在屏幕上显示下列图形? A A A A 编程题2源程序: #include<> void main() { int i,j; for(j=1;j<5;j++) { for(i=5;i>j;i--) printf("*"); printf("\n"); } } 程序运行结果: * * * * * * * * * * 思考题:

14卷积码编解码

实验四 卷积码的编解码 一、实验目的 1、掌握卷积码的编解码原理。 2、掌握卷积码的软件仿真方法。 3、掌握卷积码的硬件仿真方法。 4、掌握卷积码的硬件设计方法。 二、预习要求 1、掌握卷积码的编解码原理和方法。 2、熟悉matlab 的应用和仿真方法。 3、熟悉Quatus 的应用和FPGA 的开发方法。 三、实验原理 1、卷积码编码原理 在编码器复杂度相同的情况下,卷积码的性能优于分组码,因此卷积码几乎被应用在所有无线通信的标准之中,如GSM , IS95和CDMA 2000 的标准中。 卷积码通常记作( n0 , k0 , m) ,它将k 0 个信息比特编为n 0 个比特, 其编码效率为k0/ n0 , m 为约束长度。( n0 , k0 , m ) 卷积码可用k0 个输入、n0 个输出、输入存储为m 的线性有限状态移位寄存器及模2 加法计数器来实现。 本实验以(2,1,3)卷积码为例加以说明。图1就是卷积码编码器的结构。 图1 (2,1,3)卷积码编码器 其生成多项式为: 21()1G D D D =++; 2 2()1G D D =+; 如图1 所示的(2,1,3)卷积码编码器中,输入移位寄存器用转换开关代替,每输入一个信息比特经编码产生二个输出比特。假设移位寄存器的初始状态为全0,当第一个输入比特为0时,输出比特为00;若输入比特为1,则输出比特为11。随着第二个比特输入,第一个比特右移一位,此时输出比特同时受到当前输入比特和前一个输入比特的影响。第三个比特输入时,第一、二个比特分别右移一位,同时输出二个由这三位移位寄存器存储内容所共同决定的比特。依次下去就完成了编码过程。 下面是卷积码的网格图表示。他是比较清楚而又紧凑的描述卷积码的一种方式,它是最常用的描述方

C语言实验报告

实验一进制转换一、实验要求 采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入。 二、实验目的 1、熟悉C 环境的安装、使用。 2、承上启下,复习《C 程序设计》等基础课程的知识。 3、掌握C 语言编程的方法。 三、预备知识 1、VC6.0的安装与使用。 2、C 程序设计基础知识。 四、实验内容 采用模块化程序设计完成进制转换。

五、程序框图 六、程序清单 1. 编写主函数:输入需转换的数与转换的进制 2. 编写子函数 (1)函数转换为除16进制以外的进制转换算数编程,使用while 循环实现计算进制 的转换,并输出转换后的数字; (2)函数转换为16进制,用while 函数实现16进制转换的计算并输出16进制转换后的数据; 3. 编写数组,关于16进制的一系列字符 4. 编写主函数加入do while 使函数可以循环。

七、实验步骤 #include char num[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; void fun(int n, int m) { int i=-1, a[100]; if(m!=16) { while(n) { a[i++]=n%m; n=n/m; } while(i!=-1) printf("%d",a[--i]); printf("\n");

} else { while(n) { a[++i]=num[n%16]; n/=16; } while(i!=-1) printf("%c",a[i--]); printf("\n"); } } int main() { int a, c;

数据库实验七实验报告

一.实验目的 熟练掌握SQL Server中变量、数据类型和表达式的定义和使用,掌握Transact—SQL中常用系统函数的使用,掌握流程控制语句和结构化程序设计方法,掌握分行处理表中记录机制以及利用游标对数据进行查询、修改和删除的方法。 二.实验准备 1.物理准备:安装了SQL sever的计算机一台,连接服务器;2.实验指导书:《数据库技术与应用》蓝皮书; 3.理论准备:掌握以下基础知识: (1)T ransact—SQL中变量、数据类型和表达式的使用。 (2)T ransact—SQL中常用系统函数的使用。 (3)利用程序控制语句实现结构化程序设计。 (4)利用游标分行处理机制实现数据的定位、查询、修改和删除三.实验题目 (1)定义局部变量@max,@min接收学生表studinfo中的最大出生日期和最小出生日期的查询结果。 实验过程:编写Transact—SQL语句 declare @max char(30),@min char(30) select @max=max(出生日期) , @min=min(出生日期) from student_xuesheng select @max as 最大,@min as 最小 运行结果:

(2)在学生表studinfo中增加一个字段,利用系统函数与出生日期信息计算每个同学的年龄。 实验过程:编写Transact—SQL语句 分析:先增加年龄字段,再将函数运算之后的年龄添加进去 --alter table student_xuesheng --add 年龄 int --GO if exists(select 出生日期 from student_xuesheng where 出生日期 is not null) begin update student_xuesheng set 年龄=year(getdate())-year(出生日期) end 运行结果:

MATLAB实验报告卷积

实验报告 学院:机电班级:姓名:学号: 实验名称:连续时间信号卷积运算的MATLAB实现 1.实验目的:掌握卷积的概念及计算方法 2.熟悉通过调用conv()函数求解连续时间信号卷积的数值分析 法 实验环境:MATLAB 6.5.1软件 实验要求: 1、已知信号f1(t)=t/2*[ε(t)- ε(t-2)], f2(t)= [ε (t)- ε(t-1)],通过调用conv()函数编程实现卷积计算y(t)= f1(t)* f2(t),画出波形。 2、已知信号f(t)=e-t *ε(t), h(t)= t2 *e-2t *ε(t),y(t)= f(t)* h(t) (1)用符号分析法编程实现计算y(t)的理论解; (2)过调用conv()函数编程实现卷积计算y(t)的数值解并画图 实验程序及结果: 第一题: M文件 (1) function f=uCT(t) f=(t>=0); 主程序:

k1=0:p:2; k2=0:p:1; f1=k1/2.*[uCT(k1)-uCT(k1-2)]; f2=uCT(k2)-uCT(k2-1); y=conv(f1,f2)*p; k0=k1(1)+k2(1); k3=length(f1)+length(f2)-2; k=k0:p:k3*p+k0; subplot(311) plot(k1,f1); xlabel('t') ylabel('f1(t)') axis([-0.5 2.5 -0.5 1.5]) grid on subplot(312); plot(k2,f2) grid on axis([-0.5 2.5 -0.5 1.5]) xlabel('t') ylabel('f2(t)') subplot(313)

实验七-实验报告

实验七:超声化学法制备纳米多孔氧化物及其电化学性能研究专业:材料物理姓名:许航学号:141190093 一、实验内容与目的 1、学习超声化学反应的基本原理,熟悉反应装置的构成; 2、通过与其他方法比较,了解超声化学法在多孔纳米材料制备方面的优缺点; 3、学习超声化学法制备多孔金属氧化物的实验步骤,了解多孔纳米材料的表征方法; 4、学习电化学工作原理,掌握电容测试方法,熟悉超级电容器常用的金属氧化物材料。 二、实验原理 超声化学主要源于声空化导致液体中微小气泡形成、振荡、生长收缩与崩裂及其引起的物理、化学效应。液体声空化是集中声场能量并迅速释放的过程,空化泡崩裂时,在极短时间和空化极小空间内,产生5000K以上的高温和约5.05×108Pa的高压,速度变化率高达1010K/s,并伴有强烈的冲击波和时速高达400km的微射流生成,使碰撞密度高达1.5kg/s;空化气泡的寿命约0.1μs,它在爆炸时释放出巨大的能量,冷却速率可达109K/s。这为一般条件下难以或不能实现的化学反应提供了一种特殊的环境。这些极端条件足以使有机物、无机物在空化气泡内发生化学键断裂、水相燃烧和热分解条件,促进非均相界面之间搅动和相界面的更新,极大提高非均相反应的速率,实现非均相反应物间的均匀混合,加速反应物和产物的扩散,促进固体新相的生成,并控制颗粒的尺寸和分布。通过将超声探头浸入反应溶液中就可将超声波引入到一个有良好控温范围的反应系统。利用超声来使反应体系中的物质得到充分的反应,从而制备出颗粒分布、大小尺寸均匀的纳米多孔氧化物。

三、实验数据及处理 1.循环伏安曲线 在恒定扫描速率下,伏安特性曲线为闭合曲线,且扫描速率越快,围成的图形面积越大。 2.恒流充放电电压-时间曲线 曲线包括充电和放电两个过程,设定电压从0V充到0.6V,再放电到0V。随着充电电流的增加,充放电总时间增长,曲线的峰点向时间增加的方向移动。

nachos实验七实验报告

nachos实验报告七 实验题目: Extension of AddrSpace 学号:201200301057 日期:2014-11-29 班级:计软12-3 姓名:高鹏辉 实验目的: 在了解了Nachos 装入并执行单个用户进程的情况后,我们就需要进一步完成用户内存空间的扩充以便多用户程序同时驻留内存,进而使多用户进程并发执行。 硬件环境: Mem:3.9G CPU:Intel? Core?2 Quad CPU Q9500 @ 2.83GHz × 4 Disk:15.5 GB 软件环境: System:ubuntu12.04LST i386 gcc: (Ubuntu 4.6.3-1ubuntu5) 4.6.3 nachos system 实验步骤: 要在Nachos中实现多用户程序同时驻留内存并发执行,首先涉及到Nachos的两个系统调用:Exec()和Exit()。这两个系统调用也是构造父子进程并发执行的基础。假设我们有以下两个用户程序:../test/exec.c和../test/halt.c ../test/halt.c 第65页 用户进程管理设计 1 #include "syscall.h" 2 int 3 main() 4 { 5 Halt() 6 } ../test/exec.c 1 #include "syscall.h" 2 int 3 main() 4 { 5 SpacId pid; 6 pid = Exec("../test/halt.noff");

7 Halt() 8 } 在文件../test/exec.c第5行上的语句Exec是一条Nachos的系统功能调用,它的功能为装入并执行以其参数为名的可执行文件,即创建一个新的用户进程。假设我们先执行../test/exec.noff 程序,则../test/exec.noff 会在它还没有执行结束时又装入并执行另外一个程序halt.noff,并与它同时驻留内存. pageTable[i].physicalPage=usermap-->Find();避免从头开始物理存储覆盖了前一个用户程序的内存内容 利用Nachos在../userprog/bitmap.h 中文件定义的Bitmap类。利用bitmap 记录和申请内存物理帧,使不同的程序装入到不同的物理空间中去,下面是对新的内存分配存储算法,改进了对多个用户程序的同时进驻内存的支持

相关文档