C 如何移动矩阵的最大个数

C 如何移动矩阵的最大个数,c,matrix,C,Matrix,我需要将随机生成的最大数量的矩阵移动到矩阵的右下角,但我不知道如何移动。有人能帮忙吗。 这是我的代码: #include <stdio.h> #include <stdlib.h> int main() { int i, j, rows, columns; int **matrix; printf("write the number of rows\n"); scanf("%d", &rows); printf("wri

我需要将随机生成的最大数量的矩阵移动到矩阵的右下角,但我不知道如何移动。有人能帮忙吗。 这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, rows, columns;
    int **matrix;

    printf("write the number of rows\n");
    scanf("%d", &rows);
    printf("write the number of columns\n");
    scanf("%d", &columns);

    matrix = malloc(rows * sizeof *matrix);
    for (i = 0 ; i < rows ; i++)
    {
        matrix[i] = malloc(columns * sizeof(int));
        for (j = 0 ; j < columns ; j++)
            matrix[i][j] = rand() % 100;
    }

    for (i = 0 ; i < rows ; i++)
    {
        for (j = 0 ; j < columns ; j++)
            printf("%5d", matrix[i][j]);
        printf("\n");
    }

    for (i = 0 ; i < rows ; i++)
    free(matrix[i]);
    free(matrix);

    return 0;
}
#包括
#包括
int main()
{
int i,j,行,列;
int**矩阵;
printf(“写入行数\n”);
scanf(“%d”,行和行);
printf(“写入列数\n”);
scanf(“%d”列和列);
矩阵=malloc(行*大小*矩阵);
对于(i=0;i
尝试以下操作

int max = matrix[0][0];

for (i = 0 ; i < rows ; i++)
{
    for (j = 0 ; j < columns ; j++)
    {
        if ( max < matrix[i][j] ) max = matrix[i][j];
    }
}

matrix[rows-1][columns-1] = max;
int max=matrix[0][0];
对于(i=0;i
如果需要将矩阵的右下元素与最大元素交换,那么代码如下所示

int max_i = 0;
int max_j = 0;

for (i = 0 ; i < rows ; i++)
{
    for (j = 0 ; j < columns ; j++)
    {
        if ( matrix[max_i][max_j] < matrix[i][j] ) max_i = i, max_j = j;
    }
}

int tmp = matrix[rows-1][columns-1];
matrix[rows-1][columns-1] = matrix[max_i][max_j];
matrix[max_i][max_j] = tmp;
int max_i=0;
int max_j=0;
对于(i=0;i
您可以通过这种方式生成具有所需特征的矩阵

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, rows, columns, largest, largestRow, largestColumn, swapValue;
    int **matrix;

    printf("write the number of rows\n");
    scanf("%d", &rows);
    printf("write the number of columns\n");
    scanf("%d", &columns);

    largest       = 0;
    largestRow    = 0;
    largestColumn = 0;
    matrix        = malloc(rows * sizeof *matrix);
    if (matrix == NULL)
        return -1;
    for (i = 0 ; i < rows ; i++)
    {
        matrix[i] = malloc(columns * sizeof(int));
        if (matrix[i] == NULL)
        {
            int k;

            for (k = i - 1 ; k >= 0 ; k--)
                free(matrix[k]);
            free(matrix);

            return -1;
        }

        for (j = 0 ; j < columns ; j++)
        {
            matrix[i][j] = rand() % 100;
            if (matrix[i][j] > largest)
            {
                largestRow    = i;
                largestColumn = j;
                largest       = matrix[i][j];
            }
        }
    }
    swapValue                         = matrix[rows - 1][columns - 1];
    matrix[rows - 1][columns - 1]     = largest;
    matrix[largestRow][largestColumn] = swapValue;

    for (i = 0 ; i < rows ; i++)
    {
        for (j = 0 ; j < columns ; j++)
            printf("%5d", matrix[i][j]);
        printf("\n");
    }

    for (i = 0 ; i < rows ; i++)
        free(matrix[i]);
    free(matrix);

    return 0;
}
#包括
#包括
int main()
{
int i,j,行,列,最大,最大行,最大列,最大值;
int**矩阵;
printf(“写入行数\n”);
scanf(“%d”,行和行);
printf(“写入列数\n”);
scanf(“%d”列和列);
最大值=0;
最大行=0;
最大列=0;
矩阵=malloc(行*大小*矩阵);
if(矩阵==NULL)
返回-1;
对于(i=0;i=0;k--)
自由(矩阵[k]);
自由(矩阵);
返回-1;
}
对于(j=0;j<列;j++)
{
矩阵[i][j]=rand()%100;
if(矩阵[i][j]>最大值)
{
最大行=i;
最大列=j;
最大=矩阵[i][j];
}
}
}
swapValue=矩阵[行-1][列-1];
矩阵[行-1][列-1]=最大值;
矩阵[largestRow][largestColumn]=swapValue;
对于(i=0;i
您在矩阵中找到最大的数字,然后将其与
矩阵[rows-1][columns-1]
交换。您的问题有点不够明确。是否需要将最大的数字与右下角的值交换?如果有多个位置具有相同的最大值,您应该怎么做?唯一可以说是错误的是初始化。您不初始化
最大行
最大列
;这是个大问题。使用<代码>最大值=0.0
也是可疑的-最好使用
矩阵[0][0]
矩阵[rows-1][columns-1]
,适当地初始化
最大行
最大列
的值。哇,这真是一个开始者的错误,我错过了。关于最大值,请参见随机数生成的表达式,
0
是可能的最小值。谢谢。@Mangiux如果确实有帮助,那么就把答案记下来。:)