小奥的学习笔记

  • 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(第五版)第7章编程题答案

2018年11月6日 1527点热度 0人点赞 1条评论

1. 编写一个程序,不断要求用户输入两个数,直到其中的一个为0。对于每两个数,程序将使用一个函数来计算它们的调和平均数,并将结果返回给main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下:
调和平均数=2.0*x*y/(x+y)

//C++ Primer Plus Edition 5
//Chapter 7 Homework 1
#include<iostream>
using namespace std;
double heaver(int m, int n);
int main() {
	double m, n, ans;
	cout << "Please input two numbers: ";
	cin >> m >> n;
	while (m != 0 && n != 0) {
		ans = heaver(m, n);
		cout << "The answer is " << ans << endl;
		cout << "Please input two numbers: ";
		cin >> m >> n;
	}

	cout << "Done!" << endl;
	system("pause");
	return 0;
}

double heaver(int m, int n) {
	double res;
	res = 2.0*m*n / (m + n);
	return res;
}

2. 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。请使用3个数组处理函数来分别进行输入、显示和计算平均成绩。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 2
#include<iostream>
using namespace std;
const int MAXSIZE = 10;
int fill_array(double scores[], int limit);
void show_array(const double ar[], int n);
double aver_array(double arc[], int n);
int main() {
	double scores[MAXSIZE];
	double average;
	cout << "Please enter ten scores:" << endl;
	int size = fill_array(scores, MAXSIZE);
	cout << "The scores are:" << endl;
	show_array(scores, size);
	average = aver_array(scores, size);
	cout << "The average score is " << aver_array(scores, size) << endl;
	system("pause");
	return 0;
}
int fill_array(double scores[], int limit) {
	double temp;
	int i;
	for (i = 0; i < limit; i++) {
		cout << "Enter Score #" << i << ": ";
		cin >> temp;
		if (!cin) {
			cin.clear();
			while (cin.get() != '\n')
				continue;
			break;
		}
		else if (temp < 0)
			break;
		scores[i] = temp;
	}
	return i;


}
void show_array(const double ar[], int n) {
	for (int i = 0; i < n; i++) {
		cout << "Score #" << (i + 1) << ": " << ar[i] << endl;
	}
}
double aver_array(double arc[], int n) {
	double total = 0;
	double average;
	for (int i = 0; i < n; i++) {
		total += arc[i];
	}
	average = total / n;
	return average;

}

3.下面是一个结构声明:
//省略
a. 编写一个函数,按值传递box结构,并显示每个成员的值。
b. 编写一个函数,传递box结构的地址,并将volume成员设置为其他三维长度的乘积。
c. 编写一个使用这两个函数的简单程序。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 3
#include<iostream>
using namespace std;
struct box {
	char maker[40];
	float height;
	float width;
	float length;
	float volume;
};
void show_box(box member);
void set_box(box *pmember);
int main() {
	box b = { "Yu Shuai",3,2,1,1 };
	show_box(b);
	set_box(&b);
	show_box(b);
	system("pause");
	return 0;
}
void show_box(box member) {
	cout << "Box's Maker: " << member.maker << endl;
	cout << "Box's height: " << member.height << endl;
	cout << "Box's width: " << member.width << endl;
	cout << "Box's length: " << member.length << endl;
	cout << "Box's volume: " << member.volume << endl;
}

void set_box(box *pmember) {
	(*pmember).volume = (*pmember).height*(*pmember).length*(*pmember).width;
}

4. 许多州的彩票发行结构都使用如程序清单7.4所示的简单彩票玩法的变体。在这些玩法中,玩家从一组被称为域号码(field number)的号码中选择几个。例如,可以从域号码1~47中选择5个号码;还可以从第二个区间(如1~27)选择一个号码(称为特选号码)。要赢得头奖,必须正确猜中所有的号码。中头奖的几率是选中所有域号码的几率与选中号码几率的乘积。例如,在这个例子中,中头奖的几率是从47个号码中正确选取5个号码的几率与从27个号码中正确选择1个号码的几率的乘积。请修改程序清单7.4,以计算中得这种彩票头奖的几率。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 4
#include<iostream>
const int n1 = 5;
const int num1 = 47;
const int n2 = 1;
const int num2 = 27;
long double odds(unsigned num, unsigned n);
int main()
{
using namespace std;
double odds1 = odds(num1, n1);
double odds2 = odds(num2, n2);
cout << "中头奖的几率为: " << odds1*odds2 << endl;
system("pause");
return 0;
}
long double odds(unsigned num, unsigned n)
{
using namespace std;
long double res = 1.0;
for (num, n; n > 0; n--, num--)
res = res * n / num;
return res;
}

 

