• 方阵转置 163 PEX7-9 与求和P166 EXE7-7


    输入一个正整数n(1<=n<=6),根据下式生成n阶方阵,将该方阵转置(行列互换)后输出。

    a[i][j] = i*n+j+1

    #include <stdio.h>
    int main()
    {
        int n;
        printf("输入方阵维数: 
    ");
        scanf("%d", &n);
        int a[n][n];
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                a[i][j] = i*n+j+1;
            }
        }
        //以上是二维数组初始化
    
    
        printf("initiation:
    ");
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                printf("%3d", a[i][j]);
            }
            printf("
    ");
        }
        //以上是输出初始化的结果
    
    
        int temp;
        for (int i=0; i<n; i++) {
            for (int j=0; j<i; j++) {
                temp = a[i][j];
                a[i][j] = a[j][i];
                a[j][i] = temp;
            }
        }
        //以上是转置的思路与代码
    
    
        printf("
    after transposition:
    ");
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                printf("%3d", a[i][j]);
            }
            printf("
    ");
        }
        //以上是转置后的矩阵转出
    
        return 0;
    }

    运行结果:

    输入方阵维数: 
    5
    initiation:
      1  2  3  4  5
      6  7  8  9 10
     11 12 13 14 15
     16 17 18 19 20
     21 22 23 24 25
    
    after transposition:
      1  6 11 16 21
      2  7 12 17 22
      3  8 13 18 23
      4  9 14 19 24
      5 10 15 20 25

    在本题的基础上,如果需要求该矩阵除副对角线,最后一列和最后一行以外的所有元素之和:

    代码可以这样写:

    #include <stdio.h>
    int main()
    {
        int n;
        printf("输入方阵维数: 
    ");
        scanf("%d", &n);
        int a[n][n];
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                a[i][j] = i*n+j+1;
            }
        }
        //以上是二维数组初始化
    
    
        printf("initiation:
    ");
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                printf("%3d", a[i][j]);
            }
            printf("
    ");
        }
        //以上是输出初始化的结果
    
        int sum = 0;
        for (int i=0; i<n-1; i++) { //让i<n-1,而非i<n,可以直接不循环最后一行;
            for (int j=0; j<n-1; j++) { //同理,让j<n-1,而非j<n,可以直接不循环最后一列;
                if (i+j != (n-1)) { //副对角线元素特点是i+j=n-1,这里的条件刚好排除副对角元素
                    sum += a[i][j];
                }
            }
        }
        printf("sum = %d
    ", sum);
  • 相关阅读:
    单点登陆
    【springmvc学习】常用注解总结
    Excel里函数中的万金油,你确定不要点进来看看?
    Maven3在Eclipse上安装插件
    VSCode 云同步扩展设置 Settings Sync 插件
    Ubuntu 18.04 root 使用ssh密钥远程登陆
    [Asp.net] C# 操作Excel的几种方式 优缺点比较
    开源框架Autofac使用入门
    C# .net Ueditor实现图片上传到阿里云OSS 对象存储
    [python]TypeError: string indices must be integers解决方法
  • 原文地址:https://www.cnblogs.com/profesor/p/12827370.html
Copyright © 2020-2023  润新知