c++ primer plus(文章6版本)中国版 编程练习答案第八章

简介:

编程练习答案第八章

8.1写输出字符串的函数,存在默认参数表示输出频率,莫感觉1.(原标题太扯了,的问题的细微变化的基础上,含义)

//8.1编写一个输出字符串的函数。有一个默认參数表示输出次数,默觉得1.(原题太扯啦,题意基础上小修改)
#include <iostream>
using namespace std;

void show (const char* str, int time=1)
{
	unsigned	n=(time>0)?

time:-time; for (unsigned i = 0; i < n; ++i) cout << str << endl; cout << "-----------------" << endl; } int main () { const char* str = "hello word!"; show(str); show(str,0); show(str,1); show(str,-1); }


8.2CandyBar结构体有品牌,重量和热量3个成员,编写一个含有默认值的函数为成员赋值和一个显示内容函数

//8.2CandyBar结构体有品牌。重量和热量3个成员。编写一个含有默认值的函数为成员赋值和一个显示内容函数
//CandyBar& candbar, const char* strBrand = "Millennium Munch", double weight = 2.85, int calories = 350
#include <iostream>
#include <string>
using namespace std;

struct CandyBar
{
	string Brand;
	double weight;
	int calories;
};

void input (CandyBar& candbar, const char* Brand = "Millennium Munch", double weight = 2.85, int calories = 350)
{
	candbar.Brand = Brand;
	candbar.weight = weight;
	candbar.calories = calories;
}

void show (const CandyBar& candbar)
{
	cout << candbar.Brand << '\t' << candbar.weight << '\t' << candbar.calories << endl;
}

int main () 
{     
	CandyBar	candbar1, candbar2;
	input(candbar1);
	show(candbar1);
	input(candbar2, "world", 2,3 );
	show(candbar2);
} 


8.3编写一个函数。接受string引用。并把string内容变大写,之后利用循环測试

//8.3编写一个函数,接受string引用,并把string内容变大写,之后利用循环測试
#include <iostream>
#include <cctype>
using namespace std;

string& upper (string& str)
{
	for (char& e : str)
		e = (char)toupper(e);
	return (str);
}

int main () 
{     
	while (true) {
		cout << "Enter a string (q to quit): ";
		string str;
		getline(cin, str);
		if (!cin || "q" == str || "Q" == str)
			break;
		cout << upper(str) << endl;
	}
} 

8.4按下面程序框架,完毕函数

//8.4按下面程序框架,完毕函数
#include <iostream>
#include <cstring>
using namespace std;

struct stringy {
	char * str;
	int ct;
};

void set (stringy& stry, const char* szTxt)
{
	stry.ct = (int)strlen(szTxt);
	stry.str = new char [stry.ct + 1];
	strcpy(stry.str, szTxt);
}

void show (const char* szTxt, unsigned times = 1)
{
	for (unsigned i = 0; i < times; ++i)
		cout << szTxt << endl;
}

void show (const stringy& stry, unsigned times = 1)
{
	for (unsigned i = 0; i < times; ++i)
		cout << stry.str << endl;
}

void destroy (stringy& stry)
{
	delete [] stry.str;
	stry.str = NULL;
}

int main()
{
	stringy beany;
	char testing[] = "Reality isn't what it used to be.";
	set(beany, testing);
	show(beany);
	show(beany, 2);
	destroy(beany);
	testing[0] = 'D';
	testing[1] = 'u';
	show(testing);
	show(testing, 3);
	show("Done!");
}

8.5利用一个模板函数max5()。返回给予的5个数的最大值(应用c++11的array)

//8.5利用一个模板函数max5()。返回给予的5个数的最大值(应用c++11的array)
#include <iostream>
#include <array>
using namespace std;

template<typename T>
const T& max5 (const array<T, 5>& arr)
{
	unsigned	max = 0;
	for (unsigned i = 0; i < 5; ++i)
		if (arr[i] > arr[max])
			max = i;
	return (arr[max]);
}

