概述
第1章 开始
练习1.1
查阅你使用的编译器的文档,确定它所使用的命名约定。编译并运行第2页的main程序。
略
练习1.2
改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
练习1.3
编写程序,在标准输出上打印Hello, World。
#include <iostream>
int main (void)
{
std::cout << "Hello, World" << std::endl;
return 0;
}
练习1.4
我们的程序使用加法运算符+来将两个数相加。编写程序使用惩罚运算符*,来打印两个数的积。
#include <iostream>
int main (void)
{
std::cout << "请输入两个数: " << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << v1 << "和" << v2 << "的积为: " << v1*v2 << std::endl;
return 0;
}
练习1.5
我们将所有输出放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
#include <iostream>
int main (void)
{
std::cout << "请输入两个数: ";
std::cout << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << v1;
std::cout << "和";
std::cout << v2;
std::cout << "的积为: ";
std::cout << v1*v2;
std::cout << std::endl;
return 0;
}
练习1.6
解释下面的程序片段是否合法。
std::cout << "The sum of " << v1;
<< "and " << v2;
<< " is " << v1+v2 << std::endl;
不合法。前两行的末尾有分号,代表语句结束,第2、3两行为两条新的语句。而这两条语句在“<<”之前缺少了输出流,应在“<<”之前加上"std::cout"。
练习1.7
编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
#include <iostream>
/*
* 注释对/* */不能嵌套
* “不能嵌套”几个字会被认为是源码,像剩余程序一样处理
*/
int main (void)
{
return 0;
}
练习1.8
指出下列哪些输出语句是合法的(如果有的话)。
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
std::cout << /* "*/" /* "/*" */;
预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
第一条和第二条语句是合法的,第三条语句的第一个双引号和第四个双引号被注释掉了,第二个双引号和第三个双引号之间的“*/”被认为是字符串的文字内容。
练习1.9
编写程序,使用while循环将50到100的整数相加。
#include <iostream>
int main (void)
{
int sum = 0, i = 50;
while (i <= 100)
{
sum += i;
++i;
}
std::cout << "50到100的整数和为 " << sum << std::endl;
return 0;
}
练习1.10
除了++运算符将运算对象的值增加1以外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减序打印出10到0之间的整数。
#include <iostream>
int main (void)
{
int i = 11;
while (i > 0)
std::cout << --i << std::endl;
return 0;
}
练习1.11
编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
#include <iostream>
int main (void)
{
std::cout << "请输入两个整数以表示范围:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
if (v1 < v2)
{
while (v1 <= v2)
{
std::cout << v1 << " ";
++v1;
}
}
else if (v1 > v2)
{
while (v2 >= v1)
{
std::cout << v2 << " ";
--v2;
}
}
else
std::cout << std::cout << v1;
std::cout << std::endl;
return 0;
}
练习1.12
下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum += i;
此循环将-100到100之间(包含-100和100)的整数相加,sum的终值为0。
练习1.13
使用for循环重做1.4.1节中的所有练习(第11页)。
练习1.9中,将while循环改为
for (i; i <= 100; ++i)
sum += i;
练习1.10中,将while循环改为
for (i = 10; i >= 0; ++i)
std::cout << i << std::endl;
练习1.11同理
练习1.14
对比for循环和while循环,两种形式的优缺点各是什么?
在循环次数已知的情况下,for循环更为简洁;无法预知循环次数是,while循环更合适。
练习1.15
编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
练习1.16
编写程序,从cin读取一组数,输出其和。
#include <iostream>
int main (void)
{
int sum = 0, val;
while (cin >> val)
sum += val;
std::cout << sum << std::endl;
return 0;
}
练习1.17
如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
如果输入的所有值都相等,则while循环中的else分支永远不会执行,直到输入结束,while循环退出,循环后的输出语句打印这唯一的一个值和它出现的次数。若没有重复值,则while循环中的if语句的真值分支永远不会执行,每读入一个值会打印它的值和出现的次数1
练习1.18
编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。
练习1.19
修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
练习1.20
在网站http://www.informit.com/title/0321714113 上,第1章的代码目录汇总包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中。用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
#include <iostream>
#include "Sales_item.h"
int main (void)
{
Sales_item book;
std::cout << "请输入销售记录:" << std::endl;
while (std::cin >> book)
std::cout << "ISBN、销售额和平均售价为 " << book << std::endl;
return 0;
}
练习1.21
编写程序,读取两个ISBN相同的Sales_item对象,输出它们的和。
#include <iostream>
#include "Sales_item.h"
int main (void)
{
Sales_item trans1, tran2;
std::cout << "请输入两条ISBN相同的销售记录:" << std::endl;
std::cin >> trans1 >> trans2;
if (compareIsbn(trans1, trans2))
std::cout << "汇总信息:ISBN、售出本数、销售额和平均售价为 " << trans1+trans2 << std::endl;
else
std::cout << "两条销售记录的ISBN不同" << std::endl;
return 0;
}
练习1.22
编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
#include <iostream>
#include "Sales_item.h"
int main (void)
{
Sales_item total, trans;
std::cout << "请输入几条ISBN相同的销售记录:" << std::endl;
if (std::cin >> total)
{
while (std::cin >> trans)
if (compareIsbn(total, trans))
total += trans;
else
{
std::cout << "ISBN不同";
return -1;
}
std::cout << "汇总信息:ISBN、售出本数、销售额和平均售价为 " << total << std::endl;
}
else
{
std::cout << "没有数据" << std::endl;
return -1;
}
return 0;
}
练习1.23
编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
#include <iostream>
#include "Sales_item.h"
int main (void)
{
Sales_item trans1, trans2;
int num = 1;
std::cout << "请输入若干销售记录:" << std::endl;
if (std::cin >> trans1)
{
while (std::cin >> trans2)
{
if (compareIsbn(trans1, trans2))
num++;
else
{
std::cout << trans1.isbn() << "共有" << num << "条销售记录" << std::endl;
trans1 = trans2;
num = 1;
}
std::cout << trans1.isbn() << "共有" << num << "条销售记录" << std::endl;
}
}
return 0;
}
练习1.24
输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起。
从网站http://www.informit.com/title/0321714113上下载数据文件,用文件重定向来读取文件中的数据作为输入进行测试。代码略。
练习1.25
借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。
大作业,留着以后写。
最后
以上就是孝顺金毛为你收集整理的《C++ Primer(第5版)》习题答案的全部内容,希望文章能够帮你解决《C++ Primer(第5版)》习题答案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复