为什么这个运行结果是10,麻烦大佬佬讲清楚,蟹蟹

#include main(){ int k,j,m; for(k=6;k>=1;k--) {m=0;for(j=k;j<=4;j++)m=m+k*j;} printf("%d",m); }

循环嵌套的题

代码:

#include "stdio.h"

void main()
{ 
	int k,j,m; 
	//for循环 
	//初始:k为6 
	//循环条件:k>=-1
	//末尾循环体 k--
	int count = 0;
	for(k=6;k>=1;k--) 
	{
		//m 重置为 0
		m=0;
		//for循环 循环嵌套
		//初始:j为k的值 
		//循环条件:j<=4
		//末尾循环体 j++
		
		//第一次循环 k=6 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=6
		//j<=4 
		//不满足 不执行循环体内容 
		//则第一次 k=6 m=0 
		//k--

		//第二次循环 k=5 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=5
		//j<=4 
		//不满足 不执行循环体内容 
		//则第一次 k=5 m=0 
		//k--

		//第三次循环 k=4 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=4
		//j=4 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=0+4*4) m = 16 k = 4
		//执行j++
		//j=5 j<=4 不满足 不执行循环体内容 
		//k--

		//第四次循环 k=3 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=3
		//j=3 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=0+3*3) m = 9 k = 3
		//执行j++
		//j=4 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=9+3*4) m = 21 k = 3
		//执行j++
		//j=5 j<=4 不满足 不执行循环体内容 
		//k--
		
		//第五次循环 k=2 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=2
		//j=2 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=0+2*2) m = 4 k = 2
		//执行j++
		//j=3 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=4+2*3) m = 10 k = 2
		//执行j++
		//j=4 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=10+2*4) m = 18 k = 2
		//执行j++
		//j=5 j<=4 不满足 不执行循环体内容 
		//k--

		//第六次循环 k=1 k>=1 进入循环 
		//m=0 m重置为0
		//j=k j=1
		//j=1 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=0+1*1) m = 1 k = 1
		//执行j++
		//j=2 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=1+1*2) m = 3 k = 1
		//执行j++
		//j=3 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=3+1*3) m = 6 k = 1
		//执行j++
		//j=4 j<=4 满足条件 进入循环
		//执行 m=m+k*j (m=6+1*4) m = 10 k = 1
		//执行j++
		//j=5 j<=4 不满足 不执行循环体内容 
		//k--

		//第七次循环 k=0 k>=1 条件不满足 循环结束 
		for(j=k;j<=4;j++)
		{
			m=m+k*j;
		}
		count++;
		printf("第%d次,m=%d,k=%d \n",count,m,k); 
	} 
	printf("%d",m); 
}

代码效果:

 

若回答能解决题目问题,还请题主采纳此回答

第一个for循环里面,每次都会执行一遍m=0,所以,最终m的值只取决于最后一次循环k=1的情况,如下:

for(k=6;k>=1;k--) 
{
		m=0;
		for(j=k;j<=4;j++) //m的值最终是k=1的时候进行计算
			m=m+k*j;  // m= 1*1 + 1*2 + 1*3 + 1* 4 = 10
}