我目前正在使用本书调用C语言编程现代方法第2版'请帮助解决这个问题,基本上它是关于" If-Else,Switch"章节。 第5章 - 如果其他,切换,编程项目Qn 8
下表显示了从一个城市到另一个城市的每日航班。
Departure time Arrival time
8:00 a.m. 10:!6 a.m.
9.43 a.m. 11:52 a.m.
11:19 a.m. 1:31 p.m.
12:47 p.m. 3:00 p.m.
2:00 p.m. 4:08 p.m.
3:45 p.m. 5:55 p.m.
7:00 p.m. 9:20 p.m.
9:45 p.m. 11:58 p.m.
编写一个程序,要求用户输入时间(以小时和分钟表示,使用24小时制)。然后程序显示出发时间最接近用户输入的航班的出发和到达时间:
**Enter a 24-hour time: 13:15
Closest departure time is 12:47 p.m., arriving at 3:00 p.m.**
提示:将输入转换为自午夜以来以分钟为单位的时间,并将其与出发时间进行比较,也以午夜以分钟为单位表示,例如,
13:15
自午夜起13 x 60 + 15 = 795
分钟,这更接近14:47
。 (自午夜起767分钟),而不是其他任何出发时间。*
我似乎无法获得这个问题的理想代码。我不知道我怎么能比较"哪个时间更近"时间只是使用If-Else或Switch。我也没有从函数或数组中得到任何其他类型的答案。请给我指导,因为我一直试图解决这个问题。
请提供代码,以便我了解您的工作方式。 谢谢。
只是要详细说明:基本上我如何比较哪个是更接近的出发时间。
答案 0 :(得分:0)
在第一个出发时间之前或最后一个出发时间之后的一段时间内,即使是像你这样的初学者也应该很容易。另一方面,您需要计算出发时间之间的中间位置,并将输入的时间与最近的出发时间进行比较。
例如,我们假设两个出发时间11:19 a.m.
和12:47 p.m.
这些时间之间的中间位置为12:03 p.m.
如果输入的时间早于(小于)下午12:03,那么最近的出发时间是上午11:19,如果输入的时间是晚上12:03之后(大于),则下午12:47的出发时间更近。
我的建议是你制作一个包含出发和到达时间的结构,并根据指定的出发和到达时间制作一系列结构。然后创建另一个数组,其中包含有关中间时间的信息。像
这样的东西struct times
{
char *departure;
char *arrival;
} times[] = {
{ "8:00", "10:16" },
{ "9:43", "11:52" },
.
.
.
};
char *inbetween_times[] = {
"8:51", // Time between the first and second departure
"10:31", // Time between the second and third departure
.
.
.
};
使用上述系统和上述数据,8:51之前的时间最接近第一次出发,8:51到10:31之间的时间最接近第二次,结束时等等。
我不知道这是最好的方式,而且它肯定不是唯一的方式,它只是首先突然出现在我脑海中的方式。
答案 1 :(得分:0)
常见的编程shindig是比较两个数字之间的差异。
#include <math.h>
if(abs(value1 - value2) < somethingYouCompareItTo)
这是两个数字之间的(数学)绝对差异。即,它消除了负值。在for循环中对其中的几个进行比较以将其与数据结构中的所有值进行比较,并且您自己拥有findClosestTime()
函数。
每个人都从头开始,祝你好运。
答案 2 :(得分:0)
我处理将小时数转换为分钟数的方法是:
#include <stdio.h>int main() {
int in, out, t;
scanf("%d %d", &in, &out);
printf("Entry\n%02d:%02d\nLeave\n%02d:%02d\n", in/100, in%100, out/100, out%100);
if (out-in>=0)t = ((out/100-in/100)*60+(out%100-in%100));
else t = ((in/100-out/100)*60+(in%100-out%100));
printf("Duration(min)\n%d\n", t); return 0;
}