输入一批整数,以0为结束标志,找出最大数和最小数所在的位置,并把二者对调

任务描述
本关任务:输入一批整数,最多不超过100个,以 0 为结束标志,找出最大数和最小值所在的位置,并把二者对调,然后输出调整后的这批整数。

相关知识
定义数组的长度为100:
#define N 100

定义一个整型变量n来记录输入整数的个数,可以用循环语句输入数组元素:

int a[N],t,n=0;
scanf("%d",&t);
while(t!=0)
{
    a[n]=t;
    n++;
    scanf("%d",&t);
}    

求数组的最大值,是不是很像打擂台呢?

max=a[0];pmax=0; //max存放最大值,pmax存放最大值下标
min=a[0];pmin=0; //min存放最小值,pmin存放最小值下标
for(i=1;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
pmax=i;
}
if(a[i]<min)
{
min=a[i];
pmin=i;
}
}
请大家思考,上述代码中,这两个变量max、min是否是多余的呢?

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
21 47 37 69 2 8 76 50 9 41 0

预期输出:
最大值:76,下标:6
最小值:2,下标:4
21 47 37 69 76 8 2 50 9 41

开始你的任务吧,祝你成功!

#include<stdio.h>
#define N 100
int main()
{
	/********** Begin **********/
    int a[N],t,n=0,i,max=0,min=100000,count1,count2,b;
    for(i=0;i<N;i++){
        scanf("%d",&t);
        if(t!=0){
            a[i]=t;
        }else{
            break;
        }
    }
    for(n=0;n<i;n++){
        if(a[n]>max){
            max = a[n];
            count1=n;
        }if(a[n]<min){
            min = a[n];
            count2=n;
        }
    }printf("最大值:%d,下标:%d\n",max,count1);
    printf("最小值:%d,下标:%d\n",min,count2);
    a[count1]=min;
    a[count2]=max;
    for(n=0;n<i;n++){
        printf("%d ",a[n]);
    }
	/********** End **********/
	return 0;
}

先仔细看题目要求,不超过100个的整数,所以我们要定义一个N为100,还要找到最大值和最小值,还要调换位置,显然这是要遍历数组了,并且要有变量可以帮助我们储存最大值和最小值,最后还要再将最大值和最小值互换。
互换比较简单,显然可以直接让对应的元素=max/min,当然也可以定义变量来承接。比如这样

b=a[count1];
    a[count1]=a[count2];
    a[count2]=b;

这就是经典的方法,当然直接=max 和 min就更加简单。
这道题主要要想到用n第二次来遍历数组,因为数组100个元素并未占满,再用i去遍历很容易导致后面的输出乱码(因为对应位置没有对应元素),能想到这一点,这个题还是相当简单的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值