矩阵求出元素中的最大值和最小值,以及最大值和最小值所在的行号和列号;求出各行、各列及两条对角线上元素之和。(C语言)

该博客介绍了一段C++代码,用于实现3x3矩阵的输入、最大值和最小值的查找以及行、列和对角线元素的求和。程序通过循环遍历矩阵,动态输入矩阵元素,并按要求输出结果。最大值和最小值的求解采用了比较法,行、列和对角线的和则通过双重循环计算得出。
摘要由CSDN通过智能技术生成

题目如下

有一个3*3的矩阵num,编程实现:

(1)求出元素中的最大值和最小值,以及最大值和最小值所在的行号和列号(行号和列号从0开始);

(2)分别求出各行、各列及两条对角线上元素之和。

以以下矩阵为例:

1 2 3

4 5 6

7 8 9

要求:

(1)各个元素的值在程序运行时从键盘输入;

(2)求和必须使用循环实现,不能直接用元素相加(如第0行的和,不可写num[0][0]+num[0][1]+num[0][2]);

(3)按照以下形式输出:

第0行元素之和为6。

第1行元素之和为15。

第2行元素之和为24。

第0列元素之和为12。

第1列元素之和为15。

第2列元素之和为18。

两条对角线的元素之和分别为15、15。

最大元素值是9,位于第2行第2列。

最小元素值是1,位于第0行第0列。

老样子,先分析,三个功能:输入矩阵、求最值输出、求和输出。

输入矩阵功能就放在main函数里面了,一个二维数组,遍历输入就行。

int main() {
    int a[3][3];
    int i, j;
    printf("请输入%d个数:\n", 3 * 3);
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            scanf_s("%d", &a[i][j]);
        }
    }
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%5d", a[i][j]);
        }
        printf("\n");
    }
    SUM(a);
    MAXMIN(a);
}

求最值元素,简单的打擂台算法,定一个擂主,遍历各个元素挨个去比较就行。 

这里写的时候一开始偷懒,max和min都定的a[0][0],结果导致求最小值的for循环直接跳过了,从而出现了bug,由于题目给出了数据,所以我直接定一个较大元素为擂主(偷懒)

int MAXMIN(int a[3][3]) {
    int m, n, x, y;
    int max, min;
    int i, j;
    max = a[0][0];
    min = a[2][2];
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (a[i][j] > max) {
                max = a[i][j];
                m = i;
                n = j;
            }
            if (a[i][j] < min) {
                min = a[i][j];
                x = i;
                y = j;
            }
        }
    }
    printf("最大元素值是%d,位于第%d行第%d列\n", max, m, n);
    printf("最小元素值是%d,位于第%d行第%d列\n", min, x, y);
    return 0;
}

 然后就是求和函数,还是for循环遍历一次,在正确的地方输出就行。

对角线的话,加一个判断:主对角线行列相等,辅对角线相加等于特定数值就行。

    int i, j;
    int sum1=0,sum2=0;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            sum1 = a[i][j] + sum1;
        }
        printf("第%d行元素之和为%d\n", i, sum1);
        sum1 = 0;
    }
    for (j = 0; j < 3; j++) {
        for (i = 0; i < 3; i++) {
            sum1 = a[i][j] + sum1;
        }
        printf("第%d列元素之和为%d\n", j, sum1);
        sum1 = 0;
    }
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                sum1 = a[i][j] + sum1;
            }
        }
    }
    for (i = 0; i < 3; i++) {
        for (j = 0; j <3 ; j++) {
            if (i + j==2) {
                sum2 = a[i][j] + sum2;
            }
        }
    }
    printf("两条对角线的元素之和分别为%d、%d。\n", sum1, sum2);
    return 0;
}
  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值