1.编写一个程序,初始化一个double类型的数组,然后把该数组的内容拷贝至3个其他数组中(在main()中声明这4个数组)。使用带数组表示法的函数进行第1份拷贝。使用带指针表示法和指针递增的函数进行第2份拷贝。把目标数组名、源数组名和待拷贝的元素个数作为前两个函数的参数。第3个函数以目标数组名、源数组名和指向源数组最后一个元素后面的元素的指针。也就是说,给定以下声明,则函数调用如下所示:
double source[5]={1.1,2.2,3.3,4.4,5.5};
double target1[5];
double target2[5];
double target3[5];
copy_arr(target1,source,5);
copy_ptr(target2,source,5);
copy_ptrs(target3,source, source+5);
注意指针递增用法:
#include <stdio.h>
void copy_arr(double ar1[], double ar2[], int n);
void copy_ptr(double * ptr1, double * ptr2, int n);
void copy_ptrs(double * ptr1, double * ptr2, double * ptrs);
int main(void)
{
double source[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
double target1[5];
double target2[5];
double target3[5];
int i;
copy_arr(target1, source, 5);
copy_ptr(target2, source, 5);
copy_ptrs(target3, source, source + 5);
for (i = 0; i < 5; i++)
{
printf("%.1f %.1f %.1f\n",target1[i], target2[i], target3[i]);
}
return 0;
}
void copy_arr(double ar1[], double ar2[], int n)
{
int i;
for (i = 0; i < n; i++)
{
ar1[i] = ar2[i];
}
}
void copy_ptr(double * ptr1, double * ptr2, int n)
{
int i;
for (i = 0; i < n;i++)
{
*(ptr1 + i) = *(ptr2 + i);
}
}
void copy_ptrs(double * ptr1, double * ptr2, double * ptrs)
{
for (; ptr2 < ptrs;ptr1++, ptr2++)
{
*ptr1 = *ptr2;
}
}
运行结果如下:
2.编写一个函数,把doube类型数组中的数据倒序排列,并在一个简单的程序中测试该函数。
注意使用排序算法中的冒泡排序:
#include <stdio.h>
void reverse(double arr[]);
int main()
{
double arr[9] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};
int i;
reverse(arr);
for (i = 0; i < 9; i++)
{
printf("%.1f\n", arr[i]);
}
return 0;
}
void reverse(double arr[])
{
int i,j;
double temp;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9-i; j++)
{
if (arr[j] < arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
运行结果如下: