Удалить элементы массива значения которых находятся в заданном интервале - C (СИ)
Формулировка задачи:
Добрый вечер! Пожалуйста, помогите найти ошибку. При А>0 всё работает нормально, а при А<=0 прога зацикливается.
#include <stdlib.h>
#define N 10
int main ()
{
int a[N], i, A, B, j, z=1;
for (i=0; i<N; i++)
{
a[i]=rand()%10-5;
printf ("%d \t", a[i]);
}
printf("a = ");
scanf("%d",&A);
printf("b = ");
scanf("%d",&B);
while (z!=0){
z=0;
for (i=0; i<N; i++)
if (a[i]>=A && a[i]<=B) {
z++;
for (j=i; j<N-1; j++) a[j]=a[j+1];
a[N-1]=0;
}
}
for (i=0; i<N; i++) printf ("%d \t", a[i]);
}Решение задачи: «Удалить элементы массива значения которых находятся в заданном интервале»
textual
Листинг программы
int n=N;
for (i=0; i<n; i++)
if (a[i]>=A && a[i]<=B)
{
for (j=i; j<n-1; j++)
a[j]=a[j+1];
n--; // количество элементов уменьшилось на 1
i--; // на текущей позиции новый элемент, его тоже надо проверить
}
for (i=0; i<n; i++)
printf ("%d \t", a[i]);
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- В первой строке подставляется значение N в переменную n.
- Запускается цикл от 0 до n-1.
- Для каждого элемента массива проверяется условие: значение элемента должно быть больше или равно A и меньше или равно B.
- Если условие выполняется, то запускается внутренний цикл, который перемещает все элементы, начиная с текущей позиции и до n-2, на одну позицию вправо.
- Переменная n уменьшается на 1, так как один элемент удален.
- Условие проверки текущего элемента также перемещается на одну позицию вправо.
- После завершения внешнего цикла выводится на экран каждый элемент массива с помощью функции printf. В результате выполнения этого кода элементы массива, значения которых находятся в заданном интервале, будут удалены.