switch语句注意事项
1、switch后面的括号只能填一个整型表达式
2、case后的常量不能有重复的
3、可以没有default
switch()
{
case 整型常量1:
语句
case 整型常量2:
语句
case 整型常量3:
语句
default:
语句
...
}
#include <stdio.h>
int main()
{
char letter;
scanf("%c",&letter);
switch(letter)
{
case'a':
printf("alpha\n");
break;
case'b':
printf("bravo\n");
break;
case'c':
printf("charlie\n");
break;
default:
printf("i don't know\n");
}
return 0;
}
break在switch中的作用
遇到break跳出循环
#include <stdio.h>
int main()
{
char letter;
while(1)
{
scanf("%c",&letter);
switch(letter)
{
case'a':
printf("alpha\n");
break;
case'b':
printf("bravo\n");
continue; //不对switch作影响,只作用于while循环
case'c':
printf("charlie\n");
break;
default:
printf("i don't know\n");
}
getchar(); //吸收未被清除的输入
}
return 0;
}
break是只属于switch语句,效果是跳出switch无法对while产生效果
数组
1、什么是数组
数组是由一些列类型相同,数据对象依次排列组合而成,组成数列的数据对象被称作数组的元素。
声明数组
元素类型 数组名[元素数量]
数组初始化
元素类型 数组名[元素数量] = {逗号分割};
eg:
int arr[10] = {1,2,3,4,5,6,7,8,9,0}; //=右边为初始化列表
int arr[] = {1,2,3,4,5,6,7,8};
//如果元素数量比初始化列表多,补0;
2、访问数组元素
数组名[下标]
下标从0开始。
int arr[5] = {1,2,3};
printf("%d\n",arr[0]);
printf("%d\n",arr[1]);
printf("%d\n",arr[2]);
printf("%d\n",arr[3]);
printf("%d\n",arr[4]);
-----------------------
int arr[5] = {1,2,3};
for(int i = 0;i < 10;i++)
{
printf("%d\n",arr[i]);
}
3、修改数组的元素
int arr[10] = {};
printf("%d\n",arr[5]);
arr[5] = 123;
printf("%d\n",arr[5]);
1、数组越界:禁止访问、修改数组范围外的元素,否则引起程序终止。
eg:
int arr[10] = {};
printf("%d\n",arr[10]); //错误
2、数组不一定初始化,但是之后需要赋值,避免使用无意义数值
4、数组所占空间大小
char arr[10];
short arr2[10];
int arr3[10];
long long arr4[10];
float arr5[10];
double arr6[10];
printf("%d\n",sizeof(arr)); //10
printf("%d\n",sizeof(arr2)); //20
printf("%d\n",sizeof(arr3)); //40
printf("%d\n",sizeof(arr4)); //80
printf("%d\n",sizeof(arr5)); //40
printf("%d\n",sizeof(arr6)); //80
数组所占的空间 = 单个元素所占空间大小*数组元素个数
5、数组能整体赋值吗
int arr[1] = {};
int arr[2] = {1,2,3,4,5};
arr1 = arr2; //错误,不能整体赋值
arr1 = {1,2,3,4,5}; //错误,初始化列表只能存在于初始化
使用循环,单个给元素赋值
//使用循环,单个给元素赋值
eg:
int arr1[5] = {};
int arr2[5] = {1,2,3,4,5};
for(int i = 0;i < 5;i++)
{
arr1[i] = arr2[i]
}
内存复制(memcpy函数)memory copy
#include <stdio.h>
#include <memmory.h>
int main()
{
int arr1[5] = {};
int arr2[5] = {1,2,3,4,5};
memcpy(arr1, arr2, sizeof(arr1)); //
for(int i = 0;i < 5;i++)
printf("%d",arr1[i]);
return 0;
}
memcpy(目标数组,原始数组,需要复制多少数组);
memcpy将原始数组复制到目标数组,复制多少数组,由第三个参数决定
若第三参数大小为N,则原始数组大小不能小于N,否则将复制无意义内容,目标大小不能小于N,否则没有足够空间存放数据
多维数组
数组作为数组元素
int B[5][10]
访问:
int [x][y]
使用嵌套循环访问遍历二维数组
#include <stdio.h>
int mian()
{
int B[5][10] = {{0},{1},{2},{3},{4},};
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
printf("%d ",B[i][j]);
}
printf("\n");
}
return 0;
}
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
B[i][j] = B[i][j] * 2; //将每个元素设置为原来的两倍
}
}
初始化:
1、常量个数少于元素个数将使用0初始化元素
2、省略内层花括号时,如果元素的个数不足,后续的元素将使用0初始化
int B[5][10] = {
{1,2,3,4,5,6},
{1,2,3,4,5,6,7},
{1,2,3,4,5,6,7,8},
{1,2,3,4,5,6,6,7,8},
{1,2,3,4,5,6}
}