问题1:打印乘法表
使用循环和条件判断,打印一个格式优美的 66 乘法表
要求 1:输出内容及样式参照下面给出的样例
要求 2:每两列之间用 \t 字符进行分隔,行尾无多余 \t 字符
实现代码
#include <stdio.h>
int main() {
for(int i=1;i<=6;i++){
for(int k=1;k<=i;k++){
k==1|| printf("\t");
printf("%d*%d=%d",k,i,k*i);
}
printf("\n");
}
}
解决方案:
当 j==1 成立时,也就是第一列的时候,右边的 printf(“\t”) 代码就根本不会执行。这也就意味着,第一列前面不会多输出一个 \t 字符。而其他的情况呢,均会执行 printf(“\t”) 代码,这也就实现了题目中的要求。
问题2:“日期计算器”程序
给你一个由年月日组成的日期,再给你一个数字 X,你能否准确地让程序输出 X 天后的日期呢?
例如下面这个数据:
1989 11 20
20
1989 12 10
实现代码
#include <stdio.h>
int main() {
int y, m, d, X; // 定义存储 年月日 和 X 的变量
scanf("%d%d%d", &y, &m, &d); // 读入年月日
if (!((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)&&m==2&&d==29)
printf("Error!");// 非闰年不能输入2月29日
else {
scanf("%d", &X); // 读入 X 值
for (int i = 0; i < X; i++) { // 循环 X 次,每次向后推一天
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;
}
解决方案:
闰年的规则,年份满足以下其中一条即为闰年:
- 能被 4 整除,但不能被 100 整除;
- 能被 400 整除。