回 帖 发 新 帖 刷新版面

主题:[求教高手]请 帮忙看一下这个小程序,回帖就送分咯,又有个新问题,在线等待

给定的一组数据:
-0.01449  -0.00292   0.03463  0.01477  -0.00858  -0.01722   0.38189   1.77858   7.68584   19.0037   39.1743   73.0698  114.125   68.2112   62.7339  111.001   184.842   208.947   301.991   326.115    352.304    350.761   371.127    391.303
395.99   385.17
要求求出最大值和正的最小值
我编写的程序如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a[26][1];
float m,n;
int i,j,k,c;
FILE *stream1=fopen("s.txt","r");
{
for(i=0;i<=24;i++)
{
fscanf(stream1,"%f\n",&a[i][0]);
}
for(j=1;j<=24;j++)
{
m=a[0][0];
if(m<a[j][0]) m=a[j][0];
}
[color=FF0000]for(j=0;j<=24;j++)
{
{if(a[j][0]>=0) a[k][0]=a[j][0];k++; }
n=a[0][0];
for(c=0;c<=k;c++)
{
if(n>a[c][0]) n=a[c][0];
}[/color]}
fclose(stream1);
}
Edit1->Text=FloatToStr(m);
Edit2->Text=FloatToStr(n);
}
请可谓帮助看看 错误出在哪里?
谢谢,
我 怎么就是运行不出正的最小值呢 ?
我运算出的结果怎么都都是小数点后有12位 啊?
哪个知道原因啊 ?
能否告知
谢谢 

回复列表 (共8个回复)

沙发

红颜色处是最小值的程序,m表示最大值,n表示正的最小值。谢谢各位!!!

板凳


是不是你的K参数没付值啊??

3 楼

k的 值使循环得出来得 啊,煤必要赋值啊,我 同学也都 统一我得 观点啊 。

4 楼

这是C++编写的吗?看起来好复杂呀!
可以不用数组的形式吗?
就一般的形式就可以了啊!
用上for的循环和if语句的套用就可以了啊!

5 楼

[quote]
for(j=1;j<=24;j++)
{
    m=a[0][0];
    if(m<a[j][0]) m=a[j][0];
}
[/quote]
第一,我感觉你最大值也求不出来吧,这个程序循环24次,每次循环,你都把m赋值a[0][0],那么最后是a[0][0]和a[24][0]相比较。

6 楼

[quote]
for(j=0;j<=24;j++)
{
   {if(a[j][0]>=0) 
    a[k][0]=a[j][0];
    k++;}
    n=a[0][0];
    for(c=0;c<=k;c++)
    {
        if(n>a[c][0]) 
        n=a[c][0];
     }
}
[/quote]
第二,你把大的值全部拿出来,重新赋给a[0][0]到a[k-1][0],这样不是很好吧
这个不是毛病,你的毛病是
if(a[j][0]>=0) 
{
    a[k][0]=a[j][0];
    k++;
}
大括号应该放在if(a[j][0]>=0)后面,而不是前面,记得事先赋值k=0哦。
同时要循环24次,应该为
for(j=0;j<=24;j++)
{
   if(a[j][0]>=0) 
   {
       a[k][0]=a[j][0];
       k++;
    }
}
n=a[0][0];
for(c=0;c<k;c++)
    {
        if(n>a[c][0]) 
        n=a[c][0];
     }
}

还有注意这个k++,那么a[k-1][0]是有的,而a[k][0]是不存在的,你好好考虑一下!
所以我将for(c=0;c<=k;c++)改成了for(c=0;c<k;c++)

7 楼

谢谢你的知道哦,我试了一下,很不错的,谢谢你!叫个朋友吧!

8 楼

又有了一个小问题,那就是为什么我运算的结果都是小数点后有12位 啊?
我怎么才能改写才能让他和给定的结果一样啊?
我试用了一下%.2f/n 语句怎么运算的结果完全不一样啊?
到底可以怎么改,等你来回答哦!

我来回复

您尚未登录,请登录后再回复。点此登录或注册