5. 定义一个递归函数,接受一个整数参数,并返回该参数的阶乘。前面讲过,3的阶乘写作3!,等于3*2!,依此类推;而0!被定义为1。通用的计算公式是,如果n大于零,则n!=n*(n-1)!。在程序中对该函数进行测试,程序使用循环让用户输入不同的值,程序将报告这些值的阶乘。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 5
#include<iostream>
using namespace std;
int factorial(int n);
int main() {
	int n, ans;
	cout << "Please input an integer: ";
	cin >> n;
	ans = factorial(n);
	cout << "The answer is " << ans << endl;
	system("pause");
	return 0;
}
int factorial(int n) {
	int res = 1;
	if (n > 1)
		res = n*factorial(n-1);
	return res;
}

 

6.编写一个程序,它使用下列函数:

Fill_array()将一个double数组的名称和长度作为参数。它提示用户输入double值,并将这些值存储到数组中。当数组被填满或用户输入了非数字时,输入将停止,并返回实际输入了多少个数字。
Show_array()将一个double数组的名称和长度作为参数,并显示该数组的内容。
Reverse_array()将一个double数组的名称和长度作为参数,并将存储在数组中的值的顺序反转。
程序将使用这些函数来填充数组,然后显示数组;反转数组,然后显示数组;反转数组中除第一个和最后一个元素之外的所有元素,然后显示数组。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 6
#include<iostream>
int fill_array(double ar[], int limit);
void show_array(double ar[], int size);
void reverse_array(double ar[], int size);
using namespace std;
const int MAXSIZE = 20;
int main()
{
	int n;
	double shuzu[MAXSIZE];
	int size = fill_array(shuzu, MAXSIZE);
	show_array(shuzu, size);
	reverse_array(shuzu, size);
	cout << "反转结果:" << endl;
	show_array(shuzu, size);
	system("pause");
	return 0;
}
int fill_array(double ar[], int limit)
{
	double temp;
	int i;
	for (i = 0; i<limit; i++)
	{
		cout << "Enter value#" << (i + 1) << " \n";
		cin >> temp;
		if (!cin)
		{
			cin.clear();
			cout << "bad input:\n";
			break;
		}
		else
			ar[i] = temp;
	}
	return i;
}
void show_array(double ar[], int size)
{
	for (int i = 0; i<size; i++)
		cout << "Value #" << (i + 1) << ": " << ar[i] << endl;;
}
void reverse_array(double ar[], int size)
{
	int i, j;
	for (i = 1, j = size - i - 1; i<j; i++, j--)
	{
		double temp = ar[i];
		ar[i] = ar[j];
		ar[j] = temp;
	}
}

 

7. 修改程序清单7.7中的3个数组处理函数,使之使用两个指针参数来表示区间。fill_array()函数不返回实际读取了多少个数字,而是返回一个指针,该指针指向最后被填充的位置;其他的函数可以将该指针作为第二个参数,以标识数据结尾。

//C++ Primer Plus Edition 5
//Chapter 7 Homework 7
#include<iostream>
using namespace std;
const int Max = 5;
double* fill_array(double *ar, double *limit);
void show_array(const double *ar, double *n);
void revalue(double r, double *ar, double *n);

int main() {
	double properties[Max];
	double *size = fill_array(properties, properties+Max);
	show_array(properties, size);
	cout << "Enter revaluation factor: ";
	double factor;
	cin >> factor;
	revalue(factor, properties, size);
	show_array(properties, size);
	cout << "Done.\n";
	system("pause");
	return 0;
}
double *fill_array(double *ar, double *limit) {
	double temp;
	double *p;
	for (p=ar; p < limit; p++) {
		cout << "Enter value: ";
		cin >> temp;
		if (!cin) {
			cin.clear();
			while (cin.get() != '\n')
				continue;
			cout << "Bad input;input process terminated.\n";
			break;
		}
		else if (temp < 0)
			break;
		*p = temp;
	}
	return p;
}

void show_array(const double *ar, double *n) {
	for (const double *p = ar; p < n; p++)
	{
		cout << "Property: $";
		cout << *p << endl;
	}
}

void revalue(double r, double *ar, double *n) {
	for (ar; ar < n; ar++)
		(*ar) *= r;
}

第8~9题未做。

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

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:一种基于深度滤波的全频带音频低复杂度语音增强框架
《G档案》博客开启 新建济南至莱芜高速铁路项目环境影响评价信息公示 杯具,山寨了我哥们的博客 "难忘2014·青岛世园会闭幕联谊会"今夜唱响 世园会,难说再见 How to write an abstract? Welcome to my blog
标签聚合
linux Java 算法 学习 python学习 Python 高中 鸟哥的linux私房菜 leetcode 生活
最近评论
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号