day3
switch用法
实例:电梯程序
1 #include <stdio.h> 2 int main(void) 3 { 4 int val; 5 printf("请输入您要进入的楼层:"); 6 scanf("%d",&val); 7 8 switch(val) 9 { 10 case 1: 11 printf("1ceng"); 12 break; 13 case 2: 14 printf("2cengkai"); 15 break; 16 case 3: 17 printf("3cengkai"); 18 break; 19 default: 20 printf("meiyou "); 21 break; 22 } 23 return 0; 24 }
break和continue
break如果用于循环是用来终止循环
break如果用于switch则是用于终止switch
break不能直接用于if,除非if属于循环内部的一个子句
#include <stdio.h> int main(void) { int i; /*& switch(1) case 1: printf("haha\n"); break; //break可以直接用于switch */ for(i = 0; i<=3; i++) { if(3>2) break;//break虽然是内部的语句,但breeak终止的确实外部的for循环 printf("嘿嘿\n");//永远不会输出 } return 0; }
break只能终止它最近的循环
1 #include <stdio.h> 2 int main(void) 3 { 4 int i,j; 5 6 for(i = 0; i<3; ++i) 7 { 8 for(j=1;j<4;++j) 9 break;//break只能终止塔最近的循环 10 printf("嘿嘿\n"); 11 } 12 return 0; 13 }
在多层switch嵌套中,break只能终止它最近的switch
例子:
1 int x=1,y=0,a=0,b=0; 2 switch (x)//第一个switch 3 { 4 case 1: 5 switch (y)//第二个switch 6 { 7 case 0: 8 a++; 9 break;//终止的是第二个switch 10 case 1: 11 b++; 12 break; 13 } 14 b=100; 15 break;//终止的是第一个switch 16 } 17 printf("%d %d",a,b);
最终输出结果: 1 ,100
continue
用于跳过本粗循环余下语句,转去判断是否需要执行下次循环
1 for(1;2;3) 3 { 4 5 A; 6 7 B; 8 9 continue; //如果执行该语句,则执行完该语句后,会执行表达式,c和d都会被跳过去
10
11 C; 12 13 D; 14 15 }
1 while(表达式) 2 { 3 A; 4 B 5 continue;//如果执行该语句,则执行完该语句后,会执行表达式,c和d都会被跳过去 6 C; 7 D; 8 }
实例:
1 #include <stdio.h> 2 int main(void) 3 { 4 int i; 5 char ch; 6 int j; 7 scanf("%d",&i); 8 printf("i=%d\n",i); 9 while ((ch=getchar()) !='\n') 10 continue; 11 scanf("%d",&j); 12 printf("j= %d\n",j); 13 return 0; 14 }
数组
为什么需要数组
- 为了解决大量同类型数据的储存和使用问题
- 为了模拟现实世界
数组的分类
一维数组:为n个变量连续分配存储空间
所有的变量数据类型必须相同
所有变量所占的字节大小必须相等
例子: int a[5]
一维数组中不代表数组中所有的元素,因为一维数组名代表数组的第一个元素的地址
有关一维数组的操作:
- 初始化:完全初始化
int a[5]={1,2,3,4,5};
不完全初始化,未被初始化的元素自动为零
int a[5]={1,2,3};
不初始化,所有元素为垃圾值
int a[5];
清零
int a[5]={0}
错误写法:
int a[5];
a[5]={1,2,3,4,5}; //错误
只有在定义数组的同时才能整体赋值,其他情况下整体赋值是错误的
int a [5]={1,2,3,4,5};
a[5]=100; //error 因为没有a[5]这个元素,最大只有a[4]
int a[5]={1,2,3,4,5};
int b[5];
如果要把a数组中的值全部赋值给b数组
错误的写法: b=a; //error
正确的写法 : for (i=0; i<5;i++)
b[i]=a[i];
1 #include <stdio.h> 2 int main(void) 3 { 4 int a[5]={1,2,3,4,5}; //a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0] a[1] a[2] a[3] a[4] 5 int i; 6 for (i=0;i<5;i++) 7 printf("%d\n",a[i]); 8 9 return 0; 10 }
1 //将数组内的数字倒序 2 #include <stdio.h> 3 int main(void) 4 { 5 int a[7]={1,2,3,4,5,6,7}; 6 int i; 7 int j; 8 int t; 9 10 i=0; 11 j=6; 12 while(i<j) 13 { 14 t=a[i]; 15 a[i]=a[j]; 16 a[j]=t; 17 i++; 18 j--; 19 20 } 21 for (i=0;i<7;i++) 22 printf("%d\n",a[i]); 23 return 0; 24 }
二维数组
int a[3][4];
总共是12个元素,可以当做3行4列看待,这12个元素的名字依次是a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[i][j]表示第i+1行j+1列的元素
int a[m][n]; 该二维数组右下角的位置只能是a[m-1][n-1]
初始化
int a[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
输出二维数组
1 #include <stdio.h> 2 int main(void) 3 { 4 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 5 int i,j; 6 for (i=0;i<3;i++) 7 { 8 for(j=0;j<4;j++) 9 printf("%-5d",a[i][j]);//-5d,占5个字节对齐 10 printf("\n"); 11 } 12 13 return 0; 14 }
多维数组
不存在多维数组,因为内存是线性一维的,n维数组可以当做每个元素是n-1维数组的一维数组
比如: int a[3][4] 该数组是含有3个元素的一维数组 ,只不过每个元素都可以在分成4个小元素
int a[3][4][5] 该数组是含有三个元素的一维数组,只不过每个元素都是4行5列的二维数组