Привет, мне надо написать программу на си
Создать массивы, используя указатели. Дан массив С (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;
};