C++实验报告.docx

上传人:b****4 文档编号:5878904 上传时间:2023-05-09 格式:DOCX 页数:80 大小:759.81KB
下载 相关 举报
C++实验报告.docx_第1页
第1页 / 共80页
C++实验报告.docx_第2页
第2页 / 共80页
C++实验报告.docx_第3页
第3页 / 共80页
C++实验报告.docx_第4页
第4页 / 共80页
C++实验报告.docx_第5页
第5页 / 共80页
C++实验报告.docx_第6页
第6页 / 共80页
C++实验报告.docx_第7页
第7页 / 共80页
C++实验报告.docx_第8页
第8页 / 共80页
C++实验报告.docx_第9页
第9页 / 共80页
C++实验报告.docx_第10页
第10页 / 共80页
C++实验报告.docx_第11页
第11页 / 共80页
C++实验报告.docx_第12页
第12页 / 共80页
C++实验报告.docx_第13页
第13页 / 共80页
C++实验报告.docx_第14页
第14页 / 共80页
C++实验报告.docx_第15页
第15页 / 共80页
C++实验报告.docx_第16页
第16页 / 共80页
C++实验报告.docx_第17页
第17页 / 共80页
C++实验报告.docx_第18页
第18页 / 共80页
C++实验报告.docx_第19页
第19页 / 共80页
C++实验报告.docx_第20页
第20页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++实验报告.docx

《C++实验报告.docx》由会员分享,可在线阅读,更多相关《C++实验报告.docx(80页珍藏版)》请在冰点文库上搜索。

C++实验报告.docx

C++实验报告

《测绘程序设计(VC.net)》

上机实验报告

(VisualC++.Net)

 

班级:

学号:

姓名:

序号:

二零一五年六月

 

实验2控制结构程序设计…………………………………………………………….................5验3数组与指针、函数…………………………………………………………………………18

实验4类的创建………………………………………………………………………………….26

实验5文件……………………………………………………………………………………30

实验6图形程序设计…………………………………………………………………………….36

实验7点云数据处理……………………………………………………………………………44

实验8平差程序设计基础……………………………………………………………………….50

.

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

一、实验目的

∙掌握VisualS的安装和启动。

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

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

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

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

∙掌握使用MSDN帮助文档

设计思路:

在按钮下面添加程序。

根据海伦公式添加4个变量a.b.c.s的编辑框。

界面设计:

 

主要代码:

classCMyGJJ_0145130602_ex1Dlg:

publicCDialog

