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

时间:2016-09-21 18:46:29

标签: c arrays normalization func

您好我已经写了一个小程序,让我从菜单中选择我想要做的事情,即查看,输入值,计算等等,它正在做我要求的大部分内容,所以我在正确的轨道上。但是,有一些我不知道如何解决的问题。

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

  2. 我试图计算规范化的值但程序每次都退出。

  3. #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]);
    }
    

1 个答案:

答案 0 :(得分:0)

  

当我输入值并退出时。当我重新进入时,它再次从0开始,好像一切都已清除。

这是因为您总是从i = 0; enterMeasurements开始。您需要将其初始化为句子nrMeasurements

  

我试图计算标准化值,但程序每次都退出。

这很可能是因为你没有向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[]);