switch
switch语句:
switch(表达式){//switch(表达式) 表达式结果的类型只能是整数类型
case 常量表达式1://常量表达式 的结果只能是整数类型
break;
case 常量表达工2://常量表达式的结果不能一样
break;
case 常量表达式3:
..
break;
default:
break;
}
对于任意一个表达式在某次执行过程中总会得到
一个确切的值,然后switch语句会根据该值直接
跳到相同的case 值的地方开始执行,一直遇到
break结束switch语句defualt 相当于if语句中的else部分
, 可有可无只有当所有的case都不满足时才会匹配
作为入口执行(不一定是所有的case都不满足时才会执行)
case是开 break是关
注意:
default可以放在任意位置,但都必须是所有的case不满足时才会执行
default和case一样,只是作为入口,一旦进入就是顺序往下执行,直至break
case值只能是常量或者常量表达式
case值不能重复
case后面的语句可以用{} 也可以不用
关于{}问题(不建议省略):
switch() 后面不一定要有{}
如果只有一个case语句时 可以省略
if或者else if 或者else如果代码块只有一条语句时,{}可以省略
{}怎么放的问题
紧凑型
if(){
}
对齐型
if()
{
}
else if()
{
}
{}缩进问题
{
//代码缩进 {向右缩进
}
//} 向左编进
螺旋数组问题
输入数组维度n 输出对应的螺旋数组
n = 2
1 2
4 3
n = 3
1 2 3
8 9 4
7 6 5
n = 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
n = 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
代码:
#inclede<stdio.h>
int main(){
int n = 0;
printf("请输入数组长度:");
scanf("%d",&n);
int arr[n][n];
int i = 0,j = 0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
arr[i][j] = 0;
}
}
int num = 1;
int dir = 0;//0代表右移 1代表下移 2代表左移 3代表上移
i = 0;j = 0;
while(num<=n*n){
arr[i][j] = num++; //每改变一次位置,数值加1
switch(dir%4){
case 0:
++j;
//新位置(i,j)
if(j+1>=n||arr[i][j+1]!=0){ //大于边长或者下一个位置有数字的情况下,需要改变方向
dir++;//改变方向
}
break;
case 1:
++1;
//新位置(i,j)
if(i+1>=n||arr[i+1][j]!=0){
dir++;//改变方向
}
break;
case 2:
--j;
if(j==0||arr[i][j-1]!=0{ //左移时如果当前在第一列要改变方向,因此j==0
dir++;
}
break;
case 3:
--i;
if(arr[i-1][j]!=0{ //在上移时因为arr[0][0]已经有数字不可能再越界,因此只要有数字就需要改变方向
dir++;
}
break;
}
}
for(i=0;i<n;i++){
printf("%3d",arr[i][j]);
}
return;
}