【问题标题】:How to normalize data and clear array如何规范化数据和清除数组
【发布时间】:2017-01-30 03:52:43
【问题描述】:

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

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

【问题讨论】:

  • 请不要以使答案毫无意义的方式编辑您的帖子。随着您的更新,我的答案中告诉在顶部添加声明的部分不再有意义。

标签: c arrays normalization func


【解决方案1】:

当我输入值并退出时。当我重新输入时,它又从 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[]);

【讨论】:

  • 嗨@R Sahu 感谢您的帮助。 i = nrMeasurements 解决了我的问题。其次,我正确地声明了所有内容,但现在它没有编译。对于normValue(normTable, nrMeasurements); 行,我收到一条错误消息,说函数调用的参数太少。这是什么意思?
  • @R Sahu 再次感谢您。抱歉,我不应该编辑帖子。然而,回到我得到标准化值的问题,例如 0、0、0、1。这是在数组中输入 1、2、3、4。我的功能有问题吗?
  • @Alex,这很可能是整数除法的结果。您应该将标准化值更改为 float 或 double,并确保更新计算它们的行以使用浮点除法。
  • @R Sahu 嗯我试过了,现在我可以得到负数和十进制数,但是即使所有输入的值都不同,它们都会变成相同的值,比如 -0.10。有没有办法得到整数和/或负数?
  • @Alex,尝试使用调试器。我很难看出问题出在哪里。
猜你喜欢
  • 2014-12-23
  • 2020-07-05
  • 2023-03-17
  • 2021-06-18
  • 1970-01-01
  • 2020-05-04
  • 2018-10-30
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多