一: 1.一维数组(举个例子:相当于一串羊肉串)
上节已经学过 int a[5]={1, 2, 3, 4, 5};
2.二维数组(好几串羊肉串)
1)定义: 数据类型 数组名[行数][列数] = {值1, 值2, 值3,......};
int b[2][3] = {1, 2, 3, 4, 5, 6};
二维数组的元素个数 = 行数 * 列数
2)定义的其他形式
省略行数,由赋值的个数和列数决定
int array2[][3] = {1, 2, 3, 4, 5};
注: 二维数组的列数不能够省略
int array3[2][]={1, 2, 3, 4};//error
int array4[][]={1, 2, 3};//error
3) 二维数组元素的访问
格式
数组名[行标][列标]
注: 行标和列标从0开始
4)遍历数组 例:int array[3][2] = {1, 2, 4, 5, 3, 6};
// 遍历数组,并打印每个元素
for (int i=0; i<3; i++) {// 控制行数
for (int j =0; j<2; j++) {//控制列数
printf("%d ",array[i][j]);
}
printf("\n");
}
5)元素赋值
array[1][0] = 100;
给大家一道例题:将一个二维数组的行和列交换,存储到另外一个数组中去
int a[3][5] = {0};
//每个元素的取值方式范围[40,60];
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++) {
a[i][j]=arc4random()%(60-40+1)+40;
printf("%d ",a[i][j]);
}
printf("\n");
}
int b[5][3]={0};
for (int i=0 ; i<5; i++) {
for (int j =0; j<3; j++) {
b[j][i]=a[j][i];
printf("%d ",b[j][i]);
}
printf("\n");
}
char string[7]={'i', 'p', 'h', 'o' ,'n', 'e'};
字符串:字符数组又叫字符串
char string1[7]="iphone";
字符串数组:数组中的元素是字符串,字符串又叫字符数组,所以数组中的元素是一个数组,数组嵌套数组,所以字符串数组是一个二维数组
例:
char strings[3][7]={"apple","nokia","xiaomi"};
char strings1[3][7]={{'a','p','p','l','e'},{'n','o','k','i','a'},{'x','i','a','o','m','i'}};
printf("%c\n",strings[0][2]);
打印strings数组
//1).
for (int i=0; i<3; i++) {
for (int j=0; j<7; j++) {
printf("%c ",strings[i][j]); }
printf("\n");
}
然后改进一下,如下
//2).
for (int i=0; i<3; i++) {
for (int j=0; j<7; j++) {
if (strings[i][j]!='\0') {
printf("%c ",strings[i][j]);
}else{
break;
}
}
printf("\n");
}
上面两种是打印字符,第三种是直接打印字符串,如下
//3).
for (int i=0; i<3; i++) {
printf("%s\n",strings[i]);
}
改进后,如下
//4).
for (int i=0; i<3; i++) {
for (int j=0; j<7&&strings[i][j]!='\0'; j++) {
printf("%c ",strings[i][j]);
}
printf("\n");
}
输入字符:
scanf("%c",&c);
输入字符串
char str[10]={0};
scanf("%s",str)
注:输入字符串,不需要加&
//输入字符串数组
char strs[3][10]={0};
for (int i=0;i<3; i++) {
scanf("%s",strs[i]);
}
例: //使用字符串组存周围学生姓名
char str[3][20]={0};
printf("请输入你的名字:");
for (int i=0; i<3; i++) {
scanf("%s",str[i]);
}
for (int i=0; i<3; i++) {
printf("%s\n",str[i]);
}
下面来一到经典例题:
姓名按a-z 进行排序
char nams[5][20]={"xiaoming","hanmeimei","liuneng","zhaosi","zhangsanfeng"};
for (int i=0; i<<span se-mark="1">5-1; i++) {
for (int j=0; j<<span se-mark="1">5-1-i; j++) {
// //字符串又叫字符数组,数组是不能够直接参与运算的,字符串比较使用strcmp
if(strcmp(nams[j], nams[j+1])>0){
// //交换两个变量的值,使用第三个变量,第三个变量的类型有交换的变量的类型决定;交换的两个字符串,所以第三个变量也应该是一个字符串
char temp[20]={0};
// //字符串又叫字符数组,数组是不能直接参与运算的,字符串赋值使用strcpy
strcpy(temp, nams[j]);
strcpy(nams[j],nams[j+1]);
strcpy( nams[j+1],temp);
}
}
}
for (int i=0; i<<span se-mark="1">5; i++) {
printf("%s ",nams[i]); }
4.字符串数组char strings[i][j]
i:字符串的个数
j:字符串的长度
strings[i]: 获取字符串
strings[i][j]:获取字符
注:一般,把字符串数组中的元素(字符串)看成一个整体使用,比如输入,输出,冒泡排序等等
5.多维数组
数据类型 数组名[维度1][维度2][维度3][...]={值1,值2,值3,...};
[层数][行数][列数]
int array[2][4][3]={0};
例: 1: 遍历多维数组,随机赋值[10,20]
for (int i=0; i<2; i++) {
for (int j=0; j<4; j++) {
for (int k=0; k<3; k++) {
array[i][j][k]=arc4random()%(20-10+1)+10;
printf("%d ",array[i][j][k]);
}
printf("\n");
}
printf("\n");
}
例 2 :随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个模仿从上面看)
int a[2][3][4]={0};
for (int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
for (int k=0; k<4; k++) {
a[i][j][k]=arc4random()!+10;
}
}
}
for (int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
for (int k=0; k<4; k++) {
printf("%d ",a[i][j][k]);
}printf("\n");
}
}