产生数组最大值
今日风和日丽,是个写(水 )博客的绝佳时机
和大家分享一串C语言中产生数组中的元素的最大值的代码
实现方式很简单,我们需要用到for循环和if语句
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//数组初始化
int max = 0;//设置一个最大值
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
for (i = 0; i < sz; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
当我们运行代码的时候,输出的结果是10
看样子我们成功输出了数组的最大值,这串代码已经完成了,对不对?
但实际上这串代码是有问题的
先别往下滑,想想它的问题出在那里了呢?
——————————————————
正负性
当我们把数组里面的数字全部改成负数的时候
你会发现输出的结果等于0,并不是数组内的最大值-1
出现这个情况的原理十分简单,我们设定的int max = 0,而0>-1,输出的结果也自然是0了
解决这个问题的方法也非常简单
如果我们数组内的数全部小于0,那我们就设定MAX=数组内的某个数字,然后再进行比较,输出最大值不就行了?
int main()
{
int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };
int max = arr[0];//arr[0]对应数组中第一个数的下标
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
- 避免不同数组的元素个数不同,max应该设置为arr[0]而不是arr[3]或者arr[5]
这时候再次运行我们的代码,可以看到结果已经正确的显示为-1了
进阶玩法
以自定义函数的形式实现此功能
使用自定义函数的时候,我们需要注意一个问题
那就是我博客之前写到过的 《传址调用和传值调用》
先把我们的主函数改造一番
int main()
{
int arr[] ={ -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };
int max = arr[0];
int sz = sizeof(arr) / sizeof(arr[0]);
sp(arr, sz,&max);
printf("max = %d\n", max);
return 0;
}
其中sp就是我们要编写的自定义函数
因为自定义函数中的步骤需要改变我们主函数中的max,这里我们需要用取地址符,也就是传址调用
sp(arr, sz,&max);//&max是传址调用
同样的,我们的自定义函数也需要使用int*来接收max的地址
void sp(int arr[], int sz,int* pm)
{
int i = 0;
for (i = 0; i < sz; i++)
{
if (arr[i] > *pm)
{
*pm = arr[i];
}
}
}
运行结果正确
结语
在制作自定义函数的时候,需要注意传址调用和传值调用的区别。具体介绍参考我之前的博客 [链接]
感谢你看到最后,如果对你有帮助的话,点个赞再走呗!
(没有帮助也可以点点赞~)