//8-29 第八章作业
//3.输入10个整数,将其中最小的数第一个数对换,把最大的数与最后一个数对换
//写3个函数:①输人10个数;②进行处理;③输出10个数。
//①输人10个数,
//方法一:数组索引
void main()
{int arr[10];int *p = arr;//printf("请输入10个数:\n");for(int i = 0; i < 10; i++)scanf("%d", &arr[i]);//测试发现"%d"这个不能写成"%d ",会出现扫描数总是比打印数多1的情况for(int i = 0; i < 10; i++)printf("%d ", arr[i]);printf("接收完毕!");
}
//写成函数并调用:
void Scan()
{int arr[10];int *p = arr;printf("please enter 10 numbers: ");for(int i = 0; i < 10; i++)scanf("%d", &arr[i]);
}int main()
{Scan();
}
//方法二:指针索引
void main() {int arr[10];int *p = arr;printf("please enter 10 numbers: ");for(int i = 0; i < 10; i++)scanf("%d", p++);p = arr;//这句千万不要忘了,否则p将从第arr的十一个地址开始for(int i = 0; i < 10; i++) printf("%d ", *p++); }
//写成函数:
int* Scan(int *arr)
{int *p = arr;printf("please enter 10 numbers: ");for(int i = 0; i < 10; i++)scanf("%d",p++);//p = arr;//for(int i = 0; i < 10; i++)//printf("%d ",*p++);return arr;
}void main()
{Scan();
}
//②进行处理,将其中最小的数第一个数对换,把最大的数与最后一个数对换。③输出10个数。
int* Scan(int* arr)
{int *p = arr;printf("please enter 10 numbers: ");for(int i = 0; i < 10; i++)scanf("%d",p++);return arr;
}void Show (int* arr)
{int *p = arr;for(int i = 0; i < 10; i++,p++){printf("%d ",*p);}printf("\n");}//测试的数组为 53 52 4 51 5 6 7 8 9 10
//通过数组下标来改值
int* Swap(int* arr)
{int tmp1 = arr[0];int Min = arr[0];int i = 0;//遍历一遍数组,找到最小值for(i = 0; i < 10; i++){if(Min > arr[i])Min = arr[i];}//printf("Min = %d \n",Min);//通过测试发现,不能通过下面三句的办法进行值的交换:因为,虽然p1定义的是Min的地址,但是,实际测出来并不是这个地址;而是另外存的一个地址//int *p1 = &Min;//arr[0] = Min;//*p1 = tmp1;//再次通过遍历来对Min的下标进行搜索,然后对值进行交换,而不是通过指针进行交换int j = 0;for(j = 0; j < 10; j++){if(arr[j] == Min){arr[0] = Min;arr[j] = tmp1;}}int tmp2 = arr[9];int Max = arr[9];//遍历一遍数组,找到最大值for(i = 0; i < 10; i++){if(Max < arr[i])Max = arr[i];}//再次通过遍历来对Max的下标进行搜索,然后对值进行交换,而不是通过指针进行交换for(j = 0; j < 10; j++){if(arr[j] == Max){arr[j] = tmp2;// 刚刚是arr[9] = Max;arr[j] = tmp2; 出来的结果是4 52 10 51 5 6 7 8 9 10,换了一下就对了。 arr[9] = Max;}}return arr;
}//另一种方法:通过指针来改值
int* Swap(int* arr)
{int buffer[10] = {};int *p = &buffer;for(int i = 0; i < 10; i++){if(buffer[i] < *p)p = &buffer +i; }int tmp = buffer[0];buffer[0] = *p;*p = tmp;int *p2 = &buffer[9];for(int j = 0; j < 10; i++){if(buffer[j] > *p2)p2 = &buffer +j; }
}int main()
{int arr[10];int *p = Scan(arr);int arr2[10]; int* p2 = arr2;p2 = Swap(arr);Show(p2);
}