前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一章习题

第一章习题

作者头像
努力在北京混出人样
发布2019-02-18 14:56:29
9150
发布2019-02-18 14:56:29
举报
文章被收录于专栏:祥子的故事祥子的故事

1.1 节练习

练习 1.1 :查阅你使用的编译器的文档,确定它使用的文件命名约定。编译并运行第2页的main程序。

使用的是visual studio 2015 企业版,源文件的名字一个后缀为结尾,.cpp。

代码语言:javascript
复制
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>\


int main()
{
    return 0;
}

练习 1.2 : 改写程序,让它返回-1.返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。

代码语言:javascript
复制
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>\


int main()
{
    return -1;
}

1.2 节练习

练习1.3:编写程序,在标准输出上打印Hello,World。

代码语言:javascript
复制
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>


int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}

练习 1.4 : 我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符* ,来打印两个数的积。

代码语言:javascript
复制
 // 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 : 我们将所有操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。

代码语言:javascript
复制
    // 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 :解释下面程序片段是否合法。

代码语言:javascript
复制
std::cont<<"The sum of " << v1;
         <<"and" << v2;
         << "is" << v1 + v2 << std::endl;

如果程序是合法的,它输出是什么呢?如果程序不合法,原因何在?应该如何修正?

答:不合法。第一行和第二行的输出流被分号终止了。

修改:

代码语言:javascript
复制
std::cont<<"The sum of " << v1
         <<"and" << v2
         << "is" << v1 + v2 << std::endl;

1.3 节练习

练习 1.7: 编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。

代码语言:javascript
复制
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
/*
// 简单主函数
/* 读取两个数,求它们的和
*/

*/


int main()
{
    return 0;
}

结果

这里写图片描述
这里写图片描述

练习 1.8 :指出下列哪些输出语句是合法的(如果有的话),并预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。

代码语言:javascript
复制
std::cout << "/*";
std::cout << "*/";
std::cout << /* "/*" */;
std::cout << /* "*/" /* "/*" */;

答:第一、二、四个合法;第三个错误。

第一个:

代码语言:javascript
复制
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>


int main()
{
    std::cout << "/*";
    return 0;
}

第二个:

代码语言:javascript
复制
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>


int main()
{
    std::cout << "*/";
    return 0;
}

第四个:

代码语言:javascript
复制
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

int main()
{
    std::cout <<  /* " */" /* "/* " */ ;
    return 0;
}

修正第三个:去掉/* */

代码语言:javascript
复制
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

int main()
{
    std::cout << " /*" ;
    return 0;
}

1.4 节练习

1.4.1 节练习

练习 1.9 : 编写程序,使用while循环将50到100的整数相加。

代码

代码语言:javascript
复制
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之间的整数。

代码:

代码语言:javascript
复制
#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: 编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。

代码:

代码语言:javascript
复制
// 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的终值是多少?

代码语言:javascript
复制
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: 代码

代码语言:javascript
复制
// 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: 代码

代码语言:javascript
复制
// 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: 代码

代码语言:javascript
复制
#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页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。

错误的分类:

这里写图片描述
这里写图片描述

语法错误:

代码语言:javascript
复制
// 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::、标识符名字拼写错误。

代码语言:javascript
复制
// 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读取一组数,输出其和。

代码

代码语言:javascript
复制
// 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头文件,编译并运行本节给出的书店程序。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 节练习
    • 练习 1.1 :查阅你使用的编译器的文档,确定它使用的文件命名约定。编译并运行第2页的main程序。
      • 练习 1.2 : 改写程序,让它返回-1.返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
      • 1.2 节练习
        • 练习1.3:编写程序,在标准输出上打印Hello,World。
          • 练习 1.4 : 我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符* ,来打印两个数的积。
            • 练习1.5 : 我们将所有操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。
              • 练习 1.6 :解释下面程序片段是否合法。
              • 1.3 节练习
                • 练习 1.7: 编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。
                  • 练习 1.8 :指出下列哪些输出语句是合法的(如果有的话),并预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。
                  • 1.4 节练习
                    • 1.4.1 节练习
                      • 练习 1.9 : 编写程序,使用while循环将50到100的整数相加。
                      • 练习 1.10 :除了++运算符将运算对象的值增加1之外,还有一个递减运算符(-)实现将值减少1.编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
                      • 练习 1.11: 编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
                    • 1.4.2 节练习
                      • 练习 1.12 : 下面的for循环完成了什么功能?sum的终值是多少?
                      • 练习 1.13: 使用for循环重做1.4.1节中的所有练习(第11页)。
                      • 练习 1.14 : 对比for循环和while循环,两种形式的优缺点各是什么?
                      • 练习 1.15: 编写程序,包括第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。
                    • 1.4.3 节练习
                      • 练习 1.16 : 编写程序,从cin读取一组数,输出其和。
                    • 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头文件,编译并运行本节给出的书店程序。
                  相关产品与服务
                  云开发 CloudBase
                  云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档