int main ()
{
	array<int, 5>	iarray = {32, 20, 99, 256, 9};
	for (const auto& e : iarray)
		cout << e << ' ';
	cout << " max: " << max5(iarray) << endl;
	
	array<double,5>  darray = {1.2,2.3,4.5,32.3,4.3};
	for (const auto& e : darray) 
		cout << e << ' ';
	cout << "max: " << max5(darray) << endl;
}

8.6编写模板函数maxn(),參数为一个数组和元素数目。返回数组最大值,然后详细化一个字符串为元素的字符串,返回最长字符串

//8.6编写模板函数maxn(),參数为一个数组和元素数目,返回数组最大值,
//然后详细化一个字符串为元素的字符串,返回最长字符串
#include <iostream>
#include <cstring>
using namespace std;

template <typename T>
const T& maxn (const T arr[], unsigned n)
{
	unsigned	max = 0;
	for (unsigned i = 0; i < n; ++i)
		if (arr[i] > arr[max])
			max = i;
	return (arr[max]);
}

char* maxn ( char* arr[], unsigned n)
{
	unsigned	max = 0;
	for (unsigned i = 0; i < n; ++i)
		if (strlen(arr[i]) > strlen(arr[max]))
			max = i;
	return (arr[max]);
}

int main ()
{
	int	iArray[] = {32, -1, 99, 0, 256, 9};
	for (const auto& e : iArray)
		cout << e << ' ';
	cout << " ----max: " << maxn(iArray, sizeof(iArray)/sizeof(iArray[0])) << endl;
	double	dArray[] = {-3.2, 221.22, 9.9, 0, 1};
	for (const auto& e : dArray)
		cout << e << ' ';
	cout << " ----max: " << maxn(dArray, sizeof(dArray)/sizeof(dArray[0])) << endl;
	const char*	szArray[] = {"aaaa","bbbbbb","cc","fffffffffff","kkkk"};
	for (const auto& e : szArray) 
		cout << '\"' << e << '\"' << ' ';
	cout << " ----max: " << '\"' << maxn(szArray, sizeof(szArray)/sizeof(szArray[0])) << '\"' << endl;
}

8.7对程序清单8.14,使用两个SumArray()模板返回数组元素总和。

程序返回thing以及debt的总和

//8.7对程序清单8.14,使用两个SumArray()模板返回数组元素总和。程序返回thing以及debt的总和
#include <iostream>
using namespace std;

struct debts
{
	char name[50];
	double amount;
};

template <typename T>
double SumArray(T arr[], int n)
{	
	cout << "template A\n";
	double	sum = 0;
	for (int i = 0; i < n; i++)
		sum += arr[i];
	return (sum);
}

template <typename T>
double SumArray(T * arr[], int n)
{
	cout << "template B\n";
	double	sum = 0;
	for (int i = 0; i < n; i++)
		sum += *arr[i];
	return (sum);
}

int main()
{
	int things[6] = {13, 31, 103, 301, 310, 130};
	struct debts mr_E[3] = {	{"Ima Wolfe", 2400.0},{"Ura Foxe", 1300.0},{"Iby Stout", 1800.0}	};
	double * pd[3];
	for (int i = 0; i < 3; i++)
		pd[i] = &mr_E[i].amount;
	cout << "the total number of Mr. E's things: " << SumArray(things, 6) << endl;
	cout << "the sum of Mr. E's all debts: " << SumArray(pd, 3) << endl;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4646607.html,如需转载请自行联系原作者


相关文章
|
3月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
418 67
|
3月前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
209 64
|
3月前
|
Linux 编译器 测试技术
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
263 63
|
3月前
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
355 12
|
2月前
|
消息中间件 存储 安全
|
3月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
96 11
|
3月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
72 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
3月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
98 2
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
60 2
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
111 5