大连木制作:一道简单的C程序题,想请教一下大家

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 17:23:32
main()
{ int k=5,n=0;
while(k>0)
{switch(k)
{default:break;
case 1:n+=k;
case 2:
case 3:n+=k;
}
k--;
}
printf("%d\n",n);
}
题集中答案是7,我不明白为什么不是10。
case 2后面没有任何语句不是相当于他和case 3共用同一语句吗?所以1累加了三次,2累加了两次,3累加了一次,结果就是10。请问对不对?

main()
{ int k=5,n=0;
while(k>0)
{switch(k)
{default:break;
case 1:n+=k; //case最好加break;否则语句继续往下执行
case 2:
case 3:n+=k; //n+=k表示:n=n+k;
}
k--; //k=k-1;
}
printf("%d\n",n); //输出n
}

……
main()
{ int k=5,n=0;
while(k>0) /*k由5到1递减(配合下面的k--)*/
{switch(k)
{default:break; /*k不等于1、2或3则跳出*/
case 1:n+=k; /*k=1,累加到n,继续往下执行*/
case 2: /*k=2,往下执行,累加一次k*/
case 3:n+=k; /*k=3,累加到n,如果k=1,此句也会执行,故k=1时相当于累加了两次k*/
}
k--; /*递减*/
}
printf("%d\n",n); /*输出k*/
}

--------
最后运行结果:
7
------------
这里的case后面不加break很明显是出题人设的陷阱,就是看你是不是懂得如果不加break,语句将往下继续执行的道理。不要被骗了哦~~

难道是白送分?那我就不客气了~

what ?

结果是7