[C语言]经典例题之一求最大值

简介

  本文将介绍一个在c语言学习过程中非常简单且非常经典的问题,以及介绍大多数人在写这个代码时经常会跳进去的一个坑。

正文

  求最大值基本每个人都会,所以简单叙述一下要点:创建一个数组以及创建一个变量max,给变量max赋值然后跟数组中每个元素一 一进行判断,如果数组中的数比max大那么把这个数赋给max,以此类推;
  看起来非常简单,那么我们实现一下(代码如下):

#include
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;
}

  这个代码看起来毫无问题,附上运行结果如下:
[C语言]经典例题之一求最大值_第1张图片
结果看起来没毛病,试一试负数:
[C语言]经典例题之一求最大值_第2张图片
bug出来了,为什么会出现这种情况呢?
  代码看起来似乎无懈可击,但是运行结果却是错的,回过头看代码,为什么会给max赋值0呢?这样是不是就是默认比较变量最大值是0了,那么输入负数时就会出现毛病,所以应该给max赋一个数组中的值。修改后的代码如下:

#include
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开始循环。结果如下:
[C语言]经典例题之一求最大值_第3张图片
这样就可以处理当输入的数据为负数的情况了。

总结

  本文演示了求数组中最大值的问题,以及演示了很容易跳进的一个坑。


ps: 有不当之处希望大家提出批评并指正。


你可能感兴趣的:([C语言]经典例题之一求最大值)