看到一个for循环和if嵌套的问题
是个入门的好问题,挺有意思的
题干如下:
#include<stdio.h>
int main()
{
int a, b;//问为何循环输出结果是8,22
for (a = 1, b = 1; a <= 100; a++)
{
if (b > 20)
break;
if (b % 3 == 1)
{
b += 3;
continue;
}
b = 5;//这是干啥的就不知道了
}
printf("%d\n%d", a, b);
return 0;
}
也是刚看书看过for循环这个章节,所以看到这个问题就很感兴趣了
for循环的语法
for(表达式1;表达式2;表达式3)
划重点:表达式2:判断条件,若条件为真则执行语句中的语句块,语句块结束后执行表达式3,条件为假则结束循环,执行for语句下面的一个语句;
if的语法
if语法
if(表达式)
语句块
说干就干,撸码解题:
我们初学C语言遇到循环嵌套的这种题,不管是if或while或switch或for,一定不要乱,按步解题来理解最重要;
先解第一个for循环,变量a=1,b=1已定义,参照循环判断条件a<=100判断为真,进入语句块,也就是下一个for
第二个if的表达式b>20,b值为最近的b值,所以b=1
第三个if的表达式b%3==1,b值为最近的b值,所以b=1 1%3==1为真,执行语句块 b+=3 即1+=3,b=4
此时一个循环结束,回到第一个for的表达式3,a++=1++=2
第二次循环:此时a的值为上一循环a++的值 a=2,b值为上一个循环b+=3的值 b=4;
如此循环,直至第八次循环开始,a值=8时,b=22,满足第一个if表达式,执行break;跳出循环;输出结果8,22
#include<stdio.h>
int main()
{
int a, b;
for (a = 1, b = 1; a <= 100; a++)
//第一次循环:a=1 b=1 a<=100,Ture,a++ =2
//第二次循环:a=2 b=4 a<=100,Ture,a++ =3
//第三次循环:a=3 b=7 a<=100,Ture,a++ =4
//第四次循环:a=4 b=10 a<=100,Ture,a++ =5
//第五次循环:a=5 b=13 a<=100,Ture,a++ =6
//第六次循环:a=6 b=16 a<=100,Ture,a++ =7
//第七次循环:a=7 b=19 a<=100,Ture,a++ =8
//第八次循环:a=8 b=22 a<=100,Ture,a++ =9 未进入第九次循环,故9未赋值给a,a输出结果为8
{
if (b > 20)
//第一次循环b=1,b<20,False
//第八次循环b=22,b>20,Ture,跳出循环
break;
if (b % 3 == 1)
//第一次循环 b=1,(1%3=1)==1,Ture
//第二次循环 b=4,(4%3=1)==1,Ture
//第三次循环 b=7,(7%3=1)==1,Ture
{
b += 3;
//第一次循环b+=3 b=4
//第二次循环b+=3 b=7
//第三次循环b+=3 b=10
//第四次循环b+=3 b=13
//第五次循环b+=3 b=16
//第六次循环b+=3 b=19
//第七次循环b+=3 b=22
continue;
}
b = 5;//这是干啥的就不知道了
}
printf("%d\n%d", a, b);
return 0;
}
每天进步一点点,坚持几年咱也能搞个桌面应用或者小游戏啥的玩一玩