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