输入一批整数,以0为结束标志,找出最大数和最小数所在的位置,并把二者对调
100
任务要求
参考答案
评论
任务描述
相关知识
编程要求
测试说明
任务描述
本关任务:输入一批整数,最多不超过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],max,min,maxnum=0,minnum=0,cnt=0;
   int i=0;
   scanf("%d",&a[i]);
   while(a[i]!=0){
   
       i++;
       scanf("%d",&a[i]);
   }
   min=a[0];
   max=a[0];
   for(int j=0;j<i;j++){
   
       if(a[j]>max){
   
           max=a[j];
           maxnum=j;
       }
       if(a[j]<min){
   
           min=a[j];
           minnum=j;
       }
   }
   int t;
   t=a[minnum];
   a[minnum]=a[maxnum];
   a[maxnum]=t;
   printf("最大值:%d,下标:%d\n",max,maxnum);
   printf("最小值:%d,下标:%d\n",min,minnum);
   for(int j=0;j<i;j++){
   
       printf("%d ",a[j]);
   }
	/********** End **********/
	return 0;
}