ilsoviet1917 发表于 2017-12-29 19:32:45

求问,这个程序怎么选最小数。

#include <stdio.h>

int main (void)
{
        int Y, M;
        int i, j;
        float min = 0, max = 0;
       
        float pm = {
                {0, 0, 0, 0, 0, 0, 0, 31},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34}
        };
        float *p = pm;
       
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 8; j++)
                {
                        if (max < pm){
                                max = pm;
                        }
                }
        }
       
        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 8; j++)
                {
                       
                }
        }
       
       
        printf ("%.2f\n%.2f\n", max, min);

        return 0;
}

min怎么求?要求数值为0的元素不参与比较。试了几次都得不出正确答案。

ilsoviet1917 发表于 2017-12-29 19:33:07

第26-32行

3-3 发表于 2017-12-29 21:28:11

本帖最后由 3-3 于 2018-1-1 14:38 编辑

#include <stdio.h>

int main (void)
{
      int Y, M;
      int i, j;
      float min, max ;
      
      float pm = {
                {0, 0, 0, 0, 0, 0, 0, 31},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34}
      };
                max = pm;
      float *p = pm;
      
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 8; j++)
                {
                        if (max < pm){
                              max = pm;
                        }
                }
      }
                min = max ;
      
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 8; j++)
                {
                                       
                      if (min > pm &&0 != pm){
                              min = pm;
                        }
                        
                }
      }
      
      
      printf ("%.2f\n%.2f\n", max, min);

      return 0;
}


初值的选取是关键。 要求max,,那么max的初值应该是最小;要求出min ,那么min的初值应该是最大。

人造人 发表于 2017-12-29 22:48:08

#include <stdio.h>

int main(void)
{
        int i, j;
        double min = 0;
        double pm =
        {
                {0, 0, 0, 0, 0, 0, 0, 31},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34}
        };

        for(i = 0; i < 3; i++)
        {
                for(j = 0; j < 8; j++)
                {
                        if(pm != 0)
                        {
                                min = pm;
                                goto FIRST_DONE;
                        }
                }
        }       
FIRST_DONE:

        for(i = 0; i < 3; i++)
        {
                for(j = 0; j < 8; j++)
                {
                        if(pm != 0)
                        {
                                if(pm < min)
                                {
                                        min = pm;
                                }
                        }
                }
        }

        printf("%.2lf\n", min);

        return 0;
}


20.50
请按任意键继续. . .

ilsoviet1917 发表于 2018-1-1 11:04:25

人造人 发表于 2017-12-29 22:48


为啥FIRST_DONE:后面啥也没有?

ilsoviet1917 发表于 2018-1-1 11:08:53

3-3 发表于 2017-12-29 21:28
#include

int main (void)


if (min > pm &&0 != pm){
                              min = pm;

pm是二维数组呀,为啥只用pm

李星 发表于 2018-1-1 13:36:30

ilsoviet1917 发表于 2018-1-1 11:04
为啥FIRST_DONE:后面啥也没有?

那就是个标签啊!遇到goto就直接跳到标签那里。

李星 发表于 2018-1-1 13:44:39

你在求最小的代码里面的最前面加一个判断
如果你数组的值等于0就跳过这次循环比较。。。。。

{
    if(!pm[][])
          continue;
      
if (mix>pm[][])
         mix =pm[][];
   

}


手机党请见谅!!!!!!

人造人 发表于 2018-1-1 14:06:11

ilsoviet1917 发表于 2018-1-1 11:04
为啥FIRST_DONE:后面啥也没有?

不需要有呀
第一个循环就是寻找不是0的第一个数,二层循环用break比较费劲,直接goto出去

3-3 发表于 2018-1-1 14:39:47

ilsoviet1917 发表于 2018-1-1 11:08
if (min > pm &&0 != pm){
                              min = pm;



我提交的代码 是:

if (min > pm &&0 != pm)
   min = pm;

不知道为什么,颜色变红以后始终没法正确显示。   这就是可以正确运行的代码。

OllyDbg123 发表于 2018-1-1 17:30:31

#include <stdio.h>

int main (void)
{
      int Y, M;
      int i, j;
//      float min = 0, max = 0;
      float pm = {
                {0, 0, 0, 0, 0, 0, 0, 31},
                {59.8, 54.9, 33.1, 38.2, 26.6, 20.5, 27.8, 38},
                {34.9, 36.4, 47.5, 37.9, 30.6, 23.4, 26.6, 34}
      };
      float max = pm;
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 8; j++)
                {
                        if (max < pm){
                              max = pm;
                        }
                }
      }
      float min = max;
      for (i = 0; i < 3; i++)
      {
                for (j = 0; j < 8; j++)
                {
                  if (min > pm && pm != 0){
                        min = pm;
                  }
                }
      }
      printf ("%.2f\n%.2f\n", max, min);
      return 0;
}
页: [1]
查看完整版本: 求问,这个程序怎么选最小数。