返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 6, 主题|小节 3
进行中

6.2 时间周期魔法

2025年9月22日
课 进展
0% 完成

“小朋友们,” 我拿起粉笔,”在编程中,我们经常需要处理时间相关的计算。比如计算某个时刻过了几小时后是几点,或者某一天是星期几。”

[图片:展示时钟和日历的图示,标注时间周期概念]

6.2.1 基本时间常量

// 定义时间相关常量
const int SECONDS_PER_MINUTE = 60;
const int MINUTES_PER_HOUR = 60;
const int HOURS_PER_DAY = 24;
const int DAYS_PER_WEEK = 7;
const int DAYS_PER_YEAR = 365;

// 计算一天有多少秒
int seconds_per_day = SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY;
printf("%dn", seconds_per_day);  // 输出:86400

[图片:时间单位换算关系图]

🔬 实验一:时间计算
题目:计算一周总共有多少分钟?

const int MINUTES_PER_HOUR = 60;
const int HOURS_PER_DAY = 24;
const int DAYS_PER_WEEK = 7;

// 计算一周的总分钟数
int minutes_per_week = MINUTES_PER_HOUR * HOURS_PER_DAY * DAYS_PER_WEEK;
printf("%dn", minutes_per_week);  // 输出:10080

练习题:

  1. 选择题:一天有多少秒? A. 84600秒 B. 86400秒 C. 86000秒 D. 85400秒

正确答案:B 解析:一天有24小时,一小时有60分钟,一分钟有60秒,所以24×60×60=86400秒。

  1. 判断题:一分钟永远等于60秒。

正确答案:√ 解析:在计算机编程中,我们用常量SECONDS_PER_MINUTE=60来表示这个固定的时间单位。

6.2.2 时刻和星期计算

[图片:展示时钟和日期的循环特性]

// 时刻计算
const int CURRENT_HOUR = 14;    // 当前是14点
const int HOURS_LATER = 20;     // 20小时后

// 计算新的时刻
int new_hour = (CURRENT_HOUR + HOURS_LATER) % HOURS_PER_DAY;
printf("%dn", new_hour);  // 输出:10

// 星期计算
const int CURRENT_DAY = 3;      // 周三
const int DAYS_LATER = 10;      // 10天后
const int DAYS_PER_WEEK = 7;    // 定义每周的天数

// 计算未来某天是星期几
// CURRENT_DAY: 当前是星期几(1-7,1代表星期一,7代表星期日)
// DAYS_LATER: 往后推的天数
int future_day = ((CURRENT_DAY - 1 + DAYS_LATER) % DAYS_PER_WEEK) + 1;
printf("%dn", future_day);  // 如果CURRENT_DAY=3(星期三),DAYS_LATER=4,则输出7(星期日)

[图片:时刻和星期计算的示意图]

🔬 实验二:复杂时间问题
题目:现在是周二下午3点,求100小时后是星期几,几点?

const int CURRENT_DAY = 2;      // 周二
const int CURRENT_HOUR = 15;    // 15点
const int HOURS_PASSED = 100;   // 经过100小时
const int DAYS_PER_WEEK = 7;    // 定义每周的天数

// 计算经过的天数和剩余小时数
int days_passed = HOURS_PASSED / HOURS_PER_DAY;  // 整除得到天数
int remaining_hours = HOURS_PASSED % HOURS_PER_DAY;  // 求模得到剩余小时

// 计算经过特定天数后是星期几
// current_day: 当前是星期几(1-7,1代表星期一,7代表星期日)
// days_passed: 经过的天数
int new_day = ((current_day - 1 + days_passed) % DAYS_PER_WEEK) + 1;
// 如果current_day=2(星期二),days_passed=3,则new_day=5(星期五)

// 计算新的小时
int new_hour = (CURRENT_HOUR + remaining_hours) % HOURS_PER_DAY;

printf("新的时刻:星期%d,%d点n", new_day, new_hour);

练习题:

  1. 选择题:如果现在是14点,那么27小时后是几点? A. 15点 B. 16点 C. 17点 D. 18点

正确答案:C 解析:(14 + 27) % 24 = 41 % 24 = 17,所以是17点。

  1. 判断题:计算若干小时后的时刻时,应该用当前小时数加上经过的小时数。

正确答案:× 解析:需要用当前小时数加上经过的小时数,然后对24取模,才能得到正确的时刻