C Primer Plus(第6版) 第十章 编程练习及参考答案

本篇博客包含了C Primer Plus(第6版)第十章的编程练习,涉及指针在计算、数组拷贝、最大值查找、数组倒序、数组操作等方面的应用。在Microsoft Visual Studio 2019环境下编译,并提供了部分练习的修改版答案。
摘要由CSDN通过智能技术生成

C Primer Plus(第6版) 第十章 编程练习及参考答案

编译环境:Microsoft Visual Studio 2019
备注:本文留作作者自用,如有错误敬请指出
(针对Microsoft Visual Studio 2019的一些特性对答案进行了修改)

1.修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)。

#include<stdio.h>
#include<stdlib.h>
#define MONTHS 12
#define YEARS 5
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, month;
	float subtot, total;
	float (* ptr)[MONTHS];
	ptr = rain;
	printf(" YEAR        RAINFALL  (inches)\n");
	for (year = 0, total = 0; year < YEARS; year++)
	{
   
		for (month = 0, subtot = 0; month < MONTHS; month++)
			subtot += ptr[year][month];

		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 Nov Dec\n ");
	for (month = 0; month < MONTHS; month++)
	{
   
		for (year = 0, subtot = 0; year < YEARS; year++)
			subtot += ptr[year][month];
		printf("%3.1f ", subtot / YEARS);
	}
	printf("\n");
	system("pause");
	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];
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>
#include<stdlib.h>
void copy_arr(double *,double *,int);
void copy_ptr(double*, double*, int);
void copy_ptrs(double*, double*,double *);
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(target2, source, 5);
	copy_ptrs(target3, source, source + 5);
	system("pause");
	return 0;
}
void copy_arr(double* p1, double* p2, int n)
{
   
	int num;
	for (num = 0;num < n;num++,p1++,p2++)
		*p1 = *p2;
}
void copy_ptr(double* p1, double* p2, int n)
{
   
	int num;
	for (num = 0;num < n;num++, p1++, p2++)
		*p1 = *p2;
}
void copy_ptrs(double* p1, double* p2, double* p3)
{
   
	for (;p2<p3;p1++, p2++)
		*p1 = *p2;
}

3.编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函数。

#include<stdio.h>
#include<stdlib.h>
#define SIZE 5
int formax(int *,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值