найти сумму, мин, макс с массивом - PullRequest
1 голос
/ 23 августа 2010

Напишите программу, которая вводит число значений, затем вводит эти значения (двойной тип) одно за другим в цикле и, наконец, выводит их сумму, максимальное значение и минимальное значение.

Я пишу код для этого назначения, но я получил ошибку

#include <stdio.h>

int main(void)
{
        float a;
        float i;
        short c;
        float sum;
        float nu[];

        i=nu[];

          printf("Number of values :");
          scanf("%f",&i);

        for (c=1;i>=c;c++)
        {
          printf("values=");
          scanf("%f",&nu[c]);

                sum = sum + nu[c];
        //      printf("Sum = %f\n",sum);
        }

        printf("sum = %f \n",sum);
//      printf("Number of values :");
//      scanf("%f",&i);
}

ошибка номер.c: в функции «main»: number.c: 9: ошибка: в массиве отсутствует размер массива number.c: 11: ошибка: ожидаемое выражение перед маркером ‘]’

Ответы [ 6 ]

10 голосов
/ 23 августа 2010

В C вам нужно указать размеры ваших массивов, например, с помощью float nu[100];, но вы ошибаетесь, если не хотите хранить все эти значения. Минимум, максимум и сумма могут быть рассчитаны на лету без необходимости возвращаться и извлекать любые предыдущие числа.

Все, что вам нужно сделать, это ввести их по одному и для каждого:

  • если это первое или большее значение текущего максимума, установите для него максимальный ток.
  • если это первое или меньшее значение текущего минимума, установите для него текущий низкий уровень.
  • добавить его к сумме.

Между прочим, сумму следует инициализировать нулем, чтобы начать с.

В терминах псевдокода, начните с этого:

set sum, high and low all to zero

scan "number of values" into count

for curr = one to count, inclusive:
    scan "current number" into num

    set sum to sum + num

    if curr is one, or num is less than low:
        set low to num

    if curr is one, or num is greater than high:
        set high to num

output "Minimum = " low
output "Maximum = " high
output "Sum     = " sum

И лучший способ понять это - взять лист бумаги (очень нетехнический) и составить таблицу, подобную этой:

+-----+------+-----+-----+-------+------+
| sum | high | low | num | count | curr |
+-----+------+-----+-----+-------+------+
|     |      |     |     |       |      |
|     |      |     |     |       |      |
|     |      |     |     |       |      |
|     |      |     |     |       |      |
|     |      |     |     |       |      |
+-----+------+-----+-----+-------+------+

Затем пошагово запустите эту программу через свою голову, вводя или изменяя значения в этой таблице по мере продвижения. Вы даже сможете обнаружить, когда используете неинициализированные значения, например, если вы столкнулись с set sum to sum + curr, если столбец sum был пустым.

Вы будете удивлены, как быстро вы начнете думать, как компьютер, просто надеюсь, что он не вытеснит все эти социальные навыки из головы: -)

0 голосов
/ 27 августа 2010

Или это

#include <stdio.h>

int main(void)

{ 
 float temp;
 int val,i,j,k;

 double sum = 0;

 double number[val];

 printf("Enter the number of values: ");

 scanf("%d", &val);

 double number[val];

 for(i=1; i <= val ;i++)

 { 

  printf("enter a value: ");

  scanf("%lf", &number[i]);

  sum = sum + number[i];

 }

 for(i=1;i<=val;i++)

{


 for(j=i+1;j<=val;j++)

  {

   if(number[i] > number[j])

   { 

    temp=number[i];

    number[i]=number[j];

    number[j]=temp;

    }


}


 }

 printf("Sum = %.lf\n", sum);


 printf ("Maximum element: %f\n",number[val]);  


        printf ("Minimum element: %lf\n", number[1]);  

}
0 голосов
/ 27 августа 2010

Попробуйте это ...

#include <stdio.h>

int main(void)

    {   
        float temp;
        int val,i,j,k;
        double sum = 0;
        double max,min;


        printf("Enter the number of values: ");
        scanf("%d", &val);
        double number[val];

        for(i=0; i < val ;i++)
        { 
            printf("enter a value: ");
            scanf("%lf", &number[i]);
            sum = sum + number[i];
        }

        min = number[0];
        max = number[0];

        for(j=0;j<val;j++)
        {
            if(number[j] < min)
            min = number[j];
        }


        for(k=0;k<val;k++)
        {
               if(number[k] > max)
            max = number[k];
        }

        printf("Sum = %.lf\n", sum);

        printf ("Maximum element: %.f\n",max);  

            printf ("Minimum element: %.lf\n",min);  

    }
0 голосов
/ 23 августа 2010

Если вы не знаете размер массива ранее, используйте динамическое распределение.

замените

float nu[];

i=nu[];

printf("Number of values :");
scanf("%f",&i);

на:

float *nu=0;
printf("Number of values :");
scanf("%f",&i);
nu=malloc(i*sizeof*nu); if(!nu) fprintf(stderr,"not enough memory"),exit(1);
...
free(nu);
0 голосов
/ 23 августа 2010

Сначала необходимо ввести i:

scanf("%f",&i);

, а затем объявить массив:

float nu[i];
0 голосов
/ 23 августа 2010
  • Избавьтесь от строки "i = nu []".
  • Убедитесь, что вы инициализируете передаваемый массив соответствующим количеством элементов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...