第一章习题
来源:互联网 发布:网页分类算法 编辑:程序博客网 时间:2024/05/29 04:23
1.1 节练习
练习 1.1 :查阅你使用的编译器的文档,确定它使用的文件命名约定。编译并运行第2页的main程序。
答
使用的是visual studio 2015 企业版,源文件的名字一个后缀为结尾,.cpp。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>\int main(){ return 0;}
练习 1.2 : 改写程序,让它返回-1.返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>\int main(){ return -1;}
1.2 节练习
练习1.3:编写程序,在标准输出上打印Hello,World。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << "Hello World!" << std::endl; return 0;}
练习 1.4 : 我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符* ,来打印两个数的积。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << "Enter two numbers:" << std::endl; int v1 = 0, v2 = 0; std::cin >> v1 >> v2; std::cout << "The ji of " << v1 << "and " << v2 << "is" << v1 * v2 << std::endl; return 0;}
练习1.5 : 我们将所有操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << "Enter two numbers:" ; std::cout << std::endl; int v1 = 0; int v2 = 0; std::cin >> v1; std::cin >> v2; std::cout << "The ji 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::cont<<"The sum of " << v1; <<"and" << v2; << "is" << v1 + v2 << std::endl;
如果程序是合法的,它输出是什么呢?如果程序不合法,原因何在?应该如何修正?
答:不合法。第一行和第二行的输出流被分号终止了。
修改:
std::cont<<"The sum of " << v1 <<"and" << v2 << "is" << v1 + v2 << std::endl;
1.3 节练习
练习 1.7: 编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>/*// 简单主函数/* 读取两个数,求它们的和*/*/int main(){ return 0;}
结果
练习 1.8 :指出下列哪些输出语句是合法的(如果有的话),并预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
std::cout << "/*";std::cout << "*/";std::cout << /* "/*" */;std::cout << /* "*/" /* "/*" */;
答:第一、二、四个合法;第三个错误。
第一个:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << "/*"; return 0;}
第二个:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << "*/"; return 0;}
第四个:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << /* " */" /* "/* " */ ; return 0;}
修正第三个:去掉/* */
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ std::cout << " /*" ; return 0;}
1.4 节练习
1.4.1 节练习
练习 1.9 : 编写程序,使用while循环将50到100的整数相加。
代码
int sum = 0, val = 50;int main(){ while (val <= 100) { sum = sum + val; val = val + 1; } std::cout << "the sum of 50 to 100 is " << sum << std::endl; return 0;}
结果:
练习 1.10 :除了++运算符将运算对象的值增加1之外,还有一个递减运算符(-)实现将值减少1.编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
代码:
#include "stdafx.h"#include <iostream>int val = 10;int main(){ while (val >= 0) { std::cout << val << std::endl; val = val - 1; } return 0;}
结果:
练习 1.11: 编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
代码:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ int val = 0, i = 0; std::cout << "Please Enter two numbers:" << std::endl; std::cin >> val >> i; while (val >= i) { std::cout << i << std::endl; ++i; } 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节中的所有练习(第11页)。
1.9:
代码
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ for (int val = 10; val >= 0; --val) { std::cout << val << std::endl; } return 0;}
结果:
1.10:
代码
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ int sum = 0; for (int val = 10; val >= 0; --val) { sum = sum + val; } std::cout << "the sum of 50 to 100 is " << sum << std::endl; return 0; }
结果
1.11:
代码
#include "stdafx.h"#include <iostream>int main(){ int val = 0, i = 0; std::cout << "Please Enter two numbers:" << std::endl; std::cin >> val >> i; for (int i; i <= val; ++i) { std::cout << i << std::endl; } return 0;}
结果
练习 1.14 : 对比for循环和while循环,两种形式的优缺点各是什么?
答
两者的概念:
while:执行过程中交替地检测condition条件和执行关联的语句statement,直至condition为假时停止。
for:包含两部分:循环头和循环体。循环头控制循体的执行次数,它由三部分组成:一个初始化语句(init-statement)、一个循环条件(condition)以及一个表达式(expression)。
总结:
for:形式较简洁,且特别适用于循环次数已知的情况。
while:循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。
两种形式各有优点,但它们在功能上是等价的,可以相互转换。
练习 1.15: 编写程序,包括第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
错误的分类:
语法错误:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>//错误:main的参数列表漏掉了int main({ //错误:endl后使用了冒号而非分号 std::cout << "Read each file." << std::endl: // 错误:字符串字面常量的两侧漏掉了引号 std::cout << Update master. << std::endl; // 错误: 漏掉了第二个输出运算符 std::cout << "Write new master." std::endl; // 错误: return 语句漏掉了分号 return 0}
类型错误:
c++中每个数据项都有其类型。例如,10的类型是int(或者通俗的说,“10 是一个int型数据”)。单词“hello”,包括两侧的双引号标记,则是一个字符串字面值常量。一个类型错误的例子是,向一个期望参数为int的函数传递了一个字符串字面值常量。
声明错误:
c++程序中的每个名字都要先声明后使用。
常见错误:对来自标准库的每个名字忘记使用std::、标识符名字拼写错误。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ int v1 = 0, v2 = 0; std::cin >> v >> v2; // 错误:使用了“v”而非“v1” // 错误:cout未定义;应该使用std;:cout cout << v1 + v2 << std::endl; return 0;}
1.4.3 节练习
练习 1.16 : 编写程序,从cin读取一组数,输出其和。
代码
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>int main(){ int v1 = 0,v2 = 0,v3 = 0; std::cin >> v1 >> v2 >> v3; std::cout << "the sum of the numbers is "<< v1 + v2 + v3<< std::endl;}
结果
1.4.4 节练习
练习 1.17 : 如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?
1.18 : 编译并运行本节的程序,给它输入全都相等的值,再次运行程序,输入没有重复的值。
练习 1.19 : 修改你为1.4.1 练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
1.5 节练习
1.5.1 节练习
练习 1.20 : 在网站http://www.informit.com/title/0321714113上,第1章的代码目录中包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中,用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
练习 1.21 :编写程序,读取两个ISBN相同的Sales_item对象,输出它们的和。
练习 1.22 : 编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
1.5.2 节练习
练习 1.23 : 编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
练习 1.24 : 输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起。
1.6 节练习
练习 1.25 : 借助网站上的Sales_item.h头文件,编译并运行本节给出的书店程序。
- 第一章习题
- 第一章习题
- 第一章习题
- 第一章习题
- 第一章习题
- 第一章习题
- 第一章习题
- 第一章 习题
- 第一章习题
- c++ primer第一章习题
- sicp 第一章习题试做
- 数据结构习题答案-第一章
- sicp 第一章 习题
- 数据结构第一章一些习题
- 第一章 绪论习题
- C++ primer第一章习题
- 【白书】第一章习题
- 编程珠玑第一章习题
- 猴子吃桃问题的解法以及分析
- Oracle dblink详解
- android开发中Listview中显示不同的视图布局
- Linux 异步IO
- Nignx负载均衡存在的seesion问题
- 第一章习题
- nyoj 495 少年 DXH
- oracle11gr2 手工建库
- Spring控制反转IOC
- android错误之MediaPlayer用法的Media Player called in state *
- Leetcode Everyday: 339. Nested List Weight Sum
- Log4j的使用以及配置
- POJ 1006 Biorhythms
- poj 2398 (计算几何)