先说缺陷:1.一测回的度分秒值需要先用计算器换算为度值才能进行运算;
2.使用的文件较多;
3.因为老师要求用公式将斜距转换为直线距离,所以计算步骤略多;
4.个别英文单词拼写有误;
5.没有储存单向高差值。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define pi 3.1415926535898
#define DEC (pi / 180)
static int num_slope_distence, num_angle, num_instrument, num_prism;
static float *slope_distence; //斜距
static float *elevation; //高程
static float *distence; //直距
static float *angle; //角度
static float *elevation_instrument; //仪器高
static float *elevatioon_prism; //棱镜高
static float *answer;
void Read(void);
void computer(void);
int main()
{
Read();
computer();
printf("\aThe computer is ended!\n");
return EXIT_SUCCESS;
}
void Read(void)
{
FILE *fp_slope_distence, *fp_angle, *fp_instrument, *fp_prism;
fp_slope_distence = fopen("input_distance.txt", "r");
fp_angle = fopen("input_angle.txt", "r");
fp_instrument = fopen("elevation_instrument.txt", "r");
fp_prism = fopen("elevatioon_prism.txt", "r");
//fp_test = fopen("test.txt", "w");
fscanf(fp_slope_distence, "%d", &num_slope_distence);
fscanf(fp_angle, "%d", &num_angle);
fscanf(fp_instrument, "%d", &num_instrument);
fscanf(fp_prism, "%d", &num_prism);
slope_distence = (float *)malloc(sizeof(float) * num_slope_distence);
angle = (float *)malloc(sizeof(float) * num_angle);
elevation_instrument = (float *)malloc(sizeof(float) * num_instrument);
elevatioon_prism = (float *)malloc(sizeof(float) * num_prism);
for (int i = 0; i < num_slope_distence; i++)
fscanf(fp_slope_distence, "%f", (slope_distence + i));
for (int j = 0; j < num_angle; j++)
fscanf(fp_angle, "%f", (angle + j));
for (int q = 0; q < num_angle; q++)
fscanf(fp_instrument, "%f", (elevation_instrument + q));
for (int p = 0; p < num_angle; p++)
fscanf(fp_prism, "%f", (elevatioon_prism + p));
fclose(fp_slope_distence);
fclose(fp_angle);
fclose(fp_instrument);
fclose(fp_prism);
//fclose(fp_test);
}
void computer(void)
{
FILE *fp_answer;
fp_answer = fopen("output.txt", "w");
distence = (float *)malloc(sizeof(float) * num_slope_distence / 2);
for (int i = 0; i < num_slope_distence; i++)
*(distence + i) = *(slope_distence + i) / cos(*(angle + i) * DEC);
/*for (int i = 0; i < num_slope_distence; i++)
printf("%f", *(distence + i));*/
answer = (float *)malloc(sizeof(float) * num_slope_distence);
for (int i = 0; i < num_slope_distence; i += 2)
*(answer + i) = (*(distence + i) * tan(*(angle + i) * DEC) + *(elevation_instrument + i) - *(elevatioon_prism + i) + *(distence + i + 1) * tan(*(angle + i + 1) * DEC) + *(elevation_instrument + i + 1) - *(elevatioon_prism + i + 1)) / 2;
for (int i = 0; i < num_slope_distence/2; i++)
fprintf(fp_answer, "%f ", *(answer + i));
fclose(fp_answer);
}
p.s 每个txt文本数据的第一个值为数据的个数
一测回角度数据
4 0.7428 -1.312 -0.713 -0.463
斜距数据
4 25.789 25.781 14.109 14.123
全站仪高程
4 1.515 1.422 1.517 1.448
棱镜高程
4 1.375 1.345 1.353 1.342
结果:平均高差
-0.019613 -0.001327
欢迎跟我一样的新手交流,也恳请各位大佬提一些意见,感激不尽。