【问题标题】:C - Matrix Main and Anti Diagonals (Replace)C - 矩阵主和反对角线(替换)
【发布时间】:2017-12-07 16:02:39
【问题描述】:

我有一个任务,我需要专业人士的帮助。

我的任务是:用户输入矩阵[8][8] 的行数和列数,并禁止使用 IF。稍后用户输入此矩阵的所有元素,使用循环并输出此矩阵。

代码如下:

#include <stdio.h>

int main () 
{
    int matrix[10][10];
    int nrows, ncols, i, j;

    printf("Enter number of rows: "); //user enters number of rows
    scanf("%d", &nrows);
    if(nrows < 4){
        printf("\n Out of range, please try again");
        exit(5);
    }
    printf("Enter number of columns: "); //user enters number of columns
    scanf("%d", &ncols);
    if(ncols < 4){
        printf("\n Out of range, please try again");
        exit(5);
    }
    printf("Enter matrix elements: "); //user enters all the elements for Matrix

    for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
            scanf("%d",&matrix[i][j]);
    }

    printf("\n");
}
    printf("This is your matrix: \n");
    for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
            printf("%d \t",matrix[i][j]);}

    printf("\n");}



    return 0;   
}

现在我需要添加一件事,我想取这个矩阵的对角线和反对角线,并用大写 X 替换那里的所有元素。 我不知道它会是什么类型的矩阵,比如它可以是矩阵[4][6] 或矩阵[7][4],所以我需要做一些可以处理任何类型的矩阵的事情用户可以进入这个程序。

此任务的示例(在此程序中我不能输入小于 [4][4],但对于示例我会这样做):

User enters rows - 3
User enters columns - 3
User enters elements : 1 2 3 4 5 6 7 8 9
Output :

    1 2 3
    4 5 6
    7 8 9

在这里我需要做这样的事情:

X 2 X
4 X 6
X 8 X

如果用户输入的不是方阵,例如:

User enters rows: 3
User enters rows: 4
User enters elements: 1 2 3 4 5 6 7 8 9

Out matrix: 

1 2 3 4
5 6 7 8
9 0 1 2

After replacing with X:

X 2 3 X
5 X X 8
9 X X 2

用大写 Xs 替换对角线和反对角线。

请帮忙?

【问题讨论】:

  • 如果矩阵不是正方形,对角线是什么?
  • prntscr.com/hke7cm你可以看这里
  • 根据定义,“反对角矩阵是除对角线上从左下角到右上角 (↗) 之外的所有元素都为零的矩阵,称为反对角矩阵。 -对角线”。你的例子正确吗?
  • 我不知道你在说什么@klaus,但问题模式可以是任何东西,我已经为它编写了代码
  • 不需要&lt;stdlib.h&gt; 才能使用exit() 吗?

标签: c matrix replace diagonal


【解决方案1】:

你可以这样做:

    printf("This is your matrix: \n");
for(i = 0; i < nrows; i++){
    for(j = 0; j < ncols; j++){
        if (i == j)
            printf("X \t");
        else if (i == ncols - j - 1)
            printf("X \t");
        else
            printf("%d \t", matrix[i][j]);
    }

    printf("\n");}

例子:

Enter number of rows: 4
Enter number of columns: 5
Enter matrix elements: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4




This is your matrix: 
X   1   1   1   X   
2   X   2   X   2   
3   3   X   3   3   
4   X   4   X   4 

【讨论】:

  • 效果很好,但有一个问题,第一个对角线总是很好地开始,但是反对角线应该从最远的右上角开始,对于这个例子,它应该从第一行最后一个数字 2 开始.
  • 您只是打印 X 并没有修改矩阵数组,但问题表明应该修改矩阵数组
  • @JemalAmshalal 看起来反对角线在另一个维基百科页面中的定义不同。现在看看它是否有效。
【解决方案2】:

完整的代码及其对您在问题中提供的两个示例的工作,请告诉我这里是否缺少任何内容

#include <stdio.h>

int main ()
{
    int matrix[10][10];
    int nrows, ncols, i, j;

    printf("Enter number of rows: "); //user enters number of rows
    scanf("%d", &nrows);
    if(nrows < 4){
        printf("\n Out of range, please try again");
        exit(5);
    }
    printf("Enter number of columns: "); //user enters number of columns
    scanf("%d", &ncols);
    if(ncols < 4){
        printf("\n Out of range, please try again");
        exit(5);
    }
    printf("Enter matrix elements: "); //user enters all the elements for Matrix

    for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
            scanf("%d",&matrix[i][j]);
    }

    printf("\n");
}
    printf("This is your matrix: \n");
    for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
            printf("%d \t",matrix[i][j]);}

    printf("\n");}
//When square matrix
    if(nrows==ncols)
    {
        for(i = 0; i < nrows; i++){
           matrix[i][i]='X';
            }
            int count=0;
            for(i=nrows-1;i>=0;i--)
            {
                matrix[count][i]='X';
                count++;

            }
 for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
                if(i==j||(i+j==nrows-1))
            printf("%c \t",matrix[i][j]);
        else
                        printf("%d \t",matrix[i][j]);

            }

    printf("\n");}
    }
else
{
    if(nrows<ncols)
    {
        int count=ncols-1;
        for(i = 0; i < nrows; i++){
           matrix[i][i]='X';
            }
            for(i = 0; i < nrows; i++){
           matrix[i][count]='X';
           count--;
            }
          for(i = 0; i < nrows; i++){
        for(j = 0; j < ncols; j++){
                if(i==j||(i+j==nrows))
                printf("%c \t",matrix[i][j]);
        else
                                    printf("%d \t",matrix[i][j]);



            }

    printf("\n");}
    }

}

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多