{

//构造

public:

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

//对话框数据

enum{IDD=IDD_MYGJJ_0145130602_ex1_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

 

//实现

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

afx_msgvoidOnBnClickedOk();

afx_msgvoidOnBnClickedCancel();

doublem_a;

doublem_b;

doublem_c;

doublem_s;

afx_msgvoidOnBnClickedButton1();

};

HCURSORCMyGJJ_0145130602_ex1Dlg:

:

OnQueryDragIcon()

{

returnstatic_cast(m_hIcon);

}

doubleculsjx(doublex,doubley,doublez)

{

doubleret,p;

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

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

returnret;

}

 

voidCMyGJJ_0145130602_ex1Dlg:

:

OnBnClickedOk()

{

//TODO:

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

//OnOK();

UpdateData(TRUE);

m_s=culsjx(m_a,m_b,m_c);

UpdateData(FALSE);

}

voidCMyGJJ_0145130602_ex1Dlg:

:

OnBnClickedCancel()

{

//TODO:

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

//OnCancel();

m_a=0;

m_b=0;

m_c=0;

m_s=0;

UpdateData(FALSE);

}

voidCMyGJJ_0145130602_ex1Dlg:

:

OnBnClickedButton1()

{

//TODO:

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

exit(0);

}

 

运行结果:

实验2控制结构程序设计

一、实验目的

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

∙理解顺序结构、选择结构和循环结构程序设计的特点及应用;

∙掌握对基于对话框的MFC应用程序设计方法;

∙掌握一些简单算法。

1.编写一个方位角计算程序。

提示:

先使用反正切函数计算,然后利用坐标增量的符号来判断所在的象限。

 

设计思路:

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;

界面设计:

主要代码:

classCGJJ_0602_ex21Dlg:

publicCDialog

{

//构造

public:

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

//对话框数据

enum{IDD=IDD_GJJ_0602_EX21_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

 

//实现

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

doublex1;

doublex2;

afx_msgvoidOnEnChangeEdit4();

doubley1;

doubley2;

doubleA;

double象限;

afx_msgvoidOnEnChangeEdit1();

afx_msgvoidOnBnClickedOk();

afx_msgvoidOnBnClickedCancel();

afx_msgvoidOnBnClickedButton1();

afx_msgvoidOnEnChangeEdit3();

};

voidCGJJ_0602_ex21Dlg:

:

OnBnClickedOk()

{

x1=0;

y1=0;

x2=0;

y2=0;

UpdateData(0);

}

voidCGJJ_0602_ex21Dlg:

:

OnBnClickedCancel()

{

//TODO:

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

OnCancel();

}

voidCGJJ_0602_ex21Dlg:

:

OnBnClickedButton1()

{

//TODO:

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

UpdateData

(1);

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

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

象限=1;

elseif((y2-y1)>0&&(x2-x1)<0)

象限=2;

elseif((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)

设计思路:

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

界面设计:

主要代码:

classCGJJ_0602_ex22Dlg:

publicCDialog

{

//构造

public:

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

//对话框数据

enum{IDD=IDD_GJJ_0602_EX22_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

 

//实现

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

doubleB;

doubleL;

doubleH;

doubleX;

doubleY;

doubleZ;

afx_msgvoidOnBnClickedButton2();

afx_msgvoidOnBnClickedButton1();

};

#definePI3.14159265358979323846

constdoublef=1/298.257223563;

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

doublea=6378137;

voidCGJJ_0602_ex22Dlg:

:

OnBnClickedButton1()

{

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

doubledH,H0;

doubleB2,L2,S,S1;

intD,M,D1,M1;

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

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

elseL=0;

if(X>0)

{

L=L;

}

elseif(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);

}

voidCGJJ_0602_ex22Dlg:

:

OnBnClickedButton2()

{

//TODO:

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

UpdateData(TRUE);

doubleb,l,b1,l1;

intD,M,D1,M1;

doubleS,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按钮。

根据公式以上公式编写代码。

界面设计:

主要代码:

classCGJJ_0602_ex23Dlg:

publicCDialog

{

//构造

public:

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

//对话框数据

enum{IDD=IDD_GJJ_0602_EX23_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

 

//实现

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

doubleXA;

doubleXB;

doubleYB;

doubleYA;

doubleXC;

doubleYC;

doubleXP;

doubleYP;

doubleα;

doubleγ;

doubleβ;

afx_msgvoidOnBnClickedButton1();

};

#definePI3.14159265358979323846

voidCGJJ_0602_ex23Dlg:

:

OnBnClickedButton1()

{

//TODO:

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

UpdateData(TRUE);

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

intD1,M1,D2,M2;

doubleS1,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高斯投影正反算计算函数设计

 

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

正算公式:

 

反算公式:

注意:

高斯投影正反算公式比较复杂,编写程序时变量定义一定要十分的清晰

 

设计思路:

首先根据以上公式确定变量个数。

将实现操作的写在按钮上。

添加顶点按钮上面实现创建动态数组,确认按钮实现返回数组大小值并将添加的数据显示到显示框中去,通过计算按钮实现多边形面积的计算,清除按钮实现清除输入的数据。

界面设计:

主要代码:

classCGJJ_0602_ex3Dlg:

publicCDialog

{

//构造

public:

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

//对话框数据

enum{IDD=IDD_GJJ_0602_EX3_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

 

//实现

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

DECLARE_MESSAGE_MAP()

public:

afx_msgvoidOnBnClickedCancel();

afx_msgvoidOnBnClickedButton4();

afx_msgvoidOnBnClickedButton2();

afx_msgvoidOnBnClickedButton3();

afx_msgvoidOnBnClickedOk();

doublex;

doubley;

intn;

double*px;

double*py;

doubleresult;

CEditm_strdis;

};

voidCGJJ_0602_ex3Dlg:

:

OnBnClickedButton4()

{

//TODO:

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

UpdateData(TRUE);

result=calarea(px,py,n);

UpdateData(FALSE);

}

voidCGJJ_0602_ex3Dlg:

:

OnBnClickedButton2()

{

//TODO:

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

UpdateData(TRUE);

px=newdouble[n];

py=newdouble[n];

UpdateData(FALSE);

}

voidCGJJ_0602_ex3Dlg:

:

OnBnClickedButton3()

{

//TODO:

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

UpdateData(TRUE);

delete[]px;

delete[]py;

px=NULL;

py=NULL;

n=0;

result=0;

UpdateData(FALSE);

}

intt=0;

voidCGJJ_0602_ex3Dlg:

:

OnBnClickedOk()

{

//TODO:

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

UpdateData(TRUE);

CStringstr;

t+=1;

if(t>n)

{

MessageBox(_T("Warning!

"));

};

str.Format(_T("No.%d%lf%lf\r

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2