zoukankan      html  css  js  c++  java
  • 方阵转置 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);
  • 相关阅读:
    GUI 监听事件 (两个按钮,实现同一个监听)
    GUI 监听事件
    GUI 练习
    GUI 之表格布局
    GUI 之边界布局
    GUI 之流布局
    [转帖]Linux 下解压 rar 文件
    Linux 启动、停止、重启jar包脚本
    关于linux下,ls vi等命令失效的解决方法(配置下环境变量出现问题)
    超好用的UnixLinux 命令技巧 大神为你详细解读
  • 原文地址:https://www.cnblogs.com/profesor/p/12827370.html
Copyright © 2011-2022 走看看