输入10个整数,把其中最小的数与第一个数交换,最大的数与最后一个数交换。

输入10个整数,把其中最小的数与第一个数交换,最大的数与最后一个数交换。使用3个函数解决问题:
(1) 输入10个整数的函数
(2) 进行交换处理的函数
(3) 输出10个数的函数

输出格式

输出结果,一行一个数字
输入样例
2 1 3 4 5 6 7 8 9 0
输出样例
input done
swap done
0
1
3
4
5
6
7
8
2
9
display done
 1 #include <stdio.h> 
 2 
 3 void input(int a[]) 
 4 { 
 5     _______________________ 
 6 } 
 7 
 8 void swap(int a[]) 
 9 { 
10     _______________________ 
11 } 
12 
13 void display(int a[]) 
14 { 
15     int i; 
16     for(i=0; i<10; i++) 
17         printf("%d\n", a[i]); 
18 } 
19 
20 int main() 
21 { 
22     int a[10]; 
23     input(a); 
24     printf("input done\n"); 
25     swap(a); 
26     printf("swap done\n"); 
27     display(a); 
28     printf("display done\n"); 
29     return 0; 
30 }

第一种非指针:
 1 void swap(int a[])
 2 {
 3    int i=0,max=0,min=0;
 4    int temp=0,temp1=0;
 5    for(i=1;i<10;i++)
 6  {
 7    if(a[max]<a[i])    max=i;
 8    if(a[min]>a[i]) min=i;
 9   }
10   temp=a[9];
11   a[9]=a[max];
12   temp1=a[0];
13   a[0]=a[min];
14   a[max]=temp;
15   a[min]=temp1;
16 }

   第二种指针:

 1 void swap(int a[])
 2 {
 3      int *f=a;
 4      int i,j=0,k=9,t,r;//用j来记录最小的数的下标,用k来记录最大的数的下
 5     for(i=0;i<10;i++)
 6    {
 7       if(*(f+j)<*(f+i)) continue;//找出数组中最小的数//
 8      j=i;          //这个最小的数的下标用j来记录//
 9     }
10    for(i=8;i>=0;i--)
11   {
12     if(*(f+k)>*(f+i)) continue; //找出数组中最大的数//
13     k=i;         //这个最大的数的下标用k来记录//
14    }
15    t=*(f+j);
16   *(f+j)=*f;
17   *f=t;      //将最小的数与第一个数对换//
18    r=*(f+k);
19    *(f+k)=*(f+9);
20   *(f+9)=r;
21 }

 

 标准答案:
 1     int temp,mini,maxi;
 2     int i;
 3     mini=0;
 4     for(i=1; i<10; i++)
 5         if(a[mini]>a[i])
 6             mini=i;
 7     temp=a[mini];a[mini]=a[0];a[0]=temp;
 8     maxi=0;
 9     for(i=1; i<10; i++)
10         if(a[maxi]<a[i])
11             maxi=i;
12     temp=a[maxi];a[maxi]=a[9];a[9]=temp;

 


 

 



 

posted @ 2015-12-03 08:17  IRVING_J  阅读(5192)  评论(0编辑  收藏  举报