直接贴代码!!
#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
void init(int* arr[],int sz)
{
int i = 0;
for(i=0;i<sz;i++)
{
arr[i] = 0;
printf("%d ", arr[i]);
}
printf("\n");
}
int print(int* arr[],int sz)
{
int j = 0;
for (j = 0; j < sz; j++)
{
printf("%d ", arr[j]);
}
printf("\n");
return 1;
}
int reverse(int* arr[], int sz)
{
int a = 0, b = sz-1;
int tmp = 0;
for(a=0;a<(sz/2);a++)
{
while (b>=9-a)
{
tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
b--;
}
if (a >= b)
break;
}
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int* p=&arr[0];
//init(arr,sz);
print(arr,sz);
reverse(arr,sz);
return 0;
}
//作业内容
//创建一个整形数组,完成对数组的操作
//实现函数init() 初始化数组为全0
//实现print() 打印数组的每个元素
//实现reverse() 函数完成数组元素的逆置。
//要求:自己设计以上函数的参数,返回值。
运行结果:
这里,我想特别说明一下逆置数组。我弄了半天才恍然大悟
注意这里的a是左边的指针,从arr[0]开始,b是右边的指针,从arr[9]开始,那么为什么这里是a<(sz/2)、b>=9-a呢?
我们先来列举一下:a = 0 , b = 9 ---->交换头尾1和10 ----> 10,2,3,4,5,6,7,8,9,1
b = 8 , a = 1 ---->交换2和9 ----> 10,9,3,4,5,6,7,8,2,1
。。。。。。
b = 5 , a = 4 ---->交换5和5 ----> 10,9,8,7,6,5,4,3,2,1
然而,我最后又发现这种方法也是可以的!!
int reverse(int* arr[], int sz)
{
int a = 0, b = sz-1;
int tmp = 0;
for(a=0;a<sz;a++)
{
while (b>=0)
{
tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
b--; break;
}
if (a >= b)
break;
printf("\n");
}
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}