C 动态数组中的最大值

C 动态数组中的最大值,c,C,我的程序应该计算在while循环中变化的变量的许多值,将这些值存储在数组中,然后搜索最大值 我面临的问题是,这些值没有存储,当循环递增时,新计算的值会压碎之前的值,然后如何比较它们 我只知道scanf要存储,但在这种情况下它不起作用,我应该使用另一个指针来遍历数组值吗 ////简单的程序来解释问题 #include <stdio.h> #include <stdlib.h> #include<math.h> float *tab; int main() {

我的程序应该计算在while循环中变化的变量的许多值,将这些值存储在数组中,然后搜索最大值

我面临的问题是,这些值没有存储,当循环递增时,新计算的值会压碎之前的值,然后如何比较它们

我只知道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;
}
#包括
#包括
#包括
浮动*选项卡;
int main()
{
浮动a;
a=-1;
int i;
浮动选项卡[maxi]=0;
int taille=10;
对于(i=0;i=tab[maxi])
{
maxi=tab[i];
printf(“\n maxi=%f”,maxi);
打破
}
a=a+1;
}
}
返回0;
}

提前谢谢

这不起作用,因为您在循环中一次又一次地分配数组,所以每次分配都会覆盖(替换)以前的分配。语句“float tab[maxi]=0;”写入未分配的内存(是否存在分段错误?)

您想做什么的逻辑并不清楚,但以下内容至少是正确的:

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;
}
float*选项卡;
int main()
{
浮动a=-1.0;
int i;
int taille=10;
int maxi=taille-1;
tab=(浮动*)malloc(taille*sizeof(浮动));
tab[maxi]=0;
对于(i=0;i=tab[maxi])
{
maxi=tab[i];
printf(“\n maxi=%f”,maxi);
打破
}
a=a+1;
}
}
返回0;
}

注意:循环while(a正如我所假设的,当查看printf时,您想将最大数量存储在maxi中吗? tab[maxi]提供数组中的第(maxi+1)个数字,而不是最大数字

此时比较所有数字,如果它们大于数组中的最大值+1个数字。 你说,你想存储所有的数字,然后搜索最大的一个

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

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

if(tab[i]>= maxi) maxi=tab[i];
当您比较完所有数字后,您的printf将出现在循环之后。此时,您正在搜索/打印最大数字,甚至在您知道所有数字之前。

谢谢大家! 实际上,正如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;
#包括
#包括
#包括
浮动*选项卡;
int main()
{
浮点数a=-1;
int i;
int taille=10;
tab=(浮动*)malloc(taille*sizeof(浮动));
浮点最大值=0;
对于(i=0;i=maxi)
{
maxi=tab[i];
打破
}
a=a+1;
}
}
printf(“\n maxi=%f”,maxi);
返回0;

}

标准警告:请输入
malloc()
的返回值。什么是
maxi
?这甚至可以编译吗?这不会编译。没有maxi。需要定义它。(float(*)应该是什么意思?(float*)应该足够了。您的声明不是很清楚。请提供您为什么在每个循环迭代中
malloc
的任何注释?