编一程序,对于任意输入的n个整数,可输出其中的最大数和最小数,并输出它们在序列中的位置序号。
【输入形式】
输入第一行:输入n值。 输入第二行:输入n个整数。
【输出形式】
输出仅二行 第一行:输出最大值和最小值 第二行:输出最大值序列号和最小值序列号。
【样例输入】
4
78 98 88 97
【样例输出】
max=98,min=78
maxi=2,mini=1
答案:
#include<stdio.h>
int main()
{
int max(int x,int y); //函数声明
int min(int x,int y); //函数声明
int n,a[100],i,ma,mi,x,t; /*定义变量:ma,mi分别为最大值和最小值的自变量,x,t为取最大最小值时对应的序列号*/
scanf("%d\n",&n);
for(i=0;i<=n-1;i++)
scanf("%d",&a[i]);
for(i=1,ma=a[0],x=0;i<=n-1;i++)
{ if(max(ma,a[i])>ma)
{ ma=max(ma,a[i]); /*若max函数的返回值大于ma,则max的返回值赋给自变量ma*/
x=i; /*把此数组元素的序号记下来,放在x中*/
}
}
for(i=1,mi=a[0],t=0;i<=n-1;i++)
{ if(min(mi,a[i])<mi) /*若min函数的返回值大于mi,则min的返回值赋给自变量mi*/
{ mi=min(mi,a[i]); /*把此数组元素的序号记下来,放在t中*/
t=i;
}
}
printf("max=%d,min=%d\nmaxi=%d,mini=%d",ma,mi,x+1,t+1);
return 0;
}
int max(int x,int y) //最大值函数定义
{
return((x>y) ? x:y);
}
int min(int x,int y) //最小值函数定义
{
return((x<y) ? x:y);
}
【解析】本题中利用了函数这一章的知识,在printf输出函数中,我们看到最终的是x+1和t+1,并不是直接输出x和t,这是因为数组的序号是从0开始的,而我们正常输入的数是从1开始算的,所以说最后要给x+1和t+1,例如:x=3时说明i=3,此时对应的数应该是第四个,而不是第三个,所以应该输出x+1。
(解析为作者本人见解,仅供参考,如有问题,请联系作者本人或在评论区纠正,谢谢大家)