用c语言写一个程序,要求:打开文件"dem1.txt",依次读取文件里的ncolsnrows,xllcorner,yllcorner,cellsize参数, 随后读取所有的坐标高度。编写函数实现挖方面积、挖方体积、填方面积、填方体积的计算。 最后将挖方面积、挖方体积、填方面积、填方体积结果输出在屏幕上。
时间: 2023-07-10 07:13:15 浏览: 48
好的,我会尽力回答你的问题。以下是符合你要求的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
int ncols, nrows, i, j;
double xllcorner, yllcorner, cellsize, nodata, height;
double dig_area = 0, dig_vol = 0, fill_area = 0, fill_vol = 0;
fp = fopen("dem1.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
fscanf(fp, "%*s%d%*s%d%*s%lf%*s%lf%*s%lf%*s%lf", &ncols, &nrows, &xllcorner, &yllcorner, &cellsize, &nodata);
for (i = 0; i < nrows; i++) {
for (j = 0; j < ncols; j++) {
fscanf(fp, "%lf", &height);
if (height == nodata) {
continue; // 跳过无效值
}
if (height > 0) {
fill_area += cellsize * cellsize;
fill_vol += cellsize * cellsize * height;
} else {
dig_area += cellsize * cellsize;
dig_vol += cellsize * cellsize * (-height);
}
}
}
fclose(fp);
printf("挖方面积:%.2lf 平方米\n", dig_area);
printf("挖方体积:%.2lf 立方米\n", dig_vol);
printf("填方面积:%.2lf 平方米\n", fill_area);
printf("填方体积:%.2lf 立方米\n", fill_vol);
return 0;
}
```
上述程序首先打开文件 "dem1.txt",读取其中的 ncols、nrows、xllcorner、yllcorner、cellsize 和 nodata 参数,然后循环读取所有的坐标高度,根据高度值计算挖方面积、挖方体积、填方面积和填方体积。最后将结果输出到屏幕上。