C语言——二维数组应用

专题1:将二维数组作为矩阵处理

例:设有 5*5方阵

 

 01234
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:矩阵乘法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值