小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Programming language
  4. C/C++
  5. 正文

C++ Primer Plus(第五版)第8章编程题答案

2018年11月8日 1683点热度 0人点赞 1条评论

1. 编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个参数(int类型),且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数(注意,字符串的打印次数不等于第二个参数的值,而等于函数被调用的次数)。是的,这是一个非常可笑的函数,但它让您能够使用本章介绍的一些技术。在一个简单的程序中使用该函数,以演示该函数是如何工作的。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 1
#include<iostream>
using namespace std;
void show_ch(char *str, int n = 0);
int num = 0;
int main()
{
	char name[10] = "zhang";
	cout << "如果第二个参数为0,那么输出(这是第一次调用):" << endl;
	show_ch(name);
	cout << "输出结束" << endl;
	cout << "第二次调用输出结果:" << endl;
	show_ch(name, 3);
	cout << "第三次调用输出结果:" << endl;
	show_ch(name, 9);
	cout << "第四次调用输出结果:" << endl;
	show_ch(name, 32);
	cout << "完成!" << endl;
	system("pause");
	return 0;
}
void show_ch(char *str, int n)
{
	++num;
	if (n == 0)
	{
		cout << str << endl;
	}
	else
		for (int i = 0; i < num; i++)
			cout << str << endl;
}

2.CandyBar结构包含3个成员。第一个成员存储candy bar的品牌名称;第二个成员存储candy bar的重量(可能有小数);第三个成员存储candy bar的热量(整数)。请编写一个程序,它使用一个这样的函数,即将CandyBar的引用、char指针、double和int作为参数并用最后3个值设置相应的结构成员。最后3个参数的默认值分别为“Millennium Munch”、2.85和350。另外,该程序还包含一个以CandyBar的引用为参数,并显示结构内容的函数,请尽可能的使用const。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 2
#include<iostream>
#include<string>
using namespace std;
struct CandyBar {
	string name;
	double weight;
	int hot;
};
void set_CandyBar(CandyBar &candy, char* n = "Millennium Munch", double w = 2.85, int h = 360);
void show_CandyBar(const CandyBar &c);
int main() {
	CandyBar candy;
	set_CandyBar(candy);
	show_CandyBar(candy);
	system("pause");
	return 0;
}

void set_CandyBar(CandyBar &c, char* n, double w, int h)
{
	c.name = n;
	c.weight = w;
	c.hot = h;

}
void show_CandyBar(const CandyBar &c)
{
	cout << "Name: " << c.name << endl;
	cout << "Weight: " << c.weight << endl;
	cout << "Hot: " << c.hot << endl;
}

3.编写一个函数,它接受一个指向string对象的引用作为参数,并将该string对象的内容转换成大写,为此可使用表6.4描述的函数toupper()。然后编写一个程序,它通过使用一个循环让您能够用不同的输入来测试这个函数。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 3
#include<iostream>
#include<string>
#include<cctype>
using namespace std;

string convert_Big(string &str);
int main() {
	string text,up;
	cout << "Enter a string (q to quit):" << endl;
	getline(cin, text);
	while (text != "q" && text!="Q")
	{
		cout << convert_Big(text) << endl;
		cout << "Next string (q to quit): " << endl;
		getline(cin, text);

	}
	system("pause");
	return 0;
}
//string可以被看做是字符数组
string convert_Big(string & str)
{
	int limit = str.size();
	for (int i = 0; i < limit; i++)
	{
		if(isalpha(str[i]))
			str[i] = toupper(str[i]);
	}
	return str;
}

4.下面是一个程序框架
//省略框架
请提供其中描述的函数和原型,从而完成该程序。注意,应有两个show()函数,每个都使用默认参数。请尽可能的使用const参数。set() 使用new分配足够的空间来存储制定的字符串。这里使用的技术与设计和实现类使用的相似。(可能害必须修改头文件的名称,删除using编译指令,这取决于所用的编译器。)

//C++ Primer Plus Edition 5
//Chapter 8 Homework 4
#include<iostream>
using namespace std;
#include<cstring>

struct stringy {
	char *str;
	int ct;
};
void show(const char *st, int n = 1);
void show(const stringy &strc, int n = 1);
void set(stringy& st, const char *t);

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

void set(stringy &st, const char *n)
{
	st.ct = strlen(n) + 1;
	st.str = new char[st.ct];
	strcpy(st.str, n);
}
void show(const stringy &strc, int n)
{
	for (int i = 0; i < n; i++)
		cout << strc.str << endl;
}

