要求用户给出行数和列数,以用随机数填充 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 Answer\n"); } } while (TRUE) { printf("Enter the number of columns: "); C = GetInteger(); if (C>=0 && C<=10) break; else { printf("Wrong Answer\n"); } } populate_data(R,C,A); printf("Initial Array\n"); printArray(R,C,A); change_array(R,C,A); printf("Changed Array\n"); 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]; } } }
最佳答案
如果一行中的最大值在第一个位置,就会发生这种情况,所以你永远不会进入这个 block
if (max[i]< A[i] [j])
{
max[i] =A[i] [j];
m[i] = j;
}
和 m[i]
将保持未初始化状态。只需添加一个
m[i] = 0;
在那个循环之前。
编辑:
您必须将函数定义从 A[R][C]
更改为 A[10][10]
,因为此时 R 和 C 对函数而言是未知的。
此外,没有理由声明大小为 10x10 的数组。在从具有正确行数和列数的输入中获取维度后,您可以执行此操作。
关于无法在 C 中打印修改后的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53380980/