以下运行程序后的输出结果是#include<stdio.h>main(){int x=1,y=1;int m n;m=n=1,
#include<stdio.h>
main()
{
int x=1,y=1;
int m n;
m=n=1;
switch(m)
{
case 0:x=x*2;
case 1:{
swtich(n)
{case 1:x=x*2;
case 2:y=y*2;break;
case 3:x++;
}}
case 2:x++,y++;
case 3:x*=2;y*=2;break;
default:x++;y++;}
printf("%x=%d,y+%d",x,y);
}
新手求详解! 展开
首先指出程序中的三处错误,第一个是int m n中间应该有逗号,第二个是swtich拼写有错误,第三个是打印输入语句printf("x=%d,y=%d",x,y)有误。修正后程序的运行结果是:x=6,y=6。
代码运行结果如下图所示:
程序运行过程解析:
1、完成变量的赋值,其中有x=1,y=1,m=1,n=1。
2、执行第一个switch(m),因为m=1,所以进入case 1分支。在这个分支里,执行第二个switch(n),因为n=1,所以进入case 1分支,运行x=x*2=1*2=2。由于case 1没有break语句,因此继续执行case 2,y=y*2=1*2=2。
3、由于第一个case 1分支也没有break语句,继续执行case 2:x++,y++,执行后的结果是:x=3,y=3。
4、由于case 2分支也没有break语句,因此执行case 3:x*=2,y*=2,执行后的结果是:x=6,y=6。
5、跳出switch语句后打印,输出x和y此时的值,也就是x=6,y=6。
扩展资料:
多分支选择switch语句, 其格式形式为:
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
为了避免不断向下执行的情况,C语言提供了一种break语句,专用于跳出switch语句。
在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用{}括起来。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。
//printf("%x=%d,y+%d",x,y);// 这里应该写错了。
printf("x=%d,y=%d",x,y);
修改后结果为:x=6,y=6
同时注意代码规范。
步骤:
#include<stdio.h>
main()
{
int x=1,y=1;
int m n;
m=n=1;
switch(m)// m=1
{
case 0:x=x*2;
case 1:{ // 由于m=1,执行这里。
swtich(n) // n=1
{case 1:x=x*2; // 由于m=1,执行这里。由于x=1,所以x=x*2=2;
case 2:y=y*2;break;// 由于case 1没有break,执行这里。由于y=1,所以y=y*2=2;此处有break跳出swtich(n)
case 3:x++;
}}
case 2:x++,y++; // 由于case 1:没有break语句,执行这里,执行后:x=3,y=3
case 3:x*=2;y*=2;break;// 由于case 2:没有break语句,执行这里,执行后:x=6,y=6,此处有break,跳出switch(m)
default:x++;y++;}
printf("%x=%d,y+%d",x,y);
}
代码进行了修改:
#include<stdio.h>
void main()
{
int x=1,y=1;
int m,n;
m=n=1;
switch(m)
{
case 0:x=x*2;
case 1:
{
switch(n)
{
case 1:
x=x*2;
case 2:
y=y*2;
break;
case 3:
x++;
}
}
case 2:
x++,y++;
case 3:
x*=2;y*=2;
break;
default:
x++;y++;
}
//printf("%x=%d,y+%d",x,y);
printf("x=%d,y=%d",x,y);
}
程序运行过程是:
1.赋值为x=1,y=1,m=1,n=1。
2.第一个switch(m),m=1,进入case 1分支。在这个分支里,switch(n),n=1,进入case 1分支,x=x*2,此时x=2。由于case 1没有break,因此继续执行case 2,y=y*2,此时y=2。
3.由于第一个case 1分支也没有break,因此执行case 2,x++,y++,此时x=3,y=3。
4.由于case 2分支没有break,因此执行case 3,x*=2,y*=2,此时x=6,y=6。
5.跳出switch语句后打印,printf函数应该有三个参数,但是后面只给出了两个,在VC6.0环境下默认第三个为0,故打印为%x:以16进制打印6,%d:以10进制打印6,%d:以10进制打印默认的0。
程序里有一些问题,int m n中间应该有逗号,swtich拼写有错误,main应该有返回值类型void或int,并在最后写上return语句。