C语言学习记录(12)航班信息查询

C语言学习记录

前言

一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流!

不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习,

大牛们对此文可以忽略!

学校OJ实验

航班信息查询

Problem Description
下面的表格给出了一个城市到另一个城市的每日航班信息:
起飞时间             抵达时间
8:00 a.m.            10:16 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小时制的时分表示),选择起飞时间与用户输入最接近的航班,显示出相应的起飞时间和抵达时间。
Input Description
输入一个用24小时制的时分表示的时间,以冒号分隔。

Output Description
输出起飞时间与输入时间最接近的航班的起飞时间和抵达时间,输出格式参考样例输出。

Sample Input
13:15

Sample Output
departure time: 12:47 p.m.
arriving time: 3:00 p.m.

Hint
把输入用从午夜开始的分钟数表示。将这个时间与表格里也用从午夜开始的分钟数表示的起飞时间相比。

解题:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

struct time{  //定义结构体,用于载入到达时间与起飞时间
    int hour;
    int minute;
    char type[7];
};


int TToM(struct time t);  //用于把小时转换为分钟


int main()
{
    int a, b, i=0;  //a与b用于接收输入时间


    struct time ts[]= {
        {8, 00, "a.m."}, {10, 16, "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, 8, "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."},


    };

    scanf("%d:%d", &a, &b);

    int result = a*60 + b;   //计算输入时间的分钟数
    int min = abs(result - TToM(ts[0]));  //分钟值相减的绝对值越小时间越接近
    int j=0;

    for(i=2; i<=14; i+=2)   //遍历结构体数组来找出最接近时间
    {
        if(min > abs(result - TToM(ts[i])))
        {
            min = abs(result - TToM(ts[i]));
            j = i;
        }
    }

    if(ts[j].minute<10)   //结构化输出
    {
        printf("departure time: %d:0%d %s\n", ts[j].hour, ts[j].minute, ts[j].type);
        if(ts[j+1].minute<10)
            printf("arriving time: %d:0%d %s\n", ts[j+1].hour, ts[j+1].minute, ts[j+1].type);
        else
            printf("arriving time: %d:%d %s\n", ts[j+1].hour, ts[j+1].minute, ts[j+1].type);
    }
    else
    {
        printf("departure time: %d:%d %s\n", ts[j].hour, ts[j].minute, ts[j].type);
         if(ts[j+1].minute<10)
            printf("arriving time: %d:0%d %s\n", ts[j+1].hour, ts[j+1].minute, ts[j+1].type);
        else
            printf("arriving time: %d:%d %s\n", ts[j+1].hour, ts[j+1].minute, ts[j+1].type);
    }
    return 0;
}

int TToM(struct time t){   //转换函数定义
    if(!strcmp(t.type,"a.m."))
    {
        return t.hour*60 + t.minute;
    }
    else
    {
        if(t.hour==12)
        {
            return t.hour*60 + t.minute;
        }
        else
            return t.hour*60 + t.minute + 12*60;
    }
}

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值