要求用户提供一些行和列以用随机数填充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>
为什么会这样?
修改后的数组必须打印在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];
}
}
}
答案 0 :(得分:2)
如果行中的最大值位于第一位置,则会发生这种情况,因此您永远都不会输入该程序段
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的数组。您可以从输入中获得具有正确的行数和列数的维度之后执行此操作。