word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">二维数组的初始化
word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12); /*完全初始化*/
int a[][4]={1,2,3,4,5,6,7,8,9,10,1 1,12); /*省略行的完全初始化*/
int a[3][4]={{1,2,3,4),{5,6,7,8),{9,10,11,12));
/*分行完全初始化,可读性较好*/
int a[3][4]={{1},{2},{3}};
/*部分初始化,可以只对部分元素赋初值,未赋初值的元素自动取0值,数组a中各元素的值为:*/
1 0 0 0
2 0 0 0
3 0 0 0
【例5-7】打印杨辉三角
存储并打印杨辉三角的前10行。杨辉三角的具体形式为:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
分析: 杨辉三角的特点为:
(1)第0列好对角线上的元素都为1;
(2)除第0列和对角线上的元素以外,其他元素的值均为前一行上的同列元素和前一列元素之和。
#include <stdio.h>
int main()
{
int s[10][10];
int i,j,k;
for(i=0;i<10;i++)/*为数组中的对角线和第0列元素赋值*/
{
s[i][i]=1;
s[i][0]=1;
}
for(i=2;i<10;i++)/*为其它元素赋值*/
for(j=1;j<i;j++)
s[i][j]=s[i-1][j-1]+s[i-1][j];
for(i=0;i<10;i++)
{
for(k=i;k<10;k++)/*控制输出每行的空格*/
printf("");
for(j=0;j<=i;j++)
printf("%4d",s[i][j]);
printf("\n");
}
return 0;
}
程序运行结果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
【例5-8】找出二维数组元素最值,有一个3 4的矩阵,求出每行最小值及每列的最小值。
分析:设定数组a,3行4列,由于共有3行,共有3个行最小值,可以设定一个长度为3的一维数组来保存每一行的最小值。同理,可以设定一个长度为4的一维数组来保存每一列的最小值。
#include <stdio.h>
int main()
{
int a[3][4],b[3],c[4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);/*向数组a中输入数据*/
for(i=0;i<3;i++) /*判断行,求出每行最小值,存在数组b中*/
{
b[i]=a[i][0];
for(j=1;j<4;j++)
if(a[i][j]<b[i])
b[i]=a[i][j];
}
for(j=0;j<4;j++) /*判断列,求出每列最小值,存在数组c中*/
{
c[j]=a[0][j];
for(i=1;i<3;i++)
if(a[i][j]<c[j])
c[j]=a[i][j];
}
for(i=0;i<3;i++)
printf("%5d",b[i]);
printf("\n");
for(j=0;j<4;j++)
printf("%5d",c[j]);
printf("\n");
return 0;
}
程序运行结果:
56 67 98 23↙
67 89 90 12↙
78 90 23 67↙
56 67 23 12