C++ Primer Plus课后编程练习第5章参考代码

(C++ Primer Plus(中文版)第5章课后编程练习参考代码)

声明:

作者入门小白,将学习过程中的代码做一些分享,仅供大家参考,欢迎大家交流指正。全部编译运行过,水平有限,不喜勿喷。

环境:

Windows 7操作系统,Dev C++ 5.11,TDM-GCC 4.9.2 64-bit Release

1.编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间(包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和9,则程序将指出2~9之间所有整数的和44。

代码:

#include <iostream> 

using namespace std;

int main()
{
	cout << "Please input 2 numbers: ";
	int num1,num2;
	cin >> num1;	//获取两个数字
	cin >> num2;
	
	int sum = 0;
	for( int i=num1; i<=num2; i++ )
	{
		sum += i;	//计算累加和
	}
	
	cout << "sum = " << sum << endl;
	
	return 0;
}

结果:
图5.9.1

2.使用array对象(而不是数组)和long double(而不是long long)重新编写程序清单5.4,并计算100!的值。

代码:

#include <iostream> 
#include <array>	//包含array头文件

using namespace std;

int main()
{
	//下标从0开始,100!的结果放在下标为100的元素中,因此长度应为101
	array<long double, 101> num;
	num[1] = num[0] = 1.0;
	for( int i=2; i<101; i++ )
	{
		num[i] = i * num[i-1];
	}
	//使用科学计数法表示
	cout << "100! = " << num[i] << endl;
	//使用定点表示法表示
	cout.setf(ios_base::fixed, ios_base::floatfield);
	cout << "100! = " << num[i] << endl;
	
	return 0;
}

结果:
图5.9.2

3.编写一个要求用户输入数字的程序。每次输入后,程序都将报告到目前为止,所有输入的累加和。当用户输入0时,程序结束。

代码:

#include <iostream> 

using namespace std;

int main()
{
	int num;	//存放输入的数字
	long int sum = 0L;	//存放累加和
	
	cout << "please input a number: ";
	cin >> num;
	while( num!=0 )		//数字0为退出条件
	{
		sum += num;
		cout << "Now sum = " << sum << endl;
		cout << "please input a number: ";
		cin >> num;
	}
	
	cout << "Exit!" << endl;	//num=0时输出退出提示语
	
	return 0;
}

结果:
图5.9.3

4.Daphne以10%的单利投资了100美元。也就是说,每一年的利润都是投资额的10%,即每年10美元:利息 = 0.10 X 原始存款,而Cleo以5%的复利投资了100美元。也就是说,利息是当前存款(包括获得的利息)的5%:利息 = 0.05 X 当前存款。Cleo在第一年投资100美元的盈利是5%–得到了105美元。下一年的盈利是105美元的5%–5.25美元,以此类推。请编写一个程序,计算多少年后,Cleo的投资价值才能超过Daphne的投资价值,并显示此时两人的投资价值。

代码:

#include <iostream> 

using namespace std;

int main()
{
	int year = 0;		//年
	double NowMoney_D = 100.0;		//Daphne目前的投资价值
	double NowMoney_C = 100.0;		//Cleo目前的价值
	
	do
	{
		NowMoney_D += 100.0 * 0.1;	//每年增加原始存款的10%
		
		NowMoney_C += (NowMoney_C * 0.05);	//每年增加当前存款的5%
		
		year++;		//年份加一
		cout << "after " << year << " years, Cloe: " << NowMoney_C;
		cout << "\nDaphne: " << NowMoney_D << endl;
	
	}while( NowMoney_C<NowMoney_D );	//Cleo的价值等于或者高于Daphne时退出循环
	//显示当前二人的投资价值
	cout << "\nAfter " << year << " years, Cleo's money > Daphne'money'.\n";
	cout << "Now, Cleo's money: " << NowMoney_C << endl;
	cout << "Now, Daphne's money: " << NowMoney_D << endl;

	return 0;
}

结果:
(因为输出信息太长,只截取了部分信息。)
在这里插入图片描述

5.假设要销售《C++ For Fools》一书。请编写一个程序,输入全年中每个月的销售量(图书数量,而不是销售额)。程序通过循环,使用初始化为月份字符串的char *数组(或string对象数组)逐月进行提示,并将输入的数据储存在一个int数组中。然后,程序计算数组中各元素的总数,并报告这一年的销售情况。

代码:

#include <iostream> 

using namespace std;

int main()
{
	const char *month[12] = 
	{
		"January", "February", "March", "April",
		"May", "June", "July", "August",
		"September", "October", "November", "December"
	};		//存放月份信息字符串指针的数组
	
	int num[12] = {0};		//存储每月销售额
	long int sum = 0L;		//总销售额
	
	cout << "Please input the number of every month:\n"; 
	
	for( int i=0; i<12; i++ )	//输入每月销售额
	{
		cout << month[i] << ": ";
		cin >> num[i];
		sum += num[i];		//计算总销售额
	}
	
	cout << "The sum of number: " << sum << endl;
	
	return 0;
}

结果:
图5.9.5

6.完成编程练习5,但这一次使用一个二维数组来存储输入–3年中每个月的销售量。程序将报告每年销售量以及三年的总销售量。

代码:

#include <iostream> 

using namespace std;

int main()
{
	const char *month[12] = 
	{
		"January", "February", "March", "April",
		"May", "June", "July", "August",
		"September", "October", "November", "December"
	};		//存放月份字符串

	int num[3][12];		//存放3年的销售额信息
	long int sum[3] = {0L};		//存放每一年的销售总额信息
	long int Sum = 0L;		//存放3年总销售额

	for( int j=0; j<3; j++ )	//年份循环
	{
		cout << "Please input the number of " << j+1 << " year:\n"; 
		for( int i=0; i<12; i++ )	//月份循环
		{
			cout << month[i] << ": ";
			cin >> num[j][i];		//输入每月销售额
			sum[j] += num[j][i];	//计算当年销售总额
		}
		cout << "The sum of " << j+1 << "ed year: " << sum[j] << endl << endl;
		Sum += sum[j];		//计算3年销售总额
	}

	cout << "The sum of 3 years: " << Sum << endl;

	return 0;
}

结果:
(输出太长,只截取部分)
图5.9.6

7.设计一个名为car的结构,用它存储下属有关车的信息:生产商(存储在字符数组或者string对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆车。随后程序使用new来创建一个由相应数量的car结构组成的动态数组。接下来,程序提示用户输入每辆车的生产商(可能有多个单词组成)和年份信息。请注意,这需要特别小心,因为它将交替读取数值和字符串,最后程序将显示每个结构的内容。

代码:

#include <iostream> 

using namespace std;

struct Car		//声明Car结构
{
	char make[30];		//生产商
	int year;		//年份
};

int main()
{
	cout << "How many cars do you wish to catalog? ";
	int num;
	cin >>num;		//获取车辆数
	
	Car *cars = new Car [num];		//创建Car结构的动态数组
	
	for( int i=0; i<num; i++ )		//获取汽车信息
	{
		cout << "Car #" << i+1 << ":\n";
		cout << "Please enter the make: ";
		cin.get();		//消除输入数字后的回车
		cin.getline( cars[i].make, 30);		//获取带有空格的字符串
		cout << "Please enter the year made: ";
		cin >> cars[i].year;	//获取年份
	}
	
	cout << "Here is your collection:" << endl;		//输出汽车信息	
	for( int i=0; i<num; i++ )
	{
		cout << cars[i].year << "\t" << cars[i].make << endl;
	}
	
	delete [] cars;		//释放内存

	return 0;
}

结果:
图5.9.7

8.编写一个程序,它使用一个char数组和循环来每次读取一个单词,直到用户输入done为止。随后该程序指出用户输入了多少个单词(不包括done在内)。您应在程序中包含头文件cstring,并使用函数strcpy()来进行比较测试。

代码:

#include <iostream>
#include <cstring>		//使用strcmp需包含此头文件

using namespace std;

int main()
{
	cout << "Enter words (to stop, type the word done):" << endl;
	char word[20];		//存放输入字符串
	
	int num = 0;	//单词个数
	
	cin >> word;	//获取一个以空格结尾的字符串
	while( strcmp(word, "done")!=0 )	//当为输入字符串为“done”时退出
	{
		num++;		//统计单词个数
		cin >> word;	//获取下一个单词
	}
	
	cout << "You enter a total of " << num << " words." << endl;

	return 0;
}

结果:
图5.9.8

9.编写一个满足前一个练习中描述的程序,但使用string对象而不是字符数组。请在程序中包含头文件string,并使用关系运算符来进行比较测试。

代码:

#include <iostream>
#include <string>	//使用string需包含此头文件

using namespace std;

int main()
{
	cout << "Enter words (to stop, type the word done):" << endl;
	string word;	//定义字符串变量
	
	int num = 0;	//单词个数
	
	cin >> word;	//先输入一个字符串
	while( word!="done" )	//当输入字符串为“done”时退出
	{
		num++;		//统计单词个数
		cin >> word;	//获得下一个字符串
	}
	
	cout << "You enter a total of " << num << " words." << endl;

	return 0;
}

结果:
图5.9.9

10.编写一个使用嵌套循环的程序,要求用户输入一个值,指出要显示多少行。然后,程序将显示相应行数的星号,其中第一行包括一个星号,第二行包括两个星号,以此类推。每一行包含的字符数等于用户指定的行数,在星号前面加上句点。

代码:

#include <iostream>

using namespace std;

int main()
{
	cout << "Enter number of rows: ";
	int num;
	cin >> num;		//用户指定行数
	
	for( int hang=1; hang<=num; hang++ )		//按行显示
	{
		int dian,xing;
		for( dian=num-hang; dian>0; dian-- )	//第1行有5-1=4个点
		{
			cout << ".";
		}
		for( xing=hang; xing>0; xing-- )	//第1行有1个星
		{
			cout << "*";
		}
		cout << endl;	//行末换行
	}
	
	return 0;
}

结果:
图5.9.10

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值