C++ Primer(4 )习题解答.txt51自信是永不枯竭的源泉,自信是奔腾不息的波涛,自信是急流奋进的渠道,自信是真正的成功之母。书名:C++ Primer(第4 版)习题解答
? 作者:蒋爱军李师贤 梅晓勇
? 来源:人民邮电出版社
? 出版时间:2006 12
? ISBN:9787115155108
? 定价:45
内容介绍:
C++ Primer(第4 版)是C++大师Stanley B. Lippman 丰富的实践经验和C++标准委员会原负责人Josée
Lajoie C++标准深入理解的完美结合,更加入了C++先驱Barbara E. Moo C++教学方面的真知灼见,
C++ Primer4 版)习题解答
2
是初学者的最佳C++指南,而且对于中高级程序员,也是不可或缺的参考书。本书正是这部久负盛名的
C++经典教程的配套习题解答。书中提供了C++ Primer(第4 版)中所有习题的参考答案。
本书对使用C++ Primer(第4 版)学习C++程序设计语言的读者是非常理想的参考书。
C++是一门非常实用的程序设计语言,既支持过程式程序设计,也支持面向对象
程序设计,因而也是目前应用极为广泛的一门程序设计语言。
在层出不穷的介绍C++语言的书籍中,C++ Primer 是一本广受欢迎的权威之作。
强大的作者阵容、全面的内容介绍、新颖的组织方式,使之深受C++爱好者的青
睐。本书编者在翻译C++ Primer(第4 版)的过程中也深深地感受到了这一点。
在学习一门程序设计语言的过程中,亲自动手编写代码是一种极其有效的学习
方式,可以对语言的理解和应用达到事半功倍的效果,因此,C++ Primer(第4
版)中提供了许多习题,以帮助读者加深对书中内容的理解。
本书试图成为C++ Primer(第4 版)的配套书籍,根据C++ Primer(第4 版)
中所介绍的内容提供配套习题的解答,书中所给出的“见xx 节”,均指参见C++
Primer(第4 版)的相应章节。
本书中给出的程序均已通过Microsoft Visual C++ .NET 2003 的编译。源文件
(实现文件)以.cpp 为扩展名,头文件为了与此对应采用.hpp 为扩展名(而没
有采用编译器的默认扩展名.h)。为了节省篇幅,有些程序中将类的定义与使
用类的主函数放在同一实现文件中。包含主函数的源文件根据习题编号命名。
大多数模板的定义都没有区分头文件和实现文件(因为编者所用的编译器支持
模板的包含编译模型)。另外,使用Visual C++ .NET 2003 编译器的默认设置
会自动连接一些默认库,因此可能有某些所用到的库函数或库类型没有显式指
明相应的头文件。使用其他编译器的读者需特别注意,必要时应加上相应的
#include 指示。
衷心希望本书能对使用C++ Primer(第4 版)学习C++语言的读者有所帮助。
由于编者水平所限,书中不当之处在所难免,恳请读者批评指正。
2006 10
习题 1.1
查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main
程序。
C++ Primer4 版)习题解答
3
【解答】
一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两
类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又
称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h
.hpp 等;源文件的后缀可以是.cc .cpp 等,具体的后缀与使用的编译器有
关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题1.2
修改程序使其返回-1。返回值-1 通常作为程序运行失败的指示器。然而,系统
不同,如何(甚至是否)报告main 函数运行失败也不同。重新编译并再次运行
程序,看看你的系统如何处理main 函数的运行失败指示器。
【解答】
笔者所使用的Windows 操作系统并不报告main 函数的运行失败,因此,程序返
-1 或返回0 在运行效果上没有什么区别。但是,如果在DOS 命令提示符方式
下运行程序,然后再键入echo %ERRORLEVEL%命令,则系统会显示返回值-1
习题1.3
编一个程序,在标准输出上打印“Hello, World”。
【解答】
#include<iostream>
int main()
{
std::cout << "Hello, World" << std::endl;
return 0;
}
习题1.4
我们的程序利用内置的加法操作符“+”来产生两个数的和。编写程序,使用乘
法操作符“*”产生两个数的积。
【解答】
#include <iostream>
C++ Primer4 版)习题解答
4
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The product of " << v1 << " and " << v2
<< " is " << v1 * v2 << std::endl;
return 0;
}
习题1.5
我们的程序使用了一条较长的输出语句。重写程序,使用单独的语句打印每一
个操作数。
【解答】
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The sum of ";
std::cout << v1;
std::cout << " and ";
std::cout << v2;
std::cout << " is ";
C++ Primer4 版)习题解答
5
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;
这段代码合法吗?如果合法,为什么?如果不合法,又为什么?
【解答】
这段代码不合法。
注意,第124 行的末尾有分号,表示这段代码包含三条语句,即第12
各为一个语句,第34 行构成一个语句。“<<”为二元操作符,在第23
条语句中,第一个“<<”缺少左操作数,因此不合法。
在第23 行的开头加上“std::cout”,即可更正。
习题1.7
编译有不正确嵌套注释的程序。
【解答】
由注释对嵌套导致的编译器错误信息通常令人迷惑。例如,在笔者所用的编译
器中编译1.3 节中给出的带有不正确嵌套注释的程序:
#include <iostream>
/*
* comment pairs /* */ cannot nest.
* "cannot nest" is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
编译器会给出如下错误信息:
error C2143: syntax error : missing ';' before '<'
error C2501: 'include' : missing storage-class or type specifiers
warning C4138: '*/' found outside of comment (第6 行)
error C2143: syntax error : missing ';' before '{' (第8 行)
error C2447: '{' : missing function header (old-style formal list?)(第
8 行)
习题1.8
指出下列输出语句哪些(如果有)是合法的。
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的
错误。
【解答】
第一条和第二条语句合法。
C++ Primer4 版)习题解答
7
第三条语句中<<操作符之后至第二个双引号之前的部分被注释掉了,导致<<
作符的右操作数不是一个完整的字符串,所以不合法。在分号之前加上一个双
引号即可更正。
习题1.9
下列循环做什么? sum 的最终值是多少?
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum += i;
【解答】
该循环求-100~100 之间所有整数的和(包括-100 100)。
sum 的最终值是0
习题1.10
for 循环编程,求从50~100 的所有自然数的和。然后用while 循环重写该程
序。
【解答】
编译器错误for 循环编写的程序如下:
#include <iostream>
int main()
{
int sum = 0;
for (int i = 50; i <= 100; ++i)
sum += i;
std::cout << "Sum of 50 to 100 inclusive is "
<< sum << std::endl;
return 0;
C++ Primer4 版)习题解答
8
}
while 循环编写的程序如下:
#include <iostream>
int main()
{
int sum = 0, int i = 50;
while (i <= 100) {
sum += i;
++i;
}
std::cout << "Sum of 50 to 100 inclusive is "
<< sum << std::endl;
return 0;
}
习题1.11