C.NET程序的设计实验报告

合集下载

程序设计实训实验报告(热门20篇)

程序设计实训实验报告(热门20篇)

程序设计实训实验报告(热门20篇)c语言是在国内外广泛使用的一种计算机语言。

其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。

其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,unix,linux,mac,os/2,无一例外,哪一个不是c 语言写的?很多新型的语言如,c++,java,c,j,perl...都是衍生自c语言。

掌握了c语言,可以说你就掌握了很多门语言。

学习c程序这门课一年了,这是我们学的第一门专业课,在大学里c语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。

所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,c语言是计算机的基础,大多数软件都需要用c语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。

同时,我觉得c语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。

在学习一年c语言的过程中我也在慢慢探索怎样才能学好c语言,并总结了一点经验:要了解c语言就要从语法规为基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。

在c语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。

这些都是语法基础也是c语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。

比如说ifelse和switchcase这两种条件语句都是用来判断执行功能的,那我要什么时侯用if什么时侯用switch呢?如果你很好地了解它们的结构和作用的话那么就知道:若它的条件分支是多个而且条件的值是整数或是一个字符值时就会选switch而不会选if。

C程序设计上机实验报告(完整版)

C程序设计上机实验报告(完整版)

C语言程序设计上机实验报告学院:机械工程学院班级:机自161213姓名:刘昊学号:20162181310实验时间:2017年3月6号任课老师:张锐C语言程序设计上机实验报告实验一一、实验名称: C程序的运行环境和运行C程序的方法二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C程序三、实验内容:(1). 输入并运行一个简单的C程序。

(2). 设计程序,对给定的两个数求和。

