输入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;