用户被要求给出一些行和列,以用随机数填充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>
为什么会发生这种情况?
- simpio.h获取整数值的输入
- 这不能用指针来完成(我们在课堂上还没有做到(
修改后的数组必须在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的数组。您可以在从具有正确行数和列数的输入中获得维度后执行此操作。