动态数组中的最大值

时间:2015-01-15 06:50:48

标签: c

我的程序应计算在while循环中更改的变量的许多值,将这些值存储在Array中,然后搜索最大值。

我遇到的问题是没有存储值,当循环递增时,新的计算值会破坏先前的值,然后我如何比较它们?

我只知道要存储的scanf,但在这种情况下它不起作用,我应该使用另一个指针来遍历数组值???

////解决问题的简单程序!!!

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

float *tab;
int main()
{
float a;
a=-1;
int i;
float tab[maxi]=0;
int taille=10;

for (i=0;i<taille; i++)
{
   while (a < 30)
     {
   float s= -a*a+a+1;
   tab=(float(*)) malloc(taille*sizeof (float));
   tab[i]=s;

   if(tab[i]>= tab[maxi])
   {
       maxi=tab[i];
       printf("\n maxi=%f",maxi);
       break;
   }
   a=a+1;
     }

 }

  return 0;
}

提前感谢!

3 个答案:

答案 0 :(得分:0)

这不起作用,因为您在循环中一次又一次地分配数组,因此每个分配都会覆盖(替换)先前的分配。语句&#39; float tab [maxi] = 0;&#39;写入未分配的内存(你有一个分段错误或类似的?)

你想要做的事情的逻辑并不清楚,但以下至少是正确的C:

float *tab;
int main()
{
    float a= -1.0;
    int i;
    int taille=10;
    int maxi= taille-1;

    tab=(float *) malloc(taille*sizeof(float));
    tab[maxi]= 0;

    for (i=0;i<taille; i++)
    {
        while (a < 30)
        {
            float s= -a*a+a+1;
            tab[i]=s;

            if(tab[i]>= tab[maxi])
            {
                maxi=tab[i];
                printf("\n maxi=%f",maxi);
                break;
            }
            a=a+1;
        }
    }
    return 0;
}

P.s。:循环while(a <30)确实每次都覆盖tab [i]。我认为这是你想要的,不是你可能正在寻找的错误(其中之一)。

答案 1 :(得分:0)

正如我所假设的,在查看你的printf时,你想要以maxi存储最大数量? tab [maxi]给出数组中的(maxi + 1)个数字,而不是最大数字。

当你比较所有数字时,如果它们比数组中的maxi + 1数字更大。 你说,你想存储所有数字,然后搜索最大的数字。

在这种情况下,您可以使用变量

float maxi=0;

将此变量与每个新数字进行比较。如果数字较大,则覆盖它,如果不是,则不执行任何操作。

if(tab[i]>= maxi) maxi=tab[i];

你的printf在循环之后,当你完成比较所有数字时。在你知道所有数字之前,你的搜索/打印最大数量。

答案 2 :(得分:0)

谢谢大家! 实际上,Kai建议这很简单:使用变量maxi  这是程序,它的工作原理:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>

float *tab;
int main()
{
float a= -1;
int i;
int taille=10;

tab=(float *) malloc(taille*sizeof(float));
float maxi=0;

for (i=0;i<taille; i++)
{
    while (a < 10)
    {
        float s= -a*a+a+1;
        tab[i]=s;

        if(tab[i]>= maxi)
        {
            maxi=tab[i];
            break;
        }
        a=a+1;
    }

}
printf("\n maxi=%f",maxi);
return 0;

}