测绘程序设计C语言版.docx
《测绘程序设计C语言版.docx》由会员分享,可在线阅读,更多相关《测绘程序设计C语言版.docx(84页珍藏版)》请在冰豆网上搜索。
测绘程序设计C语言版
测绘程序设计(C版)
实习报告
学号:
XXXXXXXXXXXXX
姓名:
XXXXX
班级:
XXXXXXXX
专业:
测绘工程
课程名称:
测绘程序设计(C及Matlab)
指导老师:
肖根如
2015年12月
(请用插入引用索引和目录自动生成)
1、实习目的
1.掌握TurboC集成环境的进入与退出、TurboC集成环境各种窗口的切换,了解TurboC集成环境的设置。
2.掌握C语言源程序的建立、编辑、修改、保存及编译和运行等操作。
3.掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型变量,掌握对这些变量赋值等使用的方法,知道输出时格式字符的使用。
4.学会使用C语言的基本运算符(主要是算术运算符、赋值运算符)及其表达式,特别是自加运算符(++)和自减运算符(--)的使用。
5.掌握C语言源程序的结构特点与书写规范。
2、实习内容
2.1实习环境
TurboC2.0集成开发环境
2.2实习主要内容介绍
2.2.1算法
例2.1计算三角高程(公式:
h=s*tana+i-v)
分析:
步骤1:
输入斜距s;
步骤2:
输入竖直角a;
步骤3:
输入仪器高i;
步骤4:
输入棱镜高v;
步骤5:
s*tana+i-v⇒h;
步骤6:
输出h,结束。
(1)N-S流程图法
输入s,a,i,v
s*tana+i-v⇒h
输出h
结束
(2)流程图法
开始
输入S、i、v、α
S·tanα+i-v⇒h
输出h
结束
2.2.2角度转换
例2.2度分秒转换
#include
voidmain
{
inta,b,c;
doubled;
printf(Inputddmmss(Format:
103959):
”);
scanf(“%d%d%d”,&a,&b,&c);
d=(a+b/60.0+c/3600.0);
printf(“%d°%d\′%d\′\′=%lf°\n”,a,b,c,d);
}
2.2.3坐标转换
例2.3坐标转换代码
#include
voidmain()
{
doubleN,H,B,L,e=1/298.25;
doubleX,Y,Z;
printf(“InputN,H,B,L”);
scanf(“%lf%lf%lf%lf”,&N,&H,&B,&L);
X=(N+H)*cos(B)*(L);
Y=(N+H)*cos(B)*(L);
Z=(N*(1-e*e)+H)*sin(B);
printf(“X=%lf\nY=%lf\nZ=%lf”,X,Y,Z);
}
2.2.4用if语句实现选择结构
例2.4解得一元二次方程ax^2+bx+c=0的根。
由键盘输入a,b,c。
假设a,b,c的值任意,并不保证b^2-4ac>=0。
需要在程序中进行判别,如果b^2-4ac>=0,就计算并输出方程的两个实根,如果b^2-4ac<0,就输出“方程无实根”的信息。
编写程序:
#include
#include
voidmain()
{doublea,b,c,disc,x1,x2,p,q;
scanf(“%lf%lf%lf”,a,b,c);
disc=b*b-4*a*c;
if(disc<0)
printf(“Thisequationhasn’trealroots\n”);
else
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q;
printf(“realroots:
\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);
}
}
2.2.5用switch语句实现多分支选择结构
例2.5用菜单实现GPS测量中两相邻点间的距离要求。
编写程序:
#include
main()
{
chargrade;
scanf("%c",&grade);
switch(grade)
{
case'A':
printf("dmin1:
");printf("100\n");
printf("dmax1:
");printf("2000\n");
printf("dp1:
");printf("300");break;
case'B':
printf("dmin2:
");printf("15\n");
printf("dmax1:
");printf("250\n");
printf("dp2:
");printf("70");break;
case'C':
printf("dmin3:
");printf("5\n");
printf("dmax3:
");printf("40\n");
printf("dp3:
");printf("10~15");break;
case'D':
printf("dmin4:
");printf("2\n");
printf("dmax4:
");printf("15\n");
printf("dp4:
");printf("5~10");break;
case'E':
printf("dmin5:
");printf("1\n");
printf("dmax5:
");printf("10\n");
printf("dp5:
");printf("2~5");break;
}
return0;
}
2.2.6循环语句
例2.6求100~200间的全部素数。
编写程序:
#include
#include
voidmain()
{
intn,k,i,m;
m=0;
for(n=101;n<=200;n=n+2)
{
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)
{
printf(“%d”,n);
m=m+1;
}
if(m%10==0)printf(“\n”);
}
printf(“\n”);
}
2.2.7利用数组处理批量数据
例2.7采用测回法计算水平角
编写程序:
#include
#include
#definePI3.14
voidmain()
{
intd[2],e[2],i;
floatf[2],g[2],h[2],j[2];
doublea[2],b[2],ang[2],angle;
for(i=0;i<3;i++)
{
scanf("%d%d%f%f%f%f",&d[i],&e[i],&f[i],&g[i],&h[i],&j[i]);
a[i]=(d[i]+f[i]/60+g[i]/3600);
a[i]=a[i]*PI/180;
b[i]=(e[i]+h[i]/60+j[i]/3600);
b[i]=b[i]*PI/180;
ang[i]=a[i]-b[i];
}
angle=(ang[0]+ang[1])*1/2;
printf("angle=%lf\n",angle);
}
2.2.8用函数实现模块化程序设计
例2.8测回法计算水平角,使用函数
编写程序:
#include
#include
#definePI3.14
voidmain()
{
doublespj(doublex,doubley);
intd[2],e[2],i;
floatf[2],g[2],h[2],j[2];
doublea[2],b[2],ang[2],angle;
for(i=0;i<3;i++)
{
scanf("%d%d%f%f%f%f",&d[i],&e[i],&f[i],&g[i],&h[i],&j[i]);
a[i]=(d[i]+f[i]/60+g[i]/3600);
a[i]=a[i]*PI/180;
b[i]=(e[i]+h[i]/60+j[i]/3600);
b[i]=b[i]*PI/180;
ang[i]=a[i]-b[i];
}
angle=spj(ang[0],ang[1]);
printf("angle=%lf\n",angle);
}
doublespj(doublex,doubley)
{
doublez;
z=(x+y)*1/2;
return(z);
}
2.2.9使用结构体
例2.9计算坐标方位角,使用结构体
编写程序:
#include
#include
#definePI3.14
voidmain()
{
structFwj
{
doublea;
doublec;
}fwj;
doubleb;
scanf("%lf%lf",&fwj.a,&fwj.c);
b=fwj.a+fwj.c*PI/180-180;
printf("b=%f",b);
}
2.2.10对文件的使用
例2.10计算三角高程,使用文件方法。
编写程序:
#include
#include
voidmain()
{
FILE*fp;
doubles,alpha,I,v,hgt;
fp=fopen("D:
\\TURBOC2.0\\tri.dat","r");
if((fp=fopen("tri.dat","r"))==NULL)
{
printf("error");
exit(0);
}
printf("inputs,alpha,Iandv\n");
while(fscanf(fp,"%lf%lf%lf%lf",&s,&alpha,&I,&v)!
=EOF);
{
printf("%lf%lf%lf%lf",s,alpha,I,v);
}
hgt=s*tan(alpha)+I-v;
printf("TriHeight=%lf\n",hgt);
fclose(fp);
}
3.实习步骤
3.1基本程序
例3.1编写计算三角高程代码
编写程序:
#include
#include
main()
{doubles,alpha,i,v;hgt;
s=20.0;alpha=30.0;i=1.0;
v=1.5;
hgt=s*tan(alpha*3.14/180)+i-v;
printf("Trihgt=%lf\n",hgt);
}
3.2程序改进
将例3.1程序改为scanf输入
代码如下:
#include
#include
main()
{
doubles,alpha,I,v;
doublehgt;
printf("inputs,alpha,Iandv\n");
scanf("%lf%lf%lf%lf",&s,&alpha,&I,&v);
hgt=s*tan(alpha)+I-v;
printf("TriHeight=%lf\n",hgt);
}
3.3程序完善
将例3.1程序改为函数
代码如下:
#include
#include
main()
{
doubletri(doublea,doubleb,doublec,doubled);
doubles,alpha,I,v;
doublehgt;
printf("inputs,alpha,Iandv\n");
scanf("%lf%lf%lf%lf",&s,&alpha,&I,&v);
hgt=tri(s,alpha,I,v);
printf("TriHeight=%lf\n",hgt);
}
doubletri(doublea,doubleb,doublec,doubled)
{
doublez;
z=a*tan(b)+c-d;
return(z);
}
3.4程序扩展
将例3.1改为结构体
代码如下:
#include
#include
main()
{
structGc
{
doubles;
doublealpha;
doubleI;
doublev;
}gc;
doublehgt;
printf("inputs,alpha,Iandv\n");
scanf("%lf%lf%lf%lf",&gc.s,&gc.alpha,&gc.I,&gc.v);
hgt=gc.s*tan(gc.alpha)+gc.I-gc.v;
printf("TriHeight=%lf\n",hgt);
}
将例3.1改为文件
代码如下:
#include
#include
voidmain()
{
FILE*fp;
doubles,alpha,I,v,hgt;
fp=fopen("D:
\\TURBOC2.0\\tri.dat","r");
if((fp=fopen("tri.dat","r"))==NULL)
{
printf("error");
exit(0);
}
printf("inputs,alpha,Iandv\n");
while(fscanf(fp,"%lf%lf%lf%lf",&s,&alpha,&I,&v)!
=EOF);
{
printf("%lf%lf%lf%lf",s,alpha,I,v);
}
hgt=s*tan(alpha)+I-v;
printf("TriHeight=%lf\n",hgt);
fclose(fp);
}
4.实习成果
4.1初始调试
(1)三角高程计算(scanf输入)代码:
(2)三角高程函数代码
(3)三角高程文件代码
调试结果:
(1)三角高程计算(scanf输入)
错误原因:
“Double“应改为“double“
“Hgt=s*tan(alpha)+I-v“中“Hgt“改为“hgt“
(2)三角高程函数
错误原因:
应将输入与输出放在主函数中,即:
“scanf("%lf%lf%lf%lf",&a,&b,&c,&d)“改为“scanf(“%lf%lf%lf%lf“
&s,&alpha,&I,&v);“并置于主函数中。
“printf("%lf\n",z)“改为”printf("TriHeight=%lf\n",hgt)“并置于主函数中。
(3)三角高程文件
错误原因:
将“fscanf(fp,"%lf%lf%lf%lf",&s,&alpha,&I,&v)“改为
“while(fscanf(fp,"%lf%lf%lf%lf",&s,&alpha,&I,&v)!
=EOF);
{
printf("%lf%lf%lf%lf",s,alpha,I,v);
}“
4.2成功调试
(1)三角高程计算(scanf输入)
(2)三角高程函数
(3)三角高程文件
4.3运行界面
(1)三角高程计算(scanf输入)
(2)三角高程函数
(3)三角高程文件
(1)三角高程计算(scanf输入)
(2)三角高程函数
(3)三角高程文件
5.实习体会
在四周的时间里,我们在专业老师的带领下进行了C语言程序实践学习。
老师向我们简单的介绍了几个比较重要的实际操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
这段时间的学习我知道了C语言的基本特点有以下几点:
1.语言简洁,使用灵活方便。
2.运算符丰富,表达能力强。
3.数计类型丰富。
4.目标程序质量高,具有面向硬件系统的特点。
5.具有结构化的控制语句和模块化的程序结构。
6.具有编译预处理功能。
7.程序设计自由度大,可移植性好。
学习C程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用C语言开发程序的能力,为今后的继续学习打下一个良好的基础。
我学习了C语言的数据类型、常量与符号常量、变量、C语言的运算符和表达式、赋值运算符和赋值表达式、自增自减运算符以及逗号表达式等。
这章介绍了结构化程序的三种基本结构、C语句概述、数据输出包括字符输出函数putchar()和格式输出函数printf()、数据输入包括字符输入函数getchar()和格式输入函数scanf(),还有一些简单的C语程序设计举列等。
个人认为课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:
1、加深对课堂讲授内容的理解
课堂上要讲授许多关于C语言的语法规则,十分复杂,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。
但是在程序设计领域里这是一定要克服的传统的、错误的想法。
因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
2、熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3、学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。
有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
通过这次为数不多的几天计算机实践学习,我们了解了一些关于C语言的知识,理解巩固了我们C语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。
同时它让我知道,只要你努力,任何东西都不会太难。
在科技高度发展的今天,计算机在人们当中的作用越来越突出。
而C语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交换,因此,C语言的学习对我们特别重要。
以上是我的一点学习心得,希望能更好的运用到学习中去。
C语言是一门很有用的、对于我们的就业很实际的语言,学习好C语言是一项必须而实际的任务。
我们必须要好好掌握。
6.附录:
实习程序作业清单
1.计算圆面积(初始化)
/*201420050215yangrui02*/
#include
#include
#definePI3.14
main()
{
floatr,C;
r=2.0;
c=PI*r*r;
printf("c=%f\n",c);
}
2.水准测量(初始化)
/*201420050215yangrui03*/
#include
#include
main()
{
intBz1,Bz2,BRz1,BRz2,k1,k2;
floats1,s2,s,B1;
floath;
Bz1=1726;
Bz2=1866;
BRz1=6513;
BRz2=6554;
k1=4687;
k2=4787;
s1=Bz1+k2-BRz1;
s2=Bz2+k1-BRz2;
s=s1-s2;
B1=Bz1-Bz2;
h=B1-s/2;
printf("h=%f\n",h);
}
3.水平角测回法观测(初始化)
/*201420050215yangrui04*/
#include
#include
#definePI3.14
voidmain()
{
intd,e,f,g,h,i,j,k,l,m,n,o;
doublea1,b1,a2,b2,angle1,angle2,angle;
d=15;
e=20;
f=30;
g=10;
h=30;
i=40;
j=30;
k=20;
l=10;
m=10;
n=20;
o=30;
a1=(d+e/60+f/3600);
a1=a1*PI/180;
b1=(g+h/60+i/3600);
b1=