Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 矩阵和交换行_Arrays_C_Matrix - Fatal编程技术网

Arrays 矩阵和交换行

Arrays 矩阵和交换行,arrays,c,matrix,Arrays,C,Matrix,我的任务是在矩阵中找到最小值和最大值,如果它们在同一行中,则打印它们在同一行中,如果它们不相等,则交换它们的行。当它们不相等时,我的程序工作了,但当它们相等时,它在a=[imin1][j]行中崩溃了,我不知道为什么。我希望你能帮助我 #include <stdio.h> int main() { int m[10][10], i, j, min, max, imin1, imax1, imin2, imax2, a; printf ("Elements o

我的任务是在矩阵中找到最小值和最大值,如果它们在同一行中,则打印它们在同一行中,如果它们不相等,则交换它们的行。当它们不相等时,我的程序工作了,但当它们相等时,它在
a=[imin1][j]
行中崩溃了,我不知道为什么。我希望你能帮助我

#include <stdio.h>

int main() {
    int m[10][10], i, j, min, max, imin1, imax1, imin2, imax2, a;
    printf ("Elements of matrix: ");
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            scanf("%d", &m[i][j]);
        }
    }
    min = m[0][0];
    max = m[0][0];
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            if (m[i][j] < min) {
                min = m[i][j];
                imin1 = i;
                imin2 = j;
            }
            if (m[i][j] > max) {
                max = m[i][j];
                imax1 = i;
                imax2 = j;
            }
        }
    }

    if (imin1 == imax1)
        printf ("Same row");
    else {
        for (j = 0; j < 10; j++) {
            a = m[imin1][j];
            m[imin1][j] = m[imax1][j];
            m[imax1][j] = a;
        }
        printf ("New matrix: \n");
        for (i = 0; i < 10; i++) {
            for (j = 0; j < 10; j++) {
                printf ("%d ", m[i][j]);
            }
            printf("\n");
        }
    }
}
#包括
int main(){
int m[10][10],i,j,min,max,imin1,imax1,imin2,imax2,a;
printf(“矩阵元素:”);
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
scanf(“%d”、&m[i][j]);
}
}
min=m[0][0];
max=m[0][0];
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
if(m[i][j]max){
max=m[i][j];
imax1=i;
imax2=j;
}
}
}
if(imin1==imax1)
printf(“同一行”);
否则{
对于(j=0;j<10;j++){
a=m[imin1][j];
m[imin1][j]=m[imax1][j];
m[imax1][j]=a;
}
printf(“新矩阵:\n”);
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
printf(“%d”,m[i][j]);
}
printf(“\n”);
}
}
}

如果
max
min
相同,您的问题是由于
imax1
imnin1
未初始化。问题出现在这里:

    if(imin1==imax1)                      /* <== here */
        printf("Same row");
    else {
        for(j=0;j<10;j++){
            a=m[imin1][j];
            m[imin1][j]=m[imax1][j];      /* <=== and here */
            m[imax1][j]=a;
        }
        printf("New matrix: \n");
        for(i=0;i<10;i++){
            for(j=0;j<10;j++){
                printf("%d ", m[i][j]);
            }
            printf("\n");
        }
    }
将其全部放在一起,并消除对幻数的使用,您可以做到:

#include <stdio.h>
#include <limits.h>

#define ROWS  10        /* if you need a constant, #define one (or more) */
#define COLS  ROWS

int main() {
    
    int m[ROWS][COLS] = {{0}},
        min = INT_MAX,
        max = INT_MIN,
        iminx = 0, iminy = 0, imaxx = 0, imaxy = 0;
    
    puts ("Original matrix:");
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (scanf("%d", &m[i][j]) != 1) {   /* validate EVERY input */
                fputs ("error: invalid integer input.\n", stderr);
                return 1;
            }
            printf (" %2d", m[i][j]);
        }
        putchar ('\n');
    }
    
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (m[i][j] < min){
                min = m[i][j];
                iminx = i;
                iminy = j;
            }
            if (m[i][j] > max) {
                max = m[i][j];
                imaxx = i;
                imaxy = j;
            }
        }
    }
    
    printf ("\nmin: %2d (%d,%d)\nmax: %2d (%d,%d)\n\n",
            min, iminx, iminy, max, imaxx, imaxy);
    
    if (iminx == imaxx)
        puts ("Same row\n");
    else {
        int a = m[iminx][iminy];
        m[iminx][iminy] = m[imaxx][imaxy];
        m[imaxx][imaxy] = a;
        
        printf("New matrix: \n");
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                printf(" %2d", m[i][j]);
            }
            putchar ('\n');
        }
    }
}
相同值:

$ ./bin/arr_max_min_swap < dat/arr_int_10x10_7.txt
Original matrix:
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7

min:  7 (0,0)
max:  7 (0,0)

Same row
$。/bin/arr\u max\u min\u swap

如果您还有其他问题,请告诉我。

您需要将
imin1
imax1
imin2
imax2
的值初始化为零,因为您使用第一个元素作为
max
min
的初始值,如下所示:

min = m[0][0];
max = m[0][0];
imin1 = imax1 = imin2 = imax2 = 0;

您应该将
imin
imax
变量初始化为
(0)
。如果
m[0][0]
是最小的元素,
imin
永远不会初始化,并且可以包含任何值。考虑使用临时<代码> Prttf< /Cord> Tracle语句来调试代码。
$ ./bin/arr_max_min_swap < dat/arr_int_10x10_7.txt
Original matrix:
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7
  7  7  7  7  7  7  7  7  7  7

min:  7 (0,0)
max:  7 (0,0)

Same row
min = m[0][0];
max = m[0][0];
imin1 = imax1 = imin2 = imax2 = 0;