无法在 C 语言中打印修改后的数组



用户被要求给出一些行和列,以用随机数填充10x10数组。(表格的一部分将被填写,例如2x2(。然后,一个名为printArray的函数将打印其值。然后,函数change_array将在每一行中找到最大值,并用该值替换其剩余的元素。

例如:

初始阵列

<p>41 67 34  0 </p>
<p>69 24 78 58</p> 
<p>62 64  5 45</p> 

改变阵列

<p>67 67 34  0 </p>
<p>78 78 78 58 </p>
<p>64 64  5 45 </p>

然而,程序给出的是:

初始阵列

<p>41  67</p> <p>34  0</p>

更改阵列

<p>67 67</p>
<p>24576000 508</p>

为什么会发生这种情况?

  1. simpio.h获取整数值的输入
  2. 这不能用指针来完成(我们在课堂上还没有做到(
  3. 修改后的数组必须在main((中打印

    #include <stdio.h>
    #include <stdlib.h>
    #include "simpio.h"
    void populate_data(int R, int C, int A[R] [C]);
    void printArray(int R, int C, int A[R] [C]);
    void change_array(int R, int C, int A[R] [C]);
    int main(void)
    {
    int  A[10] [10],R,C,i,j;
    while (TRUE)
    {
    printf("Give the number of rows: ");
    R = GetInteger();
    if (R>=0 && R<=10)
    break;
    else
    {
    printf("Wrong Answern");
    }
    }
    while (TRUE)
    {
    printf("Enter the number of columns: ");
    C = GetInteger();
    if (C>=0 && C<=10)
    break;
    else
    {
    printf("Wrong Answern");
    }
    }
    populate_data(R,C,A);
    printf("Initial Arrayn");
    printArray(R,C,A);
    change_array(R,C,A);
    printf("Changed Arrayn");
    for (i=0; i<R; i++)
    {
    for (j=0; j<C; j++)
    {
    printf("%d ",A[i] [j]);
    }
    printf("n");
    }
    return 0;
    }
    
    void populate_data(int R, int C, int A[R] [C])
    {
    int i,j;
    for (i=0; i<R; i++)
    {
    for (j=0; j<C; j++)
    {
    A[i] [j] = rand() % 100;
    }
    }
    }
    void printArray(int R, int C, int A[R] [C])
    {
    int i,j;
    for (i=0; i<R; i++)
    {
    for (j=0; j<C; j++)
    {
    printf("%-3d ",A[i] [j]);
    }
    printf("n");
    }
    }
    void change_array(int R, int C, int A[R] [C])
    {
    int i, j, max[R], m[R];
    for (i=0; i<R; i++)
    {
    max[i] = A[i] [0];
    for (j=0; j<C; j++)
    {
    if (max[i]< A[i] [j])
    {
    max[i] =A[i] [j];
    m[i] = j;
    }
    }
    }
    for (i=0; i<R; i++)
    {
    for (j=0; j<C; j++)
    {
    if (j<m[i])
    A[i] [j] = max [i];
    
    }
    }
    }
    

如果一行中的最大值位于第一个位置,则会发生这种情况,因此您永远不会进入此块

if (max[i]< A[i] [j])
{
max[i] =A[i] [j];
m[i] = j;
}

并且CCD_ 1将保持未初始化。只需添加一个

m[i] = 0;

在循环之前。

编辑:您必须将函数定义从A[R][C]更改为A[10][10],因为此时函数不知道R和C。

此外,没有理由声明大小为10x10的数组。您可以在从具有正确行数和列数的输入中获得维度后执行此操作。

最新更新