我尝试对矩阵的侧对角线进行递减冒泡排序,但是显示的元素错误。问题出在索引上,但是我不知道如何解决
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
int main () {
double a[100][100];
int n, m;
int i, j, b, c;
srand (time (NULL));
scanf ("%d", &n);
scanf ("%d", &m);
for ( i = 0; i < n; i++)
{
for ( j = 0; j < m; j++)
{
a[i][j] = 0.09 * (rand () %1000) - 0.5;
}
}
printf ("Array A[N][M]: \n");
for ( i = 0; i < n; i++)
{
printf ("\n");
for ( j = 0; j < m; j++)
{
printf ("%6.0f", a[i][j]);
}
}
printf ("\n");
printf ("\nElements of the right diagonal are: \n");
for (j = 0; j < m; j++)
{
printf( "%6.0lf", a[n - j - 1][j]);
}
printf ("\n");
printf ("\n Sorted array A[N][M]:");
for ( i = 0; i < n; i++)
{
for ( j = 0; j < (m-1); j++)
{
if (a[n - j - 1][j]<a[n-j][j+1])
{
int temp = a[n - j - 1][j];
a[n - j - 1][j] = a[n-j][j+1];
a[n-j-2][j+1] = temp;
}
}
}
printf ("\n");
for ( i = 0; i < n; i++)
{
printf ("\n");
for ( j = 0; j < m; j++)
{
printf ("%6.0f", a[i][j]);
}
}
printf ("\nElements of the right diagonal are: \n");
for (j = 0; j < m; j++)
{
printf( "%6.0lf", a[n - j-2][j+1]);
}
return 0;
}
目标是接收按递减排序的对角线元素的结果:(示例)
0.74 4.35 7.05 9.1 6.46 6.6 7.48
5.41 7.28 4.85 2.8 4.28 7.47 7.87
5.83 2.73 9.42 7.14 1.38 7.22 1.21
6.91 3.8 9.51 4.56 8.74 7.43 5.63
9.65 8.04 1.02 9.71 6.02 5.61 1.15
2.35 1.04 2.23 4.43 6.45 4.5 4.31
2.7 5.79 3.33 8.44 6.99 4.79 1
Diagonal : 7.48 7.47 1.38 4.56 1.02 1.04 2.7
Sorted array:
0.74 4.35 7.05 9.1 6.46 6.6 7.48
5.41 7.28 4.85 2.8 4.28 7.47 7.87
5.83 2.73 9.42 7.14 4.56 7.22 1.21
6.91 3.8 9.51 2.7 8.74 7.43 5.63
9.65 8.04 1.38 9.71 6.02 5.61 1.15
2.35 1.04 2.23 4.43 6.45 4.5 4.31
1.02 5.79 3.33 8.44 6.99 4.79 1
Diagonal : 7.48 7.47 4.56 2.7 1.38 1.04 1.02
希望得到您的帮助!
我设法尝试在这个视频中给出的方法:https://www.youtube.com/watch?v=YqzNgaFQEh8,但未成功
1条答案
按热度按时间zujrkrfu1#
代码至少存在以下问题:
不是交换
错误编码的交换
输出格式
如果目标是查看精确到小数点后2位的值(在7列中),则使用
"%7.2g"
或"%7.2f"
,而不是"%6.0f"
。我建议在循环之后打印
'\n'
,而不是在循环之前打印。