我是C的初学者。我遇到了这个错误,我无法弄清楚如何修复它。我正在使用Code:blocks和GNU GCC编译器。它是简单的矩阵,必须使用Shaker排序进行排序。我不能继续,直到我使这个工作。请帮帮我们。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int r=11, s=23, m[r][s], i, j, pom;
printf("Generated matrix:\n\n");
for(i=0;i<r;i++)
{
for(j=0;j<s;j++)
{
m[i][j]=rand()%100;
printf("%3d", m[i][j]);
}
printf("\n");
}
i=0;
j=0;
do{
if(m[i][j]>=m[i+1][j+1])
{
pom=m[i+1][j+1];
m[i+1][j+1]=m[i][j];
m[i][j]=pom;
}
if(j==s)
{
i++;
j=0;
}
if(i==r&&j==s)
break;
j++;
}while(1);
for(i=0;i<r;i++)
{
for(j=0;j<s;j++)
{
m[i][j]=rand()%100;
printf("%3d", m[i][j]);
}
printf("\n");
}
printf("\n\n");
return 0;
}
编辑:
是的,伙计们,我完全错了。现在我不再得到这个错误,但我不明白为什么我不能得到m [r] [s]的最高数字。我总是得到完全相同的矩阵。#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int r=11, s=23, m[r][s], i, j, pom;
printf("Generated matrix:\n\n");
for(i = 0;i<r;i++)
{
for(j = 0;j<s;j++)
{
m[i][j] = rand()%100;
printf("%3d", m[i][j]);
}
printf("\n");
}
printf("\n\n");
i=0;
pom=0;
for(j=0;j=s;j++){
if(m[i][j]>=m[i][j+1])
{
pom = m[i][j+1];
m[i][j+1] = m[i][j];
m[i][j] = pom;
}
if(i==r&&j==s)
break;
if(j==s)
{
i++;
j=0;
}
}
for(i = 0;i<r;i++)
{
for(j = 0;j<s;j++)
{
printf("%3d", m[i][j]);
}
printf("\n");
}
printf("\n\n");
return 0;
}
答案 0 :(得分:1)
您仍然在第25
行包含基本错误:
// for(j=0;j=s;j++){
应该是:
for(j=0;j<s;j++){
启用警告进行编译会立即泄露此错误。每当您使用gcc
编译代码时,最小,您应该启用-Wall -Wextra
警告。他们会为你节省很多时间。例如:
gcc -Wall -Wextra -o bin/mtrxerr mtrxerr.c
仅纠正该错误,提供以下输出,矩阵随时更改。但是,您的排序仍需要额外的工作。以下是输出的示例:
<强>输出:强>
$ ./bin/mtrxerr
Generated matrix:
69 41 30 55 44 78 67 30 81 14 92 62 21 91 66 21 28 98 69 30 90 43 57
12 35 85 21 49 45 31 40 14 24 70 22 68 0 89 50 81 56 42 44 77 33 62
98 14 61 19 96 3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
66 96 22 8 40 51 94 54 1 8 67 21 4 70 35 10 37 85 1 78 36 37 49
80 40 97 42 64 12 56 30 78 52 4 39 44 55 85 51 57 93 18 78 49 41 65
60 78 51 13 56 39 51 58 19 91 55 13 7 67 22 90 98 74 94 89 71 2 74
22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53 8
89 3 82 84 92 5 38 66 79 97 85 72 38 5 57 44 38 21 2 84 42 3 81
72 23 21 6 9 20 11 17 10 14 52 46 6 9 84 24 89 33 61 13 71 66 70
67 56 92 69 40 86 24 21 58 0 94 16 61 15 27 79 77 93 83 23 99 92 59
75 33 92 36 46 15 55 69 82 11 13 4 52 99 28 73 57 80 68 26 42 35 53
41 30 55 44 69 67 30 78 14 81 62 21 91 66 21 28 92 69 30 90 43 57 12
98 35 85 21 49 45 31 40 14 24 70 22 68 0 89 50 81 56 42 44 77 33 62
98 14 61 19 96 3 14 54 15 50 91 88 51 36 71 91 50 95 62 24 15 62 66
66 96 22 8 40 51 94 54 1 8 67 21 4 70 35 10 37 85 1 78 36 37 49
80 40 97 42 64 12 56 30 78 52 4 39 44 55 85 51 57 93 18 78 49 41 65
60 78 51 13 56 39 51 58 19 91 55 13 7 67 22 90 98 74 94 89 71 2 74
22 59 19 92 89 68 33 54 80 12 57 94 20 49 97 78 20 40 33 34 47 53 8
89 3 82 84 92 5 38 66 79 97 85 72 38 5 57 44 38 21 2 84 42 3 81
72 23 21 6 9 20 11 17 10 14 52 46 6 9 84 24 89 33 61 13 71 66 70
67 56 92 69 40 86 24 21 58 0 94 16 61 15 27 79 77 93 83 23 99 92 59
75 33 92 36 46 15 55 69 82 11 13 4 52 99 28 73 57 80 68 26 42 35 53
评论中建议您排序算法需要嵌套循环。查看您的排序例程并更正逻辑。网络上的许多地方都提供了例程Cocktail (shaker) Sort的示例。另一个例子是:Cocktail Sort Algorithm or Shaker Sort Algorithm。
修好排序程序后,如果仍有问题,请发表评论,我们很乐意提供额外的帮助。