钟的故事(请用c、c++编写)前面如图输入样例:(clock.in)9:00:0018:00:0012:00:00输出样例:90'00'00'180'00'00"0'00'00"我的程序#include#include#includechar a[9];char hh[3][3];int h[3];int t[3];void cl(){int n1,
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 21:38:35
钟的故事(请用c、c++编写)前面如图输入样例:(clock.in)9:00:0018:00:0012:00:00输出样例:90'00'00'180'00'00"0'00'00"我的程序#include#include#includechar a[9];char hh[3][3];int h[3];int t[3];void cl(){int n1,
钟的故事(请用c、c++编写)
前面如图
输入样例:(clock.in)
9:00:00
18:00:00
12:00:00
输出样例:
90'00'00'
180'00'00"
0'00'00"
我的程序
#include
#include
#include
char a[9];
char hh[3][3];
int h[3];
int t[3];
void cl()
{
int n1,i,j=0,k=0;
n1=sizeof(a);
for(i=0;i
钟的故事(请用c、c++编写)前面如图输入样例:(clock.in)9:00:0018:00:0012:00:00输出样例:90'00'00'180'00'00"0'00'00"我的程序#include#include#includechar a[9];char hh[3][3];int h[3];int t[3];void cl(){int n1,
//理想的钟表应该是无限细的,这就是这个题目出的关键了!
//所以转换时,不能单纯的hour*30' minute*6' second*6" 这样根本就不对
//就算不基于“理想的钟表”,实际钟表的时针也不仅仅转hour*30' ,
//因为当分针有走动到一定位置的时候,时针要走一步,而不是整点才走
//下面的程序关键部分都做了说明
//其中用到了结构体 不知道学过没?
//仅作为参考
#include
#include
#include
//用以记录标准格式 ( 00:00:00) 时间
struct TIME {
int hour;
int minute;
int second;
};
// 与上相同了 可以typedef stuct TIME ANGLETM; 或者 define 来避免重复
// 用以记录角度格式( 00'00'00'')时间
struct ANGLETM {
int hour; //表示度数
int minute;
int second;
};
//下面的函数:转换标准格式时间TIME到角度格式时间ANGLETM
ANGLETM time_to_angle(TIME tm)
{
// 注意下面的处理,基于“理想的钟表应该是无限细的”,
//所以计算角度时,分钟的角度要原分钟加上由秒数转换来0.xx的分钟数进行
//换算,方符合题意,否则分针不是无限细的
//时针的角度计算-同理
dounle secondAgl= tm.second*6.0; //每1秒是6度,秒针顺时针距离0点的角度,此可略去
dounle minuteAgl = (tm.minute+tm.second/60.0)*6; // 每分是6度,分针顺时针距离0点的角度
dounle hourAgl = (tm.hour+tm.minute/60.0+tm.second/3600.0)*30; // 每小时30度,
//时针顺时针距离0点的角度
double diiff; // 时针与分针的夹角
if (hourAgl - minuteAgl>180) { //处理夹角大于180度的情况
diiff = 360 - (hourAgl - minuteAgl);
} else {
diiff = hourAgl - minuteAgl;
}
//注意:上面的夹角的处理以度数为单位,如,diff=1.11(度) 以配合下面计算的理解
//可以配合1.111小时如何换算为时分秒来理解下面的代码是怎么转换角度的
ANGLETM aglTM;
aglTM.hour = (int)(diiff ); //取整数部分的度数
aglTM.minute= (int)((diiff - aglTM.hour)*60); //自己理解吧 没什么说的
aglTM.second = (int)(((diiff - aglTM.hour)*60-aglTM.minute)*60);
return aglTM;
}
//函数功能:字符串转换到标准时间,strTm的格式为“00:00:00”的字符串
// TIME str_to_time(char* strTm)
{
TIME tm;
//下面转换处理,只做参考,主要看输入文件的格式,自己斟酌了
tm.hour = (strTm[0]*10+str[1])%12; //转换为12小时制,钟表为12小时
tm.minute = str[3]*10+str[4];
tm.second = str[6]*10+str[7];
return tm;
}
int main()
{
//一些声明及初始化处理省略了 自己看着办吧
FILE* fpIN =fopen("clock.in","r");
FILE* fpOUT =fopen("clock.in","w");
while (( !feof(fpIN) ) {
//如何读时间,看你的输入文件的格式以及以什么作为结束符号
//猜测你上面的意思是每次读一个时间
//这里的做法是读一个时间处理一个,不需要全部读(作业嘛,对就行,不管性能)
char str[10];
fgets(str,9,fpIN); //获取一行,也就是一个字符串时间
TIME tm = str_to_time(str);
ANGLETM aglTM = time_to_angle(tm);
//下面做输出 (或者屏幕,或者到文件)
sprintf(str,"%d\'%02d\'%02d\"\n",h,m,s);
fputs(str,fpOUT); //到文件
// 到屏幕
printf("%d\'%02d\'%02d\"",aglTM.hour,aglTM.minute,aglTM.second );
} //end_while
fclose(fpIN);
fclose(fpOUT);
return 0;
}