void show(const char *st, int n)
{
	for (int i = 0; i < n; i++) {
		if (strcmp(st, "Done!") == 0)
		{
			cout << "Done!" << endl;
			break;
		}
		cout << st << endl;

	}

}

5.编写模板函数max5(),它将一个包含5个T类型元素的数组作为参数,并返回数组中最大的元素(由于长度固定,因此可以在循环中使用硬编码,而不必通过参数来传递)。在一个程序中使用该函数,将T替换为一个包含5个int值的数组和一个包含5个double值的数组,以测试该函数。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 5
#include<iostream>
using namespace std;
template<typename T>
T max5(T *a);
int main() {
	int inte[5] = { 23, 55, 65, 12, 34 };
	int max_int = max5(inte);
	double dou[5] = { 12.3,14.3,11.9,89.6,1.8 };
	double max_dou = max5(dou);
	cout << "Integer MAX= " << max_int << endl;
	cout << "Double MAX= " << max_dou << endl;
	system("pause");
	return 0;
}

template<typename T>
T max5(T *a)
{
	T temp = a[0];
	for (int i = 1; i < 5; i++)
	{
		if (a[i] < temp)
			temp = a[i];
	}
	return temp;
}

6.编写模板函数maxn(),它将由一个T类型元素组成的数组和一个表示数组元素数目的整数作为参数,并返回数组中最大的元素。在程序对它进行测试,该程序使用一个包含6个int元素的数组和一个包含4个double元素的数组来调用该函数。程序还包含一个具体化,它将char指针数组和数组中的指针数量作为参数,并返回最长的字符串的地址。如果有多个这样的字符串,则返回其中第一个字符串的地址。使用由5个字符串指针组成的数组来测试该具体化。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 6
#include<iostream>
using namespace std;
template<typename T>
T maxn(T *a, const int n);
template<> const char* maxn(const char **a, const int n);

int main()
{
	int a[6] = {3,6,1,8,2,9 };
	double b[4] = { 9.8,8.56,193.1,4.3 };
	const char *c[5] = { "HAHAHA", "BALABALA", "XIAOMOXIAN", "hengli", "very good" };
	cout << maxn(a, 6) << endl;
	cout << maxn(b, 4) << endl;
	cout << maxn(c, 5) << endl;
	system("pause");
	return 0;
}

template<typename T>
T maxn(T *a, const int n)
{
	for (int i = 0; i < n; i++)
		if (a[i] > a[0]) a[0] = a[i];
	return a[0];
}

template<> const char* maxn(const char **a, const int n)
{
	int i, j = 0;
	for (i = 0; i<n; i++)
		if (strlen(a[i])>strlen(a[j])) j = i;
	return a[j];

}


 

7.修改程序清单8.14,使其使用两个名为SumArray()的模板函数来返回数组元素的总和,而不是显示数组的内容。程序应显示thing的总和以及所有debt的总和。

//C++ Primer Plus Edition 5
//Chapter 8 Homework 7
#include<iostream>
using namespace std;
template<typename T>
T ShowArray(T arr[], int n);

template<typename T>
T ShowArray(T * arr[], int n);
struct debts {
	char name[50];
	double amount;
};
int main(void) {
	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 << "Listing Mr.E's counts of things:";
	int ans_int = ShowArray(things, 6);
	cout << ans_int << endl;
	cout << "Listing Mr.E's  debts:";
	double ans_dou= ShowArray(pd, 3);
	cout << ans_dou << endl;
	system("pause");
	return 0;
}

template<typename T>

T ShowArray(T arr[], int n) {
	T ans = arr[0];
	cout << "Template A\n";
	for (int i = 1; i < n; i++)
		ans+=arr[i];
	return ans;
}

template<typename T>
T ShowArray(T*arr[], int n)
{
	T ans=*arr[0];
	cout << "Template B\n";
	for (int i = 1; i < n; i++)
		ans += *arr[i];
	return ans;
}

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: C++学习笔记
最后更新:2018年11月8日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
在微机课写日志 Hexo安装中遇到的问题 S.V Beijing Travel 10:Beijing Olympic Park 计算机组成原理笔记第五章(5.6) 网络技术与应用(网络内涵、互联网发展过程、交换方式)知识点整理 《鸟哥的Linux私房菜》(基础篇)笔记整理(第11章)
标签聚合
leetcode Python python学习 算法 Java linux 高中 学习 生活 鸟哥的linux私房菜
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号