c primer plus 10.13编程练习

本篇博客包含了多个C语言编程练习,涉及使用指针进行计算、查找数组中的最大值、倒序排列double类型数组、处理二维数组以及实现拷贝函数等。练习旨在提升对C语言数组、指针和函数的理解与运用。
摘要由CSDN通过智能技术生成

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;
}


// 考察数组表示法和指针表示法在函数中的使用,函数——数组——指针
#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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值