1.修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)
// 题目:修改程序10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)
// rain.c -- 计算每年的总降水量、年平均降水量和5年中每月的平均降水量
#include <stdio.h>
#define MONTHS 12 // 一年的月份数
#define YEARS 5 // 年数
int main(void)
{
// 用2010~2014年的降水量数据初始化数组
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}
};
const float (*pi)[MONTHS]; // 创建const指针
float subtot, total = 0.0; //年降雨量 和 5年降雨量
pi = rain;
printf(" YEAR RAINFALL (inches)\n");
for (int i = 0; i < YEARS; i++) // 用变量i依次访问二维数组的5个一维数组 (计算每年,各月的降水量总和)
{
subtot = 0.0;
for (int b = 0; b < MONTHS; b++) // 用变量b依次访问一维数组的各个元素
{
subtot += *(*(pi+i)+b); //指针计算
}
printf("%5d %13.1f\n", 2010+i, 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 Nov Dec\n");
total = 0.0;
for (int i = 0; i < MONTHS; i++) // 用变量i依次访问一维数组的各个元素 (计算每月的五年降水量总和)
{
subtot = 0;
for (int b = 0; b < YEARS; b++)
{
subtot += *(*(pi+b)+i); //指针计算
}
printf(" %3.1f", subtot/YEARS); //每月的平均降雨量
}
printf("\n");
return 0;
}
2
// 考察数组表示法和指针表示法在函数中的使用,函数——数组——指针
#include <stdio.h>
void copy_arr(double targe1[], double source[], int n) // 数组表示法
{
for (int i = 0; i < n; i++)
{
targe1[i] = source[i];
}
}
void copy_ptr(double *p1, double *p2, int n) // 指针表示法
{
for (int i = 0; i < n; i++)
{
*(p1+i) = *(p2+i);
}
}
void copy_ptrs(double *pi, double *p2, double *p3) // 指针表示法,赋值个数由第三个元素决定
{
for (int i = 0; p2+i < p3; i++)
{
*(pi+i) = *(p2+i);
}
}
int main(void)
{
double source[5] = {1.1,