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