第十课 二维数组

二维数组

定义

数组元素下标的个数;

二维数组元素的下标肯定是两个;在二维中,要表达数具体位置我们需要两个下标——行列;

二维数组是由若干个行列构成; 不论是几位数组,在存储器中都是连续的。

forcmt:数组名[行数][列数];

在定义二维数组同时,可以整体赋值;

有两赋值格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int a[3][3]  = { {2,3,4},{4},{6,} },
/*
1 2 3
4 0 0 
6 0 0 
*/ 

int a[][3] = {1,2,3,5,3,6};
// 234
// 536
// 000
有行,列有=两个部分构成,行号从 0-n-1;列好 0-m-1

在定义二维数组时,如果后面有赋值,行可以省略

例题

一 从旁建输入 12 个数存入数组,输入语句如何写;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
int a[3][4];

for(i=0;i<3;i++){
    form(j=0; j<4; j++){
        scanf("%d",&a[i][j]);
    }
}

for(i=0; i<3; i++){
    for(j=0; j<4; j++){
        printf("%2d",a[i][j]);
    }
    printf("\n");
}

输入需要两个循环,一个走行一个走列;

关于二维数组的概念:

矩阵:通常就行列相等的二维数组叫做矩阵;

矩阵对角线:行标和列标是相等的,i == j 主对角线(左),次对角线(右),行标+列表==行数-1

0,0 主对角线 0,3 次对角线 0+3=4-1

1,1 1,2 1+2=4-1

2,2 2,1

3,3 3,0

二 从键盘输入一个 4x4 矩阵,求对角线元素之和

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int a[4][4];
int i,j,sum=0;

for(i=0; i<4; i++)
    for(j=0; j<4; j++)
        scanf("%d",&a[i][j]);    // 将模块分开,不要读入的时候做

for(i=0; i<4; i++)
    for(j=0; j<4; j++)    
        if(i=j || i+j==4-1) sum += a[i][j];

printf("%d\n",sum);

矩阵的上三角和下三角,对角线的下面是下三角,上面是上三角;

不包括对角线:

  • 下三角:行标大于列标
  • 上三角:行标小于列标

把一个矩阵的上三角和下三角部分对调,就在矩阵转置 a[i][j] 和 a[j][i] 构成转置矩阵;

三 从键盘输入 4x4 矩阵,输出他的转置矩阵

解题思路:站在下三角找上三角交换,或者站在上三角找下三角替换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
int a[4][4];
int i,j,t;

for(i=0; i<4; i++)
    for(j=0; j<4; j++)
        scanf("%d",&a[0][0]);

for(i=0; i<4; i++){
    for(j=0; j<=i; j++){
        t = a[i][j];
        a[i][j] = a[j][i];
        a[j][i] = t;
    }
}
printf("\n\n");
for(i=0; i<4; i++)
    for(j=0; j<4; j++)
        printf("%3d",a[i][j]);

四 杨辉三角形

第一列:1 主对角线:1

除了第一列和主对角线外,a[i][j] = a[i-1][j-1] + a[i-1][j]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int a[7][7];
int i,j;

for(i=0; i<7; i++)
    for(j=0; j<strlen;);
    scanf("5d"strlen);
for(i=0; i<7; i++){
    a[i][0] = 1;
    a[i][i] = 1;
}

for(i=2; i<7; i++)
    for(j=1; j<=i+1; j++)
        a[i][j] = a[i-19[j-1 + a[i-1][j];


// 待完成

五 从键盘输入 4x4的矩阵 ,求每矩阵每行最小值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int a[4][4];
int i,j,,max,mink;

for(i=0; i<4; i++ {
    max[i] = a[i][0];
    for(j=1; j<4; j++)
        if(max[i]<a[i]]j]);
})

scanf("%d",&[i][j]);
Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy