时针与分针的夹角的易错点

分针每分钟转360/60=6度;

分针每秒钟转6/60=0.1度;

时针每小时转360/12=30度;

时针每分钟30/60=0.5度;

时针每秒钟转0.5/60=1/120度;

所以h时m分s秒时针与0刻度线(12时的刻度线)的夹角:30h+0.5m+1/120*s;

h时m分s秒分针与0刻度线的夹角:6m+0.1s;

时针与分针夹角a:

a=|6m+0.1-30h-0.5m-1/120s|;

习惯上,超过180度的角一般用小于180度的角表示

注意h%12;if(m>60){ h=(h+1)%12;m=m%60;}


以下为几种使用C语言计算时针分针之间夹角的方法及代码: ### 方法一:考虑、秒输入 该方法接收多组包含、秒的数据,计算并输出每组数据对应的时针分针夹角的整数部。 ```c #include<stdio.h> #include<math.h> int main() { double s,a,b,c; int n; scanf("%d",&n); while(n--) { scanf("%lf%lf%lf",&a,&b,&c); if(a>12) { a=a-12; // 把24进制化为12进制 } // 因为顺时针来看分针可能走在时针前面所以求它们差的绝对值 s=fabs(a*30-(c/60.0+b)*6+(c/60.0+b)*0.5); // a*30为从12到此时针所指的数的夹角大小, // (c/60.0+b)*0.5为计算时针所指到输入的小数之间的度数 // (c/60.0+b)*6为当前分针和秒针一共走的钟数乘以分针走一小格的度数, // 即为从12开始到目前分针所指为多少度 if(s>180) s=360-s; printf("%d\n",(int)s); } return 0; } ``` 此代码中,首先读取数据组数`n`,接着循环`n`次,每次读取、秒数据。将24小制转换为12小制,计算时针分针夹角,若夹角大于180度,则用360度减去该夹角,最后输出夹角的整数部[^2]。 ### 方法二:另一种考虑、秒输入的实现 该方法同样接收多组包含、秒的数据,计算并输出夹角的整数部。 ```c #include<stdio.h> int main() { int n; scanf("%d", &n); float h, m, s,h1, m1, ans; for (; n > 0; n--) { scanf("%f %f %f", &h, &m, &s); if (h > 12) h -= 12; h1 = h * 360 / 12 + m * 360 / 12 / 60 + s * 360 / 12 / 60 / 60; m1 = m * 360 / 60 + s * 360 / 60 / 60; ans = h1 > m1 ? h1 - m1 : m1 - h1; if (ans > 180) ans = 360 - ans; printf("%d\n", (int)ans); } return 0; } ``` 此代码先读取数据组数`n`,循环`n`次读取、秒数据,将24小制转换为12小制,别计算时针分针相对于12位置的角度,求出夹角,若夹角大于180度则用360度减去该夹角,最后输出夹角的整数部[^5]。 ### 方法三:按特定格式输入小钟 该方法要求输入格式为`小h钟m`,对输入进行有效性判断,计算并输出时针分针的最小夹角,精确到小数后一位。 ```c #include <stdio.h> #include <math.h> int main() { int h, m; char c1, c2; while (1) { printf("Please input time(e.g: 5h43m)\n"); if (scanf("%d%c%d%c", &h, &c1, &m, &c2) == 4 && c1 == 'h' && c2 == 'm' && h >= 0 && h <= 12 && m >= 0 && m <= 60) { break; } while (getchar() != '\n'); // 清除错误输入 } double angle = fabs(h * 30 + m * 0.5 - m * 6); if (angle > 180) { angle = 360 - angle; } printf("At %d:%02d the angle is %.1f degrees.\n", h, m, angle); return 0; } ``` 此代码先提示用户按指定格式输入间,对输入进行有效性判断,若输入不符合要求则重新输入。计算时针分针夹角,若夹角大于180度则用360度减去该夹角,最后按指定格式输出间和夹角,精确到小数后一位[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值