(3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。

四、源程序代码:代码1:运行结果1:程序分析1:该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。

代码2:运行结果2:程序分析2:简单的使用printf()和scanf()函数进行简单的数据运算。

代码3:运行结果3:程序分析3:使用if语句进行判断。

五.实验总结C语言程序设计上机实验报告实验二一、实验名称:顺序结构程序设计二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法,熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。

三、实验内容:(1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。

(3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。

(4). 编写程序,实现单字符getchar和putchar输入输出。

(5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。

四、源程序代码代码1:运行结果1:程序分析1:所有的字符都有一个对应的数字与之对应,每一个小写字母对应的数与大写字母对应的数之间总是相差32,所以只需要对所输入的字符进行减法运算就可以转换为与之对应的大写字母。

代码2:运行结果2:程序分析2:简单的数据运算和格式字符的输出。

C语言程序设计实验报告 实验一 简单程序设计

C语言程序设计实验报告 实验一 简单程序设计

C语言程序设计实验报告实验一简单程序设计班级 2017231 学号 201723128 姓名郭鹏博一、实验目的1、熟悉VC6.0编程环境。

2、掌握使用VC6.0输入源程序、编译连接和运行程序的基本过程。

3、练习C调试程序的方法。

4、熟练使用赋值运算、算术运算等表达式。

5、熟练使用标准输入、输出函数及各种数据类型的格式说明符。

二、实验内容及步骤1、分析程序,根据要求写出结论:课本P83页第4题、第5题;第4题(1)c1=a,c2=bc1=97,c2=98原因:字符变量实质上是一个字节的整形变量,由于它常用来存储字符,所以称为字符变量。

可以把0到127之间的整数赋给一个字符变量。

在输出字符变量的值时,可以选择以十进制整数形式或字符形式输出。

(2)c1=?c2=?c1=-59,c2=-58原因:Visual C++系是把char默认为signed char类型的,而signed char类型的变量允许存储的值为—128~127,但字符的代码不可能为负值,所以在存储字符时实际上只用到0~127这一部分,其第1位都是0。

给字符型变量赋值197和198时,所赋之值超出了字符变量的取值范围,导致无论是以以十进制整数形式输出还是以字符形式输出,输出结果均错误。

(3)c1=a,c2=bc1=97,c2=98原因同(1)第5题2、程序改错下面程序的功能是计算球体的表面积和球体的体积,程序中有多处错误,并且指定必须按下面的形式输入、输出数据。

请对程序做相应的修改。

#include <stdio.h>main{double r,s,v;int pi=3.14;scanf("%d",r);S=4*pi*r*r; /*计算球体的表面积*/V=4.0*pi*r*r*r/3.0; /*计算球体的体积*/printf("%d",r);printf("s=%f\n",s,"v=%d\n",v);}当程序运行时,要求屏幕的显示和指定的输入形式如下:input r:2.0<回车> (此处的2.0是由用户输入的数据)r=2.000000 (此处要求的是输出形式)s=50.24000000,v=33.49333333具体要求:(1)在VC6.0环境中输入上述源程序。

C语言程序设计实验报告范文.doc

C语言程序设计实验报告范文.doc

C语言程序设计实验报告范文实验名称计算出1000以内10个素数之和实验目的1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。

2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。

3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。

进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

实验内容计算并输出1000以内的10个素数以及它们的和。

要求:在程序内部加必要的注释。

由于偶数不是素数,可以不考虑对偶数的处理。

虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。

输出形式为:素数1+素数2+素数3+…+素数10=总和值。

算法描述流程图Main函数:判断素数:源程序#include#includeint sushu(int n)/* 判断素数的函数*/{int t,i;t=sqrt(n);for(i=2;i1;i-=2)/* x为奇数时,做函数计算*/{n=sushu(i); /* 做判断素数的函数调用*/( 励志天下 )if(n!=0)/* 对素数的处理*/{a[j]=n;/* 把素数由大至小存入数组a[ ]中*/j++;C语言程序设计-职工信息管理系统1C语言课程设计C语言课程设计任务书一、题目:职工信息管理系统二、目的和要求目的:要求熟练掌握C语言的基本知识和编辑技能;基本掌握结构化程序设计的基本思路和方法。

要求:设计一个职工信息管理系统,使之能提供以下功能:1、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!2、输入功能:职工信息录入(职工信息用文件保存),可以一次完成若干条记录的输入。

3、浏览功能:完成对全部职工信息的显示。

实验报告三

实验报告三

攀枝花学院实验报告实验课程:Visual C#.NET程序设计教程实验项目:上机实验5 实验日期:系:数计学院成绩:一、实验目的1、区分静态类与非静态类,掌握静态字段、静态方法和静态构造函数的定义方法。

2、理解类的继承性与多态性,掌握其应用方法。

3、理解抽象类、接口的概念,掌握抽象类与接口的定义及使用方法。

4、理解分部类和命名空间的概念,掌握分部类和命名空间的使用方法。

二、实验要求1.熟悉Visual 的基本操作方法。

2.认真阅读本章相关内容,尤其是案例。

3.实验前进行程序设计,完成源程序的编写任务。

4.反复操作,直到不需要参考教材、能熟练操作为止。

三、实验步骤1、设计一个Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(小学生、中学生、大学生)将分别创建不同的学生对象,并输入当前的学生总人数、该学生的姓名、学生类型和平均成绩。

具体要求如下:(1)每个学生都有的字段为:姓名、年龄。

(2)小学生的字段还有语文、数学,用来表示这两科的成绩。

(3)中学生在此基础上多了英语成绩。

(4)大学生只有必修课和选修课两项成绩。

(5)学生类具有方法来统计自己的总成绩,并输出。

(6)通过静态成员自动记录学生总人数。

(7)成员初始化能通过构造函数完成。

源程序如下:using System;using ;using ;using ;using ;using ;using Test3_1{public partial class Form1 : Form{public Form1(){InitializeComponent();}public abstract class Student{protected string name;protected int age;protected static int number;public Student(string name, int age){= name;= age;number++;}public string Name { get { return name; } }public virtual string type{get { return"学生"; }}public abstract double total();public abstract double Average();public string getInto(){string result = ("总人数:{0},姓名:{1},{2},{3}岁", number, Name, type, age);if (type == "小学生")result += (",平均成绩为{0:N2}:\n", total() / 2);else if(type=="中学生")result += (",平均成绩为{0:N2}:\n", total() / 3);elseresult += (",总学分为{0:N2}:\n", total());return result;}}public class Pupil : Student{protected double chinese;protected double math;public Pupil(string name, int age, double chinese, double math): base(name, age){= chinese;= math;}public override string type{get{return"小学生";}}public override double total(){return chinese + math;}}public class Middle : Student{protected double chinese;protected double math;protected double english;public Middle(string name, int age, double chinese, double math,double english) : base(name, age){= chinese;= math;= english;}public override string type{get{return"中学生";}}public override double total(){return chinese + math+english;}}public class University : Student{protected double majors;protected double elective;public University(string name, int age, double majors, double elective): base(name, age){= majors ;= elective;}public override string type{get{return"大学生";}}public override double total(){return majors+elective;}}private void btpupil_Click(object sender, EventArgs e){int age = ;double chinese = ;double math = ;Pupil p = new Pupil, age, chinese, math);+= ();}private void btMiddle_Click(object sender, EventArgs e){int age = ;double chinese = ;double math = ;double english = ;Middle p = new Middle, age, chinese, math,english);+= ();}private void btUniversity_Click(object sender, EventArgs e) {int age = ;double chinese = ;double math = ;University u = new University, age, chinese, math);+= ();}}}运行结果如图所示:2、完善上机实验4-3设计的银行帐户管理系统,增加一个VIP账户的管理。

c语言程序设计_实验一实验报告

c语言程序设计_实验一实验报告

实验项目名称:实验一C 语言的运行环境的使用实验目的及要求:1. 了解 Windows 系统下 C 语言的运行环境,熟悉 C 程序编辑、调试、运行的基本操作方法。

2. 熟练掌握编辑、编译、连接和运行 C 程序的方法。

3. 通过运行简单的 C 程序,初步了解 C 源程序的特点。

4. 初步理解 C 语言的数据类型,了解变量定义、变量赋值以及简单运算方法,了解程序运行结果的基本输出方法。

实验内容(方法和步骤):1、编程实现在屏幕上显示如下三行文字Hello, world !Wolcome to the C language world!Everyone has been waiting for程序代码:#include <stdio.h>int main(){printf("Hello,World!\n");printf("Welcome to the C language world!\n");printf(Everyone has been waiting for.\n");return 0;}运行结果:2、编写程序,将两个整数相加,并输出结果。

程序代码:#include <stdio.h>int main(){int a,b,c;a=12;b=26;c=a+b;printf("c=%d\n",c);return 0";}运行结果:3. 编写程序,要求从键盘输入2 个整数,输出其中较大的数程序代码:#include <stdio.h>int main(){int max(int x,int y);int a,b,c;scanf("%d,%d",&a,&b);c=max(a,b);pintf("max=%d",c);return 0;}int max(int x,int y){ int z;if (x>y) z=x;else z=y;return(z);}运行结果:4.输入并运行下程序,观察运行结果。

《C语言程序设计》实验报告

《C语言程序设计》实验报告

《C语言程序设计》实验报告学院:专业:学号:姓名:成绩:课程代码: 2001301指导教师:实验中心:电气信息专业试验中心日期:目录实验总体要求实验一………………………………………………C语言的运行环境和运行过程实验二………………………………………………数据类型、运算符与表达式实验三………………………………………………程序结构(顺序、选择和循环) 实验四………………………………………………数组实验五………………………………………………函数实验六………………………………………………指针实验七………………………………………………结构体实验八………………………………………………类和对象实验总体要求C语言程序设计课程是一门实践性很强的课程,为了培养学生的计算机应用能力,除了课堂理论教学外,必须加强程序设计课程实验的教学环节。

1、课程实验教学目的通过C语言程序设计的课程实验教学,学生应具有使用计算机解决相关问题的能力,同时为学生今后学习其他计算机应用课程打下良好的程序设计基础。

⑴分析问题和解决问题能力的训练课程实验教学将课本上的理论知识和实际应用有机地结合起来,达到训练学生分析问题解决实际问题的能力,提高学生应用计算机知识开发应用系统的综合能力。

⑵逻辑思维能力的训练通过课程实验教学,使学生正确地掌握C语言的基本知识,较好掌握基本的程序算法,以及描述方法。

培养学生在程序设计解题思路、算法的描述、编程构思等方面的计算机逻辑思维能力。

⑶程序设计技能的训练通过C语言环境下的应用实例,训练学生编写程序的能力,掌握编程的思路和方法,掌握结构化程序设计的基本概念和基本技能。

通过课程实验教学,使学生掌握C程序设计语言的语法规则,数据结构的应用,掌握算法描述及相应代码描述,掌握结构化程序设计的基本方法,能熟练编写一般的应用程序。

2、课程实验教学要求⑴要求通过解题、程序设计和上机实践,加深对所学概念的理解,提倡理论与实践相结合的学习方法。

测绘程序设计(VS2008)实验报告--水准网平差程

测绘程序设计(VS2008)实验报告--水准网平差程

《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一一年五月实验8 平差程序设计基础1.实验目的:1.1 巩固过程的定义与调用;1.2 巩固类的创建于使用;1.3 巩固间接平差模型与平差计算;1.4 掌握平差程序设计的基本技巧与步骤。

2.实验内容:水准网平差程序设计。

设计一个水准网平差的程序,要求数据从文件中读取。

计算部分也界面无关。

3.设计思路:在本次的实验中,我着重想表现的是一种面向对象的编程思想。

于是,在程序中我设计了4个类:CPoint、CObserve、CMatrix、Leveling,分别定义点的属性、观测数据属性、矩阵和水准网平差计算的属性与方法。

水准网平差计算一般步骤为:(1)读取观测数据和已知数据;(2)计算未知点高程近似值;(3)列高差观测值误差方程;(4)根据水准路线长度计算高差观测值的权;(5)组成法方程;(6)解法方程,求得未知点高程改正数及平差后高程值;(7)求高差观测值残差及平差后高差观测值;(8)精度评定;(9)输出平差结果。

水准网高程近似值计算算法4.界面设计:仅添加了一个button按钮,单击后读取数据,并进行水准网平差计算,计算结果保存在记事本中5.主要代码:文件一: CPoint.h代码:class ControlPoint{public:ControlPoint(void){};~ControlPoint(void){};public:CString pointID; //点号double H; //高程};class CObserve{public:CObserve(void){};~CObserve(void){};public:ControlPoint *pStartObs; //后视点ControlPoint *pEndObs; //前视点double h; //路线长度double dDist; //高差};文件二:Leveling.h代码:#pragma once#include"CPoint.h"#include"Matrix.h"class Leveling{public:Leveling(void);~Leveling(void);private:ControlPoint *m_pKnownPoint; //已知点数组int m_iKnownPointCount; //已知点个数ControlPoint *m_pUnknownPoint; //待测点数组int m_iUnknownPointCount; //待测点个数CObserve *m_pObsData; //观测数据数组int m_iObsDataCount; //观测数据个数public:bool LoadData(const CString &FileName); //从文件中导入数据void OutMatrixToFile(const CMatrix& mat,CStdioFile& SF); //把矩阵输出到文件中void SetKownPointSize(int n); //设置已知点数据大小void SetUnknownPointSize(int n);void SetObsDataSize(int n);CString* SplitString(CString str , char split, int iSubStrs); //分割字符串public://根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchKnownPointUsingID(CString pointID);//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* SearchUnknownPointUsingID(CString pointID);//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* SearchPointUsingID(CString pointID);void ComputeApproximateH(void); //求待测点高差近似值public://组成误差方程,B 为系数矩阵,f为常数项向量void FormErrorEquations(CMatrix& B, CMatrix& f);void Weight(CMatrix& P); //求高差观测值的权阵void IndirectlyAdjust(const CString& strFileName);//间接平差计算主函数};文件三:Leveling.cpp代码:#include"StdAfx.h"#include"Leveling.h"#include"math.h"#include<locale.h>Leveling::Leveling(void){m_pKnownPoint=NULL;m_iKnownPointCount=0;m_pUnknownPoint=NULL;m_iUnknownPointCount=0;m_pObsData=NULL;m_iObsDataCount=0;}Leveling::~Leveling(void){//释放动态数组内存if(m_pUnknownPoint!=NULL){delete[] m_pUnknownPoint;m_pUnknownPoint=NULL;}if(m_pKnownPoint!=NULL){delete[] m_pKnownPoint;m_pKnownPoint=NULL;}if(m_pObsData!=NULL){delete[] m_pObsData;m_pObsData=NULL;}}bool Leveling::LoadData(const CString &FileName){CStdioFile sf; //创建文件对象//以读的形式打开文件,如果打开失败则返回if(!sf.Open(FileName, CFile::modeRead)) return false;CString strLine;BOOL bEOF=sf.ReadString(strLine);//读取第一行,已知点数m_iKnownPointCount= _ttoi((strLine)); //把读取的第一行字符串转换为数值型SetKownPointSize(m_iKnownPointCount);//设置已知点数组大小int n=0;//读取并保存已知点数据for(int i=0;i<m_iKnownPointCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pKnownPoint[i].pointID=pstrData[0];m_pKnownPoint[i].H=_tstof(pstrData[1]);delete[] pstrData;pstrData=NULL;}//开始读取未知知点数据sf.ReadString(strLine);//未知点个数m_iUnknownPointCount= _ttoi((strLine));SetUnknownPointSize(m_iUnknownPointCount); //设置未知点数组大小sf.ReadString(strLine);//未知点点号//读取并保存未知点数据CString *pstrData=SplitString(strLine,',',n);for(int i=0;i<m_iUnknownPointCount;i++){m_pUnknownPoint[i].pointID=pstrData[i];m_pUnknownPoint[i].H=0;}delete[] pstrData;pstrData=NULL;//开始读取观测数据个数sf.ReadString(strLine);//观测数个数m_iObsDataCount= _ttoi((strLine));SetObsDataSize(m_iObsDataCount);//读取并保存观测数据for(int i=0;i<m_iObsDataCount;i++){sf.ReadString(strLine);CString *pstrData=SplitString(strLine,',',n);m_pObsData[i].pStartObs=SearchPointUsingID(pstrData[0]);m_pObsData[i].pEndObs=SearchPointUsingID(pstrData[1]);m_pObsData[i].h=_tstof(pstrData[2]);m_pObsData[i].dDist=_tstof(pstrData[3]);delete[] pstrData;pstrData=NULL;}sf.Close();return true;}void Leveling::SetKownPointSize(int n){m_iKnownPointCount=n;m_pKnownPoint=new ControlPoint[n];}void Leveling::SetUnknownPointSize(int n){m_iUnknownPointCount=n;m_pUnknownPoint=new ControlPoint[n];}void Leveling::SetObsDataSize(int n){m_iObsDataCount=n;m_pObsData=new CObserve[n];}//字符串分割函数CString* Leveling::SplitString(CString str , char split, int iSubStrs) {int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength()); strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}//根据点号从已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchKnownPointUsingID(CString pointID) {for(int i=0;i<m_iKnownPointCount;i++){if(pointID==m_pKnownPoint[i].pointID){return &m_pKnownPoint[i];}}return NULL;}//根据点号从未知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchUnknownPointUsingID(CString pointID) {for(int i=0;i<m_iUnknownPointCount;i++){if(pointID==m_pUnknownPoint[i].pointID){return &m_pUnknownPoint[i];}}return NULL;}//根据点号从未知点和已知点数组中找到控制点,并返回该点的指针ControlPoint* Leveling::SearchPointUsingID(CString pointID){ControlPoint* pCP=NULL;pCP=SearchKnownPointUsingID(pointID);if(pCP==NULL){pCP=SearchUnknownPointUsingID(pointID);}return pCP;}void Leveling::ComputeApproximateH(void) //求待测点近似高程{for(int i=0;i<m_iUnknownPointCount;i++){if(m_pUnknownPoint[i].H!=0)continue;for(int j=0;j<m_iObsDataCount;j++){if(m_pUnknownPoint[i].pointID==m_pObsData[j].pStartObs->pointID&&m_pObsData[j].pEndObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pEndObs->H-m_pObsData[j].h;elseif(m_pUnknownPoint[i].pointID==m_pObsData[j].pEndObs->pointID&&m_pObsData[j].pStartObs->H>0)m_pUnknownPoint[i].H=m_pObsData[j].pStartObs->H+m_pObsData[j].h;}}}void Leveling::FormErrorEquations(CMatrix& B, CMatrix& f){B.SetSize(m_iObsDataCount, m_iUnknownPointCount);f.SetSize(m_iObsDataCount, 1);//计算系数阵for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iUnknownPointCount;j++){if(m_pObsData[i].pStartObs->pointID==m_pUnknownPoint[j].pointID) B(i,j)=-1;if(m_pObsData[i].pEndObs->pointID==m_pUnknownPoint[j].pointID)B(i,j)=1;}//计算常数阵for(int i=0;i<m_iObsDataCount;i++)f(i,0)=m_pObsData[i].h-(m_pObsData[i].pEndObs->H-m_pObsData[i].pStartObs->H);}void Leveling::Weight(CMatrix& P) //计算权阵{P.SetSize(m_iObsDataCount,m_iObsDataCount);for(int i=0;i<m_iObsDataCount;i++)for(int j=0;j<m_iObsDataCount;j++){if(i==j)P(i,j)=1.0/m_pObsData[i].dDist;}}void Leveling::IndirectlyAdjust(const CString& strFileName){//使用最小二乘法计算平差值//NBB=BT*P*BCMatrix B; //系数矩阵CMatrix BT; //B的转置矩阵CMatrix NBB; //NBBCMatrix invNbb; //NBB逆阵CMatrix W; //W=BT*P*fCMatrix f; //常数项矩阵CMatrix P; //权阵CMatrix x; //近似值改正项矩阵CMatrix V; //改正项矩阵CMatrix Omiga; //方差CMatrix X; //平差值ComputeApproximateH();FormErrorEquations(B,f); //系数阵Weight(P); //权阵BT=~B; //B的转置矩阵NBB=BT*P*B;invNbb=NBB.Inv();; //NBB逆阵W=BT*P*f;x=invNbb*W;X.SetSize(m_iUnknownPointCount,1);for(int i=0;i<m_iUnknownPointCount;i++){X(i,0)=m_pUnknownPoint[i].H+x(i,0);}//精度评定V=B*x-f;//开始输出间接平差的结果CStdioFile SF;CString strLine;setlocale(LC_ALL,"");if(!SF.Open(strFileName, CFile::modeCreate|CFile::modeWrite)) return;//开始写数据SF.WriteString(_T("----------水准网间接平差结果----------\n"));//写已知点数据strLine.Format(_T("已知点个数:%d\n"),m_iKnownPointCount);SF.WriteString(strLine);for(int i=0;i<m_iKnownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pKnownPoint[i].pointID,m_pKnownPoint[i].H);SF.WriteString(strLine);}//待测点平差值strLine.Format(_T("待测点个数:%d\n"),m_iUnknownPointCount);SF.WriteString(strLine);strLine.Format(_T("平差结果:\n"));SF.WriteString(strLine);for(int i=0;i<m_iUnknownPointCount;i++){strLine.Format(_T("%s,%4f\n"),m_pUnknownPoint[i].pointID,X(i,0));SF.WriteString(strLine);}//输出系数阵和常数项SF.WriteString(_T("B矩阵:\r\n"));OutMatrixToFile(B,SF);//输出权矩阵SF.WriteString(_T("\r\nP矩阵(对角阵):\r\n"));OutMatrixToFile(P,SF);SF.WriteString(_T("高差改正数x(mm):\r\n"));OutMatrixToFile(x,SF);SF.WriteString(_T("NBB矩阵:\r\n"));OutMatrixToFile(NBB,SF);SF.WriteString(_T("NBB矩阵的逆矩阵:\r\n"));OutMatrixToFile(invNbb,SF);SF.WriteString(_T("W矩阵:\r\n"));OutMatrixToFile(W,SF);//输出观测值残差SF.WriteString(_T("观测值残差(mm):\r\n"));OutMatrixToFile(V,SF);//计算单位权中误差,并输出Omiga=~V*P*V;double Sigma;Sigma = sqrt(Omiga(0, 0) / (m_iObsDataCount - m_iUnknownPointCount));strLine.Format(_T("单位权中误差(mm):%.4f\r\n"),Sigma);SF.WriteString(strLine);double Qx;SF.WriteString(_T("点位误差(mm):\r\n"));for(int i=0;i<invNbb.Row();i++){Qx=sqrt(invNbb(i,i))*Sigma;strLine.Format(_T("%.4f "),Qx);SF.WriteString(strLine);}SF.WriteString(_T("\r\n"));SF.Close();}//把矩阵输出到文件中void Leveling::OutMatrixToFile(const CMatrix& mat,CStdioFile& SF){CString strLine,strTmp;for(int i=0;i<mat.Row();i++){strLine.Empty();for(int j=0;j<mat.Col();j++){strTmp.Format(_T("%.4f "),mat(i,j));strLine=strLine+strTmp;}SF.WriteString(strLine+_T("\r\n"));}}文件四:Matrix.h代码:#pragma onceclass CMatrix{public:CMatrix(int row=3,int col=3);// copy constructorCMatrix (const CMatrix& m);~CMatrix(void);private:double **dMatData;//保存矩阵元素数据的二维数组int iRow;//矩阵的行int iCol;//矩阵的列public:int Row() const {return iRow;}//返回行int Col() const {return iCol;}//返回列void SetSize (int row, int col);//调整数组的大小,原有数据不变(未测试)double& operator () (int row, int col);//获取矩阵元素double operator() (int row, int col) const;//重载获取矩阵元素函数,只有const 对象能访问CMatrix& operator = (const CMatrix& m) ;//注意:友元函数并不是类自己的成员函数friend CMatrix operator + (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator - (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const CMatrix& m1,const CMatrix& m2);friend CMatrix operator * (const double& num, const CMatrix& m1);friend CMatrix operator * (const CMatrix& m1,const double& num);friend CMatrix operator ~ (const CMatrix& m);//矩阵转置CMatrix Inv();//矩阵求逆void Unit();//生成单位矩阵};文件五:LevelingAdjustDlg.cpp代码:void CLevelingAdjustDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T("txt"),NULL,OFN_EXPLORER,_T("(文本文件)|*.txt")); //创建打开文件对话框if(dlgFile.DoModal()==IDCANCEL) return;//如果选择取消按钮,则退出CString strFileName=dlgFile.GetPathName();//获取选择的文件的名称Leveling ST;ST.LoadData(strFileName);ST.IndirectlyAdjust(_T("IndirectlyAdjustResult.txt"));MessageBox(_T("计算完毕!\r\n结果保存在Result.txt文件中!"));ShellExecute(this->m_hWnd,_T("open"),_T("notepad.exe"),_T("IndirectlyAdjustResult.txt"),_T(""),SW_SHOW );}6.运行结果:实验的运行结果如下图所示:8.实验总结这次的实验让我对于面对对象的编程思想有了进一步的理解。

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

福建农林大学金山学院实验报告课程名称:.NET程序设计姓名:洪绵绵系:信息与机电工程系专业:计算机科学与技术年级:2008学号:082231029指导教师:林松职称:讲师2010年12月29日实验项目列表福建农林大学金山学院实验报告系:信息与机电工程专业:计算机科学与技术年级: 2008级姓名:洪绵绵学号: 082231029 实验室号_ 608 计算机号 B3 实验时间: 2010.11.26上午一二节指导教师签字:成绩:实验一数组、类、接口与结构一、实验目的和要求1、了解数组、类、接口和结构的定义、概念。

2、了解结构和类的区别。

3、掌握数组的声明、实例化、初始化和访问。

4、掌握类、接口的声明和使用,结构的声明和调用。

二、实验内容和原理1、屏幕打印10行杨辉三角,逐行输出,用到Console.Write("{0,5}", A[i, j]); 和Console.WriteLine();语句。

2、创建抽象基类Shape和派生类Rectangle, Circle利用多态性实现Area(计算面积)和Show(在屏幕上显示图形名称和面积)抽象方法3、声明一个接口ICDPlayer,包含4个接口方法:Play(),Stop(),NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrack创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。

4、声明一个表示平面坐标系中的点的结构体CoOrds,包含字段x,y,以及带2个参数的构造函数。

分别利用三种不同的方法(默认构造函数、有2个参数的构造函数、先声明结构体变量再对其x,y字段赋值),创建3个平面坐标点变量。

求这3个点所构成的三角形面积。

注意判断3个坐标点是否可以构成三角形。

三、实验环境1、硬件:PC机2、软件:windowsXP、VS2008四、算法描述及实验步骤1、(1) 打开记事本,编写代码。

(2)定义一个二维数组,杨辉三角只需处理(赋值和输出)下三角各元素即可。

所有下三角各元素初始化为1。

(3)杨辉三角下三角各元素满足如下条件:第一列及对角线上的元素均为1;其余每个元素等于它上一行同一列元素与上一行前一列元素之和,即:A[i,j] = A[i-l,j]+A[j-1]。

(4)屏幕打印数组中的三角中各元素,可逐行输出(Console.Write("{0,5}", A[i, j]); Console.WriteLine();)(5) 保存记事本文件为exp1_1.cs(6) 在命令行界面(桌面开始程序vs2008vs tools vs2008命令提示)编译源文件(csc …\exp1_1.cs)、运行(exp1_1.exe)并查看结果。

2、(1) 打开vs2008,创建新项目(控制台应用程序),并命名为exp1_2。

(2)定义基类Shape,其中含有:一个保护的string类型字段name;带一个参数的构造方法为name字段赋值;两个抽象方法:Area()(返回一个双精度的值)和Show()(无返回值)。

(3)定义派生类Rectangle,其中含有:两个私有的双精度类型的字段width,he igh;带三个参数的构造方法为name,width和heigh赋值,其中为name赋值调用父类的构造方法;实现方法Area()(返回举行的面积)和Show()(无返回值,在屏幕上显示图形名称(矩形)和面积)。

(4) 定义派生类Circle,其中含有:一个私有双精度类型的字段radius;带两个参数的构造方法为name,radius赋值,其中为name赋值调用父类的构造方法;实现方法Area()(返回举行的面积)和Show()(无返回值,在屏幕上显示图形名称(圆)和面积)。

(5) 在program类(默认)中Main方法中:创建一个Shape类型的数组s,其中两个元素分别为new Rectangle(“小矩形”, 1.0, 2.0)和new Circle(“大圆”, 3.5);使用foreach遍历s,调用每个元素的Show方法。

(6) 编译和测试程序,并查看运行结果。

3、(1) 打开vs2008,创建新项目(控制台应用程序),并命名为exp1_3。

(2)声明一个接口ICDPlayer,包含:4个无返回值的方法:Play(),Stop(),NextTrack()和PreviousTrack();一个整型的只读属性CurrentTrack。

(3)定义类CDPlayer实现该接口ICDPlayer,包含:一个初始值为0的私有整型字段currentTrack;实现Play方法,功能是在屏幕上输出字符串“启动C D…”;实现Stop方法,功能是在屏幕上输出字符串“停止CD…”;实现NextTr ack方法,功能是在屏幕上输出字符串“下一个音轨…”,并让currentTrack的值加1;实现PreviousTrack方法,功能是在屏幕上输出字符串“前一个音轨…”,并让currentTrack的值减1;实现只读属性CurrentTrack,读取时返回字段cu rrentTrack的值。

(4) 在program类(默认)中Main方法中:创建一个CDPlayer类型的实例my CD;调用Play方法后在屏幕上输出当前音轨的值(CurrentTrack属性值);调用两次NextTrack方法后在屏幕上输出当前音轨的值;调用一次PreviousTrack 方法后在屏幕上输出当前音轨的值;调用Stop方法。

(5) 编译和测试程序,并查看运行结果。

4、(1) 打开vs2008,创建新项目(控制台应用程序),并命名为exp1_4。

(2)声明一个表示平面坐标系中的点的结构体CoOrds,包含字段x,y,以及带2个参数的构造函数。

(3)分别利用三种不同的方法(默认构造函数、有2个参数的构造函数、先声明结构体变量再对其x,y字段赋值),创建3个平面坐标点变量。

(4) 编译和测试程序,并查看运行结果。

五、调试过程六、实验结果1、屏幕打印10行杨辉三角,如下图:2、3、4、七、总结通过这个实验,我了解到了数组、类、接口和结构的定义,基本认识了结构和类的区别。

在一定程度上掌握了数组的声明、实例化、初始化和访问。

对于类、接口的声明和使用,结构的声明和调用有了进一步的认识。

附录:(1)exp1_1.csusing System;namespace exp1_1{class program{static void Main(){int[,] A=new int[10,10];int i,j;for(i=0;i<10;i++)//下三角初始化为0for(j=0;j<=i;j++)A[i,j]=1;for(i=2;i<10;i++)//计算杨辉三角for(j=1;j<i;j++)A[i,j]=A[i-1,j]+A[i-1,j-1];for(i=0;i<10;i++)//显示输出{for(j=0;j<=i;j++)Console.Write("{0,5}",A[i,j]);Console.WriteLine();}}}}(2)exp1_2.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace exp1_2{public abstract class Shape{private string name;public Shape(string s){Id=s;}public string Id{get{return name;}set{name=value;}}public abstract double Area{get;}public override string ToString(){return Id+"Area="+string.Format("{0:F2}",Area); }// public abstract void Show(Area);// {// Console.WriteLine("{0}", Area);// }}public class Rectangle : Shape{private double width;private double heigh;public Rectangle(string name, double width1, double heigth1): base(name){width = width1;heigh = heigth1;}public override double Area{get{return width*heigh;}}// public override void Show();// {// Console.WriteLine("{0:F2}",Area);// }}public class Circle : Shape{private double radius;public Circle(string name,double radius1):base(name){radius=radius1;}public override double Area{get{return radius*radius*System.Math.PI;}}// public override void Show();// {// Console.WriteLine("{0:F2}", Area);// }}class Program{static void Main(string[] args){Shape[] S ={new Rectangle("小矩形 ", 1.0, 2.0), new Circle("大圆 ",3.5)};foreach (Shape s in S){Console.WriteLine(s);}Console.ReadKey();}}}(3)exp1_3.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace exp1_3{public interface ICDPlayer{void Play();void Stop();void NextTrack();void PreviousTrack();int CurrentTrack();}public class CDPlay:ICDPlayer{private int currentTrack = 0;public void Play(){Console.WriteLine("启动CD");Console.WriteLine("{0}",currentTrack);}public void Stop(){Console.WriteLine("停止CD");}public void NextTrack(){Console.WriteLine("下一个音轨");Console.WriteLine("{0}", ++currentTrack); }public void PreviousTrack(){Console.WriteLine("上一个音轨");Console.WriteLine("{0}", --currentTrack); }public int CurrentTrack(){return currentTrack;}}class Program{static void Main(){CDPlay myCD = new CDPlay();myCD.Play();myCD.NextTrack();myCD.NextTrack();myCD.PreviousTrack();myCD.Stop();Console.ReadKey();}}}(4)exp1_4.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace exp1_4{public struct CoOrds{public int x, y;public CoOrds(int p1, int p2){x = p1;y = p2;}}class Program{static void Main(){double a, b, c, p, Area;CoOrds coords1 = new CoOrds();Console.WriteLine("平面坐标点1:x={0},y={1}", coords1.x, coords1.y);CoOrds coords2 = new CoOrds(10, 20);Console.WriteLine("平面坐标点2:x={0},y={1}", coords2.x, coords2.y);CoOrds coords3;coords3.x = 22;coords3.y = 3;Console.WriteLine("平面坐标点3:x={0},y={1}", coords3.x, coords3.y);a = Math.Sqrt((coords1.x - coords2.x) * (coords1.x - coords2.x) + (coords1.y - coords2.y) * (coords1.y - coords2.y));b = Math.Sqrt((coords1.x - coords3.x) * (coords1.x - coords3.x) + (coords1.y - coords3.y) * (coords1.y - coords3.y));c = Math.Sqrt((coords2.x - coords3.x) * (coords2.x - coords3.x) + (coords2.y - coords3.y) * (coords2.y - coords3.y));if (a + b <= c || a + c <= b || b + c <= a){Console.WriteLine("这些平面坐标不能构成三角形!!!"); }else{p = (a + b + c) / 2;Area = Math.Sqrt(p * (p - a) * (p - b) * (p - c));Console.WriteLine("三角形的面积={0}", Area);}Console.ReadKey();}}}福建农林大学金山学院实验报告系:信息与机电工程专业:计算机科学与技术年级: 2008级姓名:洪绵绵学号: 082231029 实验室号_ 608 计算机号 B3 实验时间: 2010.12.3上午一二节指导教师签字:成绩:实验二委托与事件一、实验目的和要求1)掌握委托和事件的概念、定义。

相关文档
最新文档