Не могу напечатать измененный массив в C - PullRequest
0 голосов
/ 19 ноября 2018

Пользователю предлагается указать количество строк и столбцов, чтобы заполнить массив из массива 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 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];
    
    
            }
        }
    }
    

1 Ответ

0 голосов
/ 19 ноября 2018

Это происходит, если максимальное значение в строке находится на первой позиции, поэтому вы никогда не войдете в этот блок

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

и m[i] останутся неинициализированными. Просто добавьте

m[i] = 0;

до этого цикла.

Edit: Вы должны изменить определения функций с A[R][C] на A[10][10], потому что R и C неизвестны функции в этой точке.

Кроме того, нет причин объявлять массив размером 10х10. Это можно сделать после того, как вы получили измерение от ввода с правильным количеством строк и столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...