输入10个数,并输出其中的最大数与最小数

本文详细介绍了如何使用C语言编写一个程序,该程序可以接收用户输入的10个整数,并通过循环结构找出其中的最大数和最小数。程序利用了基本的输入输出函数和条件判断语句,展示了如何在有限的数组中进行数值比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>		//输入10个数,并输出其中的最大数与最小数
int main()
{
	int i, input[10], max, min;
	for (i = 0; i < 10; i++)
	{
		scanf_s("%d", &input[i]);
		if (i == 0)
			max = min = input[i];
		else
		{
			if (input[i]>max) max = input[i];
			if (input[i] < min) min = input[i];
		}
	}
	printf("max=%d\n", max);
	printf("min=%d\n", min);
	return 0;
}

<think>我们有一个整数数组,需要找出其中的大值和最小值以及它们对应的下标(索引)。注意:数组可能包含重复元素,当有多个相同的大值或最小值时,我们通常需要找到第一个出现的(即小下标)或者根据题目要求(如题目要求最小值下标,大值下标)。但是根据引用[3]和引用[4]中的例子,题目要求的是大值及其小下标(即如果大值有多个,取下标小的那个)。对于最小值,通常也是取小下标(除非题目有特殊要求)。我们可以采用以下步骤:1.初始化大值和最小值,可以设为数组的第一个元素,同时初始化它们的下标为0。2.遍历数组(从第二个元素开始,如果数组长度大于1):对于大值:如果当前元素大于当前记录的大值,则更新大值和其下标;如果相等,且题目要求小下标,则不需要更新(因为我们是从前往后遍历,已经记录的是第一个出现的,后面出现的下标更大,所以不需要更新)。对于最小值:如果当前元素小于当前记录的最小值,则更新最小值和其下标;同样,如果相等,也不需要更新(因为我们要小下标)。3.注意:题目要求可能不同,有时要求大值的小下标,最小值小下标,有时要求大下标。但通常,如果没有特别说明,我们按小下标(即第一次出现的位置)来记录。但是,根据引用[4]中的代码,它同时找大值和最小值且当有多个相同值时,记录的是后一次出现的下标(因为它在遍历过程中,遇到更大的就更新大值和下标,遇到更小的就更新最小值和下标,而相等时不更新,所以如果后面出现相同的值,但下标更大,不会更新,因此记录的是第一次出现的下标?)不对,我们再看:引用[4]的代码:if(max< a[i]){//如果当前元素大于当前大值,更新大值和下标max= a[i];x= i;}if (min >a[i]) {//如果当前元素小于当前最小值,更新最小值和下标min =a[i];y =i;}注意:这里当遇到相同值时,不会更新。所以如果数组中有多个相同的大值,那么记录的是第一个大值(因为当遇到第二个大值时,它不会大于当前大值,所以不会更新,因此记录的是第一次出现的下标)。最小值同理。但是,如果题目要求大值的小下标,那么这样写就是正确的(因为我们记录的就是第一个大值)。同样,最小值小下标也是第一个最小值。然而,引用[3]的题目要求是“大值及其对应的小下标”,所以它的代码也是类似的:if(num[i] >max ){//大于才更新,等于不更新,所以当有多个大值时,记录的是第一个出现的(因为第一个大值出现后,后面相等的不会更新,所以下标就是第一个大值的位置)max =num[i];index =i;}但是,这里有一个问题:我们是从第一个元素(下标0)开始,然后从下标1开始遍历。当我们遇到一个比当前大值更大的数时,我们更新大值和下标。这样,如果有多个相同的大值,我们记录的是第一个大值的位置(因为后面相等的不会大于当前大值,所以不会更新)。所以满足“小下标”的要求。因此,我们可以按照以下步骤编写代码:步骤:1.假设数组为arr,长度为n。2.初始化:max=arr[0],min =arr[0]max_index =0, min_index =03.从i=1到n-1遍历数组:如果arr[i]> max,则更新max= arr[i]和max_index =i如果arr[i] <min,则更新min =arr[i]和min_index= i4.输出大值max和下标max_index,最小值min和下标min_index。但是,如果题目要求大值的小下标,那么当遇到相等的大值时,我们不应该更新,因为当前记录的下标已经比后面遇到的下标小。而最小值同理。所以这个算法是满足要求的。下面我们用C++语言实现这个算法(根据用户要求,使用中文注释):</think>### 在整数数组中查找大值、最小值及其下标 要高效地查找整数数组中的大值、最小值及其下标,可以采用以下算法(时间复杂度 $O(n)$): ```c #include <stdio.h> int main() { int n; printf("输入数组长度: "); scanf("%d", &n); int arr[n]; printf("输入%d个整数: ", n); for(int i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 初始化大值和最小值(均设为第一个元素) int max = arr[0], min = arr[0]; int max_index = 0, min_index = 0; // 遍历数组更新极值 for(int i = 1; i < n; i++) { if(arr[i] > max) { // 发现更大值 max = arr[i]; max_index = i; } if(arr[i] < min) { // 发现更小值 min = arr[i]; min_index = i; } } printf("大值: %d (下标: %d)\n", max, max_index); printf("最小值: %d (下标: %d)\n", min, min_index); return 0; } ``` #### 算法说明: 1. **初始化**:将数组第一个元素同时设为大值和最小值,下标设为0 2. **遍历比较**: - 当 $arr[i] > max$ 时更新大值及其下标 - 当 $arr[i] < min$ 时更新最小值及其下标 3. **处理重复值**:当遇到相同极值时保留先出现的下标(小下标),符合常见需求[^3][^4] #### 示例执行: ``` 输入数组长度: 5 输入5个整数: 12 7 23 5 18 大值: 23 (下标: 2) 最小值: 5 (下标: 3) ``` #### 关键点: - **时间复杂度**:$O(n)$,只需单次遍历数组 - **空间复杂度**:$O(1)$,仅需常数级额外空间 - **边界处理**:正确处理数组长度为1的情况 - **稳定性**:当存在多个相同极值时,记录先出现的下标[^3] 此方法被广泛用于极值查找场景,如成绩分析[^4]、数据预处理[^5]等,其效率明显优于排序法($O(n\log n)$)[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值