Удалить элементы массива значения которых находятся в заданном интервале - 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. В результате выполнения этого кода элементы массива, значения которых находятся в заданном интервале, будут удалены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д