1.修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。
#include <stdio.h>
#define MONTHS 12
#define YEARS 5
//a[2][1] = *(*(a+2)+1)
int main(void)
{
const float rain[YEARS][MONTHS] = {
{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
{9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
{7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
{7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
};
int year, months;
float subtot, total;
printf("YEAR RAINFALL (inches)\n");
for (year = 0, total = 0; year < YEARS; year++)
{
for (months = 0, subtot = 0; months < MONTHS; months++)
subtot += *(*(rain+ year) + months);
printf("%5d %15.1f\n", 2010 + year, subtot);
total += subtot;
}
printf("\nthe yearly average is %.1f inches.\n\n", total / YEARS);
printf("monthly averages:\n\n");
printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct");
printf(" Nov Dec\n");
for (months = 0; months < MONTHS; months++)
{
for (year = 0, subtot = 0; year < YEARS; year++)
subtot += *(*(rain + year) + months);
printf("%4.1f ", subtot / YEARS);
}
printf("\n");
return 0;
}
2.编写一个程序,初始化一个double类型的数组,然后把该数组的内容拷贝至3个其他数组中(在main()中声明这4个数组)。使用带数组表示法的函数进行第1份拷贝。使用带指针表示法和指针递增的函数进行第2份拷贝。把目标数组名、源数组名和待拷贝的元素个数作为前两个函数的参数。第3个函数以目标数组名、源数组名和指向源数组最后一个元素后面的元素的指针。也就是说,给定以下声明,则函数调用如下所示:
double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target1[5];
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 target[], double source[], int num)
{
for (size_t i = 0; i < num; i++)
{
target[i] = source[i];
}
return;
}
void copy_ptr(double* target, double* source, int num)
{
for (size_t i = 0; i < num; i++)
{
*(target+i) = *(source+i);
}
return;
}
void copy_ptrs(double* target, double* source_beign, double* source_end)
{
for (double *i = source_beign;i < source_end;i++)
{
*target++ = *i;
}
return;
}
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];
copy_arr(target1, source, 5);
copy_ptr(target