Программа для С которая нулевые элементы массива переставит в конец, а ненулевые в начало при этом не меняя порядок
Нужно написать программу для С, которая нулевые элементы массива переставит в конец, а ненулевые в начало при этом не меняя порядок. Не могу понять почему моя программа не работает (выводится одни нули). Подскажите пожалуйста
#include <math.h>
#include <stdio.h>
int main() {
int N = 0;
float A[N];
do{ printf("Введите количество элементов:\n");
scanf("%d", &N);
}while(N<1 || N>20);
printf("Введите элементы массива:\n");
for(int i=0; i<N; i++){
printf("A[%i]=", i);
scanf("%f", &A[i]); }
int i=0; int p=0;
for (i=0,p=0; i<N-1; i++){
if ( (A[i]=0)){
p=i;
for(p=i;p<N;p++)
A[p]=A[p+1];} }
A[N-1]=0;
for(i=0; i<N; i++){
printf(" A[%i] = %3.2f \n", i, A[i]);
}
}
Ответы (1 шт):
Автор решения: TigerTV.ru
→ Ссылка
Вы намудрили со скобками, if ( (A[i]=0)){ - здесь происходит присвоение, а не сравнение, A[N-1]=0; не там стоит. Еще замечания по коду:A[p]=A[p+1]; - здесь происходит выход за границы массива, float A[N]; - объявляется до указания N отличного от нуля(в данном случае массив с нулевой длиной).
Работающий вариант будет таким:
int i=0; int p=0;
for (i=0,p=0; i<N-1; i++){
if (A[i]==0){
p=i;
for(p=i;p<N-1;p++) {
A[p]=A[p+1];
}
A[N-1]=0;
}
}
Можно конечно улучшить.