测绘程序设计实验报告_第1页
测绘程序设计实验报告_第2页
测绘程序设计实验报告_第3页
测绘程序设计实验报告_第4页
测绘程序设计实验报告_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

测绘程序设计实验报告测绘程序设计(C版)实习报告学号:201420050138姓名:李阳靖班级:1420501Z专业:测绘工程课程名称:测绘程序设计(C及Matlab)指导老师:肖根如2015年12月目录前言1一、实验目的1二、实验环境2三、TurboC3.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操作系统TurboC3.0与VC++6.0程序集成环境三、 TurboC3.0与VC++6.0的熟悉与操作(一) TurboC3.01.在安装TurboC编译系统基础上,则在DOS命令状态下键入命令tc。进入TurboC集成环境后,首先在屏幕上显示TurboC主菜单窗口。在该窗口,有8个菜单条目。每一个菜单的意义如下:File处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS。Edit建立、编辑源文件。Run控制运行程序。如果程序已经编译连接好,且Debug/SourceDebugging以及Option/Compiler/Codegeneration/OBJDebugInformation开关置为On,则可以用此菜单初始化调试阶段。Compile编译并生成目标程序与可执行文件。Project允许说明程序中包含哪些文件的管理条目。Options可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录IncludeOutput及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.01.安装和启动运行VisualStudio软件中的setup.exe程序,选择安装VisualC++6.0,然后按照安装程序的指导完成安装过程。2.创建工程项目用VisualC++6.0系统建立C语言应用程序,首先要创建一个工程项目(project),用来存放C程序的所有信息。创建一个工程项目的操作步骤如下:进入VisualC++6.0环境后,选择主菜单“文件(File)”中的“新建(New)”选项,在弹出的对话框中单击上方的选项卡“工程(Projects)”,选择“Win32ConsoleApplication”工程类型,在“工程(Projectname)”一栏中填写工程名。3.新建C源程序文件选择主菜单“工程(Project)”中的“添加工程(AddtoProject)新建(New)”选项,为工程添加新的C源文件。4.打开已存在的工程项目,编辑C源程序进入VisualC++6.0环境后,选择主菜单“打开工作区(OpenWorkspace)”命令,在“OpenWorkspace”对话框内找到并选择要打开的工作区文件,单击“确定(OK)”按钮,打开工作区。5.在工程项目中添加已经存在的C源程序文件选择主菜单“打开工作区(OpenWorkspace)”命令,在“OpenWorkspace”对话框内找到并选择要打开的工作区文件,单击“确定(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输出计算结果输入程序:intmain(){ inta12,a23,b; a12=100,b=50; if(b<180) a23=a12+b-180; else a23=a12-b+180; printf("a23=%d\n",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输出结果输入程序:intmain(){ intn,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%ldisprimepairs\n",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!");elsexp=(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);}改为函数形式程序输入为:doublem(doublex1,doublex2,doublex3,doublex4,doublex5,doublex6,doublex7,doublex8,doublex9,doublex10){doublel;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(){doublex1,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!");elsexp=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=%d\n,%d\n",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(){floatx1,y1,d,a; floatx2,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);}改为函数形式程序输入为:doublew(doublex,doubley,doublez){doublek; k=x+y*cos(z*PI/180); return(k);}main(){ floatx1,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("第二个点的坐标是:(%f\n,%f\n)",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.最后将其改编为函数形式的程序原程序输入为:voidmain(){ floatx1,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=%f\nd=%f\n",a,d);}改为数组形式程序输入为:voidmain(){ inti; floata[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=%f\nd=%f\n",m,d);}输出结果为:(四)实验总结1.数组命名要符合标识符的命名规则。

2.数组名后的括号必须是方括号,不能是圆括号。

3.数组长度必须是正整数,可以是个表达式,但不能有变量,C语言不支持动态数组。4.数组长度表示数组中元素的个数。

5.数组元素的下标从0开始数,所以最大下标是数组的长度减1。6.C语言中没有字符串变量,字符串是靠字符数组实现的,所谓字符数组就是元素的数据类型为字符型的数组。【实验六】结构体与共用体(一)实验目的1.理解结构体类型的含义;掌握结构体类型变量的定义方法和使用;结构体类型变量的说明以及初始化方法。2.理解结构体与数组的区别;掌握结构体类型数组的概念、定义和使用方法。3.熟悉链表的概念,初步学会对链表进行操作。4.初步了解共用体的概念与使用。(二)实验内容有关结构与共同体的程序设计(三)实验步骤以三角高程计算为例1.明确三角高程计算的算法2.声明变量,用scanf进行输入,并用普通程序的结构将其算法表示出来3.将原程序改编为结构体形式原程序输入为:main(){doubleHAB,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=%f\nHA=%f\n",HAB,HB);}改为结构体形式程序输入为:structX{doubleS;doublei;doublev;doublea;doubleHA;}N={100,1,2,45,200};main(){doubleS,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=%d\nHA=%d\n",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);

}

对于复合语句来说,最后一个语句中最后的分号不能忽略不写。以及在包含结构体的程序中,很多时候会忘记花括号后面的那个分号,如果忘记了加分号,程序就不能运行,如:structStudent{charname;}

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<stdio.h>#include<math.h>#definePI3.1415926doublemain(){structdate{ floatxz; doublexz1;}num;doublexadd(doublesn,doublean);doubleyadd(doublesn,doublean);doubleadd(doublexn,doubleyn); floata1,a2,a3; floats,y1,x1;doublea,x,y,Y; printf("Inputa1,a2,a3,s,x1andy1\n"); scanf("%d%d%d%f%lf%lf%f\n",&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%f\n",x,y); printf("X=%f,Y=%f\n",num.xz,Y); return0;}doublexadd(doublesn,doublean){ doublexn;xn=sn*cos(an); returnxn;}doubleyadd(doublesn,doublean){ doubleyn; yn=sn*sin(an); returnyn;}doubleadd(doublexn,doubleyn){ doublez;z=xn+yn; returnz;}#include<stdio.h>intmain(){ structdate { inta; intb; intc; }num;intjf(intx,inty); inta1,a2,a3,b1,b2,b3,e,f; charangle; printf("Inputleftangleorrightangle\n");scanf("%c%d%d%d%d%d%d\n",&angle,&a1,&a2,&a3,&b1,&b2,&b3); printf("Angleis:"); 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("%d\n",e);break;case'r':printf("%d\n",f);break; default:printf("enterdateerror!\n"); }return0;}intjf(intx,inty){ intz; z=x-y; returnz;}#include<stdio.h>#include<math.h>#definePI3.1415926intmain(){ structdate { doubles; doublea; }num;doublepfh(floatn,floatm);floatjf(floatn,floatm); floatX,Y,x,y,x1,y1; printf("Inputx,y,X,Y\n"); scanf_s("%f%f%f%f%f\n",&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%f\n",num.a,num.s,x1,y1); return0;}floatjf(floatn,floatm){ floatz; z=n-m; returnz;}doublepfh(floatn,floatm){ doublez; z=n*n+m*m; returnz;}#include<stdio.h>#include<math.h>#definePI3.1415926doublemain(){ structdate { doubleX; doubleY; }num;doublexx(floatx11,floatx21,floatb1,floata1,floaty21,floaty11);doubleyy(floaty11,floaty21,floatb1,floata1,floatx21,floatx11); floatx,x1,y1,x2,y2,a,b; doubleyy(floaty11,floaty21,floatb1,floata1,floatx21,floatx11); inta1,a2,a3,b1,b2,b3; printf("Inputx1,y1,x2,y2,a1,a2,a3,b1,b2andb3\n"); scanf("%f%f%f%f%d%d%d%d%d%d\n",&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%f\n",num.X,num.Y); return0;}doublexx(floatx11,floatx21,floatb1,floata1,floaty21,floaty11){ doubleX1;X1=(x11*(1/tan(b1))+x21*(1/tan(a1))-(y21-y11))/((1/tan(a1))+(1/tan(b1))); returnX1;}doubleyy(floaty11,floaty21,floatb1,floata1,floatx21,floatx11){doubleY1;Y1=(y11*(1/tan(b1))+y21*(1/tan(a1))-(x21-x11))/((1/tan(a1))+(1/tan(b1)));returnY1;}#include<stdio.h>#include<math.h>doublemain(){ structdate {floatN; floatn; floatL; }num;floatdh(floatx1); chardaihao; printf("InputdaihaoandL\n"); scanf("%c%f",&daihao,&num.L); num.n=dh(num.L); num.N=0.5+num.n/2; switch(daihao){ case'3':printf("%lf\n",num.n);break;case'6':printf("%lf\n",num.N);break; default:printf("enterdateerror!\n"); }return0;}floatdh(floatx1){ floatx2; x2=(x1)/3; returnx2;}#include<stdio.h>floatmain(){structdate { floatH1; floatH2; floatH3; floatH4; }num;floatsum(floatx1,floatx2,floatx3,floatx4);floatgaocheng(floatx1,floatx2,floatx3,floatx4,floatx5); floath,h1,h2,h3,h4,s1,s2,s3,s4,S,l;printf("Inputh1,h2,h3,h4,s1,s2,s3ands4\n"); scanf("%f%f%f%f%f%f%f%f%f\n",&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%f\n",num.H1,num.H2,num.H3,num.H4);return(0);}floatsum(floatx1,floatx2,floatx3,floatx4){ floatx5; x5=x1+x2+x3+x4; returnx5;}floatgaocheng(floatx1,floatx2,floatx3,floatx4,floatx5){ floatx6; x6=x1+x2+(x3/x4)*x5; return(x6);}#include<stdio.h>#include<math.h>doublemain(){ structdate { doubles; doubles1; doubles2; }num;doublejf(doublex11,doublex21); doublex1,y1,x2,y2,x3,y3,x4,y4; doublea,b,c,d,e; doublek,h; printf("x1,y1,x2,y2,x3,y3,x4,y4\n"); scanf("%f%f%f%f%f%f%f%f\n",&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("%llf\n",num.s); return(0);}doublejf(doublex11,doublex21){ doublex31; x31=x11-x21; return(x31);}#include<stdio.h>#include<math.h>main(){inta1=100,a2=350,b1=300,b2=548,d1,d2,ds;/*a1,a2为瞄准第1,2点的读数b1,b2为瞄准第2,1点的读数*/d1=a2-a1;d2=b2-b1;if(abs(d2-d1)>40/3600)printf("overrun!");elseds=(d1+d2)/2;printf("ds=%4.2f\n",ds);return0;}#include<stdio.h>#include<math.h>main(){doublea1=34,a2=23,a3=102,b1=24,b2=21,b3=2023,x1=41,x2=40,d1,d2,d3,d4;/*a1,a2,a3,x1分别是黑面第一,第二,第三,第四个角的读数b1,b2,b3,x2分别是第三,第二,第一,第四个角的读数*/if(abs(a1+a2+a3+x1-360)>18/3600&abs(b1+b2+b3+x2-360)>18/3600)printf("overrun!");elsed1=(a1+b1)/2;d2=(a2+b2)/2;d3=(a3+b3)/2;d4=(x1+x2)/2;printf("d1=%f\nd2=%f\nd3=%f\nd4=%f\n",d1,d2,d3,d4);return0;}#include<stdio.h>#include<math.h>#definePI3.1416main(){doubleHAB,HB=1283,S=235,i=2,v=1.5,a=45,HA=1234;HAB=S*tan(a*PI/180)+i-v;HB=HA+S*tan(a*PI/180)+i-v;printf("HAB=%f\nHA=%f\n",HAB,HB);return0;}#include<stdio.h>#include<math.h>main(){doubleh1=1234,h2=1123,h3=1023,q1=2345,q2=2245,q3=2145,br=5678,hz,fr=5576,d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论