注册 登录
编程论坛 C语言论坛

编写程序求含有N个元素一维数组的最大值,最小值以及它们的下标。要求数组元素的输入,求最大值最小值及它们的下标通过函数实现,结果在主函数实现,只能用stdio.h

一只小萌新 发布于 2021-12-28 15:09, 2665 次点击
4 回复
#2
diycai2021-12-28 16:04
程序代码:
#include <stdio.h>
#define N    10
int array[N];
void getN()
{
    int i;
    for (i=0; i<N; i++)
    {
        scanf("%d", array+i);
    }
}
int getMax(int *index)
{
    int i, ret;
    ret = array[0];
    *index = 0;
    for (i=1; i<N; i++)
    {
        if (ret < array[i])
        {
            ret = array[i];
            *index = i;
        }
    }
    return ret;
}
int getMin(int *index)
{
    int i, ret;
    ret = array[0];
    *index = 0;
    for (i=1; i<N; i++)
    {
        if (ret > array[i])
        {
            ret = array[i];
            *index = i;
        }
    }
    return ret;
}
int main()
{
    int index;
    getN();//有多个最大或最小值仅输出下标最小的那个
    printf("最大下标为%d,值为%d\n", index, getMax(&index));
    printf("最小下标为%d,值为%d\n", index, getMin(&index));
    return 0;
}
#3
lin51616782021-12-28 18:02
回复 2楼 diycai
printf("最大下标为%d,值为%d\n", index, getMax(&index));
这个做法会导致未定义行为
结果没意义
备注就算符合预期也没意义
#4
rjsp2021-12-28 19:41
printf("最大下标为%d,值为%d\n", index, getMax(&index));
这个做法会导致未定义行为
结果没意义
备注就算符合预期也没意义

我来解释一下,
首先,C/C++标准并没有规定参数入栈顺序,所以并不能确保先评估 getMax(&index),再评估 index。
最重要的是,参数入栈顺序 与 参数评估顺序 之间毫无关系,一丝丝的相关性都没有。
举个例子,fun( fun1(), fun2(), fun3() ) 即便ABI能确保参数入栈顺序是从右向左,fun1(), fun2(), fun3() 的调用顺序依然是不确定的,如果它们之间有调用顺序的依赖,那么其行为结果未定义。
#5
一只小萌新2021-12-28 21:42
回复 3楼 lin5161678
谢谢大佬了
1