编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后

编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数... 编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数 展开
 我来答
xuzhouliuying
高粉答主

2017-08-09 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:5.4万
采纳率:86%
帮助的人:2.4亿
展开全部
#include <stdio.h>
void main()
{
int i,j=0,k=0,t,n,min,max,a[10];
printf("输入整数的个数: ");
scanf("%d",&n);
printf("输入%d个整数: ",n);
scanf("%d",&a[0]);
max=a[0];min=a[0];
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(max<a[i]) {max=a[i];j=i;}
if(min>a[i]) {min=a[i];k=i;}
}
t=a[k];a[k]=a[0];a[0]=t;
t=a[j];a[j]=a[n-1];a[n-1]=t;
printf("交换顺序后输出: ");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}

运行示例:

zhiyyao
2013-12-03 · TA获得超过1909个赞
知道小有建树答主
回答量:645
采纳率:57%
帮助的人:388万
展开全部

#include <stdio.h>
void main ()
{
 int a[10];
 int i,k=0,n,min,temp;
 printf ("输入n:");
 scanf ("%d",&n);
 printf ("输入%d个数:\n",n);
 for (i=0; i<n; i++)
  scanf ("%d",&a[i]);
 min = a[0];
 for (i=0; i<n; i++)
  if (min > a[i])
  {
   min = a[i];
   k = i;
  }
  printf ("最小值是:%d\n下标是:%d\n",min,k);
  printf ("将最小值与第一个数交换后:\n");
  if (k != 0)
  {
   temp = a[0];
   a[0] = a[k];
   a[k] = temp;
  }
  for (i=0; i<n; i++)
   printf ("%d ",a[i]);
  printf ("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2015-12-11 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6219万
展开全部

这题目应该找到最大值和最小值所在的坐标位置,然后,在交换时,要考虑最大值是第一个数的情况。

#include<stdio.h>
int main()
{
        int a[10];
        int i,max,min,n;
        printf("请输入一个正整数n(1<n<10)\n");
        scanf("%d",&n);
        printf("请输入n个正整数\n");
        for(i=0;i<n;i++)
                scanf("%d",&a[i]);
        printf("\n");
        max=min=0;
        for(i=0;i<n;i++)
        {
                if( a[i] > a[max] )
                        max=i;
                if(a[i] < a[min] )
                        min=i ;
        }
        //交换 最小值
        i=a[0];
        a[0]=a[min];
        a[min]=i;
        if ( max==0 ) //判断最大值位置,当是0位时,这时,已变到 min位置
                max=min;
        //交换最大值
        i=a[n-1];
        a[n-1]=a[max];
        a[max]=i;

        for(i=0;i<n;i++)
                printf("%d\n",a[i]);
        return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友83cdc1c
2015-06-12 · TA获得超过5788个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:820万
展开全部
#include <stdio.h>
int ex(int a[],int n)
{
    int i,min,max,s1,s2,t;
    min=a[0];
    s1=0;
    max=a[n-1];
    s2=n-1;
    for(i=0; i<n; i++)
    {
        if(a[i]<min)
        {
            s1=i;
            min=a[i];
        }
        if(a[i]>max)
        {
            s2=i;
            max=a[i];
        }
    }
    if(s1!=0)
    {
        t=a[0];
        a[0]=min;
        a[s1]=t;
    }
    if(s2!=n-1)
    {
        t=a[n-1];
        a[n-1]=max;
        a[s2]=t;
    }

    return 0;
}
void main()
{
    int i,a[10],n,x,t;
    printf("请输入数据个数n(1<=n<=10):");
    scanf("%d",&n);
    printf("请输入这%d个数:",n);
    for(i=0; i<n; i++)
        scanf("%d",&a[i]);
    ex(a,n);
    for(i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
娜莉China
2015-09-19 · 知道合伙人教育行家
娜莉China
知道合伙人教育行家
采纳数:15252 获赞数:207505
没有

向TA提问 私信TA
展开全部
最大值与最后一个交换,需要使用到max 和a[i],以及一个临时变量,代码中使用的是max a[0] a[i],这里貌似有点问题。最小值与第一个交换,貌似你也是用的这3个变量。
如果觉得使用的变量过多,可以不使用临时变量,用嵌入式程序员的思路,节约空间复杂度,只使用max 和 a[i]两个变量就地进行值的交换
在两个 if 语句内改成
max = max + a[i];
a[i] = max - a[i];
max = max - a[i];
如果担心两数和超出范围可以用^异或操作
改成
max = max ^ a[i];
a[i] = a[i] ^ max;
max = max ^ a[i];
这样就不用担心两整数的和超出表示范围了。

下面的min的操作也与以上内容类似。
改成
min = min ^ a[0];
a[0] = a[0] ^ min
min = min ^ [a0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式