资源描述
测绘程序设计(C版)
实习报告
学 号: XXXXXXXXXXXXX
姓 名: XXXXX
班 级: XXXXXXXX
专 业: 测绘工程
课程名称: 测绘程序设计(C及Matlab)
指导老师: 肖根如
2015年12月
ﻬ目录
(请用 插入à引用à索引与目录 自动生成)
目录ﻩ- 2 -
1、实习目得 - 3 —
2、实习内容ﻩ— 3 —
2、1实习环境 - 3 -
2、2实习主要内容介绍ﻩ- 3 -
2、2、1算法 - 3 —
2、2、2角度转换ﻩ— 4 -
2、2、3坐标转换ﻩ— 5 —
2、2、4 用if语句实现选择结构 - 5 -
2、2、5用switch语句实现多分支选择结构 — 6 -
2、2、6循环语句 - 7 —
2、2、7利用数组处理批量数据ﻩ- 8 -
2、2、8用函数实现模块化程序设计ﻩ— 9 —
2、2、9使用结构体 - 10 -
2、2、10对文件得使用 — 10 —
3、实习步骤 — 11 —
3、1基本程序 — 11 -
3、2程序改进 - 11 -
3、3程序完善ﻩ- 12 -
3、4程序扩展 — 13 —
4、实习成果 — 14 —
4、1初始调试ﻩ- 14 —
4、2成功调试 — 16 —
4、3运行界面ﻩ— 17 -
5、实习体会 - 18 -
6、附录:实习程序作业清单ﻩ- 21 —
1、实习目得
1、掌握Turbo C集成环境得进入与退出、Turbo C集成环境各种窗口得切换,了解Turbo C集成环境得设置。
2、掌握C语言源程序得建立、编辑、修改、保存及编译与运行等操作。
3、掌握C语言数据类型,熟悉如何定义一个整型、字符型与实型变量,掌握对这些变量赋值等使用得方法,知道输出时格式字符得使用。
4、学会使用C语言得基本运算符(主要就是算术运算符、赋值运算符)及其表达式,特别就是自加运算符(++)与自减运算符(--)得使用。
5、掌握C语言源程序得结构特点与书写规范.
2、实习内容
2、1实习环境
Turbo C 2、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〈stdio、h>
void main
{
int a,b,c;
double d;
printf(Input ddmmss (Format :10 39 59):”);
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〈stdio、h>
void main()
{
double N,H,B,L,e=1/298、25;
double X,Y,Z;
printf(“Input N,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〈stdio、h>
#include<math、h〉
void main()
{ double a,b,c,disc,x1,x2,p,q;
scanf(“%lf%lf%lf",a,b,c);
disc=b*b-4*a*c;
if(disc<0)
printf(“This equation hasn’t real roots\n”);
else
{ p=—b/(2、0*a);
q=sqrt(disc)/(2、0*a);
x1=p+q;x2=p-q;
printf(“real roots:\nx1=%7、2f\nx2=%7、2f\n”,x1,x2);
}
}
2、2、5用switch语句实现多分支选择结构
例2、5用菜单实现GPS 测量中两相邻点间得距离要求。
编写程序:
#include〈stdio、h>
main()
{
char grade;
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;
}
return 0;
}
2、2、6循环语句
例2、6求100~200间得全部素数.
编写程序:
#include<stdio、h〉
#include〈math、h〉
void main()
{
int n,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 <stdio、h>
# include <math、h>
# define PI 3、14
void main()
{
int d[2],e[2],i;
float f[2],g[2],h[2],j[2];
double a[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 〈stdio、h>
# include 〈math、h>
# define PI 3、14
void main()
{
double spj(double x,double y);
int d[2],e[2],i;
float f[2],g[2],h[2],j[2];
double a[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);
}
double spj(double x,double y)
{
double z;
z=(x+y)*1/2;
return(z);
}
2、2、9使用结构体
例2、9计算坐标方位角,使用结构体
编写程序:
#include〈stdio、h〉
#include<math、h>
#define PI 3、14
void main()
{
struct Fwj
{
double a;
double c;
}fwj;
double b;
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 〈stdio、h>
#include 〈math、h>
void main()
{
;
double s,alpha,I,v,hgt;
fp=fopen("D:\\TURBOC2、0\\tri、dat","r");
if((fp=fopen("tri、dat","r"))==NULL)
{
printf(”error");
exit(0);
}
printf(”input s,alpha,I and v\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(”Tri Height=%lf\n",hgt);
fclose(fp);
}
3、实习步骤
3、1基本程序
例3、1编写计算三角高程代码
编写程序:
#include <stdio、h〉
#include <math、h〉
main()
{ double s,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(”Tri hgt=%lf\n”,hgt);
}
3、2程序改进
将例3、1程序改为scanf输入
代码如下:
#include 〈stdio、h〉
#include <math、h>
main()
{
double s,alpha,I,v;
double hgt;
printf("input s,alpha,I and v\n”);
scanf(”%lf%lf%lf%lf",&s,&alpha,&I,&v);
hgt=s*tan(alpha)+I—v;
printf("Tri Height=%lf\n",hgt);
}
3、3程序完善
将例3、1程序改为函数
代码如下:
#include <stdio、h>
#include 〈math、h〉
main()
{
double tri(double a,double b,double c,double d);
double s,alpha,I,v;
double hgt;
printf("input s,alpha,I and v\n”);
scanf("%lf%lf%lf%lf",&s,&alpha,&I,&v);
hgt=tri(s,alpha,I,v);
printf("Tri Height=%lf\n",hgt);
}
double tri(double a,double b,double c,double d)
{
double z;
z=a*tan(b)+c-d;
return (z);
}
3、4程序扩展
将例3、1改为结构体
代码如下:
#include <stdio、h>
#include <math、h>
main()
{
struct Gc
{
double s;
double alpha;
double I;
double v;
}gc;
double hgt;
printf(”input s,alpha,I and v\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(”Tri Height=%lf\n",hgt);
}
将例3、1改为文件
代码如下:
#include <stdio、h>
#include 〈math、h>
void main()
{
;
double s,alpha,I,v,hgt;
fp=fopen("D:\\TURBOC2、0\\tri、dat","r");
if((fp=fopen("tri、dat”,"r"))==NULL)
{
printf("error”);
exit(0);
}
printf("input s,alpha,I and v\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("Tri Height=%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("Tri Height=%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、计算圆面积(初始化)
/* 2yangrui02 */
#include〈stdio、h>
#include〈math、h〉
#define PI 3、14
main()
{
float r,C;
r=2、0;
c=PI*r*r;
printf("c=%f\n”,c);
}
2、水准测量(初始化)
/* 2yangrui03 */
#include<stdio、h〉
#include<math、h>
main()
{
int Bz1,Bz2,BRz1,BRz2,k1,k2;
float s1,s2,s,B1;
float h;
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、水平角测回法观测(初始化)
/* 2yangrui04 */
# include <stdio、h>
# include 〈math、h>
# define PI 3、14
void main()
{
int d,e,f,g,h,i,j,k,l,m,n,o;
double a1,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=b1*PI/180;
a2=(j+k/60+l/3600);
a2=a2*PI/180;
b2=(m+n/60+o/3600);
b2=b2*PI/180;
ang1=a1—b1;
ang2=a2-b2;
angle=(ang1+ang2)*1/2;
printf(”angle=%f\n",angle);
}
4、计算三角高程(初始化)
/* 2yangrui05 */
#include <stdio、h>
#include <math、h>
main()
{
double s,alpha,i,v;
double hgt;
s=20、0;
alpha=30、0;
i=1、0;
v=1、5;
hgt=s*tan(alpha*3、14/180)+i-v;
printf(”Tri hgt=%lf\n”,hgt);
}
5、圆面积(scanf)
/* 2yangrui06 */
#include<stdio、h>
#include<math、h〉
#define PI 3、14
main()
{
float r,c;
scanf("%f",&r);
c=PI*r*r;
printf(”c=%f\n",c);
}
6、水准测量(scanf)
/* 2yangrui07 */
#include〈stdio、h>
#include<math、h>
main()
{
int Bz1,Bz2,BRz1,BRz2,s1,s2,s,B1;
float h;
scanf(”%d%d%d%d",&Bz1,&Bz2,&BRz1,&BRz2);
s1=Bz1+4787-BRz1;
s2=Bz2+4687-BRz2;
s=s1-s2;
B1=Bz1-Bz2;
h=B1—s/2;
printf("h=%f\n",h);
}
7、水平角测回法(scanf)
/* 2yangrui08 */
# include 〈stdio、h>
# include <math、h>
# define PI 3、14
void main()
{
int d,e,f,g;
float h,i,j,k,l,m,n,o;
double a1,b1,a2,b2,angle1,angle2,angle;
scanf(”%d%d%d%d%f%f%f%f%f%f%f%f”,&d,&e,&f,&g,&h,&i,&j,&k,&l,&m,&n,&o);
printf("input a1,b1,a2,b2\n");
a1=(d+h/60+l/3600);
a1=a1*PI/180;
b1=(e+i/60+m/3600);
b1=b1*PI/180;
a2=(f+j/60+n/3600);
a2=a2*PI/180;
b2=(g+k/60+o/3600);
b2=b2*PI/180;
angle1=a1-b1;
angle2=a2—b2;
angle=(angle1+angle2)*1/2;
printf(”angle=%lf\n",angle);
}
8、计算三角高程(scanf )
/* 2yangrui09 */
#include <stdio、h>
#include <math、h>
main()
{
double s,alpha,I,v;
double hgt;
printf("input s,alpha,I and v\n");
scanf("%lf%lf%lf%lf",&s,&alpha,&I,&v);
hgt=s*tan(alpha)+I—v;
printf("Tri Height=%lf\n",hgt);
}
9、计算圆面积(if)
/* 2yangrui10 */
#include〈stdio、h〉
#include〈math、h〉
#define PI 3、14
void main()
{
float r,s;
scanf("%f",&r);
if(r〉0)
s=PI*r*r;
printf("s=%f”,s);
else
printf("error");
}
10、计算三角形面积(if)
/* 2yangrui11 */
#include<stdio、h〉
#include<math、h〉
void main()
{
double a,b,c,s,area;
printf(”input a b c");
scanf(”%f%f%f",&a,&b,&c);
if((a+b)〉c)
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
else
printf(”error");
}
11、带号计算(if)
/* 2yangrui12 */
#include<stdio、h>
#include〈math、h>
void main()
{
int L;
int n,N;
scanf("%f",&L);
if(L>0)
{
N=(L—L%6)/6+1;
n=(L—L%3)/3+1;
printf("6:”);
printf("N=%d\n”,N);
printf("3:”);
printf(”n=%d\n",n);
}
else
printf("error");
}
12、水准测量(if)
/* 2yangrui13 */
#include〈math、h〉
main()
{
int Bz1,Bz2,BRz1,BRz2,k1,k2;
float s1,s2,s,B1;
float h;
Bz1=1726;
Bz2=1866;
BRz1=6513;
BRz2=6554;
scanf(”%d%d”,&k1,&k2);
if(k1==4687&&k2==4787)
{
s1=Bz1+k2-
展开阅读全文