mo_on 发表于 2023-5-9 16:21:10

c语言求助

从键盘输入整数n(2<n<10)的值,输入一个二维整型数组(n×n)。对该二维数组所构成的矩阵进行主对角线和次对角线元素的位置进行交换,输出变换后的数组。

【样例输入】

4

3 5 6 7

8 5 6 2

4 6 2 1

9 6 8 3

【样例输出】

7 5 6 3

8 6 5 2

4 2 6 1

3 6 8 9
#include <stdio.h>
int main()
{
    int n,temp;
    scanf("%d",&n);
    int i,j,a;
    for(i=0;i<n;i++)
    {
      for(j=0;j<n;j++)
      {
            scanf("%d",&a);
      }
    }
    for(i=0;i<n;i++)
    {
      for(j=0;j<n;j++)
      {
                temp=a;
                a=a;
                a=temp;

      }
    }
    for(i=0;i<n;i++)
    {
      for(j=0;j<n;j++)
      {
            printf("%d ",a);
      }
      printf("\n");
    }
    return 0;
}
这个为什么不对啊

isdkz 发表于 2023-5-9 16:21:52

你的代码中只进行了主对角线元素和次对角线元素的交换,而没有进行主对角线和次对角线的交换。所以你需要再添加一次循环,将主对角线和次对角线的元素进行交换。具体代码如下:

#include <stdio.h>

int main()
{
    int n, temp;
    scanf("%d", &n);
    int i, j, a;
    for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++)
      {
            scanf("%d", &a);
      }
    }
    for (i = 0; i < n; i++)
    {
      temp = a;
      a = a;
      a = temp;
    }
    for (i = 0; i < n / 2; i++)
    {
      for (j = 0; j < n; j++)
      {
            temp = a;
            a = a;
            a = temp;
      }
    }
    for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++)
      {
            printf("%d ", a);
      }
      printf("\n");
    }
    return 0;
}


这个代码中,我们首先对主对角线和次对角线的元素进行了交换,然后再对主对角线和次对角线进行了交换,即将第 i 行和第 n-i-1 行进行交换。

sfqxx 发表于 2023-5-9 18:36:02

你的代码有一个问题,它只是循环了 n 次,每次都对当前这一行的主对角线和次对角线上的元素进行交换,但并没有对所有行进行交换,因此不能得到正确的结果。下面给出正确的代码实现:
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int matrix;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n; ++j) {
            scanf("%d", &matrix);
      }
    }
    // 对主对角线上的元素进行交换
    for (int i = 0; i < n; ++i) {
      int temp = matrix;
      matrix = matrix;
      matrix = temp;
    }
    // 对次对角线上的元素进行交换
    for (int i = 0; i < n; ++i) {
      int temp = matrix;
      matrix = matrix;
      matrix = temp;
    }
    // 输出变换后的矩阵
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n; ++j) {
            printf("%d ", matrix);
      }
      printf("\n");
    }
    return 0;
}
该代码的原理与你的代码类似,但它循环了所有的行,依次对每一行的主对角线和次对角线上的元素进行交换。这样才能得到正确的结果。
有用请设置最佳答案
页: [1]
查看完整版本: c语言求助