Ввести массив целых чисел количество которых неизвестно - C (СИ)
Формулировка задачи:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
int _tmain(void)
{
int *p = NULL;
int i=0;
int SrArph, X, m, z=0;
printf("Vvedite ogranichenie ");
scanf_s("%d",&X);
while ( p[i]!=0 )
{
p = (int*)realloc(p, sizeof(p) + sizeof(int));
printf("\nVvedite chislo ");
scanf_s("%d",&m);
p[i]=m;
z=i;
SrArph=( p[i]/(i+1) );
if(SrArph==X)
{ break; }
i++;
}
for(int i=0; i<z; i++)
{
printf("%d",p[i]);
}
free(p);
system("pause");
return 0;
}Решение задачи: «Ввести массив целых чисел количество которых неизвестно»
textual
Листинг программы
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int *p=NULL;
int i=0,j;
int SrArph, Summa=0, X, m, z=0;
printf("Vvedite ogranichenie ");
scanf_s("%d",&X);
do
{
Summa = 0;
p = (int*)realloc(p, sizeof(p) + sizeof(int));
printf("\nVvedite chislo ");
scanf_s("%d",&m);
p[i]=m;
z=i;
for(j=0;j<=i;j++)
{
Summa += p[j];
SrArph = Summa / (i+1);
}
if(SrArph==X)
{ break; }
i++;
}
while ( p[i]!=0 );
printf("Vvedonnoe:\n");
for(int i=0; i<=z; i++)
{
printf("%d\n",p[i]);
}
//free(p);
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде реализована простая версия программы для поиска суммы элементов массива, вводимых пользователем, которые кратны определенному числу.
- Первые 4 строки подключают необходимые библиотеки.
- Следующие 7 строк инициализируют переменные:
p- указатель на первый элемент массива (по умолчанию равенNULL- указателю наничто).i- счетчик количества введенных чисел (начальное значение равно 0).SrArph- сумма элементов массива (по умолчанию равна 0).Summa- сумма элементов массива (по умолчанию равна 0).X- число, на которое должны быть кратны элементы массива (значение вводится пользователем).m- текущее вводимое число.z- количество введенных чисел (начальное значение равно 0).
- Следующая строка выводит сообщение с призывом к вводу ограничения.
- Строка 27 входит в цикл
do, который продолжается до тех пор, пока не будет введено число, делящееся наX.- Внутри цикла:
- Переменная
Summaинициализируется как сумма элементов массива. - Указатель
pдинамически перераспределяется для выделения памяти под новый элемент массива. - Пользователю предлагается ввести число.
- Введенное число сохраняется в массиве и к его сумме добавляется значение введенного числа.
- Переменная
zобновляется значениемi, чтобы сохранить количество введенных чисел. - Для каждого элемента массива (кроме последнего) вычисляется сумма элементов и проверяется, делится ли она на
(i+1). Если да, то число делится наX. - Если сумма элементов делится на
X, то цикл прерывается. - Значение
iувеличивается на 1.
- Переменная
- Внутри цикла:
- Строки 38-41 выводят на экран введенные числа.
- Строка 42 освобождает память, выделенную под массив.
- Строка 43 ожидает нажатия клавиши пользователем.
- Строка 44 возвращает 0, что означает успешный конец работы программы.