第一篇:测绘程序设计实验报告
测绘程序设计(C版)
实习报告
学号:201420050138
姓名: 李阳靖
班级:1420501Z
专业: 测绘工程
课程名称:测绘程序设计(C及Matlab)指导老师:肖根如
2015年12月
测绘程序设计实验报告
目录
前言1
一、实验目的1
二、实验环境2
三、Turbo C 3.0与VC++6.0的熟悉与操作2
四、实验内容梗概3
五、实验具体内容4 实验一算法4 实验二数据类型、运算符和表达式5 实验三控制语句6 实验四函数9 实验五数组11 实验六结构体与共用体12
六、常见错误及分析14
七、程序调试15
八、实验心得与体会17
九、附录:实习程序设计清单21
测绘程序设计实验报告
前言
现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。而C语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。
一、实验目的
C语言程序设计实习是在学习《C语言程序设计》理论知识的基础上进行的实践教学环节,其目的是培养我们具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。
全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
在实习过程中,我们要认真复习基本概念,独立编写程序,并上机调试运行,培养自己发现程序中的错误、改正错误以使程序能正确运行的能力。经验丰富的人,当编译时出现“出错信息”时,能很快地判断出错误所在,并改正之。而缺乏经验的人即使在系统给出明确出错提示信息下也往往找不出错误而求救于别人。对于我们来说,不仅要了解和熟悉有关理论和方法,还要求自己动手实现,要求会编写程序并上机调试通过。因此调试程序本身是程序设计课程的一个重要内容和基本要求,应给予充分的重视。调试程序的经验固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来积累,而且有些经验是只能“意会”难以“言传”。
调试程序的能力,是学完《C语言程序设计》之后,我们应当掌握的一项基本功。因此,千万不要在程序通过后就认为完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变输入数据的方法等,甚至于“自设障碍”,即把正确的程序改为有错的,如用scanf函数输入变量时,漏写“&”符号,使数组下标越界,使整数溢出等),观察和分析所出现的情况,并认真、及时总结。这样的学习是灵活主动的学习而不是呆板被动的学习,才会有真正的收获。
因此,我们的实习目的可综合的概括为:
1.熟悉TC20、TC30和VC++6.0的运行环境。
2.了解在TC20、TC30和VC++6.0上如何编辑、编译、连接和运行一个C程序。3.熟练使用各种C语言的数据结构及类型、运算符与表达式。4.熟练掌握格式输入与格式输出函数的使用。
测绘程序设计实验报告
5.通过运行简单的C程序,初步了解C源程序的特点,初步掌握查错和排错的技能。
二、实验环境
PC微机
Windows 操作系统
Turbo C 3.0与VC++6.0程序集成环境
三、Turbo C 3.0与VC++6.0的熟悉与操作
(一)Turbo C 3.0 1.在安装Turbo C编译系统基础上,则在DOS命令状态下键入命令tc。进入Turbo C集成环境后,首先在屏幕上显示Turbo C主菜单窗口。在该窗口,有8个菜单条目。每一个菜单的意义如下:
File 处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS。
Edit 建立、编辑源文件。
Run 控制运行程序。如果程序已经编译连接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information开关置为On,则可以用此菜单初始化调试阶段。
Compile 编译并生成目标程序与可执行文件。
Project 允许说明程序中包含哪些文件的管理条目。
Options 可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录Include Output及Library文件目录,保存编译任选项和从配置文件加载任选。
Debug 检查、改变变量的值,查找函数,程序运行时查看调用栈。选择程序编译时是否在执行行代码中插入调试信息。
Break/Watch 增加、删除、编辑监视表达式,及设置、清除、执行至断点。
2.特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。而选择Edit项目后,只是进入编辑器。
为了从主菜单中选择所需要的功能,可以用以下两种方式之一:
(1)按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、右光标移动键(←与→)选择需要的菜单,然后按回车(Enter)键。
(2)直接按Alt+主菜单条目中的首字母(分别为F,E,R,C,P,O,D,B),此时就会出现相应的子菜单。例如,按Alt+F表示选择文件子菜单(File)。当出现子菜单时,其中某个条目是高亮度的,此时可以利用上、下光标移动键(↑与↓)来移动该高亮度线,从而选择所需要的功能。在菜单调用时,按Esc键后将直接返回到活动窗口。
(二)VC++6.0 1.安装和启动
运行Visual Studio软件中的setup.exe程序,选择安装Visual C++ 6.0,然后按照安装程序的指导完成安装过程。2.创建工程项目
用Visual C++6.0系统建立C语言应用程序,首先要创建一个工程项目(project),用来存放
测绘程序设计实验报告
C程序的所有信息。创建一个工程项目的操作步骤如下:
进入Visual C++6.0环境后,选择主菜单“文件(File)”中的“新建(New)”选项,在弹出的对话框中单击上方的选项卡“工程(Projects)”,选择“Win32 Console Application”工程类型,在“工程(Project name)”一栏中填写工程名。3.新建C源程序文件
选择主菜单“工程(Project)”中的“添加工程(Add to Project) 新 建(New)”选项,为工程添加新的C源文件。
4.打开已存在的工程项目,编辑C源程序
进入Visual C++6.0环境后,选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择要打开的工作区文件,单击“确定(OK)”按钮,打开工作区。
5.在工程项目中添加已经存在的C源程序文件
选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择要打开的工作区文件,单击“确定(OK)”按钮打开工作区。6.编译、连接和运行(1)编译
选择主菜单“编译(Build)”中的“编译(Compile)”命令,或单击工具条上的图标,系统只编译当前文件而不调用链接器或其它工具。输出(Output)窗口将显示编译过程中检查出的错误或警告信息,在错误信息处单击鼠标右键或双击鼠标左键,可以使输入焦点跳转到引起错误的源代码处大致位置以进行修改。(2)构建
选择主菜单“编译(Build)”中的“构建(Build)”命令,或单击工具条上的图标,对最后修改过的源文件进行编译和连接。7.调试程序
在编写较长的程序时,能够一次成功而不含有任何错误决非易事,对于程序中的错误,系统提供了易用且有效的调试手段。调试是一个最基本的技能,不会调试就意味着即使学会了一门语言,却不能编制出任何好的软件。我们在前期进行编写程序时,经常会犯一些语句上的错误,熟练了过后,会犯一些逻辑上的错误,而这些错误往往是不易察觉的。
四、实验内容梗概
(一)算法
算法是编写程序的灵魂,数据是加工的对象,语言是工具。在编译任何程序前,我们必须认真地进行思考和设计数据结构及操作步骤。
(二)数据类型、运算符和表达式
在计算及高级语言中,数据的表现形式有常量和变量。在实习过程中,我们应当掌握数据类型、运算符和表达式,并且能在C语言实现过程中熟练的定义变量以及明确各种运算符之间的计算。
(三)三种基本结构
顺序结构、选择结构、循环结构等三种结构是C语言程序设计的三种基本结构,严格来说,所有的C程序都应由这三种基本结构组成。开始就着重这三种基本结构的应用练习,旨在使我们对于这三种结构有一个更加深刻的理解,能够根据处理问题的需要选择不同的结构进行处理。由于顺序结构在这三种结构中是最基本的,实际上当我们把程序中的选择结构部分和循环结构部分看作一个整体时,那么,整个程序就总是由顺序结构组成的了。
测绘程序设计实验报告
(四)函数
我们如果要用C语言进行大程序设计,一般采用模块化的思想。其基本思想是将一个大的程序按照功能进行分割成一些模块,使每一个模块都成为功能单
一、结构清晰、接口简单、容易理解的小程序。C语言是用函数来实现这种模块化功能的。我们用C语言设计程序,任务只有一种,就是编写函数,至少也要编写一个main()函数。根据程序的复杂程度,还可以编写多个子函数。在这一部分我们就通过练习进一步掌握用子函数来进行模块化程序设计的方法,熟悉子函数的调用和执行过程。
(五)数组应用
数组是一种构造数据类型,指的是一组同类型数据组成的序列,运用数组可以高效地处理很多问题。
五、实验具体内容 【实验一】算法
(一)实验目的
1.熟悉和掌握用SmartDraw软件进行流程图的绘制 2.了解流程图的格式 3.明确算法的目的
(二)实验内容
1.用流程图来表示算法
2.检查流程图的语句错误与逻辑错误
(三)实验步骤
我们以水准测量为例
1.我们在进行水准测量前,我们应该确定测量路线以及选取测量方向,然后就将水准仪整平准备测量;
2.在测量过程中,我们要对数据的可靠程度进行判断,所以在判断框中输入“d>5?”,表示判断视距差是否在误差范围之内;
3.当测量站数大于1后,就需要对视距差之和进行判断,如果前几站视距差之和大于限差,则需重测。所以,在后面加上一个判断框,写上“D>10?”;
3.如果满足了两个判断框的条件,则进行下一站的测量;如果不满足其中的一个条件,就需要重新进行数据测量及输入;
4.最后判断是否将整个测区测完,如果没有则继续测量,直至测完为止。测量完成且满足限差要求,就可停止运行计算。
测绘程序设计实验报告
(四)实验总结
1.程序设计反映了利用计算机解决实际问题的全过程,具体要经过以下四个基本步骤:分析问题,确定数学模型或方法;设计算法,画出流程图;选择编程工具,按算法编写程序;调试程序,分析输出结果。
2.为解决一个问题而采取的方法和步骤,就算法。算法是程序设计的核心。
3.算法具有5个特性:有穷性、确定性、有效性、要有数据输入、要有结果输出。算法的评价标准包括:正确性、可读性、通用性、高效率。算法效率的度量分为时间度量和空间度量。
4.描述算法有多种不同的工具,常用的有:流程图、结构化流程图和伪代码等。实用结构化流程图能帮助培养良好的程序设计风格,提倡用结构化流程图表示算法。
【实验二】数据类型、运算符和表达式
(一)实验目的
1.掌握C语言的数据类型,了解C语言中数据类型的意义,熟悉如何定义整型、字符型和实型的变量,以及对它们赋值的方法。2.掌握不同类型的数据之间赋值的规律。
3.学会用C的有关算术运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用。
4.掌握C语言中使用最多的一种语句——赋值语句的使用方法。
5.掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方 法,能正确使用各种格式转换符。
6.掌握字符输入输出函数getchar()、putchar()函数的调用方法。(二)实验内容
1.用printf函数来输入表达式运行结果。2.观察实验步骤中表达式的结果。(三)实验步骤
以方位角的计算为例:
1.在明确该程序算法以及熟知各种数据类型的基础上,先确定三个变量,然后声明它们的数据类型
2.赋予那两个已经声明变量各自的初值
3.根据变量,执行判断语句,判断b是否大于180度
4.根据算法,写出表达式,并根据判断结果运行不同的表达式
测绘程序设计实验报告
5.最后用printf输出计算结果
输入程序: int main(){ int a12,a23,b;a12=100,b=50;if(b<180)a23=a12+b-180;else a23=a12-b+180;printf(“a23=%dn”,a23);} 运行结果为:
(四)实验总结
1.C语言数据类型有:基本类型(整型、字符型、实型)、构造类型(结构体类型、公用体类型、枚举类型)、指针类型和空类型。整型又分为段整形、基本整型和长整型三种。整型还可以分为有符号型和无符号型。实型分为单精度型和双精度型。
2.变量是一个用于存放数值的内存存储区,根据变量的类型不同,该存储区被分配不同字节的内存安源。变量用标识符命名。C程序中用到的任何变量都必须在使用前进行定义。
3.整形变量可以用十进制、八进制、和十六进制来表示。4.转义字符占一个字节,分为以下三类:
(1)控制输出格式的转义字符:n、t、b、r、f等。(2)控制三个特殊符号输出的转义字符:、’、” 5.C语言的运算符
(1)基本算术运算符:+-* / %,先乘除、求余,后加减;对于/运算,两个整数相除结果仍为整数;%运算符只对整型数据有效。
(2)逗号运算符的运算规则:从左向右依次运算每一个表达式,逗号表达式的结果就是最后一个表达式的值。
6.++或—可以卸载变量之前,也可以写在变量之后。如果对变量施加了前缀或后缀运算,并参与其他运算,则前缀运算是先改变变量的值再做运算,而后缀运算是先参与运算后改变变量的值。自增和自减运算符的运算对象只能是变量,而不能是表达式或常量。
7.当表达式中含有不同类型的数据时,运算的数据类型默认按隐式类型转换,即从精度低的类型自动转换成精度高的类型,否则会造成精度损失。
8.C语言中没有提供输入输出语句,在其库函数中提供了一组输入输出函数。其中对标准输入输出设备进行格式化输入输出的函数是scanf和printf。
9.输入函数scanf()的功能是接受键盘输入的数据给变量输出函数printf()的功能是将数据以一定格式显示输出。
(1)输出函数的一般形式为: printf(“格式控制字符串“,输入项表)其中格式控制字符串由格式说明符、转义序列和普通字符组成。
测绘程序设计实验报告
而一个格式说明符将引起一个输出参数项的转换与显示。格式说明符是由%引出并以一个类型描述符结束的字符串,中间是一些可选的附加说明项。
(2)输入函数的一般形式为: Scanf(“格式控制字符串“,输入项表)
其中格式控制字符与printf()函数中的类似,不过一般只含有简单的格式说明符;输入项表至少有一个输入项,且必须是变量的地址(用变量名前加&表示)
Printf()和scanf()都要求格式转换说明符与输入项在个数、顺序、类型上一一对应。
【实验三】控制语句
(一)实验目的
1.熟练掌握if、if„else、if„elseif语句和switch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。
2.熟练掌握while语句、do …while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。
3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。
(二)实验内容
1.选择结构程序设计; 2.if语句的使用;
3.使用switch语句实现多分支选择结构; 4.三种循环语句的应用; 5.循环结构的嵌套;
6.break和continue语句的使用。(三)实验步骤 以带号计算为例
1.根据所需计算的方法分为三度带和六度带,确定程序的结构
2.定义变量,之后确定其数据类型,用scanf进行输入经度和判断标志
3.我们需要选择计算方式,如果选用三度带进行计算,则将判断标志设为0,如果选用六度带进行计算,则判断标志设为费0的数
4.用if…else…进行选择后,就进行计算 5.计算完毕后,用printf输出结果 输入程序: int main(){ int n,m,l;scanf(“%d%d”,&l,&m);if(m==0)n=(l+3)/6;else
n=l/3;printf(“该点位于第%d带n”,n);} 输出结果为:
测绘程序设计实验报告
以素数对的计算为例
1.在明确素数对的定义及算法的基础上,我们先确定变量个数及名称,并且声明它们的数据类型
2.然后确定用for的嵌套结构对素数对进行循环的判断、选择
3.用if结构进行判断,判断的依据是首先这个数必须是素数,即不能被除了1与它本身外的数整除,其次,需要满足的条件是这两个素数必须相差2,所以先寻找“k=(int)sqrt(j)”作为除数,然后执行“if(j%i==0)”进行判断其是否为素数,在执行”if(k2-k1==2)”判断它们是否为素数对,不满足其中的一个判断条件,则执行”break”,跳出循环
4.找出素数对之后,用printf进行输出 程序输入:
for(j=2;j<=lyj;j++){ prime=1;k=(int)sqrt(j);for(i=2;i<=k;i++){
if(j%i==0){
prime=0;
break;
} } if(prime){
k2=j;
{
printf(“%ld %ld is prime pairsn”,k1,k2);
}
k1=k2;} } 输出结果为:
(四)实验总结
1.根据某种条件的成立与否而采用不同的程序段进行处理的程序结构称为选择结构。选择结构又可以分为单分支、双分支和多分支三种情况。一般采用if语句实现单分支、双分支或多分支结构程序
2.采用嵌套if语句还可以实现较为复杂的多分支结构程序。在嵌套if语句中,一定要弄清楚else与哪个if结合。书写嵌套if语句往往采用缩进的阶梯式写法,目的是便于看清else与if结合的逻辑关系,但折后总写法并不能改变if语句的逻辑关系。
测绘程序设计实验报告
3.循环结构又称为重复结构,它可以控制某些语句重复执行,重复执行的语句称为循环体,而决定循环是否继续执行的是循环条件。循环结构是程序设计总应用最多的结构形式,在C语言中,可用while语句、do…while语句和for语句来实现循环结构。
一般情况下,用某种循环语句写的程序段,业内呢个用另外两种循环语句实现。While语句和for语句属于当型循环,即先判断,后执行;而do…while语句属于直到型循环,即先执行,后判断,而无法确定循环次数的问题采用while语句或do…while语句比较自然。
4.有时候需要用到多重循环,又称为循环嵌套,即在循环语句的循环体内又包含另一个完整的循环结构。循环嵌套不允许交叉。
5.为了避免出现无终止的循环,要注意循环结束条件的使用,也就是说在循环执行中,要修改循环变量,还要注意循环的初始条件。分析循环第一次和最后一次执行时的情况有助于写出正确程序。
【实验四】函数
(一)实验目的
1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值 2.掌握实参与形参的对应关系以及参数之间的“值传递”的方式; 3.掌握函数的嵌套调用及递归调用的设计方法;
4.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法; 5.在编程过程中加深理解函数调用的程序设计思想。
(二)实验内容
1.多模块的程序设计与调试的方法; 2.函数的定义和调用的方法; 3.用递归方法进行程序设计。(三)实验步骤
以前方交会测量为例
1.明确前房交会测量的原理及算法
2.定义所需的变量,并确定它们的数据类型
3.用scanf输入角度、距离等数据,并且需要进行角度的判断,以保证两角之和要大于30度小于150度
4.满足条件后,就根据计算公式进行计算 5.然后用printf输出结果
6.然后再熟悉函数形式的基础上,将该程序算法的主要部分改为函数形式 7.最后运行、调试,直至输出正确的结果为止 原程序输入:
scanf(“%d%d%d%d%d%d”,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150 &&(a1+a2)<30)printf(“overrun!”);else xp=(x1*tan(a1*PI/180)+x2*tan(a2*PI/180)+(y2-y1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));yp=(y1*tan(a1*PI/180)+y2*tan(a2*PI/180)+(x2-x1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));printf(“p=(%d,%d)n”,xp,yp);
测绘程序设计实验报告
} 改为函数形式程序输入为:
double m(double x1, double x2, double x3, double x4,double x5,double x6,double x7,double x8,double x9,double x10){double l;l=(x1*tan(x2*PI/180)+x3*tan(x4*PI/180)+(x5-x6)*tan(x7*PI/180)*tan(x8*PI/180))/(tan(x9*PI/180)+tan(x10*PI/180));return(l);} main(){ double x1,x2,xp,y1,y2,yp,a1,a2;scanf(“%d%%d%d%d%d”,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150||(a1+a2)<30)printf(“overrun!”);else xp=m(x1,a1,x2,a2,y2,y1,a1,a2,a1,a2);yp=m(y1,a1,y2,a2,x2,x1,a1,a2,a1,a2);printf(“p=%dn,%dn”,xp,yp);} 结果输出为:
以坐标正算为例
1.明确坐标正算的算法
2.声明变量PI(圆周率)以及其他变量,并确定它们的数据类型 3.用scanf输入第一个点的坐标以及两点之间的距离和角度
4.然后进行“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”的计算 5.计算完成后用printf输出计算结果
6.然后将程序算法的主要部分“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”改为函数的形式
7.最后运行、调试,直至输出正确的结果为止
原程序输入为: main(){
float x1,y1,d,a;float x2,y2;scanf(“%f%f%f%f”,&x1,&y1,&d,&a);
x2=x1+d*cos(a*PI/180);y2=y1+d*sin(a*PI/180);printf(“第二个点的坐标是:(%f,%f)n”,x2,y2);} 改为函数形式程序输入为:
测绘程序设计实验报告
double w(double x,double y,double z){double k;k=x+y*cos(z*PI/180);return(k);} main(){ float x1,x2,y1,y2,d,a;scanf(“%f%f%f%f”,&x1,&y2,&d,&a);
x2=w(x1,d,a);y2=w(y2,d,a);printf(“第二个点的坐标是:(%fn,%fn)”,x2,y2);} 输出结果为:
(四)实验总结
1.函数是利用C语言进行结构化程序设计的最基本的概念,C程序是由函数组成的。可以把一个复杂的程序分成多个模块进行设计,而每个模块是一个函数。main()是C程序中最重要的函数,程序运行从函数main()开始,也在函数main()结束。
2.函数定义的一般形式为:
函数符 函数名([形式参数说明]){ 声明与定义部分 语句部分 }
类型符指明函数返回值的类型。如果函数定义是不指明类型,系统隐含指定为int型。形式参数有两个作用:其一表示将从主调函数中接收哪些类型的信息,其二在函数体中形式参数可以被引用。
3.函数返回值由return语句实现,return语句的格式为: return 表达式;
函数先将表达式的值转换为所定义的类型,然后返回到主调函数中的调用表达式。
4.函数调用是通过函数调用表达式进行,当函数被调用时,计算机才为形参分配存储空间。在调用函数时,函数之间的参数传递也称为虚实结合。形参从相应的实参得到值,称为传值调用方式。实参与形参在个数、类型上要匹配。
5.函数调用前应该已经定义或声明。
6.函数的形参及函数内定义的变量称为局部变量,其作用范围在定义它的函数或复合语句内。在函数外部定义的变量称为全局变量,其作用域是从定义或声明处到整个程序结束。
7.一个函数被调用的过程中可以调用另一个函数,即函数调用允许嵌套。
【实验五】数组
(一)实验目的
1.掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。
2.掌握字符数组与字符串的使用方法。理解字符数组与其它数组的区别、理解字符串及其特点。
测绘程序设计实验报告
3.掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。4.掌握与数组相关的算法,包括排序算法和查找算法等。
(二)实验内容 有关数组的程序设计
(三)实验步骤 以坐标反算为例
1.明确坐标反算的算法 2.声明变量PI(圆周率),并用普通程序将其表示出来 3.最后将其改编为函数形式的程序
原程序输入为: void main(){ float x1,x2,y1,y2,d,a;scanf(“%f%f%f%f”,&x1,&y1,&x2,&y2);a=atan((y2-y1)/(x2-x1))*180/PI;
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(“a=%fnd=%fn”,a,d);} 改为数组形式程序输入为: void main(){ int i;float a[4],d,m;for(i=1;i<5;i++)scanf(“%d”,&a[i]);m=atan((a[4]-a[3])/(a[2]-a[1]));
d=sqrt((a[2]-a[1])*(a[2]-a[1])+(a[3]-a[4])*(a[4]-a[3]));printf(“a=%fnd=%fn”,m,d);} 输出结果为:
(四)实验总结
1.数组命名要符合标识符的命名规则。
2.数组名后的括号必须是方括号,不能是圆括号。
3.数组长度必须是正整数,可以是个表达式,但不能有变量,C语言不支持动态数组。4.数组长度表示数组中元素的个数。
5.数组元素的下标从0开始数,所以最大下标是数组的长度减1。
6.C语言中没有字符串变量,字符串是靠字符数组实现的,所谓字符数组就是元素的数据类型为字符型的数组。
测绘程序设计实验报告
【实验六】结构体与共用体
(一)实验目的
1.理解结构体类型的含义;掌握结构体类型变量的定义方法和使用;结构体类型变量的说明以及初始化方法。
2.理解结构体与数组的区别;掌握结构体类型数组的概念、定义和使用方法。
3.熟悉链表的概念,初步学会对链表进行操作。4.初步了解共用体的概念与使用。
(二)实验内容
有关结构与共同体的程序设计
(三)实验步骤 以三角高程计算为例
1.明确三角高程计算的算法
2.声明变量,用scanf进行输入,并用普通程序的结构将其算法表示出来 3.将原程序改编为结构体形式 原程序输入为: main(){ double HAB,HB,S,i,v,a,HA;scanf(“%lf%lf%lf%lf%lf”,&S,&i,&v,&a,&HA);HAB=S*tan(a*PI/180)+i-v;HB=HA+S*tan(a*PI/180)+i-v;printf(“HAB=%fnHA=%fn”,HAB,HB);} 改为结构体形式程序输入为: struct X
{double S;double i;double v;double a;double HA;}N={100,1,2,45,200};main(){ double S,i,v,a,HA,HAB,HB;HAB=S*tan(a*PI/180)+i-v;HB=HA+S*tan(a*PI/180)+i-v;printf(“HAB=%dnHA=%dn”,HAB,HB);} 输出结果为:
测绘程序设计实验报告
(四)实验总结 1.结构体类型定义
结构体类型的形式为:
struct结构体类型名 { 数据类型成员名1;...数据类型成员名n; };2.结构体变量的定义
结构体变量有三种定义形式:
(1)先定义结构体类型,后定义结构体变量。(2)定义结构体类型的同时定义结构体变量。
(3)不定义结构体类型名,直接定义结构体变量。3.结构体变量的引用(1)结构体变量的初始化:许多C版本规定对外部或静态存储类型的结构体变量可以进行初始化,而对局部的结构体变量则不可以,新标准C无此限制,允许在定义时对自动变量初始化。
(2)结构体成员的引用:由于C语言一般不允许对结构体变量的整体引用,所以对结构体的引用只能是对分量的引用,结构体变量中的任一分量可以表示为:结构体变量名.成员名
4.结构体与数组
C语言中数组的成员可以是结构体变量,结构体变量的成员也可以是数组。结构体数组有三种定义形式:
(1)先定义结构体类型,后定义结构体数组。(2)定义结构体类型的同时定义结构体数组。(3)不定义结构体类型名,直接定义结构体变量。
六、常见错误及分析
C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。
有时候看着有错的程序,不知该如何改起,通过对C的学习与实践,我积累了一些C编程时常犯的错误:
1.书写标识符时,忽略了大小写字母的区别。main(){ int a=5;printf(“%d”,A);} 编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。main(){ float a,b;printf(“%d”,a%b);} “%”是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
测绘程序设计实验报告
3.将字符常量与字符串常量混淆。char c;c=“a”;在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写 if(a=3)then „ 但C语言中,“=”是赋值运算符,“==”是关系运算符。如: if(a==3)a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;t=z/100;printf(“%f”,t);} 对于复合语句来说,最后一个语句中最后的分号不能忽略不写。以及在包含结构体的程序中,很多时候会忘记花括号后面的那个分号,如果忘记了加分号,程序就不能运行,如:
struct Student {char name;} 6.多加分号。
对于一个复合语句,如: { z=x+y;t=z/100;printf(“%f”,t);};复合语句的花括号后不应再加分号,否则将会画蛇添足。又如: if(a%3==0);i++;本是如果3整除a,则I加1。但由于if(a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。再如:
for(i=0;i<5;i++);{scanf(“%d”,&x);printf(“%d”,x);} 本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&”。int a,b;scanf(“%d%d”,a,b);这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
在表示并列的时候,要同时使用两个“&”,即“&&”否则程序调试过程会出现错误,如:
测绘程序设计实验报告
if(x>2 & x<5)8.输入数据的方式与要求不符。scanf(“%d%d”,&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法: 3,4
七、程序调试 调试概述
调试是编程过程中不可忽视的问题,对于一个复杂的程序来说,从编写到能够通过编译,只是完成了一小部分而已。然后还要不断的调试、修改、再调试、再修改、„直到将发现的问题都解决,程序能够稳定正确的运行为止。调试在程序设计中的地位是十分重要的。调试是一个最基本的技能,其重要性甚至超过学习一门语言。不会调试程序就意味着即使会一门语言,却不能编制出任何好的软件。
常见的错误类型
(1)语法错误:拼写错,括号不匹配,漏写分号……对于查出的错误(Error)必须排除,否则程序无法运行;而警告(Warning)则应根据情况处理,否则可能产生运算误差等。
(2)逻辑错误:编译无误,有时也有执行结果,但结果不符合题意。例如scanf的参数中漏写地址符,if语句、for语句花括号位置错误等,都会导致此类错误。
(3)运行错误:运行结果错误也可能是由于输入数据错误、类型不匹配等造成的。例如用户没有按照scanf规定的格式输入数据就会造成此类错误。
查错的方法
(1)先进行人工检查,即静态检查。在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。
为了更有效地进行人工检查,所编的程序应注意力求做到以下几点: A、应当采用结构化程序方法编程,以增加可读性; B、并尽可能多加注释,以帮助理解每段程序的作用;
C、在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,便于分别检查和处理。
(2)在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。
如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。养成写程序习惯,如输入“{”时,中间先不写代码,后面紧接输入”}”,就不会漏了或多了匹配符号。
(3)在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析。看它是否符合要求。有的人看到运行结果就认为没问题了,就不作分析,这是不好的。
有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,测绘程序设计实验报告
输入这些数据可以得出容易判断正确与否的结果。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。
事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。(4)运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法:
A 将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。
B 如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。
用printf函数语句测试未能发现所有问题,则可用系统提供的调试工具,跟踪流程并给出相应信息,使用更为方便。
总之,程序调试是一项细致、较为繁琐的工作,需要下功夫,动脑子,善于累积经验。在程序调试过程中往往反映出一个人的学习态度,以前学习C语言时基础不太好,但我也不灰心,多写程序,“掌握调试的方法和技术”,要学会自己找问题,这样慢慢自己就会写出错误较少的实用的程序。
常用快捷键
工欲善其事,必先利其器”,为了加速调试的过程,避免调试的时候鼠标点来点去,这里简要介绍一下调试时常用的快捷键,熟练掌握这些快捷键,可以大大加速调试工作的进度。当然,开始的时候不可能记住全部的快捷键,可以随着自己调试需要用到的功能的增加,逐渐熟悉这些快捷键,尽量使用它们。首先应该熟悉编译、运行、窗口切换相关的操作。然后再逐步熟悉Debug用到的检查、观察、单步跟踪等操作。
VC6.0中常用的快捷键:
测绘程序设计实验报告
八、实验心得与体会
在这个学期里,在老师的带领下进行了《C语言程序设计》学习。在这之前,我们已经对VB这门课程学习了一个学期,对程序设计有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难。
上机进行实习是学习程序语言设计必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。学习C程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间,所以,老师希望我们能有效地利用课余时间进行上机练习,尽快掌握用C语言开发程序的能力,为今后的继续学习打下一个良好的基础。
C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。
通过上机实习,我也从中发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了C语言那就大错特错了。
我主要存在以下的这些缺点:
1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。而在最后输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。
2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解题了。
3、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。
4、知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够深刻。
5、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。
6、由于我的英语水平较差,调试程序时,错误的地方虽然电脑有显示,但由于是英文,理解上还是存在一点问题。
我认为上机编程的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,上机实验的目的可以概括为如下几个方面:
1、加深对课堂讲授内容的理解
课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自
测绘程序设计实验报告
己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
2、熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓“环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3、学习上机调试程序
完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
快临近学期期末了,现在回想起来当初刚开始学习的时候老是感觉力不从心。虽然认真听课了,但是并不能理解它。这种情况到了后来才有所改变。
之所以能有所改变,是因为本人找到了学习C语言的一些方法。由于C语言对于刚接触的学子,会感到很陌生。因为C语言所要用到的思维逻辑与我们平时的思维逻辑有所不一样。其显得更抽象。所以学习C语言,一定要打好基础。要把基础理解透彻。需要用到的语句要牢记,这样,在以后的运用当中,就能比较得心应手了。
学习C语言的起步就是学习它的方法规则,如果把它学习得好在学习后面的时候就比较容易理。比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。在C语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。这些都是语法基础,如果把它们都了解很好了,那么编起程序来就很得心应手。比如说if语句和switch语句,这两种条件语句都是用来执行判断功能的,那什么时侯用if什么时侯用switch,如果很好地了解它们的结构和作用的话那么就能灵活运用:若它的条件分支是多个而且条件的值是一个确定的值时就可以选用switch。反之,在大多数情况下就用if。
掌握了语言法规则,不一定就能编出程序来,其实学习编程就是要学习一种思想,一种思维方法,首先要确定一种算法,如从1加到100,判断润年等,我认为这些算法都是一种思维方法。
画流程图就是在构建编写程序思路的过程,当画好一个流程图时编程思想也就出来了,程序也差不多了,再结合掌握的语言的方法规则,在计算机里实现就可以了。任何程序只要有思维,有想法,那么实现程序时就不会觉得无从下手。而要学习这种思维方法就是多做题,多读程序,学习别人好的思维方法,多想想一个程序还可不可以有另外一种方法来实现它。这样久而久之,自然会形成一种自己的思维方法。因此我认为不管学什么语言都是这样。
另外,良好的编程习惯也是学好C语言的重要因素。例如编写程序时用缩进的方式、写注释、程序写到一定的阶段时要做一下测试等。这些工作可以帮我们在调试程序时有很大的帮助。程序代码实现后,错误是难免的,所以也要锻炼自己的调试查错能力,而良好的编程习惯可以使我们在调试时减小工作量和提高调试效率,也有助于形成自己的编程风格。
在学习的时候,我遇到过这么个情况。觉得C语言学起来很枯燥,很闷。后来才发现学习语言,是要有目的性。如果没有目的,你会发现自己在学习的过程中会很枯燥,会渐渐失
测绘程序设计实验报告
去对C语言的学习兴趣。所以我们要有一个远大而又容易实现的目的,我要用C语言来做什么?再把这个最终的目的分成部分,让我们慢慢的一点一点的来完成它,这样在学习C语言的过程中,我们就会始终陶醉在一个又一个成功的喜悦里,让我们的学习越来越有兴趣。有一天,我们会发现:原来学习C语言真的是一件很有意思的事儿,而且学好C语言也不是很难么!
学习C语言只看书也是不够的,我们要一边看书,一边上机做练习,或者在你学习了C语言的基础知识以后就可以找一些别人的程序来看,遇到不明白的函数可以再翻一下书,如果查书也理解不了,我们可以把他的程序输入到计算机里,情况好的话能够顺利通过编译,如果不能顺利执行,我们也同样可以学习到一些C语言调试方面的知识。课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住。
然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
总之一句话,在学习C语言中,一定要多动手。不要老是钻牛角尖,不断的在那左思右想。用时候只要肯动手,编译错了再改。你会发现慢慢的就能够找到答案了。而且也能从中学习到很多东西,常言道失败是成功之母。只要不怕失败,不断的钻研、尝试,总会能够把困难解决的。
在学习C语言的过程中会遇到许多困难与挫折。但通过自己的努力,最终能克服种种的困难。所得到的成就感是无法用言语去形容的。从中学到的坚韧精神对于我今后的生活也有很大的影响。
C语言是一种抽象的语言,相对于我们平时用的语言,所以学习起来会用点吃力。但是面向对象程序设计的基本要素是抽象,程序员是需要通过抽象来管理复杂性.面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应.学习C语言可以让我们更好的锻炼自己的逻辑思维能力,还可以让你掌握更好的计算机知识,在不断学习的过程中让自己真正的自信起来!学习C语言,对于以后的工作也是有所帮助的,它也可以结合其他的科目,来灵活运用。例如单片机的运用。用C语言去编辑单片机的主程序,会发现程序简洁多了。而且发现C语言的实用性很强。并且,C语言和我们测绘专业有很紧密的联系,我们可以自己进行测绘程序的编写,帮助我们进行计算等等。
虽然测绘程序设计这门课程结束了,但在以后的学习过程中,我仍会不断的钻研、学习,希望学得更多,能更好的在以后的工作中广泛运用。
测绘程序设计实验报告
九、附录:程序设计作业清单
测绘程序设计实验报告
测绘程序设计实验报告
测绘程序设计实验报告
测绘程序设计实验报告
测绘程序设计实验报告
#include
double a,x,y,Y;printf(“Input a1,a2,a3,s,x1 and y1n”);scanf(“%d%d%d%f%lf%lf%fn”,&a1,&a2,&a3,&s,&x1,&y1);
a=(a1*3600+a2*60+a3)/(PI/(180*3600));
num.xz=xadd(s,a);y=yadd(s,a);num.xz1=add(x1,x);Y=add(y1,y);printf(“%f%fn”,x,y);printf(“X=%f,Y=%fn”,num.xz,Y);return 0;} double xadd(double sn,double an){ double xn;
xn=sn*cos(an);return xn;}
double yadd(double sn,double an){ double yn;yn=sn*sin(an);return yn;} double add(double xn,double yn){ double z;
z=xn+yn;
测绘程序设计实验报告
return z;}
#include
int a;
int b;
int c;}num;
int jf(int x,int y);int a1,a2,a3,b1,b2,b3,e,f;char angle;printf(“Input left angle or right anglen”);
scanf(“%c%d%d%d%d%d%dn”,&angle,&a1,&a2,&a3,&b1,&b2,&b3);printf(“Angle is:”);num.a=jf(b1,a1);num.b=jf(b2,a2);num.c=jf(b3,a3);
e=num.a*3600+num.b*60+num.c-180*3600;
f=num.a*3600+num.b*60+num.c+180*3600;switch(angle){
case'l':printf(“%dn”,e);break;
case'r':printf(“%dn”,f);break;
default:printf(“enter date error!n”);}
return 0;} int jf(int x,int y){ int z;z=x-y;return z;}
测绘程序设计实验报告
#include
double s;
double a;}num;
double pfh(float n,float m);
float jf(float n,float m);float X,Y,x,y,x1,y1;printf(“Input x,y,X,Yn”);scanf_s(“%f%f%f%f%fn”,&x,&y,&X,&Y);x1=jf(X,x);y1=jf(Y,y);num.s=sqrt(pfh(x1,y1));
num.a=tan(y1/x1);printf(“%f%f%f%fn”,num.a,num.s,x1,y1);return 0;} float jf(float n,float m){ float z;z=n-m;return z;} double pfh(float n,float m){ double z;z=n*n+m*m;return z;}
#include
测绘程序设计实验报告
{
double X;
double Y;}num;
double xx(float x11,float x21,float b1,float a1, float y21,float y11);
double yy(float y11,float y21,float b1,float a1, float x21,float x11);float x,x1,y1,x2,y2,a,b;double yy(float y11,float y21,float b1,float a1, float x21,float x11);int a1,a2,a3,b1,b2,b3;printf(“Input x1,y1,x2,y2,a1,a2,a3,b1,b2 and b3n”);scanf(“%f%f%f%f%d%d%d%d%d%dn”,&x1,&y1,&x2,&y2,&a1,&a2,&a3,&b1,&b2,&b3);a=(a1*3600+a2*60+a3)/(PI/(180*3600));b=(b1*3600+b2*60+b3)/(PI/(180*3600));num.X=(x1,x2,b,y2,y1);
num.Y=(y1,y2,b,a,x2,x1);
printf(“%f%fn”,num.X,num.Y);return 0;} double xx(float x11,float x21,float b1,float a1, float y21,float y11){ double X1;
X1=(x11*(1/tan(b1))+x21*(1/tan(a1))-(y21-y11))/((1/tan(a1))+(1/tan(b1)));return X1;} double yy(float y11,float y21,float b1,float a1, float x21,float x11){
double Y1;
Y1=(y11*(1/tan(b1))+y21*(1/tan(a1))-(x21-x11))/((1/tan(a1))+(1/tan(b1)));
return Y1;}
#include
float dh(float x1);
测绘程序设计实验报告
char daihao;printf(“Input daihao and Ln”);scanf(“%c%f”,&daihao,&num.L);num.n=dh(num.L);num.N=0.5+num.n/2;switch(daihao)
{ case'3':printf(“%lfn”,num.n);break;
case'6':printf(“%lfn”,num.N);break;default:printf(“enter date error!n”);} return 0;} float dh(float x1){ float x2;x2=(x1)/3;return x2;}
#include
struct date {
float H1;
float H2;
float H3;
float H4;}num;
float sum(float x1,float x2,float x3,float x4);
float gaocheng(float x1,float x2,float x3,float x4,float x5);float h,h1,h2,h3,h4,s1,s2,s3,s4,S,l;
printf(“Input h1,h2,h3,h4,s1,s2,s3 and s4n”);scanf(“%f%f%f%f%f%f%f%f%fn”,&h,&h1,&h2,&h3,&h4,&s1,&s2,&s3,&s4);
l=-sum(h1,h2,h3,h4);S=sum(s1,s2,s3,s4);num.H1=h;num.H2=gaocheng(h,h1,s2,S,l);num.H3=gaocheng(num.H2,h2,s3,S,l);
测绘程序设计实验报告
num.H4=gaocheng(num.H3,h3,s4,S,l);printf(“%f%f%f%fn”,num.H1,num.H2,num.H3,num.H4);return(0);} float sum(float x1,float x2,float x3,float x4){ float x5;x5=x1+x2+x3+x4;return x5;} float gaocheng(float x1,float x2,float x3,float x4,float x5){ float x6;x6=x1+x2+(x3/x4)*x5;return(x6);}
#include
double s;
double s1;
double s2;
}num;
double jf(double x11,double x21);double x1,y1,x2,y2,x3,y3,x4,y4;double a,b,c,d,e;double k,h;printf(“x1,y1,x2,y2,x3,y3,x4,y4n”);scanf(“%f%f%f%f%f%f%f%fn”,&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);a=sqrt(jf(x2,x1)*jf(x2,x1)+jf(y2,y1)*jf(y2,y1));b=sqrt(jf(x3,x2)*jf(x3,x2)+jf(y3,y2)*jf(y3,y2));c=sqrt(jf(x4,x3)*jf(x4,x3)+jf(y4,y3)*jf(y4,y3));d=sqrt(jf(x4,x1)*jf(x4,x1)+jf(y4,y1)*jf(y4,y1));e=sqrt(jf(x3,x1)*jf(x3,x1)+jf(y3,y1)*jf(y3,y1));k=0.5*(a+d+e);
测绘程序设计实验报告
h=0.5*(b+c+e);num.s1=sqrt(k*jf(k,a)*jf(k,d)*jf(k,e));num.s2=sqrt(h*jf(h,b)*jf(h,c)*jf(h,e));num.s=num.s1+num.s2;printf(“%llfn”,num.s);return(0);} double jf(double x11,double x21){ double x31;x31=x11-x21;return(x31);}
#include
/* a1,a2为瞄准第1,2点的读数 b1,b2为瞄准第2,1点的读数 */ d1=a2-a1;d2=b2-b1;if(abs(d2-d1)>40/3600)printf(“overrun!”);else ds=(d1+d2)/2;printf(“ds=%4.2fn”,ds);return 0;}
#include
测绘程序设计实验报告
else d1=(a1+b1)/2;d2=(a2+b2)/2;d3=(a3+b3)/2;d4=(x1+x2)/2;printf(“d1=%fnd2=%fnd3=%fnd4=%fn”,d1,d2,d3,d4);return 0;}
#include
#include
测绘程序设计实验报告
#include
/* a1,a2为瞄准第1,2点的读数 b1,b2为瞄准第2,1点的读数 */ scanf(“%lf%lf%lf%lf”,&a1,&a2,&b1,&b2);d1=a2-a1;d2=b2-b1;if(abs(d2-d1)>40/3600)printf(“overrun!”);else ds=(d1+d2)/2;printf(“ds=%4.2fn”,ds);return 0;}
#include
#include
测绘程序设计实验报告
main(){ double h1,h2,h3,q1,q2,q3,br,hz,fr,dz,dq;/* h1,h2,h3为后尺黑面上、中、下丝读数 q1,q2,q3为前尺黑面上、中、下丝的读数 br为后尺红面中丝读数 fr为前尺红面中丝读数 dz为视距差之和 dq为上一测站视距差之和 hz为高差中数 */
scanf(“%lf%lf%lf%lf%lf%lf%lf%lf”,&h1,&h2,&h3,&q1,&q2,&q3,&br,&fr,&dq);dz=dq+(h3-h1)-(q3-q1);if(abs((h3-h1)-(q3-q1))>5 & abs((h2+4787)-q2)>3 & abs((br+4687)-fr)>3 & abs((h2-br)-(q2-fr))>5 & dz>10)printf(“overrun!”);else hz=((h2-br)+(q2-fr))/2;printf(“hz=%4.3fn”,hz);return 0;}
#include
/*前房交会测量_201420050138.c*/ #include
测绘程序设计实验报告
else xp=(x1*tan(a1*PI/180)+x2*tan(a2*PI/180)+(y2-y1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));yp=(y1*tan(a1*PI/180)+y2*tan(a2*PI/180)+(x2-x1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1*PI/180)+tan(a2*PI/180));printf(“p=%7.3fn,%f7.3n”,xp,yp);
return 0;}
/*方位角的计算_201420050138-11.c*/ #include
a23=a12+b-180;else
a23=a12-b+180;printf(“a23=%fn”,a23);return 0;}
/*闭合水准路线闭合差计算_201420050138-12.c*/ #include
scanf(“%d”,c);
i=i+c;d=j-i;
测绘程序设计实验报告
w=abs(d-i);printf(“闭合差=%fn”,w);return 0;}
/*坐标正算_201420050138-13.c*/ #include
x2=x1+d*cos(a*PI/180);y2=y1+d*sin(a*PI/180);printf(”第二个点的坐标是:(%f,%f)/n“,x2,y2);}
/*坐标反算_201420050138-14.c*/ #include
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));printf(”a=%fn,d=%fn“,a,d);}
/*多边形面积计算_201420050138-15.c*/ #include
测绘程序设计实验报告
{ double a,h,n,r,s,S;scanf(”%f%f“,&r,&n);a=2*r*sin(PI/n);h=r*cos(PI/n);s=a*h/2;S=n*s;printf(”多边形的面积=%fn“,S);return 0;}
/*带号计算_201420050138-16*/ #include
n=(l+3)/6;else
n=l/3;printf(”该店位于第 %fn 带“,n);}
/*GPS测量中两相邻点间的距离要求*/ #include
printf(”平均距离为:5-2,等级:E“);if(m>=2 & n<=10)
printf(”平均距离为:10-5,等级:D“);if(m>=5 & n<=10)
测绘程序设计实验报告
}
printf(”平均距离为:15-10,等级:C“);if(m>=15 & n<=10)printf(”平均距离为:70,等级:B“);if(m>=100 & n<=10)printf(”平均距离为:300,等级:A“);return 0;/*各等级水准测量精度*/ #include
printf(”M1<=+0.45 或 M1>=-0.45,MW<=+1.0 或 MW>=-1.0“);if(char dj='B')
printf(”M1<=+1.O 或 M1>=-1.0,MW<=+2.0 或 MW>=-2.0“);
if(char dj='C')
printf(”M1<=+3.0 或 M1>=-3.0,MW<=+6.0 或 MW>=-6.0“);
if(char dj='D')
printf(”M1<=+5.0 或 M1>=-5.0,MW<=+10.0 或 MW>=-10.0“);return 0;}
/*地形图的基本等高距_201420050138-19.c*/ #include
printf(”基本等高距:平坦地--0.5 丘陵地--0.5 山地--1 高山地--1“);if(blc==1/1000)printf(”基本等高距:平坦地--0.5 丘陵地--1 山地--2 高山地--2“);
测绘程序设计实验报告
if(blc==1/2000)
printf(”基本等高距:平坦地--1 丘陵地--2 山地--2 高山地--2“);
if(blc==1/5000)
printf(”基本等高距:平坦地--5 丘陵地--5 山地--5 高山地--5“);}
/*每天努力一点与每天颓废一点的区别_201420050138-20.c*/ #include
int i;
float k=0.01,effort=1,depra=1;
for(i=1;i<366;i++)
{
effort*=1.01;
depra*=0.99;
}
printf(”effort=%5.2fndepra=%5.2fn“,effort,depra);}
#include
prime=1;
k=(int)sqrt(j);
for(i=2;i<=k;i++){
if(j%i==0){
prime=0;
break;
}
}
测绘程序设计实验报告
if(prime){
k2=j;
if(k2-k1==2){
printf(”%ld %ld is prime pairsn“,k1,k2);
}
k1=k2;
} } }
int xj(int x,int y){ int ds;ds=y-x;return(ds);}
#include
/* a1,a2为瞄准第1,2点的读数 b1,b2为瞄准第2,1点的读数 */ scanf(”%d%d%d%d“,&a1,&a2,&d1,&d2);d1=a2-a1;d2=b2-b1;if(int(abs(xj(d2,d1)))>40/3600)printf(”overrun!n“);else ds=xj(d2,d1)/2;printf(”ds=%4.2fn“,ds);return 0;}
int xj(int x,int y){ int z;z=y-x;return(z);}
测绘程序设计实验报告
#include
scanf(”%d%d%d%d%d%d“,&a1,&a2,&a3,&b1,&b2,&b3,&x1,&x2);if(int(abs(a1+a2+a3+x1-360))>18/3600 && int(abs(b1+b2+b3+x2-360))>18/3600)printf(”overrun!n“);else d1=xj(a1,b1)/2;d2=xj(a2,b2)/2;d3=xj(a3,b3)/2;d4=xj(x1,x2)/2;printf(”d1=%fnd2=%fnd3=%fnd4=%fn“,d1,d2,d3,d4);return 0;}
#include
double u;u=x*tan(y*PI/180)+z-w;return(u);}
main(){ double HAB,HB=1283,S=235,i=2,v=1.5,a=45,HA=1234;HAB=h(S,a,i,v);HB=HA+h(S,a,i,v);printf(”HAB=%fnHA=%fn“,HAB,HB);return 0;}
测绘程序设计实验报告
double xj(double x,double y){ double z;z=y-x;return(z);}
#include
/* a1,a2为瞄准第1,2点的读数 b1,b2为瞄准第2,1点的读数 */ scanf(”%lf%lf%lf%lf“,&a1,&a2,&b1,&b2);d1=xj(a2,a1);d2=xj(b2,b1);if(abs(xj(d2,d1))>40/3600)printf(”overrun!“);else ds=(d1+d2)/2;printf(”ds=%4.2fn“,ds);return 0;}
double xj(double x,double y){ double z;z=y+x;return(z);}
#include
测绘程序设计实验报告
printf(”overrun!“);else d1=xj(a1,b1)/2;d2=xj(a2,b2)/2;d3=xj(a3,b3)/2;d4=xj(x1,x2)/2;printf(”d1=%fnd2=%fnd3=%fnd4=%fn“,d1,d2,d3,d4);return 0;}
double xj(double x,double y){ double z;z=y+x;return(z);}
/*前房交会测量_201420050138.c*/ #include
double m(double x1, double x2, double x3, double x4,double x5,double x6,double x7,double x8,double x9,double x10){ double l;
l=(x1*tan(x2*PI/180)+x3*tan(x4*PI/180)+(x5-x6)*tan(x7*PI/180)*tan(x8*PI/180))/(tan(x9*PI/180)+tan(x10*PI/180));return(l);}main(){ double x1,x2,xp,y1,y2,yp,a1,a2;scanf(”%f%f%f%f%f%f“,&x1,&y1,&x2,&y2,&a1,&a2);if((a1+a2)>150||(a1+a2)<30)printf(”overrun!“);
测绘程序设计实验报告
else xp=m(x1,a1,x2,a2,y2,y1,a1,a2,a1,a2);yp=m(y1,a1,y2,a2,x2,x1,a1,a2,a1,a2);printf(”p=%7.3fn,%f7.3n“,xp,yp);
return 0;}
/*坐标正算_201420050138-13.c*/ #include
x2=w(x1,d,a);y2=w(y2,d,a);printf(”第二个点的坐标是:(%fn,%fn)“,x2,y2);}
/*坐标正算_201420050138-13.c*/ #include
double w;
w=x+y*cos(z*PI/180);
return(w);}
测绘程序设计实验报告
double s(double x,double y,double z){
double w;
w=x+y*sin(z*PI/180);
return(w);} void main(){ double x1,x2,y1,y2,d,a;scanf(”%f%f%f%f“,&x1,&y2,&d,&a);
x2=z(x1,d,a);y2=s(y1,d,a);printf(”第二个点的坐标是:(%fn,%fn)“,x2,y2);}
/*带号计算_201420050138-16*/ double z(double l){ double p;
p=(l+3)/6;return(p);}
double t(double l){ double q;
q=l/3;return(q);}
#include
n=z(l);else
测绘程序设计实验报告
n=t(l);printf(”该点位于第 %fn 带“,n);}
/*带号计算_201420050138-16*/ double z(double l){ double p;
p=(l+3)/6;return(p);} double t(double l){ double q;
q=l/3;return(q);}
#include
n=z(l);else
n=t(l);printf(”该点位于第 %fn 带“,n);}
/*坐标反算_201420050138-14.c*/ #include
测绘程序设计实验报告
double z;
z=y-x;
return(z);}
void main(){ double x1,x2,y1,y2,d,a;scanf(”%f%f%f%f“,&x1,&y1,&x2,&y2);a=atan(xj(y2,y1)/xj(x2,x1));
d=sqrt(xj(x2,x1)*xj(x2,x1)+xj(y2,y1)*xj(y2,y1));printf(”a=%fn,d=%fn“,a,d);}
/*方位角的计算_201420050138-11.c*/ double x(double x,double y){ double z;z=x+y-180;return(z);}
double j(double x,double y){ double z;z=x-y+180;return(z);}
#include
a23=x(a12,b);else
第二篇:《计算机程序设计》实验报告
《计算机 程序设计》 实验报告
姓名:
学号 :
实验日期:
****年**月**日
实验名称
控制结构与基本算法 一、实验目的要求 1.熟练掌握 if 语句和 switch 语句 2.循环控制结构的使用 二、实验内容 1.实验教材 P86 第四题。
2.实验教材 P87 第八题。
3.实验教材 P108 第一题。
4.实验教材 108 页的第四题。
5.选做题:参考实验教材 P104 第六题,做课件上题目:
科大有 4 位同学中的一位做了好事不留名,表扬信来了之后,校长问这四位是谁做的好事.A 说:不是我.B 说:是 C.C 说:是 D.D 说:他(C)胡说
• 文件名格式:学号-姓名-实验 5.doc
• 序号 1-23:tmf77@mail.ustc.edu.cn • 序号 24-45:yunmeng@mail.ustc.edu.cn • 序号 46-67:cys1024@mail.ustc.edu.cn
三、上机程序(算法设计思想)
四、运行结果
五、调试中的问题及解决方法
第三篇:分支程序设计实验报告[范文模版]
实验二 二 分支程序设计 一、实验目得: 1、学习分支程序得设计方法 2、熟悉在 PC 机上建立、汇编、连接、调试与运行汇编语言程序得过程 二、实验环境:
硬件环境
IBM/ PC 及其兼容机 软件环境
统 操作系统 DO S
编辑程序 EDIT 或其她编辑程序
序程编汇ﻩ 汇编程序 M ASM、E XE
连接程序LIN K、EXE 序 调试程序 DEB UG、EXE 三、实验内容:
:、在屏幕上显示如下信息:—-— —- ------—-—---— — ------—-Panda
2— —- --— — ---—-—-———-----— —-—--Cat
ﻩ
3-——--------------———- -——-Ra bbit
4— — -— —-— — -— —--— — --- —- --——------Pig—— ------—--—--—-—---— —- --—EXI T
(Plea se
ch oo se 1, 2, 3,4or 5)—- ----入 若输入 1, 显示“I like e
p panda ”后程序结束;若输入 2, 显示“I
lik e cat” ”后程序结束;若输入 3,显示“I
lik e rab bit t入 ”后程序结束;若输入 4, 显示“I do n’t l like pig ”后程序结束;若输入 5,程序直接结束;若输入其它字符,显示“You
pr ess an error key!“ 后程序结束.1)流程图
2)源程序 DATA SEGMENT
INFOR1 DB 0AH,0DH,”1-—-—----—-—Panda:$"
INFOR2 DB 0AH,0DH,”2—-—-——--———Cat:$”
INFOR3 DB 0AH,0DH,"3---—---——-—Rabbit;$”
INFOR4 DB 0AH,0DH,"4---—------—pig:$“
INFOR5 DB 0AH,0DH,”5--—--——--—-EXIT:$"
INFOR6 DB 0AH,0DH,”(please choose 1,2,3,4 or 5——-):$“
INFOR7 DB 0AH,0DH,”I like Panda:$“
INFOR8 DB 0AH,0DH,"I like Cat:$”
INFOR9 DB 0AH,0DH,"I like Rabbit;$"
INFOR10 DB 0AH,0DH,”I like pig:$"
INFOR11 DB 0AH,0DH,”you press an error key!:$” DATA ENDS
;数据段结束 CODE SEGMENT
;代码段开始 Y Y Y Y N N N N N 开始 选项 用户输入 Al=1 Al=2 Al=3 Al=4 Al=5 You press an error key 结束 I like panda I like cat I like rabbit I like do not
ASSUME
CS:CODE,DS:DATA
;段寻址 START: MOV AX,DATA
;将 data 得数据存入ax 中
MOV DS,AX
;为 ds 赋值
MOV DX,OFFSET
INFOR1
;返回变量 INFOR1 段内偏移地址【运行后在屏幕上显示字符 1--——--—--—-Panda:】
MOV AH,09H
INT 21H
;执行九号功能调用
MOV DX,OFFSET
INFOR2
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR3
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR4
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR5
;返回变量 INFOR5 段内偏移地址【运行后在屏幕上显示字符 5—-—--——----EXIT:】
MOV AH,09H
INT 21H
MOV DX,OFFSET
INFOR6
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,“1’
JE
Panda
CMP AL,'2’
JE
Cat
CMP AL,”3’
JE
Rabbit
CMP AL,’4'
JE Pig
CMP AL,’5’
JE PEND
JMP Other Panda:
MOV DX,OFFSET INFOR7
MOV AH,09H
INT 21H
JMP PEND Cat:
8ROFNI TESFFO,XD VOMﻩ H90,HA VOMﻩ H12 TNIﻩ JMP PEND Rabbit:
MOV DX,OFFSET INFOR9
MOV AH,09H
H12 TNIﻩ
JMP PEND Pig:
MOV DX,OFFSET INFOR10
H90,HA VOMﻩ INT 21H
JMP PEND Other:
MOV DX,OFFSET INFOR11
MOV AH,09H
H12 TNIﻩ
JMP PEND PEND:
MOV AH,4CH
INT 21H CODE
ENDS
END START
2、、从键盘输入一字符,判断该字符就是小写字母、大写字母、数字或其它字符.若输入为小写字母, 显示“Y You
I nput a Lo wer case Letter!”;若输入为大写字母, 显示“You Inp ut a Uppercase L et ter!”;若输入为数字,显示“Yo ou Input a Digit!“;
若输入为其它字符,显示“You Inpu t
Ot her Let tt er!”。、编程指导 字 数字 0 9得ASC II 码为30H 39H;大写字母得 ASCII 码为 4 1H 5AH,小写字母得AS CI I码为61H 7AH。本题目将字符分为小写字母、大写字母、数字及其它字符,得 根据键入字符得 AS CII 码值判断其所属类型, 并显示相应得信息 息.字符串显示使用功能号为 09H 得 得 DOS 功能调用, 接收键盘输入得单个字符使为 用功能号为 01H 得 得 DOS 功能调用。
2、流程图及程序框图 1)流程图 2)源程序 DATA SEGMENT
INFOR1 DB 0AH,0DH,”Please Press Any Key to input a letter:$"
INFOR2 DB 0AH,0DH,”You input a lowercase letter!$”
INFOR3 DB 0AH,0DH,“You input a Uppercase letter!
$”
INFOR4 DB 0AH,0DH,"You input a Digit!
$”
INFOR5 DB 0AH,0DH,“You input Other letter!$” DATA ENDS CODE SEGMENT
ASSUME
CS:CODE,DS:DATA START:
MOV AX,DATA
; 显示信息“Please Press Any Key to input a letter”得指令序列以及接收从键盘输入一个字符得指令序列
MOV DS,AX
MOV
DX,OFFSET
INFOR1
H90,HA
VOMﻩ
INT
21H
MOV AH,01H
INT 21H Y Y Y Y Y Y 显示提示信息“Please Press Any Key to input a letter” 及功能号为 1 得接收键盘输入单个字符得指令序列 开始 结束(AL)<’0’(AL)<=’9’(AL)<’A’(AL)<=’Z’(AL)<’a’(AL)<=’z’ 输入得就是小写字母,显示信息 输入得就是大写字母,显示信息 输入得就是数字,显示有关信息 输入得就是其它字符,显示信息
CMP
AL,’0’
JB
OTHER
CMP
AL,’9’
JBE
DIGIT
CMP
AL,’A“
REHTO
BJﻩ ”Z',LA
PMCﻩ REPPU
EBJﻩ CMP
AL,’a’
JB
OTHER
“z',LA
PMCﻩ JBE
LOWER
JMP
PEND LOWER:
;显示“You Input a Lowercase Letter!”得指令序列
MOV DX,OFFSET INFOR2
H90,HA VOMﻩ INT 21H
出跳序程使应后支分个一完行执意注;
DNEP PMJﻩUPPER:
; 显示“You Input a Uppercase Letter”得指令序列 MOV DX,OFFSET INFOR3
H90,HA VOMﻩ H12 TNIﻩ DNEP PMJﻩDIGIT:
; 显示“You Input a Digit!”得指令序列 MOV DX,OFFSET INFOR4
H90,HA VOMﻩ INT 21H
JMP PEND OTHER:
; 显示“You Input Other Letter!”得指令序列
5ROFNI TESFFO,XD VOMﻩ MOV AH,09H
H12 TNIﻩPEND:
MOV AH,4CH
H12 TNIﻩCODE
ENDS
END START
四、心得 通过这次上机实验, 我掌握了分支程序额设计方法, 宏定义及宏调用得基本方法,了解了小写字母与大写字母得ASCII 码表示及其转换方法,了解了数字及其她得 字符得 AS CII 码表示方法, 进一步掌握了调试工具得 使用方法。
第四篇:C#程序设计实验报告
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。
实验报告书写说明
实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
金陵科技学院实验报告
实验项目名称: C#基础编程 实验学时: 6 同组学生姓名: 实验地点: 1318 实验日期: 10月5日-10月19日 实验成绩: 批改教师: 批改时间:
金陵科技学院实验报告
实验1 C#基础编程
一、实验目的
1、熟悉Visual Studio.NET开发环境。
2、掌握C#应用程序的基本操作过程。
3、掌握C#的数据类型,运算符以及表达式的使用。
4、掌握分支和循环语句的使用方法。
5、掌握一维数组,二维数组及数组型数组的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有Visual Studio.NET软件。
四、实验步骤
1、分析题意。
2、根据题目要求,新建项目。
3、编写并输入相关的程序代码。
5、运行与调试项目。
6、保存项目。
五、实验内容
1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace one.first {
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(“我叫王蕾!”);
}
} }
2、编写一个简单的Windows应用程序,在窗体Load事件中书写代码,标签中显示你的姓名。
using System;using System.Collections.Generic;using System.ComponentModel;
金陵科技学院实验报告
using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace one.second {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Text = “Windows 程序”;
Label lblShow = new Label();
lblShow.Location = new Point(20, 30);
lblShow.AutoSize = true;
lblShow.Text = “王蕾!”;
this.Controls.Add(lblShow);
}
} }
3、编写一个一个程序,用来判断输入的是大写字母,小写字母,数字还是其他的字符。
using System;using System.Collections.Generic;using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“请输入一个字符:”);
char c = Convert.ToChar(Console.ReadLine());
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
Console.WriteLine(“这是一个字母”);
if(char.IsDigit(c))
Console.WriteLine(“这是一个数字”);
金陵科技学院实验报告
}
} }
4、分别用while,do-while,for循环求1到100的和。
using System;using System.Collections.Generic;using System.Text;
namespace one.forth.one {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
while(i <= 100)
{
sum = sum + i;
i++;
}
Console.WriteLine(“1到100的自然数之和为:” + sum);
}
} } using System;using System.Collections.Generic;using System.Text;
namespace one.forth.two {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
}
while(i <= 100);
Console.WriteLine(“1到100的自然数的和为:” + sum);
}
}
金陵科技学院实验报告
} using System;using System.Collections.Generic;using System.Text;
namespace one.forth.three {
class Program
{
static void Main(string[] args)
{
int i , sum = 0;
for(i = 1;i <= 100;i++)
{
sum = sum + i;
}
Console.WriteLine(“1到100的自然数的和为:” + sum);
}
} }
5、定义一个一维数组,用随机数为此赋值,用foreach循环输出其中的内容。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.five {
class Program
{
static void Main(string[] args)
{
int[] a = {0,1,2,3,4};
foreach(int i in a)
{
Console.WriteLine(a[i]);
}
}
} }
6、实现二维数组的输入和输出。
using System;using System.Collections.Generic;using System.Linq;
金陵科技学院实验报告
using System.Text;
namespace first.six {
class Program
{
static void Main(string[] args)
{
int[,] a = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
{
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 3;j++)
{ Console.WriteLine(a[i, j]);}
}
}
}
} }
7、实现数组型数组的输入和输出。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.seven {
class Program
{
static void Main(string[] args)
{
int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } };
for(int i = 0;i < a.Length;i++)
{
for(int j = 0;j < a[i].Length;j++)
{
Console.WriteLine(a[i][j]);
}
}
}
} }
六、实验体会(遇到问题及解决办法,编程后的心得体会)
刚开始编程的时候觉得无从下手,尽管我们已经学了好几种高级编程语言,但每个都
金陵科技学院实验报告
有其独特的地方,稍不留神就会混淆。
通过这次实验,我体会到课后复习巩固的重要性。在编程的时候,很多内容都不记得,需要去翻书。不得不说,实验是巩固课程的好方法!本次实验,我熟悉Visual Studio.NET开发环境;掌握了C#应用程序的基本操作过程;掌握了C#的数据类型,运算符以及表达式的使用;掌握了分支和循环语句的使用方法以及一维数组,二维数组及数组型数组的使用。
金陵科技学院实验报告
实验项目名称: 类与对象 实验学时: 6 同组学生姓名: 实验地点: 1318 实验日期: 10月26日-11月9日 实验成绩: 批改教师: 批改时间:
金陵科技学院实验报告
实验2 类与对象
一、实验目的、要求
(1)掌握类的定义和使用;
(2)掌握类的数据成员,属性的定义和使用;
(3)掌握方法的定义,调用和重载以及方法参数的传递;(4)掌握构造函数的定义和使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有Visual Studio.NET软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五、实验内容
1、定义一个方法,实现两个数的交换(分别把参数按值传递和按引用传递)。
using System;using System.Collections.Generic;using System.Text;
namespace second.one {
class Program
{
static void Main(string[] args)
{
Swaper s = new Swaper();
Console.WriteLine(“输入x的值:”);
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入y的值:”);
int b=Convert.ToInt32(Console.ReadLine());
金陵科技学院实验报告
Console.WriteLine(s.Swap(a, b));
Console.WriteLine(s.Swap(ref a,ref b));
}
class Swaper
{
public string Swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return 后:x={0},y={1}“,x,y);
}
public string Swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format(”按引用传参交换之后:x={0},y={1}“, x, y);
}
}
} }
2、定义一个方法,实现数组的排序。using System;using System.Collections.Generic;using System.Text;
namespace second.two {
class Program
{
string.Format(”
按
值
传
参
交
换
之
金陵科技学院实验报告
public class sort
{
public void change(int[] a)
{
Console.WriteLine(“排序前,数组顺序为:”);
show(a);
int i, j, m;
for(i = 0;i < 10;i++)
{
m = a[i];
j = ib;
}
}
static void Main(string[] args)
{
sum s = new sum();
int a = 10;
int b = 3;
int m, n;
s.ab(out m, out n, a, b);
Console.WriteLine(“{0}+{1}={2};{0}-{1}={3}”,a,b,m,n);
金陵科技学院实验报告
}
} }
5、用构造函数重载,实现矩形的面积,圆的面积,梯形的面积;
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace secong.five {
class Program
{
public class square
{
public double area;
public square(){ }
public square(double a)
{
area = a * a * 3.14;
}
public square(double a, double b)
{
area = a * b;
}
public square(double a, double b, double h)
{
area =(a + b)/ 2 * h;
}
}
static void Main(string[] args)
{
double a, b, h,area;
a = 2;b = 5;h = 3;
金陵科技学院实验报告
square s = new square(a,b);
Console.WriteLine(“求矩形面积,长为a={0},宽为b={1},面积area={2}”,a,b,s.area);
square i = new square(a);
Console.WriteLine(“求圆形面积,半径a={0},面积area={1}”, a, i.area);
square j = new square(a, b, h);
Console.WriteLine(“求梯形面积,上底为a={0},下底为b={1},高为h={2}面积area={3}”, a, b,h, j.area);
}
} }
6、设计一个windows应用程序,在该程序中定义一个学生类和班级类,以处理每个学生的学号,姓名,语文,数学和英语成绩,要求:
1)能查询每个学生的总成绩。2)能显示全班前三名的名单。
3)能显示单科成绩最高分和不及格的学生名单。4)能统计全班学生的平均成绩。
5)能显示各科成绩不同分数段的学生人数的百分比。
Student类: using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class Student
{
public string stuNo;
public string name;
public double chinese;
public double math;
public double english;
public double sumScore
{
金陵科技学院实验报告
get { return chinese + math + english;}
}
} } StudentList类: using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class StudentList:Student
{
int snums;
public Student[] stu=new Student[50];
public StudentList()
{
snums = 0;
}
public void addstu(Student s)
{
stu[snums] = s;
snums++;
}
public int searchstu(string name)
{
int i;
for(i = 0;i < snums;i++)
{
if(stu[i].name == name)break;
}
if(i == snums)return-1;
else return i;
}
//给所有成绩排序,用后面实现前三名的排名
金陵科技学院实验报告
public void ProThree()
{
for(int i = 0;i < snums;i++)
{
int k = i;
for(int j = i + 1;j < snums;j++)
if(stu[j].sumScore > stu[k].sumScore)k = j;
if(k!= i)
{
Student temp;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp;
}
}
}
//显示单科成绩的最高分
public int HighScore(int k)
{
int p = 0;
if(k == 0)
{
for(int i = 1;i < snums;i++)
if(stu[i].math > stu[p].math)p = i;
}
else if(k == 1)
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
}
else
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
金陵科技学院实验报告
}
return p;
}
//显示不及格名单
public string BuhgName(int k)
{
string name=“ ”;
if(k == 0)
{
for(int i = 0;i < snums;i++)
if(stu[i].math < 60)name +=stu[i].name+“n”;
}
else if(k == 1)
{
for(int i = 0;i < snums;i++)
if(stu[i].chinese < 60)name += stu[i].name + “n”;
}
else
{
for(int i = 0;i < snums;i++)
if(stu[i].english < 60)name += stu[i].name + “n”;
}
return name;
}
public string getHL()
{
string Maxer = “ ”, Loser = “ ”;
Maxer += “单科数学最高:” + stu[HighScore(0)].name + “n”;
Maxer += “ 单科语文最高:” + stu[HighScore(1)].name + “n”;
Maxer += “ 单科英语最高:” + stu[HighScore(2)].name + “n”;
Loser += “单科数学挂科名单:” +BuhgName(0)+ “n”;
Loser += “单科语文挂科名单:” + BuhgName(1)+ “n”;
Loser += “单科英语挂科名单:” + BuhgName(2)+ “n”;
金陵科技学院实验报告
return Maxer + “n” + Loser;
}
//全班的平均成绩
public string SumScore()
{
double sum = 0;
double avg=0;
for(int i = 0;i < snums;i++)
{
sum = sum + stu[i].sumScore;
}
avg = sum / snums;
return “班级总分平均分:”+avg;
}
//各科成绩不同分数段的学生百分比
//英语成绩各分数段百分比
public string PerC()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].chinese > 90)&&(stu[i].chinese <= 100))
{
sumC1++;
}
else if((80 <= stu[i].chinese)&&(stu[i].chinese < 90))
{
sumC2++;
}
金陵科技学院实验报告
else if((70<=stu[i].chinese)&&(stu[i].chinese < 80))
{
sumC3++;
}
else if((60<=stu[i].chinese)&&(stu[i].chinese < 70))
{
sumC4++;
}
else
{sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return “语文成绩百分比:”+“n”+“90~100:”+per1+“ 80~90:”+per2+“ 80~70:”+per3+“ 70~60:”+per4+“ 60以下的:”+per5;
}
//数学成绩各分数段百分比
public string PerM()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].math> 90)&&(stu[i].math <= 100))
{
sumC1++;
}
else if((80 <= stu[i].math)&&(stu[i].math < 90))
{
金陵科技学院实验报告
sumC2++;
}
else if((70 <= stu[i].math)&&(stu[i].math < 80))
{
sumC3++;
}
else if((60 <= stu[i].math)&&(stu[i].math < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“数学成绩百分比:” + “n” + “90~100:” + per1 + “ 80~90:” + per2 + “ 80~70:” + per3 + “ 70~60:” + per4 + “ 60以下的:” + per5);
}
//英语成绩各分数段百分比
public string PerE()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].english > 90)&&(stu[i].english <= 100))
{
sumC1++;
金陵科技学院实验报告
}
else if((80 <= stu[i].english)&&(stu[i].english < 90))
{
sumC2++;
}
else if((70 <= stu[i].english)&&(stu[i].english < 80))
{
sumC3++;
}
else if((60 <= stu[i].english)&&(stu[i].english < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“数学成绩百分比:” + “n” + “90~100:” + per1 + “ 80~90:” + per2 + “ 80~70:” + per3 + “ 70~60:” + per4 + “ 60以下的:” + per5);
}
} } From窗体代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;
金陵科技学院实验报告
using System.Windows.Forms;namespace Test2_6 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public StudentList sl = new StudentList();
private void btnAdd_Click(object sender, EventArgs e)
{
Student s = new Student();
s.stuNo = txtStuNo.Text;
s.name = txtName.Text;
s.chinese = Convert.ToDouble(txtChina.Text);
s.math = Convert.ToDouble(txtMath.Text);
s.english = Convert.ToDouble(txtEng.Text);
sl.addstu(s);
MessageBox.Show(“添加成功”);
}
private void btnSearch_Click(object sender, EventArgs e)
{
int pos = sl.searchstu(this.textBox1.Text);
if(pos!=-1)
{
label7.Text = this.textBox1.Text + “的总成绩:sl.stu[pos].sumScore;
}
else { MessageBox.Show(”不存在这个人!“);}
}
private void btnFinish_Click(object sender, EventArgs e)
{
label7.Text = ”前3名:“+”n“;
” + 金陵科技学院实验报告
for(int i = 0;i < 3;i++)
{
sl.ProThree();
label7.Text+= sl.stu[i].name+“n”;
}
label7.Text += sl.getHL()+“n”;
label7.Text += Convert.ToString(sl.SumScore())+“n”;
label7.Text += sl.PerC()+“n”;
label7.Text += sl.PerM()+“n”;
label7.Text += sl.PerE()+“n”;
}
} }
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我掌握了类的定义与使用;掌握了类的数据成员,属性的定义和使用;掌握了方法的定义,调用和重载以及方法参数的传递以及构造函数的定义和使用。值得注意的是:本次实验中return的使用以及所在的位置,类型转换时也经常用到
金陵科技学院实验报告
实验项目名称: 继承与多态 实验学时: 6 同组学生姓名: 实验地点: 1318 实验日期: 11月16日-11月30日 实验成绩: 批改教师: 批改时间:
金陵科技学院实验报告
实验3 继承与多态
一、实验目的、要求
(1)掌握类的继承性与多态性;
(2)掌握虚方法的定义以及如何使用虚方法实现多态;(3)掌握抽象类的定义以及如何使用抽象方法实现多态;
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有Visual Studio.NET软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五、实验内容
1、设计一个Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生派生类,当输入相关数据,单击不用的按钮时,将分别创建不同的学生类对象,并输出当前学生的总人数,该学生的姓名,学生类型,平均成绩。
Student类: using System;using System.Collections.Generic;using System.Text;namespace Test3_1 {
public abstract class Student
{
protected string name;
protected int age;
public static int number;
public Student(string name, int age)
{
this.name = name;
this.age = age;
金陵科技学院实验报告
number++;
}
public string Name
{
get { return name;}
}
public abstract double Average();
}
public class Pupil : Student
{
protected double chinese;
protected double math;
public Pupil(string name, int age, double chinese, double math)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
}
public override double Average()
{
return(chinese + math)/ 2;
}
}
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)
{
this.chinese = chinese;
this.math = math;
金陵科技学院实验报告
this.english = english;
}
public override double Average()
{
return(chinese + math + english)/ 3;
}
}
public class College : Student
{
protected double required;
protected double elective;
public College(string name, int age, double required, double elective)
: base(name, age)
{
this.required = required;
this.elective = elective;
}
public override double Average()
{
return(required + elective)/ 2;
}
} } Form窗体内的代码:
using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_1 {
public partial class Form1 : Form
{
金陵科技学院实验报告
public Form1()
{
InitializeComponent();
}
private void btnSmall_Click(object sender, EventArgs e)
{
Pupil),Convert.ToDouble(txtMath.Text));
lblShow.Text += “总人数:” +Convert.ToString(Student.number)+ “,” + “姓名:” + p.Name + “,” + “小学生” + “,” + “平均成绩为:” + p.Average()+“n”;
}
private void btnMiddle_Click(object sender, EventArgs e)
{
Middle Convert.ToInt32(txtAge.Text),m
=
new
Middle(txtName.Text,Convert.ToDouble(txtChinese.Text), p
=
new Pupil(txtName.Text,Convert.ToInt32(txtAge.Text),Convert.ToDouble(txtChinese.TextConvert.ToDouble(txtMath.Text),Convert.ToDouble(TxtEnglish.Text));
lblShow.Text += “总人数:” + Convert.ToString(Student.number)+ “,” + “姓名:” + m.Name + “,” + “中学生” + “,” + “平均成绩为:” + m.Average()+ “n”;
}
private void btnBig_Click(object sender, EventArgs e)
{
College Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtMath.Text));
lblShow.Text += “总人数:” + Convert.ToString(Student.number)+ “,” + “姓名:” + c.Name + “,” + “大学生” + “,” + “平均成绩为:” + c.Average()+ “n”;
}
}
c
=
new
College(txtName.Text,Convert.ToDouble(txtChinese.Text),金陵科技学院实验报告
}
2、设计一个Windows应用程序,在该程序中定义平面图形抽象类和派生类圆,矩形和三角形。
Figure类代码: using System;using System.Collections.Generic;using System.Text;namespace Test3_2 {
public abstract class Figure
{
public abstract double Area();
}
public class Circle:Figure
{
double radius;
public Circle(double r)
{
radius = r;
}
public override double Area()
{
return radius * radius * 3.14;
}
}
public class JUxing:Figure
{
double chang;
double kuan;
public JUxing(double c, double k)
{
this.chang = c;
this.kuan = k;
}
金陵科技学院实验报告
public override double Area()
{
return chang * kuan;
}
}
public class San:Figure
{
double bian;
double heigth;
public San(double b, double h)
{
this.bian = b;
this.heigth = h;
}
public override double Area()
{
return bian * heigth / 2;
}
} } Form窗体代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_2 {
public partial class Form1 : Form
{
public Form1()
{
金陵科技学院实验报告
InitializeComponent();
}
private void btnCircle_Click(object sender, EventArgs e)
{
Circle c=new Circle(Convert.ToInt32(TxtChang.Text));
lblShow.Text = “圆的面积为:” + c.Area();
}
private void btnJu_Click(object sender, EventArgs e)
{
JUxing
j
=
new JUxing(Convert.ToInt32(TxtChang.Text),Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “矩形的面积为:” + j.Area();
}
private void btnSan_Click(object sender, EventArgs e)
{
San
s
=
new
San(Convert.ToInt32(TxtChang.Text), Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “三角形的面积为:” + s.Area();
}
} }
3、定义一个Person类,包含姓名字段和一个方法,早上8:30学生开始上课,教师开始讲课。分别用new关键字,虚方法,抽象类实现多态性。
New关键字: using System;using System.Collections.Generic;using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
金陵科技学院实验报告
{
Student s=new Student(“学生”);
Teacher t=new Teacher(“教师”);
Console.WriteLine(s.name+s.work());
Console.WriteLine(t.name+t.work());
Console.ReadLine();
}
}
public class Person
{
public string name;
public interface method
{ string work();}
}
public class Student:Person
{
public Student(string name)
{ this.name = name;}
public string work()
{ return “早上8:30开始上课”;}
}
public class Teacher:Person
{
public Teacher(string name)
{ this.name = name;}
public string work()
{ return “开始讲课”;}
} } 虚方法: using System;using System.Collections.Generic;using System.Text;
金陵科技学院实验报告
namespace third.three.two {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”,“学生”);
PersonWork(s);
Teacher t=new Teacher(“李斯”,“教师”);
PersonWork(t);
}
private static void PersonWork(Person Person)
{ Console.WriteLine(Person.Work());}
}
public class Person
{
public string name;
public Person(string name)
{ this.name = name;}
public virtual string Work()
{ return string.Format(“Person{0}:早上8:30开始”,name);}
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:早上8:30开始上课”, name);
}
}
public class Teacher : Person
金陵科技学院实验报告
{
private string type;
public Teacher(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:开始讲课”, name);
}
} }
抽象类: using System;using System.Collections.Generic;using System.Text;
namespace third.three.three {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”, “学生”);
PersonWork(s);
Teacher t = new Teacher(“李斯”, “教师”);
PersonWork(t);
}
private static void PersonWork(Person person)
{
Console.WriteLine(person.Work());
}
}
public abstract class Person
金陵科技学院实验报告
{
public string name;
public Person(string name)
{ this.name = name;}
public abstract string Work();
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:早上8:30开始上课”, name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:开始讲课”, name);
}
} }
金陵科技学院实验报告
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我理解了类的继承性与多态性;掌握了虚方法的定义以及如何用虚方法来实现多态;掌握了抽象类的定义以及如何用抽象方法来实现多态。这次实验与前两次不同,采用Windows应用程序,既涉及到代码段也涉及到界面的设计。所以,勉强通过实验。
金陵科技学院实验报告
实验项目名称: 接口、文件和流 实验学时: 6 同组学生姓名: 实验地点: A205 实验日期: 12月7日-12月21日 实验成绩: 批改教师: 批改时间:
金陵科技学院实验报告
实验4 接口、文件和流
一、实验目的
(1)掌握接口的定义及使用方法;
(2)掌握流,序列化和反序列化的概念和使用方法;(3)掌握流文件的读写操作类及其使用方法;
(4)掌握OpenFileDialog,SaveFileDialog等控件的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有Visual Studio.NET软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五、实验内容
1、定义一个Person类,包含姓名字段和一个方法,早上8:30学生开始上课,教师开始讲课。用接口来实现。
using System;using System.Collections.Generic;using System.Text;namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”,“学生”);
Console.WriteLine(s.Work());
Teacher t = new Teacher(“李四”,“老师”);
Console.WriteLine(t.Work());
}
金陵科技学院实验报告
public abstract class Person
{
public string name;
public Person(string name)
{
this.name = name;
}
}
interface IPerson
{
string type { get;}
string Work();
}
public class Student :Person, IPerson
{
public string type
{
get { return string.Format(“老师”);}
}
public Student(string name, string type)
: base(name)
{
this.name=name;
}
public string Work()
{
return string.Format(“Person{0}:早上8:30开始上课”, name);
}
}
public class Teacher :Person, IPerson
{
public string type
{
金陵科技学院实验报告
get { return string.Format(“学生”);}
}
public Teacher(string name, string type)
: base(name)
{
this.name = name;
}
public string Work()
{
return string.Format(“Person{0}:早上8:30开始讲课”, name);
}
}
} }
2、声明一个接口Iplayer,包含5个接口方法:播放,停止,暂停,上一首和下一首。在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口。
MP3类(包含Iplayer接口,AVI类): using System;using System.Collections.Generic;using System.Text;namespace Test4_2 {
interface IPlayer
{
string Play();
string Stop();
string Pause();
string Pre();
string Next();
}
public class MP3:IPlayer
{
public string Play()
金陵科技学院实验报告
{
return “正在播放MP3歌曲!”;
}
public string Stop()
{
return “停止播放MP3歌曲!”;
}
public string Pause()
{
return “暂停播放MP3歌曲!”;
}
public string Pre()
{
return “播放上一首MP3歌曲!”;
}
public string Next()
{
return “播放下一首MP3歌曲!”;
}
}
public class AVI : IPlayer
{
public string Play()
{
return “正在播放AVI歌曲!”;
}
public string Stop()
{
return “停止播放AVI歌曲!”;
}
public string Pause()
{
return “暂停播放AVI歌曲!”;
}
金陵科技学院实验报告
public string Pre()
{
return “播放上一首AVI歌曲!”;
}
public string Next()
{
return “播放下一首AVI歌曲!”;
}
} } Form窗体里代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test4_2 {
public partial class Form1 : Form
{
IPlayer iplayer;
MP3 mp3;
AVI avi;
public Form1()
{
InitializeComponent();
}
private void btnMp3_Click(object sender, EventArgs e)
{
mp3 = new MP3();
iplayer =(IPlayer)mp3;
}
金陵科技学院实验报告
private void btnPlay_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Play();
}
private void btnUp_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Pre();
}
private void btnStop_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Stop();
}
private void btnPause_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Pause();
}
private void btnNext_Click(object sender, EventArgs e)
{
label1.Text = iplayer.Next();
}
private void btnAvi_Click(object sender, EventArgs e)
{
avi = new AVI();
iplayer =(IPlayer)avi;
}
} }
3、实现对文本文件的读写操作,用文件操作控件打开和保存文件。
using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace Test4_3
金陵科技学院实验报告
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
StreamWriter
sw = StreamWriter(saveFileDialog1.FileName,true);
sw.WriteLine(DateTime.Now.ToString());
sw.WriteLine(txtSource.Text);
sw.Close();
}
private void btnShow_Click(object sender, EventArgs e)
{
StreamReader sr = StreamReader(saveFileDialog1.FileName);
txtShow.Text = sr.ReadToEnd();
sr.Close();
}
} }
4、实现对二进制文件的读写操作。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;
new
new
金陵科技学院实验报告
namespace Test4_4 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
FileStream
fs
= FileStream(@“d:Datastudent.dat”,FileMode.Append,FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(Int32.Parse(txtStuNo.Text));
bw.Write(TxtName.Text);
bool isMale;
if(rdoMan.Checked)
isMale = true;
else
isMale = false;
bw.Write(isMale);
fs.Close();
bw.Close();
}
private void btnShow_Click(object sender, EventArgs e)
{
lstShow.Items.Clear();
lstShow.Items.Add(“学号t姓名t性别”);
FileStream
fs
= FileStream(@“d:Datastudent.dat”,FileMode.Open,FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
fs.Position = 0;
while(fs.Position!= fs.Length)
{
new
new
金陵科技学院实验报告
int s_no = br.ReadInt32();
string name = br.ReadString();
string sex = “";
if(br.ReadBoolean())
sex = ”男“;
else
sex = ”女“;
string
result String.Format(”{0}t{1}t{2}“,s_no,name,sex);
lstShow.Items.Add(result);
}
br.Close();
fs.Close();
}
} }
5、实现对象序列化和反序化。
Student类: using System;using System.Collections.Generic;using System.Text;namespace Test4_5 {
[Serializable]
public class Student
{
public int sno;
public string name;
public bool sex;
public Student(int s_no, string name, bool isMale)
{
this.sno = s_no;
this.name = name;
this.sex = isMale;
=
金陵科技学院实验报告
}
} } StudentList类: using System;using System.Collections.Generic;using System.Text;namespace Test4_5 {
[Serializable]
public class StudentList
{
private Student[] list = new Student[100];
public Student this[int index]
{
get
{
if(index < 0 || index >= 100)
return list[0];
else
return list[index];
}
set
{
if(!(index < 0 || index >=100))
list[index] = value;
}
}
} } Form下的代码: using System;using System.Collections.Generic;using System.ComponentModel;
金陵科技学院实验报告
using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace Test4_5 {
public partial class Test9_32 : Form
{
private StudentList list = new StudentList();
private int i = 0;
public Test9_32()
{
InitializeComponent();
}
private void Test9_32_Load(object sender, EventArgs e)
{
}
private void btnSave_Click(object sender, EventArgs e)
{
string file = @”d:datastudent.dat";
Stream
stream
= FileStream(file,FileMode.OpenOrCreate,FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(stream,list);
stream.Close();
}
private void btnAdd_Click(object sender, EventArgs e)
{
int sno = Int32.Parse(txtStuNo.Text);
bool isMale;
if(rdoMan.Checked)
isMale = true;
new
第五篇:C程序设计实验报告
浙江理工大学信息学院
C程序设计实验报告
实验名称: 学时安排:
实验类别:
实验要求:1人1组
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、实验目的
二、实验设备介绍
软件需求: Visual C++ 6.0或CFree3.5以上版本
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
三、实验内容
四、程序清单
五、运行结果
六、实验心得