28-编程练习
10.13 编程练习
1.修改程序清单10.7的 rain.c 程序,用指针进行计算(仍然要声明并初始化数组)。
2.编写一个程序,初始化一个 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);
3.编写一个函数,返回存储在 int 类型数组中的最大值,并在一个简单的程序中测试该函数。
4.编写一个函数,返回存储在 double 类型数组中最大值的下标,并在一个简单的程序中测试该函数。
5.编写一个函数,返回存储在 double 类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数。
6.编写一个函数,把 double 类型数组中的数据倒序排列,并在一个简单的程序中测试该函数。
7.编写一个程序,初始化一个 double 类型的二维数组,使用编程练习2中的一个拷贝函数把该数组中的数据拷贝至另一个二维数组中(因为二维数组是数组的数组,所以可以使用处理一维数组的拷贝函数来处理数组中的每个子数组)。
8.使用编程练习2中的拷贝函数,把一个内含7个元素的数组中第3~第5个元素拷贝至内含3个元素的数组中。该函数本身不需要修改,只需要选择合适的实际参数(实际参数不需要是数组名和数组大小,只需要是数组元素的地址和待处理元素的个数)。
9.编写一个程序,初始化一个 double 类型的3×5二维数组,使用一个处理变长数组的函数将其拷贝至另一个二维数组中。还要编写一个以变长数组为形参的函数以显示两个数组的内容。这两个函数应该能处理任意N×M数组(如果编译器不支持变长数组,就使用传统C函数处理N×5的数组)。
10.编写一个函数,把两个数组中相对应的元素相加,然后把结果存储到第 3 个数组中。也就是说,如果数组 1 中包含的值是 2 、 4 、 5 、 8 ,数组 2 中包含的值是 1 、 0 、 4 、 6 ,那么该函数把 3 、 4 、 9 、 14 赋给第3个数组。函数接受3个数组名和一个数组大小。在一个简单的程序中测试该函数。
11.编写一个程序,声明一个 int 类型的3×5二维数组,并用合适的值初始化它。该程序打印数组中的值,然后各值翻倍(即是原值的2倍),并显示出各元素的新值。编写一个函数显示数组的内容,再编写一个函数把各元素的值翻倍。这两个函数都以函数名和行数作为参数。
12.重写程序清单10.7的 rain.c 程序,把 main() 中的主要任务都改成用函数来完成。
13.编写一个程序,提示用户输入3组数,每组数包含5个 double 类型的数(假设用户都正确地响应,不会输入非数值数据)。该程序应完成下列任务。
a.把用户输入的数据存储在3×5的数组中
b.计算每组(5个)数据的平均值
c.计算所有数据的平均值
d.找出这15个数据中的最大值
e.打印结果
每个任务都要用单独的函数来完成(使用传统C处理数组的方式)。完成任务b,要编写一个计算并返回一维数组平均值的函数,利用循环调用该函数3次。对于处理其他任务的函数,应该把整个数组作为参数,完成任务c和d的函数应把结果返回主调函数。
14.以变长数组作为函数形参,完成编程练习13。
[1] 在最后一次 while 循环中执行完 start++; 后, start 的值就是 end 的值。——译者注
