角度(度分秒)的四则运算

2023-10-18 08:10
文章标签 角度 四则运算 分秒

本文主要是介绍角度(度分秒)的四则运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

角度(度分秒)的四则运算

在测量计算(如闭合导线坐标计算),我们可能需要计算比较多的角度。数学中,角度的度与分、分与秒之间一律采用六十进制,完全通过笔算耗时耗力,还容易算错。下面用C语言知识编写一个简单的程序,来实现角度的四则运算。

#include <stdio.h>
#include <stdlib.h>
typedef struct angle
{int degree;int minute;int second;
}ANGLE;
void decrease(ANGLE a[], int i);
void add(ANGLE a[], int i);
void multiply(ANGLE a[], int i, int j);
void divide(ANGLE a[], int i, int j);
int main()
{do{int i = 0, k, j = 0;float degree = 0;char operation[25];ANGLE a[25] = {0};printf("本程序可实现角度(度/分/秒)的四则运算,输入时角度的度、分、秒间以一个空格隔开\n");printf("角度 %d:",i+1);scanf("%d %d %d",&a[i].degree, &a[i].minute, &a[i].second);getchar();printf("运算符:");scanf("%c",&operation[i]);do{if(operation[i] == '+' || operation[i] == '-'){i++;printf("角度 %d:",i+1);scanf("%d %d %d",&a[i].degree, &a[i].minute, &a[i].second);getchar();printf("运算符:");scanf("%c",&operation[i]);}else if(operation[i] == '*'){printf("  乘数:");scanf("%d", &j);getchar();printf("运算符:");scanf("%c",&operation[i+1]);}else if(operation[i] == '/'){printf("  除数:");scanf("%d", &j);getchar();printf("运算符:");scanf("%c",&operation[i+1]);}}while(operation[i] != '=' && operation[i+1] != '=');for(k = 0; k < i+1; k++){if(operation[k] == '+'){add(a, k+1);}else if(operation[k] == '-'){decrease(a, k+1);}else if(operation[k] == '*'){multiply(a, k, j);}else if(operation[k] == '/'){divide(a, k, j);}else if(operation[k] != '-' && operation[k] != '+' && operation[k] != '=' && operation[k] != '/' && operation[k] != '*'){printf("请输入正确的运算符!\n");}}if(a[i].degree < 0 || a[i].minute < 0 || a[i].second < 0){printf("结果为:-%d°%d′%d″\n",abs(a[i].degree), abs(a[i].minute), abs(a[i].second));}else{printf("结果为:%d°%d′%d″\n",a[i].degree, a[i].minute, a[i].second);}degree = (float)a[i].degree + (float)a[i].minute / 60 + (float)a[i].second / 3600;printf("换算为:%f°\n", degree);getchar();getchar();}while(1);
}
void add(ANGLE a[], int i)
{long s1, s2, s3 = 0;s1 = a[i-1].degree*60*60 + a[i-1].minute*60 + a[i-1].second;s2 = a[i].degree*60*60 + a[i].minute*60 + a[i].second;s3 = s1 + s2;a[i].degree = s3 / 3600;a[i].minute = (s3 - (a[i].degree) * 3600) / 60;a[i].second = s3 % 60;
}
void decrease(ANGLE a[], int i)
{long s1, s2, s3 = 0;s1 = a[i-1].degree*60*60 + a[i-1].minute*60 + a[i-1].second;s2 = a[i].degree*60*60 + a[i].minute*60 + a[i].second;s3 = s1 - s2;a[i].degree = s3 / 3600;a[i].minute = (s3 - (a[i].degree) * 3600) / 60;a[i].second = s3 % 60;
}
void multiply(ANGLE a[], int i, int j)
{long s1, s3 = 0;s1 = a[i].degree*60*60 + a[i].minute*60 + a[i].second;s3 = s1 * j;a[i].degree = s3 / 3600;a[i].minute = (s3 - (a[i].degree) * 3600) / 60;a[i].second = s3 % 60;
}
void divide(ANGLE a[], int i, int j)
{long s1, s3 = 0;s1 = a[i].degree*60*60 + a[i].minute*60 + a[i].second;s3 = s1 / j;a[i].degree = s3 / 3600;a[i].minute = (s3 - (a[i].degree) * 3600) / 60;a[i].second = s3 % 60;
}

code blocks中运行示例
在这里插入图片描述
如果单次计算的角度多于25个,只需更改这两行代码,改变数组的大小。

    char operation[25];ANGLE a[25] = {0};

这篇关于角度(度分秒)的四则运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231325

相关文章

如何从SEO角度解读“地摊经济”?

