C语言中的程序不工作
好的,我正在编写一个程序,使一个10 x 10的数组充满0和9之间的随机数,并且(每一步都组织成一个函数): (a) 对第一行求和并打印出来 (b) 打印主对角线的平均值(从上到下,从左到右) (c) 打印出第一列中有多少个0 (d) 制作更多10 x 10数组,随机数介于0和9之间,如果主数组中的所有值 对角线(从上到下,从左到右)等于或大于7,打印出数组,然后 尝试次数。如果它在1000000次尝试中都做不到,请打印出它做不到 完成。 (e) 制作一个1D动态分配数组,包含10个介于-10和+10之间的数字,乘以 生成并显示结果向量的第一个数组 无法找出不起作用的原因,在打印出所有步骤时获取了错误的值:'(以及一些错误C语言中的程序不工作,c,arrays,C,Arrays,好的,我正在编写一个程序,使一个10 x 10的数组充满0和9之间的随机数,并且(每一步都组织成一个函数): (a) 对第一行求和并打印出来 (b) 打印主对角线的平均值(从上到下,从左到右) (c) 打印出第一列中有多少个0 (d) 制作更多10 x 10数组,随机数介于0和9之间,如果主数组中的所有值 对角线(从上到下,从左到右)等于或大于7,打印出数组,然后 尝试次数。如果它在1000000次尝试中都做不到,请打印出它做不到 完成。 (e) 制作一个1D动态分配数组,包含10个介于-10和
void simple_array(int ten_by_ten[10][10])
{
int i, j;
printf("\n");
for (i=0; i<10; ++i)
{
for (j=0; j<10; ++j)
{
ten_by_ten[i][j] = rand() % 10;
printf("%d ", ten_by_ten[i][j]);
}
printf("\n");
}
}
void sum_first_row(int y[10][10])
{
int i = 0, j, sum_row = 0;
for (j=0; j<10; ++j)
{
sum_row += y[i][j];
}
printf("\nThe sum of the first row is: %d\n", sum_row);
}
void average_main_diagonal(int z[10][10])
{
int i, j = 0, average_diagonal = 0;
for (i=0; i<10; ++i)
{
++j;
average_diagonal += z[i][j];
}
printf("\nThe average of the diagonal is: %lf\n", (average_diagonal / 10.0));
}
void zeros(int a[10][10])
{
int i, j = 0, zeroz = 0;
for (i=0; i<10; ++i)
{
if (a[i][j] == 0)
++zeroz;
}
printf("\nThere are %d zero's in the first column\n", zeroz);
}
void multiple_arrays()
{
int sum_diagonal = 0,array[10][10], i, j, k, l, c;
while ((sum_diagonal < 70) && (c <= 1000000))
{
j = 0;
k = 0;
l = 0;
i = 0;
for (i=0; i<10; ++i)
{
for (j=0; j<10; ++j)
{
array[i][j] = rand() % 10;
}
}
for (k=0; k<10; ++k)
{
++l;
sum_diagonal += array[k][l];
}
++c;
}
if (c = 1000000)
printf("\nCould not get a diagonal with numbers >= 7\n");
else
{
j = 0;
i = 0;
for (i=0; i<10; ++i);
{
printf("\n");
for (j=0; j<10; ++j)
printf("%d ", array[i][j]);
}
printf("It took %d many tries to get a diagonal with all numbers >= 7", c);
}
}
void array_multiplication(int b)
{
int **arrays, i, j, k, l, m, prod[10];
arrays = (int **) calloc (10, sizeof(int *));
for (i=0; i<10; ++i)
arrays[i] = (int *) calloc (1, sizeof(int));
for (i=0; i<10; i=i+1)
{
arrays[i] = (rand() % 21) -10;
}
for (k=0; k<10; ++k)
{
prod[k] = 0;
for (l=0; l<10; ++l)
prod[k] = prod[k] + b[k][l] * arrays[l];
}
printf ("The product is: <");
for (m=0; m<10; ++m)
printf ("%d, ", prod[m]);
printf (">\n");
}
int main()
{
int x[10][10];
simple_array(x);
sum_first_row(x)
average_main_diagonal(x);
zeros(x);
multiple_arrays();
array_multiplication(x);
return (0);
}
void简单数组(int-ten-by-ten[10][10])
{
int i,j;
printf(“\n”);
对于(i=0;iarrays[i]=(rand()%21)-10;
:arrays[i]
是一个指针。您不能为指针分配整数。实际上,在前一行中,您只为arrays[i]
分配了一些分配的内存,因此即使这样做有效,您也会泄漏该内存
如果您想在每一行和每一列中放置一个值,那么您可能想要有两个嵌套循环?
此外,您永远不会释放calloc的内存,也不会强制转换calloc返回的值
其他错误,您打算将函数声明为
void array_multiplication(int b[10][10])
它不是(int b)
。而是抱怨你在int
上执行数组操作。你看对角线的代码是不正确的(你知道)。你在使用它之前增加了“j”…因此“i”是0,“j”是1…这不是对角线。你要么需要做“++j”在使用它查找值之后……但更适合只使用z[i][i](两个索引都使用“i”)
这个问题在平均主数组和多个数组中都会发生。为什么不等待40分钟前刚刚发布的内容,而不是创建另一个?如果必须,请编辑并重写该内容,而不要创建新的内容。谢谢!我将尝试如何修复“数组[I]=(rand()%21)-10;”&calloc问题?我基本上应该动态分配一个1D数组,然后乘以第一个数组。但我不确定如何正确地动态分配内存。谢谢:)您分配了内存。您需要使用两个索引来访问int
s,因为它是一个二维数组,例如数组[I][j]=rand()如果你不确定矩阵乘法是如何工作的,那么在你尝试编程之前,先手动找出如何进行