2021-04-26

看到一个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;
}

每天进步一点点,坚持几年咱也能搞个桌面应用或者小游戏啥的玩一玩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Victus@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值