任务
如果我给你一个由年月日组成的日期,再给你一个数字 X,你能否准确地让程序输出 X 天后的日期呢?
例如
1 2 3
| 1989 11 20 20 1989 12 10
|
数据中给出了 1989 年 11 月 20 日这个日期,然后问你 20 天后的日期是多少,你的程序应该输出 1989 年 12 月 10 日。特别需要注意的是,在这个任务中,你需要考虑到闰年中 2 月份的特殊性,闰年的 2 月有 29 天。
编码
思路
- 首先需要有一个循环,循环每一次,让计算机帮我们计算一次下一天的日期。
- 每次在计算下一天日期的过程中,先让日子加1,判断是否跨月,如果跨过了一个月份,就让日子从1开始,让月份加1,再判断是否跨年,如果跨年了,就让月份从1开始,年份加1。
- 注意2月份的月份天数的计算方法。
闰年的判断方法,满足其一即可:能被4整除,但不能被100整除;能被400整除。因此代码逻辑应该是这样 1
| if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
|
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <stdio.h>
int main() { int y, m, d, X; scanf("%d%d%d", &y, &m, &d); scanf("%d", &X); for (int i = 0; i < X; i++) { d += 1; switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:{ if (d > 31) d = 1, m += 1; if (m == 13) m = 1, y += 1; }; break; case 4: case 6: case 9: case 11: { if (d > 30) d = 1, m += 1; } break; case 2: { if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { if (d > 29) d = 1, m += 1; } else if (d > 28) { d = 1, m += 1; } } break; } } printf("%d %d %d\n", y, m, d); return 0; }
|
思考题
1,打印乘法表
使用循环和条件判断,打印一个格式优美的 66 乘法表
要求 1:输出内容及样式参照下面给出的样例
要求 2:每两列之间用 \t 字符进行分隔,行尾无多余 \t 字符
例子
1 2 3 4 5 6
| 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
|
实现
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h> int main() { for (int i = 1; i <= 6; i++) { for (int j = 1; j <= i; j++) { j == 1 || printf("\t"); printf("%d * %d = %d", j, i, i * j); } printf("\n"); } return 0; }
|