如何规范化数据和清除数组

How to normalize data and clear array

你好,我写了一个小程序,让我从菜单中选择我想做的事情,即查看、输入值、计算等。它完成了我要求它做的大部分事情,所以我在正确的轨道上.但是,有几件事我不知道如何解决。

  1. 当我输入值并退出时。当我重新输入时,它再次从 0 开始,好像一切都被清除了。我想从我离开的地方开始。第二。我想将 MAX 10 个值作为输入。应该是进不去了吧。我想改用我的函数擦除数组。

  2. 我正在尝试计算标准化值,但程序每次都退出。


#include <stdio.h>
#define LENGTH 10

int enterMeasurements();
void printArray();
int minValue();
int maxValue();
float avgValue();
void normValue();

int main(void)
{
   char input;
   int nrMeasurements=0;
   int arrayTable[LENGTH] = {0};
   int normTable[LENGTH] = {0};
   int max, min, norm;
   float avg;
   //main menu
   do
   {

      printf("\nMeasurement tool 1.0\n");
      printf("V for (View)\n");
      printf("E for (Enter Values)\n");
      printf("C for (Compute Values)\n");
      printf("R for (Reset Values)\n");
      printf("Q for (Quit)\n");
      printf("\nEnter input: ");
      scanf(" %c", &input);

      if(input == 'v' || input == 'V')
      {
         // function to print array values
         printArray(arrayTable, nrMeasurements);
      }
      else if(input == 'e' || input == 'E')
      {
         // enter values here
         nrMeasurements = enterMeasurements(arrayTable,nrMeasurements);
      }
      else if (input == 'c' || input == 'C')
      {
         // enter function to calc min, max and avg and prints it.
         max = maxValue(arrayTable, nrMeasurements);
         min = minValue(arrayTable, nrMeasurements);
         avg = avgValue(arrayTable, nrMeasurements);
         printf("Maximum value is: %d\n", max);
         printf("Minimum value is: %d\n", min);
         printf("Average value is: %.2f\n", avg);
         normValue(normTable, nrMeasurements);


      }
      else if (input == 'r' || input == 'R')
      {
         // enter function that erase the entire array.
         printf("[   erase array   ]\n");
      }
   }
   while (input !='q' && input != 'Q');
   return 0;
}

int enterMeasurements(int arrayTable[], int nrMeasurements)
{
   int i;

   for (i = 0; i < LENGTH; i++)
   {
      printf("Enter Measurement #%i (or 0): ", i+1);
      scanf("%d", &arrayTable[i]);


      if (arrayTable[i] == 0 )
         break;
   }
   return i;
}

void printArray(int arrayTable[], int nrMeasurements)
{
   int i;

   for (i = 0; i < nrMeasurements; i++)
   {
      printf(" array[%2d] : %d\n", i, arrayTable[i]);
   }
}

int maxValue(int arrayTable[], int nrMeasurements)
{
   int i, max;
   max = arrayTable[0];
   for (i=1; i<nrMeasurements; i++)
   {
      if (arrayTable[i]>max)
      {
         max=arrayTable[i];
      }
   }
   return(max);
}

int minValue(int arrayTable[], int nrMeasurements)
{
   int i, min;
   min = arrayTable[0];
   for (i=1; i<nrMeasurements; i++)
   {
      if (arrayTable[i]<min)
      {
         min=arrayTable[i];
      }
   }
   return(min);
}

float avgValue(int arrayTable[], int nrMeasurements)
{
   int sum,i;
   float avg;
   sum=0;
   avg=0;

   for (i=0; i<nrMeasurements;i++)
   {
      sum=sum+arrayTable[i];
      avg=(float)sum/(i+1);
   }
   return(avg);
}

void normValue(int min, int max, int avg, int arrayTable[], int nrMeasurements, int normTable[])
{
   int i;

   for (i=0; i<nrMeasurements; i++)
   {
      normTable[i]=(arrayTable[i]-min)/ (max-min);
   }
   for (i=0; i<10; i++)
      printf("Normalized Values: %d\n", normTable[i]);
}

when i enter values and exit. When i re-enter it starts from 0 again, as if everything cleared.

发生这种情况是因为您总是在 enterMeasurements 中从 i = 0; 开始。您需要将其初始化为参数 nrMeasurements.

im trying to compute normalized values but program quits everytime.

发生这种情况很可能是因为您没有向 normValue 传递足够的参数。

将调用更改为:

normValue(min, max, avg, arrayTable, nrMeasurements, normTable);

您应该更新函数声明以包含所有参数。这样可以避免上述错误。

int enterMeasurements(int arrayTable[], int nrMeasurements);
void printArray(int arrayTable[], int nrMeasurements);
int minValue(int arrayTable[], int nrMeasurements);
int maxValue(int arrayTable[], int nrMeasurements);
float avgValue(int arrayTable[], int nrMeasurements);
void normValue(int min, int max, int avg, int arrayTable[], int nrMeasurements, int normTable[]);