【问题标题】:Position of array element数组元素的位置
【发布时间】:2013-12-03 16:13:05
【问题描述】:

我正在开发应该找到数组的最小和最大元素位置的程序。我写的代码找到了最大和最小的元素,但我不知道如何找到它在数组中的位置。任何提示将不胜感激。

这就是我现在所拥有的:

int main ()
{
    int i;
    float a[8] = {
        1.90, 0.75, 3.30, 1.10, 2.00, 4.50, 0.80, 2.50
    }; /* array of ints */

    printf("\nValues are: \n");
    for(i = 0; i < 8; i++)
        printf("%.2lf\n", a[i]);

    float max = a[0];
    float min = a[0];

    for (i = 0; i < 8; i++) {
        if (a[i] > max) {
            max = a[i];
        } else if (a[i] < min) {
            min = a[i];
        }
    }
    printf ("Maximum element in an array : %.2f\n", max);
    printf ("Minimum element in an array : %.2f\n", min);
    return 0;
}

【问题讨论】:

  • 利用变量来保持位置的方式类似于您在查找maxmin 时所做的?
  • float a[8] = { ... }; /* array of ints */ O_o ??
  • 我修正了你的代码缩进。但是为什么你的评论说整数数组,当它是浮点数组时?
  • 您的for 循环应该从i = 1 开始,因为您使用第一个元素进行初始化。
  • @JonathonReinhart:你是对的,但它会按原样工作 - 但第一次迭代将毫无意义,因为 a[i] &gt; maxa[i] &lt; min 如果 i==0 不正确

标签: c


【解决方案1】:

你的程序看起来不错。您只需要记住 min 和 max 元素的索引,如下所示:

 int i_min = 0;
 int i_max = 0;
 if (a[i] > max) {
     max = a[i];
     i_max = i;
 } else if (a[i] < min) {
     min = a[i];
     i_min = i;
 }

然后打印出来。

您可以通过仅存储 min 和 max 元素的索引来稍微优化它,但这可能并不重要。

【讨论】:

    【解决方案2】:

    存储位置即i,而不是a[i]的内容

    min=max=0;
    for (i = 0; i < 8; i++)
    {
    
      if (a[i] > a[max])
        {
    
          max = i;
        }
    
      else if (a[i] < a[min])
        {
          min = i;
        }
    

    如果要打印最小和最大数字,可以打印a[min]a[max]

    【讨论】:

    • 用来比较元素位置和元素值。这不是正确的解决方案
    • 这是个好主意,但你的代码有问题。您应该比较,例如a[i] &gt; a[max]
    • oops..sorry :P 已修复
    • 注意minmaxint,它们代表数组中最小值和最大值的索引
    猜你喜欢
    • 2021-09-16
    • 2022-09-28
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    相关资源
    最近更新 更多