简介
本文将介绍一个在c语言学习过程中非常简单且非常经典的问题,以及介绍大多数人在写这个代码时经常会跳进去的一个坑。
正文
求最大值基本每个人都会,所以简单叙述一下要点:创建一个数组以及创建一个变量max,给变量max赋值然后跟数组中每个元素一 一进行判断,如果数组中的数比max大那么把这个数赋给max,以此类推;
看起来非常简单,那么我们实现一下(代码如下):
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = {0};
int max = 0;//定义变量max用来作比较
printf("请输入十个整数:\n");
for(i=0; i<10; i++)
{
scanf("%d",&arr[i]);
}
for(i=0; i<10; i++)
{
if(max < arr[i])
max = arr[i];
}
printf("最大值为%d\n",max);
return 0;
}
这个代码看起来毫无问题,附上运行结果如下:
结果看起来没毛病,试一试负数:
bug出来了,为什么会出现这种情况呢?
代码看起来似乎无懈可击,但是运行结果却是错的,回过头看代码,为什么会给max赋值0呢?这样是不是就是默认比较变量最大值是0了,那么输入负数时就会出现毛病,所以应该给max赋一个数组中的值。修改后的代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = {0};
int max = 0;
printf("请输入十个整数:\n");
for(i=0; i<10; i++)
{
scanf("%d",&arr[i]);
}
max = arr[0];
for(i=1; i<10; i++)
{
if(max < arr[i])
max = arr[i];
}
printf("最大值为%d\n",max);
return 0;
}
这样就可以了,给max赋数组中第一个值,然后一 一与数组中的值进行比较(max可以赋予数组中任何一个值),这里还有一个优化,因为我们赋的值是第一个,那么循环就可以从数组中第二个元素开始,所以for循环i从1开始循环。结果如下:
这样就可以处理当输入的数据为负数的情况了。
总结
本文演示了求数组中最大值的问题,以及演示了很容易跳进的一个坑。
ps: 有不当之处希望大家提出批评并指正。