ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

C语言刷题日记:嵌套循环的威力与三数排序的逻辑推演

C语言刷题日记:嵌套循环的威力与三数排序的逻辑推演

C语言刷题日记:嵌套循环的威力与三数排序的逻辑推演

今天没有学新语法,而是进入了疯狂的“综合刷题”模式。从简单的循环累加,到极具视觉冲击力的九九乘法表,再到经典的“三个数从大到小排序”。我发现,代码写得越多,对逻辑的掌控感就越强。

【第一部分:循环控制——continue 的妙用】

  1. 题目:求 1~100 中所有奇数的和(要求用 continue 跳过偶数)。
  2. 核心代码:
intsum=0;for(inti=1;i<=100;i++){if(i%2==0)continue;// 如果是偶数,直接跳过本次循环后面的累加,进入下一次elsesum+=i;}
  1. 我的理解:continue 就像游戏里的“跳过此关”。当遇到偶数时,它直接无视了下面的 sum += i;,让代码继续下一轮。这比写 if (i % 2 != 0) 少了一层嵌套,代码看起来更清爽。

【第二部分:高光时刻——嵌套循环打印 9*9 乘法表】

  1. 场景:在屏幕上输出 9*9 乘法口诀表。
  2. 代码实操:
inti,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");// 每一行打印完,记得换行}
  1. 我的理解:嵌套循环就像是“钟表的指针”。外层 n 走一步,内层 i 就要走满一整圈。这里内层的条件是 i <= n(比如第3行,列数就只有3列),完美契合了乘法表的阶梯形状。

【第三部分:经典逻辑题——三个数从大到小排序】

  1. 题目:输入三个整数,按从大到小输出。
  2. 硬核交换法:
inta,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);
  1. 我的踩坑感悟:交换两个变量,不能直接写 a = b; b = a;(这样 a 原本的值就丢了)。必须引入一个“临时工” i来中转。这个思维不仅在排序里有用,在以后搞单片机交换寄存器数据时也是基本功。
    【第四部分:刷题时的两个“小翻车”记录】
    今天有两道题虽然做出来了,但看了答案后发现自己思路绕远了:

数 9 的个数:我本来想用 while(n>0) 配合 n-- 把 1 到 100 全拆一遍,搞得很复杂。其实更简单的思路是:看个位是不是9(n % 10 == 9),看十位是不是9(n / 10 == 9),这就行了。写代码不能只用蛮力。

inti=0,n=100;//scanf_s("%d", n);while(n>0){if(n%10==9){i++;n--;}elsen--;

打印 1000~2000 年的闰年:我居然顺手用 scanf_s 接收输入去了,忘了这题是要在代码里用一个 for (year = 1000; year <= 2000; year++) 循环来打印。这说明我的“循环思维”还得继续巩固,不能一上来就想着输入。

intyear=0,n=0;//scanf_s("%d", &n);if((year%4==0&&year%100!=0)||year%400==0){printf("%d是闰年",n);}

【总结】
今天敲代码敲得很爽,从简单的条件判断过渡到了多层循环和数据交换。感觉自己对 for 和 while 的掌控力更强了。明天准备继续巩固这几道题,把今天优化后的思路重新手敲一遍!

返回列表