迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C语言 >

C 语言中的 MIN 和 MAX 函数

作者:迹忆客 最近更新:2023/03/27 浏览次数:

本篇文章将讨论使用宏或循环在 C 语言中实现 MINMAX 函数。


C 语言中的 MINMAX 函数

MINMAX 函数用于从两个值中找到最小和最大数,并且在 C 语言中未预定义。如果我们想使用 MINMAX 函数,我们必须在 C 语言中定义它们。

我们可以使用宏来定义 C 语言中的 MINMAX 函数。宏是用于定义变量值和函数的代码段。

当我们调用宏时,它会被它的值或函数替换。例如,我们可以定义像 PI 这样的变量的值,当我们在代码中使用名称 PI 时,名称将被其值替换。

我们也可以将宏定义为一个函数,如果我们在代码中写下它的名字就会被调用。我们使用 #define 关键字在 C 语言中定义宏。

例如,让我们使用 C 语言宏定义 MINMAX 函数。请参阅下面的代码。

#include <stdio.h>
#define MIN(i, j) (((i) < (j)) ? (i) : (j))
#define MAX(i, j) (((i) > (j)) ? (i) : (j))
int main()
{
    printf("Min = %d\n",MIN(0,10));
    printf("Max = %d",MAX(0,10));
    return 0;
}

输出:

Min = 0
Max = 10

在上面的代码中,? symbol 是三元运算符,用于代替 if-else 语句。如果三元运算符之前的条件为真,则输出将等于冒号:的左侧,如果条件为假,则输出将等于冒号:的右侧。

在上面的代码中,我们使用了括号,因为输入也可以是诸如 a+b 这样的表达式,如果我们不使用括号,输出会发生变化。我们也可以使用 if-else 语句代替三元运算符。

上面的代码会在我们在函数内部传递表达式的双重评估副作用的情况下产生问题。我们可以使用 __typeof__ 命令来定义 MINMAX 函数来避免上述问题,给我们更多的安全和更少的错误。

__typeof__ 命令指的是表达式的类型。我们可以使用带有表达式和类型的 typeof 命令。

例如,让我们使用 __typeof__ 命令定义上述 MINMAX 函数。请参阅下面的代码。

#include <stdio.h>
#define MAX(x,y) \
       ({ typeof (x) _x = (x); \
           typeof (y) _y = (y); \
         _x > _y ? _x : _y; })

#define MIN(x,y) \
       ({ typeof (x) _x = (x); \
           typeof (y) _y = (y); \
         _x < _y ? _x : _y; })
int main()
{
    printf("Min = %d\n",MIN(0,10));
    printf("Max = %d",MAX(0,10));
    return 0;
}

输出:

Min = 0
Max = 10

在上面的代码中,我们使用 __typeof__ 命令来引用输入的类型,然后我们使用三元运算符来定义 if-else 语句。我们可以看到输出与前面的示例相同。

上面的代码可以避免双重评估问题,因为上面的宏只会评估一次参数。上述方法仅适用于两个整数输入的情况。

如果我们想找到数字数组中存在的最小和最大数字,我们不能使用上述方法,因为在上述方法中,我们只比较两个数字。在数组的情况下,我们必须将所有元素一起比较以找到数组中存在的最小值或最大值。

我们可以将数组的第一个元素存储在一个变量中,然后我们可以使用循环将该元素与数组的其他元素进行比较。

在最大数的情况下,如果下一个元素大于数组中存在的下一个元素,则表示保存的元素不是数组中存在的最大元素,我们将保存的元素替换为下一个元素,我们将重复此过程,直到将保存的元素与数组中存在的所有元素进行比较。

在最小数量的情况下,只有当下一个元素小于保存的元素时,我们才会用下一个元素替换保存的元素,并且我们将重复此过程,直到将保存的元素与数组中存在的所有元素进行比较。

#include <stdio.h>

int MAX(int My_array[], int len);
int MIN(int My_array[], int len);
int main()
{
    int My_array[] = {6,3,15,9,10,50,99,11};
    int len = sizeof(My_array)/sizeof(My_array[0]);
    int numMax = MAX(My_array,len);
    int numMin = MIN(My_array,len);
    printf("Max number = %d\n",numMax);
    printf("Min number = %d",numMin);
    return 0;
}

int MAX(int My_array[],int len){
    int num = My_array[0];
    for(int i=1;i<len;i++){
        if(My_array[i] > num){
            num = My_array[i];
        }
    }
    return num;
}

int MIN(int My_array[],int len){
    int num = My_array[0];
    for(int i=1;i<len;i++){
        if(My_array[i] < num){
            num = My_array[i];
        }
    }
    return num;
}

输出:

Max number = 99
Min number = 3

在上面的代码中,我们创建了两个函数,MAX()MIN(),它们有两个输入参数。第一个参数是给定的数组,第二个是数组的长度。

我们使用 sizeof() 函数找到整个数组的大小,然后将其除以数组第一个元素的大小,得到给定数组的长度。

MAX()MIN() 函数中,我们将数组的第一个元素存储在一个变量中,然后我们使用循环将它与数组的所有其他元素进行比较,当整数 i 等于数组的长度,这意味着循环已到达数组的末尾。

在循环内部,我们使用 if 语句将数组的下一个元素与我们保存的值进行比较,如果下一个元素大于在 MAX() 的情况下保存的元素,我们将替换它的值函数,在 MIN() 函数中,如果下一个元素小于保存的元素,我们将替换该值。我们使用 printf() 函数来打印 MIN()MAX() 函数返回的值。

上面的代码仅适用于整数数据类型的数组,但我们也可以更改上面的代码以在其他数据类型(如 float)的情况下找到最小和最大数字。在上面的代码中,如果是 float 数据类型的数组,我们必须将 int 数据类型更改为 float

比如数组的数据类型会变成 float,用来存储数组第一个元素的变量的数据类型也会变成 float,长度的数据类型会保持不变。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中使用 typedef enum

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

C 语言中的静态变量

发布时间:2023/05/07 浏览次数:151 分类:C语言

本文介绍了如何在 C 语言中使用静态变量。在 C 语言中使用 static 变量在函数调用之间保存变量值

C 语言中生成随机数

发布时间:2023/05/07 浏览次数:64 分类:C语言

本文演示了如何在 C 语言中生成随机数。使用 rand 和 srand 函数在 C 语言中生成随机数

C 语言中的 i++ 与++i

发布时间:2023/05/07 浏览次数:83 分类:C语言

本文演示了如何在 C 语言中使用前缀增量与后缀增量运算符。C 语言中++i 和 i++ 记号的主要区别

C 语言中获取当前工作目录

发布时间:2023/05/07 浏览次数:182 分类:C语言

本文演示了如何在 C 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

C 语言中的位掩码

发布时间:2023/05/07 浏览次数:126 分类:C语言

本文介绍了如何在 C 语言中使用位掩码。使用 struct 关键字在 C 语言中定义位掩码数据

C 语言中的排序函数

发布时间:2023/05/07 浏览次数:181 分类:C语言

本文演示了如何在 C 语言中使用标准库排序函数。使用 qsort 函数对 C 语言中的整数数组进行排序

C 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:114 分类:C语言

本文介绍了如何在 C 语言中使用 extern 关键字。C 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

C 语言中的 #ifndef

发布时间:2023/05/07 浏览次数:186 分类:C语言

本文介绍了如何在 C 语言中使用 ifndef。在 C 语言中使用 ifndef 保护头文件不被多次包含 C 语言中的头文件用于定义同名源文件中实现的函数的接口。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便