专题1:将二维数组作为矩阵处理
例:设有 5*5方阵
| 0 | 1 | 2 | 3 | 4 | |
| a[0] | |||||
| a[1] | |||||
| a[2] | |||||
| a[3] | |||||
| a[4] |
/* 二维数组输入 */
for( int i = 0; i < 6; i ++)
{
for(int j = 0; j < 6; j ++)
(
scanf("%d", &a[i][j]); // a[i]+j
)
)
/* 二维数组输出 */
for( int i = 0; i < 6; i ++)
{
for(int j = 0; j < 6; j ++)
(
pirntf("%3d", a[i][j]); // a[i]+j
)
printf("\n");
)
1:输出该方阵所有元素
2:输出该方阵周边元素之和
分析一:整体 - 内部
#include <stdio.h>
#define N 5
int main(void)
{
int i, j;
int a[N][N];
int sum = 0;
for(i = 0; i < N; i ++)
{
for(j = 0; j < N; j ++)
{
scanf("%d",&a[i]+j);
sum += a[i][j]; // 整体元素和
}
}
// 内部元素和
for(i = 1; i < N-1; i ++)
{
for(j = 1; j < N-1; j ++)
{
sum -= a[i][j];
}
}
printf("%d", sum);
return 0;
}
分析二:直接外圈分析求和
#include <stdio.h>
#define N 5
int main(void)
{
int i, j;
int a[N][N];
int sum = 0;
for(i = 0; i < N; i ++)
{
for(j = 0; j < N; j ++)
{
scanf("%d",&a[i]+j);
// 外部元素直接求和
if( i == 0 || i == N-1 || j == 0 || j == N-1)
sum += a[i][j];
}
}
printf("%d", sum);
return 0;
}
3:求两条对角线元素之和
方法:分析下标关系,一次性遍历求和
#include <stdio.h>
#define N 5
int main(void)
{
int i, j;
int a[N][N];
int sum = 0;
for(i = 0; i < N; i ++)
{
for(j = 0; j < N; j ++)
{
scanf("%d",&a[i]+j);
// 分析下标
if( i == j || i+j == N-1 )
sum += a[i][j];
}
}
printf("%d", sum);
return 0;
}
4:求该方阵的转置方阵
思路分析:行列交换,从下标分析
#include <stdio.h>
#define N 5
int main(void)
{
int i, j;
int a[N][N];
int swap;
for(i = 0; i < N; i ++)
{
for(j = 0; j < N; j ++)
{
scanf("%d",&a[i][j]);
}
}
// 核心
for(i = 0; i < N-1; i ++)
{
for(j = i+1; j < N; j ++)
{
swap = a[i][j];
a[i][j] = a[j][i];
a[j][i] = swap;
}
}
for(i = 0; i < N; i ++)
{
for(j = 0; j < N; j ++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
5:螺旋方阵:N阶方阵,1~N*N的数以螺旋状填入
6:鞍点判断
7:矩阵乘法
944

被折叠的 条评论
为什么被折叠?



