这道题小编提供两种代码,
第一个代码是小编在学校做实验的时候想出来的,比较麻烦,大家看看就行。主要推荐第二种方法。
第一种
#include <stdio.h> #define N 10 int a[N],i; void swap(int *x,int *y) { int temp; temp=*x; *x=*y; *y=temp; } int main() { void swap(int *x,int *y); int *p; int a[N],i,max,min,row=0,colum=0; p=a; printf("请输入%d个数\n",N); for(i = 0;i < N; i++) { scanf("%d",&a[i]); } max = a[0]; min = a[0]; printf("结果为\n"); for(i=0;i<N;i++) { if(a[i]>max) { max = a[i]; row = i; } } printf("最大值为%d\n",max); printf("位数为第%d位\n",row+1); for(i=0;i<N;i++) { if(a[i]<min) { min = a[i]; colum = i; } } printf("最小值为%d\n",min); printf("位数为第%d位\n",colum+1); if(*(p+colum)!=max) swap(p,(p+colum)); if(*(p+row)!=min) swap((p+N),(p+row)); for(i=0;i<N;i++){ printf("%d ",a[i]); } return 0; }
第二种方法是小编在学完c语言后,自己再做的一种思路
#include <stdio.h> #include <stdlib.h> #include <math.h> #define M 10 void swap(int *p,int n) { int i,j,k=0,t,min; min=*(p+0); //利用打擂台算法,找出最小值 for(i=1;i<n;i++) { if(min>*(p+i)) { //min=*(p+i); k=i; //最小值找到 } } t=*(p+k); //进行最小值与第一个元素进行调换; *(p+k)=*(p+0); *(p+0)=t; } void print(int *p,int n) { int i; printf("The array is :"); for(i=0;i<n;i++) //for循环打印 { printf("%d ",*(p+i)); } } int main(void) { int num[10],*p=NULL; int i; printf("Please enter 10 numbers:"); for(p=num;p<(num+10);p++) //利用指针进行赋值操作 { scanf("%d",p); } p=num; //注意重新指向数组名 swap(p,M); //调用函数 print(p,M); //调用打印函数 return 0; }
总结:本题比较简单,需要了解:打擂台算法与指针指向的概念;利用函数进行输出。
本文仅小编个人见解,如有错误,请多多包涵并指正!!