(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;
}
结果:
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;
}
结果:
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;
}
结果:
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;
}
结果:
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;
}
结果:
(输出太长,只截取部分)
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;
}
结果:
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;
}
结果:
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;
}
结果:
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;
}
结果: