C语言中,有break 和没有break有什么不同?

#define pr(ar) printf("ar=%d",ar);
main()
{int j,a[]={1,3,5,7,9,11,13,15},*p=a=5;
for (j=3;j;j--)
switch(j)
{case 1:
case 2:pr(*p++);break;
case 3:pr(*(--p));
}
}
例题有break 和没有break有什么不同?

在C语言中,break一般用于循环语句或switch语句,例如
for(i=0;;i++) {
sum+=i;
if(i>10)break;
}
这里指的是当i大于10时,该循环就会结束。
而在switch语句中,break一般跟在case的语句之后,上题中若j=1或2,则都会执行pr(*p++);
,但由于有了break;便不会执行case 3中的pr(*(--p));,若没有break,j=1或2时既会执行pr(*p++);又会执行pr(*(--p));。这就是两者的不同。

参考资料:关于break的一些用法:http://www.dz3w.com/mcu/clanguage/2301.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-22
有break会执行完当前case就跳出switch,这个题就是只执行case2,没有break会依次执行完后面的case,这个题中如果没有那个break就会执行case2和case3本回答被提问者采纳
第2个回答  2011-02-23
x=1,所以执行case 1,然而case 1 这条语句没有break,所以switch (x)在执行了case 1之后将继续往下依次执行case语句,直到碰到break就跳出switch 循环。

对于“a的自加是先执行后在自加,当此程序a自加的时候没有执行其他语句啊?????? ” 则是你没看到程序中的语句a++,b++它自加完了以后把值任然是赋值给a,b本身的,而不是赋值给其他变量例如c=a++;z=b++。如果是这样赋值给别的变量的话那么就很明确了c,z的值将和课本上说得一样都是自加以前的值 。也就是说这个程序当中最后printf输出的是a,b的值,但是a,b在自加过程中值都变化了,就是说相当于语句a=a++,b=b++.
我将你的程序进行了更改,你将两个程序都运行下然后再对照着看一下就明白为什么a,b的值最后是2和1了,程序如下
#include <stdio.h>
main()
{
int x=1,y=0,a=0,b=0,c=0,z=0;
switch (x)
{case 1:
switch(y)
{
case 0:c=a++;break;
case 1:b++;break;
}
case 2: c=a++,z=b++;break;
case 3:a++,b++;
}
printf("c=%d,z=%d\n",c,z) ;
}

对于 ++i 和i++ 有什么区别?
简单而言: ++i在i 存储的值上增加一并向使用它的表达式“返回” 新的, 增加后的值; 而i++ 对i增加一, 但返回原来的是未增加的值。
第3个回答  2011-02-22
有break就跳转到CASE 3,没有break就在CASE 2一直下去
第4个回答  2011-02-22
执行了case 1或2后,没有break,就会继续执行case 3

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网