Привет, мне надо написать программу на си

Создать массивы, используя указатели. Дан массив С (n). Переписать в массив х ненулевые элементы массива разделены на 5 (со сжатием без пустых элементов внутри).

    #include <stdio.h>
main() {
    int i;
    float m_x, res;
    float C[] = {0, 2, 5, 8, 9, 0, 10, 9, 7};
    float X[] = {0};
    float* p_mass = C;
    for (i = 0; i < sizeof(C); i++)
    {
        if (C[i] != 0)
        {
            res = C[i] / 5;
            X[i] = res;

        }
    printf("\n %.2f", X[i]);
    }
};

Что-то пробовал, ничего не получается


Ответы (1 шт):

Автор решения: gitlng

У вас цикл повторяется не до количества элементов в массиве, а до размера его в байтах. Правильный вариант представлен в коде ниже. Плюс в Х фиксированно и конкретно, в зависимости от С, представлен размер sizeX. Имея четкие размеры, можем и без проблем обрабатывать все элементы и правильно выводить.

#include <stdio.h>
int main(void) {
    int i = 0, j = 0, sizeX = 0;
    float m_x;  // зачем он здесь?
    float res;
    float C[] = {0, 2, 5, 8, 9, 0, 10, 9, 7};
    int sizeC = sizeof(C)/sizeof(float);  // делим весь размер массима на размер одного элемента
    float* p_mass = C; // а это где используется в коде?

    for (i  = 0; i < sizeC; i++){
        if (C[i]) {
            sizeX++;  // размер = количеству ненулевых элементов массива С
        }
    }

    i = 0;
    float X[sizeX];

    for (j = 0; j < sizeC; j++){
        if (C[j]){               // если С не 0, то записываем в Х
            res = C[j] / 5;
            X[i] = res;
            i++;                 // Переходим к следующему элементу массива
        }
    }

    for (i = 0; i < sizeX; i++ ){   // именно sizeX
        printf("\n %.2f", X[i]);
    }

    printf("\n");
    return 0;
};
→ Ссылка