没有合适的资源?快使用搜索试试~ 我知道了~
C++ Primer 4前五章参考答案(带书签)
需积分: 0 14 下载量 151 浏览量
2008-09-05
17:26:12
上传
评论
收藏 301KB PDF 举报
温馨提示
试读
73页
这个文档的书签是我自己加上去的,用起来方便多了!
资源详情
资源评论
资源推荐
1
C++ Primer(第 4 版)习题解答
习题 1.1
查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的 main 程序。
【解答】
一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两类文件:头文件和
源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表
明文件的类型,如头文件的后缀可以是.h 或.hpp 等;源文件的后缀可以是.cc 或.cpp 等,具体的
后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题 1.2
修改程序使其返回-1。返回值-1 通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告 m
ain 函数运行失败也不同。重新编译并再次运行程序,看看你的系统如何处理 main 函数的运行失败指示器。
【解答】
笔者所使用的 Windows 操作系统并不报告 main 函数的运行失败,因此,程序返回-1 或返回 0 在
运行效果上没有什么区别。但是,如果在 DOS 命令提示符方式下运行程序,然后再键入 echo %ER
RORLEVEL%命令,则系统会显示返回值-1。
习题 1.3
编一个程序,在标准输出上打印“Hello, World”。
【解答】
#include<iostream>
int main()
{
std::cout << "Hello, World" << std::endl;
return 0;
}
习题 1.4
我们的程序利用内置的加法操作符“+”来产生两个数的和。编写程序,使用乘法操作符“*”产生两个数的积。
【解答】
#include <iostream>
2
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 ";
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;
这段代码合法吗?如果合法,为什么?如果不合法,又为什么?
【解答】
这段代码不合法。
3
注意,第 1、2、4 行的末尾有分号,表示这段代码包含三条语句,即第 1、2 行各为一个语句,第
3、4 行构成一个语句。“<<”为二元操作符,在第 2、3 两条语句中,第一个“<<”缺少左操作
数,因此不合法。
在第 2、3 行的开头加上“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 << /* "*/" */;
预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的错误。
【解答】
第一条和第二条语句合法。
4
第三条语句中<<操作符之后至第二个双引号之前的部分被注释掉了,导致<<操作符的右操作数不
是一个完整的字符串,所以不合法。在分号之前加上一个双引号即可更正。
习题 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;
}
用 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;
5
}
习题 1.11
用 while 循环编程,输出 10~0 递减的自然数。然后用 for 循环重写该程序。
【解答】
用 while 循环编写的程序如下:
#include <iostream>
int main()
{
int i = 10;
while (i >= 0) {
std::cout << i << " ";
--i;
}
return 0;
}
用 for 循环编写的程序如下:
#include <iostream>
int main()
{
for (int i = 10; i >= 0; --i)
std::cout << i << " ";
return 0;
}
习题 1.12
对比前面两个习题中所写的循环。两种形式各有何优缺点?
【解答】
在 for 循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循
环次数已知的情况。在 while 循环中,循环控制变量的初始化一般放在 while 语句之前,循环控
制变量的修改一般放在循环体中,形式上不如 for 语句简洁,但它比较适用于循环次数不易预知
的情况(用某一条件控制循环)。两种形式各有优点,但它们在功能上是等价的,可以相互转换。
习题 1.13
编译器不同,理解其诊断内容的难易程度也不同。编写一些程序,包含本小节“再谈编译”部分讨论的那些常见
错误。研究编译器产生的信息,这样你在编译更复杂的程序遇到这些信息时不会陌生。
剩余72页未读,继续阅读
panjinkjzx
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0