C Primer Plus (第六版) 第十章_编程练习答案

这是一个关于C Primer Plus第六版第十章的编程练习解答集,包含了从no1到no14共14个C语言程序的解答代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有什么不对的地方,欢迎给我留言

no1.c

// 修改程序10.7的rain.c,用指针进行计算(仍然要声明并初始化数组)
# include <stdio.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 (* p)[MONTHS]  = rain ;

	for (year = 0 , total = 0 ; year < YEARS ; year++)
	{
		for (month = 0 , subtot = 0 ; month < MONTHS ; month++)
			subtot += p[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 += p[year][month] ;
		printf("%4.1f " , subtot / YEARS);
	}
	printf("\n");

	return 0 ;
} 

no2.c

//编写一个程序,初始化一个double类型的数组, 然后把该数组的内容拷贝至3个其他数组中(在main()函数中声明这4
//个数组).使用带数组表示法的函数进行第1份拷贝.使用带指针表示法和指针递增的函数进行第2份拷贝.把目标数组
//名,源数组名和待拷贝的元素的个数作为前两个函数的参数.第3个函数以目标数组名,源数组名和指向源数组最后一个
//元素后面的元素的指针,也就是说,给定以下声明, 则函数调用如下所示.
//double source[5] = {1.1 , 2.2 , 3.3 , 4.4 , 5.5};
//double targer1[5] ;
//double targer2[5] ;
//double targer3[5] ;
//copy_arr(target1 , source , 5) ;
//copy_ptr(target2 , source , 5) ;
//copy_ptrs(target3 , source , 5) ;

# include <stdio.h>

void copy_arr(double target[] , double source[] , int n);
void copy_ptr(double * target , double * source , int n);
void copy_ptrs(double * target , double * source , double * tarend);
void print_arr(double ar[] , int n);

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

	print_arr(source , 5);
	copy_arr(target1 , source , 5) ;
	copy_ptr(target2 , source , 5) ;
	copy_ptrs(target3 , source , target3 + 5) ;
	print_arr(target1 , 5);
	print_arr(target2 , 5);
	print_arr(target3 , 5);

	return 0 ;
}

void copy_arr(double target[] , double source[] , int n)
{
	for (int i = 0 ; i < n ; i++)
		target[i] = source[i] ;
}

void copy_ptr(double * target , double * source , int n)
{
	for (int i = 0 ; i < n ; i++ , target++)
		*target = source[i] ;
}

void copy_ptrs(double * target , double * source , double * tarend)
{
	while (target < tarend)
	{
		*target++ = *source++ ;
	}
}

void print_arr(double ar[] , int n)
{
	for (int i = 0 ; i < n ; i++)
		printf("%lf " , ar[i]);

	printf("\n");
}

no3.c

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

# include <stdio.h>

# define SIZE 10

int max_arr(int ar[] , int n );

int main(void)
{
	int ar[SIZE] ;

	for (int i = 0 ; i < SIZE ; i++)
	{
		ar[i] = i + 1 ;
		printf("%d " , ar[i]);
	}
	printf("\n");

	printf("The array max is %d\n" , max_arr(ar, SIZE));

	return 0 ;
}

int max_arr(int ar[] , int n )
{
	int max = ar[0];

	for (int i = 0 ; i < n ; i++)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值