第一章习题

来源:互联网 发布:网页分类算法 编辑:程序博客网 时间: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头文件,编译并运行本节给出的书店程序。

0 0
原创粉丝点击