如果你是一名SEO人员,经常我们需要做的第一件事就是做关键词挖掘与分析,特别是当我们试图去做热点新闻事件排名的时候。 我们只有深刻的理解目标关键词背后真正潜在的搜索需求,我们才可以根据关键词的属性,撰写高质量的相关性文章,比如:地摊经济,依然成为各地市广为热议的话题。 那么,如何从SEO角度解读“地摊经济”? 根据以往关键词优化的经验,曾庆平将通过如下内容阐述: 1、关键词拓展 通常

物联网之ESP32控制舵机、通过网页设置舵机角度、Web服务、舵机原理、接线、Arduino、WiFi、Http

MENU 前言原理硬件电路设计软件程序设计LEDC输出PWM信号使用第三方库控制舵机网页控制舵机 前言 舵机在电子产品中非常常见,比如四足机器人、固定翼航模等都有应用,因此学习舵机对电子制作非常有意义。本文章使用Arguino的PWM对SG90舵机旋转角度控制。 原理 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机只

opencv实战项目二十:检测箱盖的旋转角度以及位置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、算法流程:二、算法实现:2.1 二值化箱盖并获取最大轮廓:2.2 凸包与多边形近似提取矩形2.3 最小外接矩形获取角度与位置 三,整体代码实现:四,实现效果: 前言 在当今的工业自动化领域,精密制造和智能控制技术的发展正推动着生产流程的持续优化。随着机器视觉技术的不断成熟,其在工业应用

判断两个yaw角度之差是否超过了90度

一. 判断两个yaw角度之差是否超过了90度 要判断两个 yaw 角度之差是否超过 90 度,你可以通过计算这两个角度的差值,并将其归一化为 [-180, 180] 的范围内。接着,只需判断该差值的绝对值是否大于 90 度。 实现步骤: 计算角度差:两个角度的差值可以通过直接相减得到,但需要将结果限制在 [-180, 180] 范围内,因为角度是周期性的。归一化到 [-180, 180] 范

从spark源码的角度思考scala中的模式匹配

1.scala中模式匹配 2.spark源码中的模式匹配思考 spark中master会收到worker发过来的akka的消息, 此消息是case class即(Master.class中): case class RegisterWorker(id:String,host:String,port:Int,cores:Int,memory:Int,webUiPort:int

以分,秒,分秒形式的倒计时组合控件

实现方法也不是很难,在这里我用一个ViewGroup控件组合成了一个倒计时控件,通过CountDownTimer的实现类来做时间戳的换算package com.kufeng.hj.one.view;import android.content.Context;import android.os.CountDownTimer;import android.util.AttributeSet;imp

从源码角度分析 Kotlin by lazy 的实现

by lazy 的作用 延迟属性(lazy properties) 是 Kotlin 标准库中的标准委托之一,可以通过 by lazy 来实现。 其中,lazy() 是一个函数,可以接受一个 Lambda 表达式作为参数,第一次调用时会执行 Lambda 表达式,以后调用该属性会返回之前的结果。 例如下面的代码: val str: String by lazy{println("aaron

四则运算-栈方法 JAVA

栈的规则是先进后出。利用压栈的思想来计算四则运算表达式方法如下:创建两个栈,一个存放四则表达式的数字,另一个存放对应的操作符。 例如一个表达是(3-1)*6-8/4,那么就将这个表达是的数字和操作符分别压入各自的栈,压栈规则如下: 1>遇到数字则直接压入数字栈顶; 2>遇到运算符(+-*/)时,若操作符栈为空,则直接放入操作符栈顶,否则,见3; 3>若操作符栈顶元素的优先级比当前运算符的优

Java实现简单四则运算

工作之余,突然想用java实现一下四则运算,经过简单的构思,很快就有了思路,就完成了一个简单版本。   经过慎重考虑,觉得使用栈还是要比数组或者List容易对符号和数字进行控制。 我使用两个栈,分别保存数字和符号,然后判断当前符号和前一个符号的运算级别,来决定是否进行一次弹栈运算(就是挨着前一个运算符号的两个数,是不是有必要进行一次运算)。 经过简单的测试,标准的四则运算,在下面代码是没有

GNN-频域-2014:Spectral Networks and Locally Connected Networks on Graphs(频谱图卷积神经网络)【第一篇从频域角度分析】

《原始论文:Spectral Networks and Locally Connected Networks on Graphs》 空域卷积非常直观地借鉴了图像里的卷积操作,但缺乏一定的理论基础。 而频域卷积则不同,相比于空域卷积而言,它主要利用的是**图傅里叶变换(Graph Fourier Transform)**实现卷积。 简单来讲,它利用图的**拉普拉斯矩阵(Laplacian ma