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;
}
}