Ввести массив целых чисел количество которых неизвестно - 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;
}

Объяснение кода листинга программы

В этом коде реализована простая версия программы для поиска суммы элементов массива, вводимых пользователем, которые кратны определенному числу.

  1. Первые 4 строки подключают необходимые библиотеки.
  2. Следующие 7 строк инициализируют переменные:
    • p - указатель на первый элемент массива (по умолчанию равен NULL - указателю на ничто).
    • i - счетчик количества введенных чисел (начальное значение равно 0).
    • SrArph - сумма элементов массива (по умолчанию равна 0).
    • Summa - сумма элементов массива (по умолчанию равна 0).
    • X - число, на которое должны быть кратны элементы массива (значение вводится пользователем).
    • m - текущее вводимое число.
    • z - количество введенных чисел (начальное значение равно 0).
  3. Следующая строка выводит сообщение с призывом к вводу ограничения.
  4. Строка 27 входит в цикл do, который продолжается до тех пор, пока не будет введено число, делящееся на X.
    • Внутри цикла:
      • Переменная Summa инициализируется как сумма элементов массива.
      • Указатель p динамически перераспределяется для выделения памяти под новый элемент массива.
      • Пользователю предлагается ввести число.
      • Введенное число сохраняется в массиве и к его сумме добавляется значение введенного числа.
      • Переменная z обновляется значением i, чтобы сохранить количество введенных чисел.
      • Для каждого элемента массива (кроме последнего) вычисляется сумма элементов и проверяется, делится ли она на (i+1). Если да, то число делится на X.
      • Если сумма элементов делится на X, то цикл прерывается.
      • Значение i увеличивается на 1.
  5. Строки 38-41 выводят на экран введенные числа.
  6. Строка 42 освобождает память, выделенную под массив.
  7. Строка 43 ожидает нажатия клавиши пользователем.
  8. Строка 44 возвращает 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.6 из 5
Похожие ответы