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;