C语言刷题日记:嵌套循环的威力与三数排序的逻辑推演
今天没有学新语法,而是进入了疯狂的“综合刷题”模式。从简单的循环累加,到极具视觉冲击力的九九乘法表,再到经典的“三个数从大到小排序”。我发现,代码写得越多,对逻辑的掌控感就越强。
【第一部分:循环控制——continue 的妙用】
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0)
continue; // 如果是偶数,直接跳过本次循环后面的累加,进入下一次
else
sum += i;
}
【第二部分:高光时刻——嵌套循环打印 9*9 乘法表】
int i, n, m;
for (n = 1; n <= 9; n++) { // 外层循环控制行
for (i = 1; i <= n; i++) { // 内层循环控制列
m = i * n;
printf("%d * %d = %d ", i, n, m);
}
printf("\\n"); // 每一行打印完,记得换行
}
【第三部分:经典逻辑题——三个数从大到小排序】
int a, b, c, i;
scanf_s("%d %d %d", &a, &b, &c);
// 1. 确保 a 是最大的
if (a < b) {
i = a; a = b; b = i;
}
if (a < c) {
i = a; a = c; c = i;
}
// 2. 此时 a 已经是老大了,只需要再让 b 和 c 比一下
if (b < c) {
i = b; b = c; c = i;
}
printf("%d %d %d\\n", a, b, c);
【第四部分:刷题时的两个“小翻车”记录】
今天有两道题虽然做出来了,但看了答案后发现自己思路绕远了:
数 9 的个数:我本来想用 while(n>0) 配合 n– 把 1 到 100 全拆一遍,搞得很复杂。其实更简单的思路是:看个位是不是9(n % 10 == 9),看十位是不是9(n / 10 == 9),这就行了。写代码不能只用蛮力。
int i = 0, n =100;
//scanf_s("%d", n);
while(n>0) {
if (n % 10 == 9) {
i++;
n—;
}
else
n—;
打印 1000~2000 年的闰年:我居然顺手用 scanf_s 接收输入去了,忘了这题是要在代码里用一个 for (year = 1000; year <= 2000; year++) 循环来打印。这说明我的“循环思维”还得继续巩固,不能一上来就想着输入。
int year = 0, n = 0;
//scanf_s("%d", &n);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("%d是闰年", n);
}
【总结】
今天敲代码敲得很爽,从简单的条件判断过渡到了多层循环和数据交换。感觉自己对 for 和 while 的掌控力更强了。明天准备继续巩固这几道题,把今天优化后的思路重新手敲一遍!




