我的程序应计算在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;
}
提前感谢!
答案 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;
}