为什么这个算出来是 8,-2,有大佬佬讲讲细节迈

#include main() { int i,b,k=0; for(i=1;i<=5;i++) { b=i%2;while(b-->=0)k++;} printf("%d,%d",k,b); }

b= 1%2 ? b=1; 循环 b>=0? k++ b-- b=0 k=1;循环 b>=0? b-- b=-1 k=2 循环 b>=0? b=-1不符合,b-- b=-2;

b= 2%2 ? b=0;  b>=0? k++ b-- b=-1  k=3; 循环 b>=0? b=-1不符合,b-- b=-2;

b=3%2 k+=2; k=5

b=4%2 k+=1; k=6

b=5%2 k+=2; k=8

 

一些解题思路我写在了代码注释里,题主可以看一下,虽然题目已经被采纳了,但是这个点确实很多人有纠结写出来好一点

#include "stdio.h"

void main() 
{ 
	int i,b,k=0; 
	for(i=1;i<=5;i++) 
	{ 
		//i%2 i的值与2取余 若i为1 则式子为 b=1%2,则b为1
		b=i%2;
		printf("第%d次,k=%d,b=%d \n",i,k,b);
		
		//主要是对于b--的定义
		//在计算机中,有--b和b--
		//b--的顺序是 先做判断 再做b--
		//--b的顺序是 先b-- 再做判断
		//在这里就是 先用b与0去做判断 ,做完判断后在执行--
		//这个--不管怎样都要执行
		
		//句式分解
		//1.whiile(b>=0)
		//2.b--
		//3.根据判断是否进行程序体
		//4.若b>=0,则k++
		//5.若b<0,则跳出
		
		//案例解析
		//第一次循环 i = 1  b通过取余后为1
		//b = 1 进行while 1>=0 ;执行b--; 满足条件k++ 当前b=0,k=1
		//b = 0 进行while 0>=0; 执行b--; 满足条件k++ 当前b=-1,k=2
		//b = -1 进行while -1>=0; 执行b--;不满足条件 判断为false跳出 当前b=-2,k=2
		//我例举一个例子 之后举一反三
		while(b-->=0)
		{
			k++;
		}

		printf("第%d次,k=%d,b=%d \n",i,k,b); 
	}
}

效果截图

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632