|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目如下:
1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请分别用数组写法和指针法完成上述功能。
函数原型分别为:void action1(int dArray[],int n)和void action2(int *pInt,int n)。
数组的那一种我已经解决了,不知道指针的怎么写,下面我写的运行不对,不知道哪里出了问题,请指教。
- #include <stdio.h>
- void action2(int *p,int n)
- {
- int max,min,i,pmin = 0,pmax = 0,t1,t2;
- max = min = *(p);
- for(i = 1; i < n; i++)
- {
- if(*(p+i)<min)
- {
- min = *(p+i);
- pmin = i;
- }
- else if (*(p+i)>max)
- {
- max = *(p+i);
- pmax = i;
- }
- }
- t1 = *(p);
- *(p) = *(p+min);
- *(p+i) = t1;
- t2 = *(p+n-1);
- *(p+n-1) = *(p+max);
- *(p+max) = t2;
- }
- int main()
- {
- int i,n,arr[10000];
- int *p = arr;
- printf("请输入即将输入的数目个数:");
- scanf("%d",&n);
- printf("请输入一组数:");
- for(i = 0;i < n;i++)
- {
- scanf("%d",&arr[i]);
- }
- action2(arr,n);
- for(i = 0;i < n;i++)
- {
- printf("%d ",arr[i]);
- }
- return 0 ;
- }
复制代码
本帖最后由 tailor_long 于 2017-12-7 20:32 编辑
楼主大人,你好,在下写了一个程序,完美运行无BUG
楼主大人可以一试
- #include <stdio.h>
- void maxInt(int *p, int max, int n, int *a){
- //找出p数组中出现的最大的数以及他的下标
- int temp = 0;
- for(int i=0; i<n; i++)
- {
- if(max < *(p+i)){
- max = *(p+i);
- temp = i;
- }
- }
- *a = max;
- *(a+1) = temp;
- //把P数组中最大的数传给a[0],下标传给a[1];
- }
-
- void minInt(int *p, int min, int n, int *b){
- //找出p数组中出现的最小的数以及他的下标
- int temp = 0;
- for(int i=0; i<n; i++)
- {
- if(min > *(p+i)){
- min = *(p+i);
- temp = i;
- }
- }
- *b = min;
- *(b+1) = temp;
- //把P数组中最小的数传给b[0],下标传给b[1];
- }
- void exchangeMax(int *a, int *p, int n){//将最大的数和p数组中最后一个数交换
- int temp = *(p+n-1);
- *(p+n-1) = *(p + a[1]);
- *(p+a[1]) = temp;
- }
- void exchangeMin(int *a, int *p, int n){//将最小的数和p数组中第一个数交换
- int temp = *(p);
- *(p) = *(p + a[1]);
- *(p+a[1]) = temp;
- }
-
- void action2(int *p,int n)
- {
- int max,min,i;
- int pmin = 9999,pmax = -99999;
- int a[2], b[2];
- maxInt(p, pmax, n, a);
- minInt(p, pmin, n, b);
- //printf("the max of this array is p[%d] = %d and the min of this array is p[%d] = %d\n", a[1], a[0], b[1], b[0]);
- //将最大的数和p数组中最后一个数交换
- exchangeMax(a, p, n);
- maxInt(p, pmax, n, a);
- minInt(p, pmin, n, b);
- if(a[1] == n-1 && b[1] == 0){//判断当前p数组是不是最大数放在最后,最小数放在最前面,如果是,那么程序结束
- return ;
- }
- else{//如果不是,//将最小的数和p数组中第一个数交换
- exchangeMin(b, p, n);
- }
- }
- int main()
- {
- int i,n,arr[10000];
- int *p = arr;
- printf("input the length of array\n");
- scanf("%d",&n);
- printf("input the member of array: \n");
- for(i = 0;i < n;i++)
- {
- scanf("%d",&arr[i]);
- }
- action2(arr,n);
- for(i = 0;i < n;i++)
- {
- printf("%d ",arr[i]);
- }
- return 0 ;
- }
复制代码
|
|