【中学】计算时钟的夹角
钟面上的时针和分针之间的夹角总是在 0 ~180之间 ( 包括 0 和180 ) 。举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为180 ,在三点的时候为90 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。
输入:
每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | 12 0↵ | At 12:00 the angle is 0.0 degrees.↵ | 0 |
2 | 12 30↵ | At 12:30 the angle is 165.0 degrees.↵ | 0 |
3 | 6 0↵ | At 6:00 the angle is 180.0 degrees.↵ | 0 |
4 | 3 0↵ | At 3:00 the angle is 90.0 degrees.↵ | 0 |
5 | 3 3↵ | At 3:03 the angle is 73.5 degrees.↵ | 0 |
流程图
代码
#include <stdio.h>
#include <math.h>
int main()
{
int h,m;
float H,M,A;
scanf("%d %d",&h,&m);
H=(h+(float)m/60)*30;
M=m*6;
A=fabs(H-M);
if(A>180)
A=360-A;
printf("At %d:%.2d the angle is %.1f degrees.\n",h,m,A);
return 0;
}
课外思考
再看一看,想一想:是否可以不用if 语句,只使用 printf 函数来简化你的程序?
显然,只要使用三目运算符?:就可以替代if语句。
代码
#include <stdio.h>
#include <math.h>
int main()
{
float h,m,angle;
scanf("%f %f",&h,&m);
angle = fabs(h*30+m*0.5-m*6);
printf("At %.0f:%02.0f the angle is %.1f degrees.\n",h,m,angle>=180?360-angle:angle);
return 0;
}