求10个整数的最大值的详解(数组)

题目:求任意10个整数中的最大值

ps:想直接看代码的可以移步到文章最下面

目标:

1.我们要得到一组同类型的数,首先想到的是用数组来存放。

2.实现从数组中找到这个最大值,并最终输出它。

设计程序:

1.初始化数组。任意-->自主输入-->scanf;

连续输入多个数据--> for循环语句

2.取到最大值。比较--> 判断语句if

取到最大值--> 设置中间变量max(用来寄存最大值)

遍历整个数组-->循环语句for

编写代码

1.初始化数组 ---连续输入多个数字到数组中

代码实现

首先我们要访问数组中的每一个元素,也就是要遍历数组

下面这个for循环是常用的遍历数组循环

#include 
int main()
{
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);  //计算数组元素个数
	for (i = 0; i < sz; i++)       //通过数组元素下标的遍历来访问整个数组
    {
          scanf("%d",&arr[i]);    
    }
    return 0;
}

tips:(解释数组元素个数计算的实现)

这里用到操作符sizeof来计算数组元素个数

sizeof是计算类型或者变量所占空间的大小

sizeof(arr)是计算整个数组所占空间大小,这里arr代表整个数组,注意和一般数组名代表首元素地址区分开。

sizeof(arr[0])计算数组中第一个元素所占空间大小。因为数组存放的都是同类型元素,所以计算其中的任意一个元素的大小都是一样的。

整个数组的数据所占空间的大小 ➗ 数组中单个元素所占空间大小  =  数组中包含的元素个数

这么写的好处是当你要输入其他数量的数字的数组的时候,不用挨个变更后续有关数组遍历的循环判断条件。比如要找到20个整数中的最大值是什么,只要变更初始化arr[20] = { 0 };即可

2.取到最大值

这里我们依旧要遍历整个数组,并在每一次循环中进行大小比较

#include 

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]); 
	}

	int max = 0; //放在外边,以保证存储的最大值不会被销毁
	for (i = 1; i < sz; i++)
	{
		if (arr[i] > max)  //如果遇到更大的数,将其赋值给max,更新最大值
		{
			max = arr[i];
		}
	}
	printf("%d", max);
	return 0; 
}

这里要注意max的初始化要在使用它的for函数外部,这样max变量在一次循环结束后就不会被销毁,能接着与数组的下一个元素进行比较

我们运行下代码

求10个整数的最大值的详解(数组)_第1张图片

 欸嘿,代码运行成功!

但是!如果我将输入值换成{-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 } 阁下该如何应对?

运行代码后我们会发现坏事了,这里面有bug,得到的值并不是数组里面的最大值

求10个整数的最大值的详解(数组)_第2张图片

其实问题就出在max的初始化上

Attention:

这里的max初始化不能赋值为0

举个简单的例子

从一组数据中选个最大值就好比从一个班级的人选出个最能打的,这时就要让班里的每两个人都切磋一下,能打的站在擂台上,和下一个人pk,这样一直下去到最后,最终站在擂台上的人就是最能打的。

但是这个时候如果不讲武德,直接找了个叶问过来站擂台,咔咔把上来的人全打趴下了。这时候最能打的是叶问,但是叶问不是这个班的啊。这就不符合我们最开始的目的了。

你看,我们将max初始化为0,比输入的每一个数都大,但得出的0并不是这个数组中的最大值。

虽然这样写在正整数范围内是可以正常运行并解决问题的,但是这样的代码在逻辑上存在漏洞。我们要做的是尽可能考虑到问题存在的情况,并在设计之初就解决,这样以后bug少了,也省事很多。

所以我们假设数组的第一个元素为最大值,就好比先让班长站在擂台上。这样一来比较的就都是数组内部自己的元素大小了。

完整的代码实现

#include 

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]); 
	}

	int max = arr[0];
	for (i = 1; i < sz; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	printf("%d", max);
	return 0; 
}

求10个整数的最大值的详解(数组)_第3张图片

 这下不管是负数还是正数阁下都能正确得出结论啦

最后

感谢您的阅读,若这篇文章能帮到您,那将是我莫大的幸福 。

当然,文章若有任何不足,欢迎批评指正。

你可能感兴趣的:(c语言初阶刷题训练,c语言)