用C写一段程序实现,让用户输入方位值,范围是0-360,如果输入错误重新输入
时间: 2024-03-20 14:38:57 浏览: 16
下面是一个用C语言编写的实现用户输入方位值的程序,如果输入错误则会提示用户重新输入:
```c
#include <stdio.h>
int main() {
int direction;
do {
printf("请输入方位值(范围是0-360):");
scanf("%d", &direction);
if (direction < 0 || direction > 360) {
printf("输入错误,请重新输入!\n");
}
} while (direction < 0 || direction > 360);
printf("您输入的方位值是:%d\n", direction);
return 0;
}
```
这个程序使用了一个 do-while 循环来实现用户输入和错误检查,只有当用户输入的值在0-360之间时才会退出循环并输出结果。如果用户输入错误,则会提示用户重新输入。
相关问题
用C语言写一段程序 提示用户输入 测向方位、起点、间隔、检测输入的值是否是整数或小数,或负数,如果不是重新输入直到输入正确为止。
好的,以下是用C语言编写的程序:
```c
#include <stdio.h>
int main() {
float azimuth, start, interval;
// 获取 测向方位、起点、间隔 的输入并验证
while (1) {
printf("请输入 测向方位:");
if (scanf("%f", &azimuth) == 1) {
break;
}
printf("输入错误,请重新输入。\n");
while (getchar() != '\n') continue; // 清除输入缓存
}
while (1) {
printf("请输入 起点:");
if (scanf("%f", &start) == 1) {
break;
}
printf("输入错误,请重新输入。\n");
while (getchar() != '\n') continue; // 清除输入缓存
}
while (1) {
printf("请输入 间隔:");
if (scanf("%f", &interval) == 1) {
break;
}
printf("输入错误,请重新输入。\n");
while (getchar() != '\n') continue; // 清除输入缓存
}
// 输出输入的值
printf("测向方位:%f\n", azimuth);
printf("起点:%f\n", start);
printf("间隔:%f\n", interval);
return 0;
}
```
程序中使用了 `scanf()` 函数获取用户输入,并通过循环和条件判断验证输入的值是否是整数或小数,以及是否为负数。如果输入不符合要求,则输出错误提示并要求用户重新输入。同时,使用了 `getchar()` 函数清除输入缓存,避免输入错误的值影响后续输入。最后,输出输入的值。
用C语言写一段代码实现以下功能:程序提示用户依次输入A、B两点的经纬度和海拔,然后程序计算出A, B两点之间的距离单位是千米,计算出B点在A点的什么方位,计算出B点到A点和地面形成的角度,计算完毕后程序循环至开头继续依次输入
以下是一份用C语言实现题目要求的代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
int main()
{
double latA, lonA, altA, latB, lonB, altB;
double dist, bearing, angle;
while(1)
{
// 输入A点的经纬度和海拔
printf("请输入A点的经度、纬度和海拔(以空格分隔):");
scanf("%lf %lf %lf", &lonA, &latA, &altA);
getchar(); // 消耗换行符
// 输入B点的经纬度和海拔
printf("请输入B点的经度、纬度和海拔(以空格分隔):");
scanf("%lf %lf %lf", &lonB, &latB, &altB);
getchar(); // 消耗换行符
// 计算距离
double dlat = (latB - latA) / 180 * PI;
double dlon = (lonB - lonA) / 180 * PI;
double a = pow(sin(dlat / 2), 2) + cos(latA / 180 * PI) * cos(latB / 180 * PI) * pow(sin(dlon / 2), 2);
dist = 2 * atan2(sqrt(a), sqrt(1 - a)) * 6378.137;
// 计算方位角
double y = sin(dlon) * cos(latB / 180 * PI);
double x = cos(latA / 180 * PI) * sin(latB / 180 * PI) - sin(latA / 180 * PI) * cos(latB / 180 * PI) * cos(dlon);
bearing = atan2(y, x) / PI * 180;
if(bearing < 0) bearing += 360;
// 计算角度
double dalt = altB - altA;
angle = atan2(dalt, dist) / PI * 180;
// 输出结果
printf("A, B两点之间的距离为 %.2f 千米\n", dist);
printf("B点在A点的方位为 %.2f 度\n", bearing);
printf("B点到A点和地面形成的角度为 %.2f 度\n", angle);
}
return 0;
}
```
以上代码使用了 Haversine 公式计算两点间距离,使用了大圆航向公式计算方位角,使用了反正切函数计算角度。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)