循环结构习题:任意输入n个数,输出最大和最小值及其对应的序列号

编一程序,对于任意输入的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。

(解析为作者本人见解,仅供参考,如有问题,请联系作者本人或在评论区纠正,谢谢大家)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值