- 二维数组基本知识点及初始化:
#include <stdio.h>
/*
知识点:1.二维数组定义的一般形式为:类型说明符 数组名[常量表达式][常量表达式]
例:float a[3][4],b[5][10];定义a为3*4(3行4列)的数组,b为5行10列的数组
2.可将其看为特殊的一维数组,例:可将元素a看为一维数组,有a[0],a[1],a[2]三个元素
而元素a又是一个包含4个元素的一维数组,例:a[0]包含a[0][0] a[0][1] a[0][2] a[0][3]
a[1]包含a[1][0] a[1][1] a[1][2] a[1][3] a[2]包含a[2][0] a[2][1] a[2][2] a[2][3]
3.二维数组初始化:
(1)可以只对各行第1列元素赋初值,其余元素自动为0,例:int a[3][4]={{1},{5},{9}}
赋初值后各元素为:{{1,0,0,0},{5,0,0,0},{9,0,0,0}};
(2)可以对各行某一元素赋初值,例:int a[3][4]={{1},{0,5},{0,3,5}}
赋初值后各元素为:{{1,0,0,0},{0,5,0,0},{0,3,5,0}};
(3)可以只对某几行元素赋初值,例:int a[3][4]={{1},{5,9}}
赋初值后各元素为:{{1,0,0,0},{5,9,0,0},{0,0,0,0}};
4.二维数组可以不写行,但是不写列不行(1维不写,2维写),不写行时输出按照列数自行分配
*/
int main()
{
int i;
int j;
int array[2][3]={{000,111,222},{333,444,555}}; //000,111,222为第一行,333,444,555为第二行
int a[][4]={0,1,2,3,4,5,6,7,8,9}; //不写行可以,不写列不行
//数组初始化三种方式:
int array1[3][4]={{1},{5},{9}}; //只对各行第1列元素赋初值
int array2[3][4]={{1},{0,5},{0,3,5}}; //对各行某一元素赋初值
int array3[3][4]={{1},{5,9}}; //只对某几行元素赋初值
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("i=%d,j=%d,array=%d\n",i,j,array[i][j]);
}
}
printf("array=%d\n",array[1][1]); //第1行第1列实际为我们数到的第2组第2项,因为从0开始计算
puts("");
puts("不写行输出为:");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",a[i][j]);
}
puts("");
}
puts("");
puts("初始化方式一输出为:");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",array1[i][j]);
}
puts("");
}
puts("初始化方式二输出为:");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",array2[i][j]);
}
puts("");
}
puts("初始化方式三输出为:");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",array3[i][j]);
}
puts("");
}
puts("\n输出结束");
return 0;
} D:\C语言\第四章>gcc arrays.c
D:\C语言\第四章>a.exe
i=0,j=0,array=0
i=0,j=1,array=111
i=0,j=2,array=222
i=1,j=0,array=333
i=1,j=1,array=444
i=1,j=2,array=555
array=444
不写行输出为:
0 1 2 3
4 5 6 7
8 9 0 0
初始化方式一输出为:
1 0 0 0
5 0 0 0
9 0 0 0
初始化方式二输出为:
1 0 0 0
0 5 0 0
0 3 5 0
初始化方式三输出为:
1 0 0 0
5 9 0 0
0 0 0 0
输出结束 - 练习:找最大值及对应下标
#include <stdio.h>
//练习:有一个3*4的矩阵,求出最大值及对应所在的行号和列号
int main()
{
int i;
int j;
int array[3][4]={{47,1,68,93},{98,100,50,83},{19,4,82,57}};
int line; //用来记录行
int list; //用来记录列
int max; //记录最大值
max=array[0][0]; //先将数组第一个值赋初值给max,否则没有比较的数
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d\t",array[i][j]); //\t为水平制表符,通常默认4个空格
}
puts("");
}
for(i=0;i<3;i++) //在编写时,a行b列就直接写为i<a,j<b,因为是从第0项开始计算
{
for(j=0;j<4;j++)
{
if(max<array[i][j])
{
max=array[i][j]; //它仅代表第i行第j列的那一个数,并不是数组坐标
line=i;
list=j;
}
}
}
printf("最大数为:%d,所在行为:%d,所在列为:%d\n",max,line+1,list+1);
//i,j在程序里为从0开始,我们通常所说的第1行第1列为程序里的第0行第0列,因此输出+1
puts("输出结束");
return 0;
} D:\C语言\第四章>gcc ex5_arrays.c
D:\C语言\第四章>a.exe
47 1 68 93
98 100 50 83
19 4 82 57
最大数为:100
所在行为:2
所在列为:2
输出结束
|