《C++ Primer》第一章课后习题(部分)
1.1节
练习1.1
题目: 查阅你使用的编译器文档,确定它所使用的文件命名约定。编译并运行第2页的main程序。
答案: C++文件后缀名是.cpp
练习1.2
题目: 改写程序,让它返回-1。返回值-1通常被当做程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
答案:
int main()
{
return -1;
}
1.2节
练习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 << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
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(void)
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
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.3节
练习1.7
题目: 编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
答案:
#include <iostream>
int main(void)
{
/* print /*"Hello World"*/ */
std::cout << "Hello World" << std::endl;
return 0;
}
错误信息:
hello.cpp: In function ‘int main()’:
hello.cpp:5:33: error: expected primary-expression before ‘/’ token
/* print /*"Hello World"*/ */
^
练习1.8
题目:
指出下列哪些输出语句是合法的(如果有的话):
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
std::cout << /* "*/" /* "/*" */;
答案: 第1、 2、 4个合法,第3个不合法。
1.4.1节
练习1.9
题目: 编写程序,使用while循环将50到100的整数相加。
答案:
#include <iostream>
using namespace std;
int main(void)
{
int sum = 0;
int num = 50;
while (num <= 100)
{
sum += num;
num++;
}
cout << sum << endl;
return 0;
}
练习1.10
题目: 除了++运算符将运算对象的值增加1之外,还有一个递减运算符(–)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
答案:
#include <iostream>
using namespace std;
int main(void)
{
int n = 10;
while (n > 0)
{
cout << n << endl;
n--;
}
return 0;
}
练习1.11
题目: 编写程序,提示用户输入两个整数,打印出这两个整数的所指定的范围内的所有整数。
答案:
#include <iostream>
using namespace std;
int main(void)
{
int m, n;
cout << "Please input two integers:" << endl;
cin >> m >> n;
while (n > m)
{
cout << m << endl;
m++;
}
return 0;
}
1.4.2节
练习1.12
题目: 下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum += i;
答案: 这段代码计算了从-100到100之间(包含端点)的所有整数的值。sum的终值为0。
练习1.13
题目: 使用for循环重做1.4.1节中的所有练习。
答案:
// 练习1.9
#include <iostream>
using namespace std;
int main(void)
{
int sum = 0;
for (int i = 50; i <= 100; i++)
{
sum += i;
}
cout << sum << endl;
return 0;
}
// 练习1.10
#include <iostream>
using namespace std;
int main(void)
{
for (int i = 10; i > 0; i--)
{
cout << i << endl;
}
return 0;
}
// 练习1.11
#include <iostream>
using namespace std;
int main(void)
{
int m, n;
cout << "Please input two integers" << endl;
cin >> m >> n;
for (int i = m; i < n; i++)
{
cout << i << endl;
}
return 0;
}
练习1.14
题目: 对比for循环和while循环,两种形式的优缺点各是什么?
答案: for循环适用于循环次数确定的情况,while循环适用于循环次数不确定的情况。
练习1.15
题目: 编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
答案: 略
1.4.3节
练习1.16
题目: 编写程序,从cin读取一组数,输出其和。
答案:
#include <iostream>
using namespace std;
int main(void)
{
int sum = 0, value = 0;
while (cin >> value)
sum += value;
cout << "Sum is " << sum << endl;
return 0;
}