C语言中的程序不工作

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和

好的,我正在编写一个程序,使一个10 x 10的数组充满0和9之间的随机数,并且(每一步都组织成一个函数):

(a) 对第一行求和并打印出来 (b) 打印主对角线的平均值(从上到下,从左到右) (c) 打印出第一列中有多少个0 (d) 制作更多10 x 10数组,随机数介于0和9之间,如果主数组中的所有值 对角线(从上到下,从左到右)等于或大于7,打印出数组,然后 尝试次数。如果它在1000000次尝试中都做不到,请打印出它做不到 完成。 (e) 制作一个1D动态分配数组,包含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);
}
void简单数组(int-ten-by-ten[10][10])
{
int i,j;
printf(“\n”);
对于(i=0;i
arrays[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()如果你不确定矩阵乘法是如何工作的,那么在你尝试编程之前,先手动找出如何进行