C语言程序设计教程(第三版)课后习题10.3

1352: C语言程序设计教程(第三版)课后习题10.3

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 813  Solved: 274
[Submit][Status][BBS]

Description

输入10个整数,把最大的数与最后一个数对换。写三个函数;再将其中最小的数与第一个数对换, ①输入10个数;②进行处理;③输出10个数。

Input

10个整数

Output

整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

Sample Input

2 1 3 4 5 6 7 8 10 9

Sample Output

1 2 3 4 5 6 7 8 9 10 


错误的代码:
#include <stdio.h>
const int N=1<<29;
int a[15],min1=N,max1=-N,b,k;
void make()
{
    for(int i=0;i<10;i++)
    {
        if(a[i]>max1)
           {   k=i;
               max1=a[i];
           }
          if(a[i]<min1)
           {
               b=i;
               min1=a[i];
           }
    }
    int temp;
    temp=a[b];
    a[b]=a[0];
    a[0]=temp;

    temp=a[k];
    a[k]=a[9];
    a[9]=temp;

}
void print()
{
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("
");
}
int main()
{

    while(scanf("%d",&a[0])!=EOF)
    {
      min1=N;max1=-N;
      for(int i=1;i<10;i++)
      {
          scanf("%d",&a[i]);
      }
      make();
      print();
    }
}

刚刚开始这样交,怎么改都是错的,然后去请教大神,才知道正确的应该是这样

#include <stdio.h>
const int N=1<<29;
int a[15],min1,max1,b,k;
void make()
{
    for(int i=0; i<10; i++)
    {

        if(a[i]<min1)
        {
            b=i;
            min1=a[i];
        }
    }
    int temp;
    temp=a[b];
    a[b]=a[0];
    a[0]=temp;
    for(int i=0; i<10; i++)
    {
        if(a[i]>max1)
        {
            k=i;
            max1=a[i];
        }
    }
    temp=a[k];
    a[k]=a[9];
    a[9]=temp;

}
void print()
{
    int i;
    for(i=0; i<10; i++)
    {
        printf("%d ",a[i]);
    }
    printf("
");
}
int main()
{

    scanf("%d",&a[0]);
    {
        min1=N;
        max1=-N;
        for(int i=1; i<10; i++)
        {
            scanf("%d",&a[i]);
        }
        make();
        print();
    }
}

因为:

比如测试数据是 :10 9 8 7 6 5 4 3 2 1时

第一组代码会这样:

最小值1先和第1个值10换

最大值10再和最后1个值1换

相当于换了两次

最终还是10 9 8 7 6 5 4 3 2 1

第二组代码会这样:

最小值1先和第1个值10换

然后最大值10和最后一个值10换

这时10本来就是最后一个值,相当于自己和自己换了一次

所以结果是:1 9 8 7 6 5 4 3 2 10

原文地址:https://www.cnblogs.com/tianmin123/p/5015150.html