Ввести массив целых чисел, количество элементов которого заранее неизвестно - C (СИ)
Формулировка задачи:
Ввести массив целых чисел, количество элементов которого заранее неизвестно. Признаком конца ввода массива является ввод последовательности из одного положительного, одного отрицательного числа и одного нуля. Вывести массив на экран.
Заранее спасибо.
Решение задачи: «Ввести массив целых чисел, количество элементов которого заранее неизвестно»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
main()
{
int *Array;
int *PArray;
int Num, i, flag;
i = 0;
flag = 1;
while ( flag != 0 )
{
printf("Enter number (%d):",i);
scanf("%d",&Num);
i++;
PArray = (int*) realloc( Array , i*sizeof(int));
Array = PArray;
Array[i-1] = Num;
if ( i >= 3 )
{
int l, g, count1,count2,count3;
g = i - 1;count1 = 0;
count2=0;count3 = 0;l = i - 3;
for ( ; g >= l ; g-- )
{
if ( Array[g] == 0 && count1 != 1) count1++;
if ( Array[g-1] < 0 && count2 != 1) count2++;
if ( Array[g-2] > 0 && count3 != 1) count3++;
if ( (count1+count2+count3) == 3 )flag = 0;
}
}
}
int k;
k = 0;
for ( ; k < i ; k++ )
printf("%d\n",Array[k]);
free(Array);
}
Объяснение кода листинга программы
В этом коде:
- Объявлены следующие переменные:
Array- указатель на массив целых чисел, размер которого будет увеличиваться динамически.PArray- указатель наArray, используется для безопасного освобождения памяти.Num- переменная для ввода числа.i- счётчик, отсчитывающий количество введенных чисел.flag- флаг, который сбрасывается при выполнении определенного условия.
- В цикле
whileпроисходит следующее:- Выводится сообщение с приглашением к вводу числа.
- Пользователь вводит число, которое сохраняется в переменной
Num. - Счётчик
iувеличивается на 1. - Динамически выделяется память под новый элемент массива.
- Указатель
Arrayобновляется, чтобы указывать на новый блок памяти. - Новый элемент массива инициализируется значением введенного числа.
- Если размер массива превышает 3, то проверяется условие: если в первых трёх элементах массива подряд встречаются 0, -1 и 1, то флаг сбрасывается.
- После выхода из цикла
whileвыполняется следующее:- Переменная
kинициализируется нулем. - В цикле
forвыводятся все элементы массива. - Массив освобождается с помощью функции
free.
- Переменная