好的,所以我正在编写一个程序,用10 x 10阵列填充0到0之间的随机数。 9,和(每个步骤组织成一个函数):
(a)将第一行相加并打印出来 (b)打印出主对角线的平均值(从上到下,从左到右) (c)打印出第一列中有多少0 (d)制作更多10×10阵列,随机数介于0和10之间。 9,如果主要的所有值 对角线(从上到下,从左到右)为7或更大,打印出阵列,然后是 尝试的次数。如果它无法在1,000,000次尝试中进行,则打印出它无法打印的情况 完成。 (e)制作1D动态分配的数组,其中包含介于-10和10之间的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);
}
获得以下错误:
当我注释掉“数组乘法”函数时(因为它得到以下错误:(a)赋值使得整数指针没有强制转换“arrays [i] =(rand()%21)-10;”(b )value既不是数组也不是指针“prod [k] = prod [k] + b [k] [l] * arrays [l];”(c)传递arg1的“array_multiplication”从指针生成整数而不强制转换“array_multiplication( X);“
并打印出对角线的不正确平均值
非常感谢帮助! 谢谢, --Rob
答案 0 :(得分:0)
arrays[i] = (rand() % 21) -10;
:arrays[i]
是一个指针。您不能为指针分配整数。实际上你只是为前一行的arrays[i]
分配了一些已分配的内存,所以即使这样做也会泄漏那个内存。
如果你想在每一行和每一列都加一个值,你是否意味着有两个嵌套循环?
此外,你永远不会释放你calloc
的记忆。并且不要施放calloc返回的值。
其他错误,您打算将您的函数声明为
void array_multiplication(int b[10][10])
而不是(int b)
。抱怨您正在int
进行数组操作。
答案 1 :(得分:0)
查看对角线的代码不正确(您知道)。你在使用它之前递增“j”...所以“i”是0而“j”是1 ......这不是对角线。您需要使用它来查找值后使用“++ j”....但更适合使用z [i] [i](对于BOTH索引使用“i”)。
这个问题同时发生在average_main_diagonal和multiple_arrays中。