Switch结构的语法如下:
```
switch(expression) {
case value1 :
//执行操作1
break;
case value2 :
//执行操作2
break;
case value3 :
//执行操作3
break;
...
default :
//当value与所有case的值都不一致时执行的操作
}
```
Switch结构包含了一个表达式和一个或多个case语句,expression表示需要进行比较的值,一旦找到与其中一个case值相等的值,程序就会执行相应的操作。如果没有与任何一个case值匹配的值,则会执行default语句块。
需要注意的是,每一个case块后面必须使用break关键字来结束该块,否则程序会继续执行下一个case块。如果不想在case块结束后执行任何操作,可以在最后一个case块中使用break,也可以将所有的case块集合在一起,共用同一个代码块。
以下是一个简单的Switch结构示例:
```
#include <stdio.h>
int main () {
//定义一个变量作为表达式
int grade = 'B';
switch(grade) {
case 'A' :
printf("优秀!\n" );
break;
case 'B' :
printf("良好\n" );
break;
case 'C' :
printf("及格\n" );
break;
case 'D' :
printf("不及格\n" );
break;
default :
printf("成绩输入错误\n" );
}
return 0;
}
```
在此示例中,定义了一个变量grade作为Switch语句中的表达式,程序按照grade值的不同执行不同的操作,最终输出"良好"。
(1) 上述程序若要输出 yyx,a、b、c的初值应为:
a = 2, b = 1, c = 0。
(2) 上述程序若要输出 xy, a、 b、c的初值应为:
a = 3, b = 2, c = 0。
(1) 上述程序中,当 b = 1 时,根据 switch 语句的逻辑:
如果 c + i > 5,则输出 "y",否则输出 "x"。
因为 a = 2,所以循环执行两次,即 i = 0 和 i = 1。
当 i = 0 时,c + i = 0 + 0 = 0,满足条件 c + i > 5,输出 "y";
当 i = 1 时,c + i = 0 + 1 = 1,不满足条件 c + i > 5,输出 "x"。
因此,最终输出结果为 "yyx"。
如果 c + i < 5,则输出 "y",否则输出 "x"。
因为 a = 3,所以循环执行三次,即 i = 0、i = 1 和 i = 2。
当 i = 0 时,c + i = 0 + 0 = 0,满足条件 c + i < 5,输出 "y";
当 i = 1 时,c + i = 0 + 1 = 1,不满足条件 c + i < 5,输出 "x";
当 i = 2 时,c + i = 0 + 2 = 2,满足条件 c + i < 5,输出 "y"。
因此,最终输出结果为 "xy"。
(2) 上述程序中,当 b = 2 时,根据 switch 语句的逻辑:
(1) 上述程序若要输出 yyx,a、b、c的初值应为:
a = 2, b = 1, c = 0。
(2) 上述程序若要输出 xy, a、 b、c的初值应为:
a = 3, b = 2, c = 0。
(1) 上述程序中,当 b = 1 时,根据 switch 语句的逻辑:
如果 c + i > 5,则输出 "y",否则输出 "x"。
因为 a = 2,所以循环执行两次,即 i = 0 和 i = 1。
当 i = 0 时,c + i = 0 + 0 = 0,满足条件 c + i > 5,输出 "y";
当 i = 1 时,c + i = 0 + 1 = 1,不满足条件 c + i > 5,输出 "x"。
因此,最终输出结果为 "yyx"。
如果 c + i < 5,则输出 "y",否则输出 "x"。
因为 a = 3,所以循环执行三次,即 i = 0、i = 1 和 i = 2。
当 i = 0 时,c + i = 0 + 0 = 0,满足条件 c + i < 5,输出 "y";
当 i = 1 时,c + i = 0 + 1 = 1,不满足条件 c + i < 5,输出 "x";
当 i = 2 时,c + i = 0 + 2 = 2,满足条件 c + i < 5,输出 "y"。
因此,最终输出结果为 "xy"。
(2) 上述程序中,当 b = 2 时,根据 switch 语句的逻辑:
// main函数是程序的入口点
void main()
(
inti, a, b, c;
// 提示用户输入a,b,c的值
printf("a b c: ");
// 读取用户输入的a,b,c的值
scanf("%d%d%d",&a, &b, &c);
// 循环a次,每次执行case分支中的语句
for(i=0; i<a; i++)
switch(b)
(
// 如果b等于1,并且c+i大于5,输出"y",否则输出"x"
case 1: if (c+i>5) printf("y");
else printf("x");
break;
// 如果b等于2,并且c+i小于5,输出"y",否则输出"x"
case 2:if(c+i<5) printf("y");
else printf("x");
break;
// 如果b既不等于1也不等于2,则输出"x"
default: printf("x");
)
)
再观察两个case,一个先x再y,一个先y再x。于是可以推导了。
“yyx”对应于323
“xy”对应于215