C++ Primer 第一章 学习笔记及习题答案

发布时间:2019-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了C++ Primer 第一章 学习笔记及习题答案脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

知识点

函数定义

  • 一个程序包含一个或多个函数(有且只有一个main函数);一个函数定义包含四部分:返回类型、函数名、形参列表、函数体。如下代码为一个最简单的main函数,int为其返回类型,main为函数名,括号()括起来的为形参列表(可为空),花括号{}括起来的内容为函数体。

    int main()
    {
        return 0;
    }

输入输出

  • C++使用标准库来提供IO机制,通常用到iostream库,需要在程序首部引入头文件#include <iostream>
  • endl为操纵符,效果:结束当行,将与设备关联的缓冲区中内容刷到设备中,保证目前程序所产生的输出都真正写入到输出流中。

Tips:需要通过命名空间才可使用标准库中的一个名字,即必须显式说明我们想使用来自命名空间std中的名字。有两种实现方式:
1 使用作用域运算:::如std::cin、std::cout;
2 在程序首部声明命名空间using namespace std;,使用后即可不用作用域运算符进行前缀,直接写cin、cout即可。

注释

  • 单行注释://
  • 多行注释:/ /

Tips:多行注释不可嵌套,在调试时尽量使用单行注释注释整个代码段的每一行。
VS 2017中多行注释方法:1 选定代码段;2 按下CTRL+K;3 按下CTRL+C。

       取消多行注释方法:1 选定代码段;2 按下CTRL+K;3 按下CTRL+U。

while和for控制流

  • while

    while语句形式:

    while (condITion)
        statement

    while语句持续交替检测condition和执行statement,直到condition为假为止。
    while可用来读取数量不定的输入数据,代码如下:

    int val=0;
    while(std::cin>>val) //一直输入,直到遇到无效输入就退出循环
  • for

    for(init-statement;condition;exPRession)
    example:for(int i=0;i<10;++i)

    例子中总体执行过程如下:
    1 创建变量i,初始化为0;
    2 检测i是否小于10,如果满足条件,则进入for循环体,如果不满足条件,则推出循环体;
    3 将i的值加1;
    4 重复步骤2,若满足条件这继续执行剩余步骤直到步骤2不满足条件退出循环。

类(看完后续补充)

· C++中,通过一个来定义自己的数据结构。
· 类的作者定义了类对象可以执行的所有动作。

练习题

1.1节练习

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

    C++ Primer 第一章 学习笔记及习题答案

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

    C++ Primer 第一章 学习笔记及习题答案


    总结:在大多数系统中,main的返回值被用来指示状态。返回0表明成功,非0的返回值通常用来指出错误类型。

1.2节练习

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

    int main()
    {
        std::cout << "Hello, world!" << endl;
        return 0;
    }
  • 练习1.4:我们的程序使用加法运算符+来将两个数相加。编写程序使用乘法运算符*,来打印两个数的积。

    int main()
    {
        int  a, b; 
        std::cout << "输入两个整数:" ;
        std::cin >> a >> b;
        int sum = a * b;
        std::cout << "它们的乘积为:"<< sum << std::endl;
        return 0;
    }
  • 练习1.5:我们将所有输出操作放在一条很长的语句中。重写程序,将每个运算对象的打印操作放在一条独立的语句中。

    std::cout<<"abc"<<"xyz"<<std::endl;
    等价于如下代码段:
    std::cout<<"abc";
    std::cout<<"xyz";
    std::cout<<endl;
  • 练习1.6:解释下面程序片段是否合法。

    std::cout << "The sum of "<< v1;
                   << " and " << v2;
                   << " is " << v1 + v2 << std::endl;

    不合法,输出运算符<< 必须接受两个运算对象 ,左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。题中第2/3行代码的输出运算符左侧为空,故不合法。

1.3节练习

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

    int main()
    {
        std::cout <<@H_578_406@/* /* */*/<<endl;
        return 0;
    }

    运行结果:

    C++ Primer 第一章 学习笔记及习题答案

  • 练习1.8:指出下列哪些输出语句是合法的(如果有的话):

    std::cout << " /* ";
    std::cout << " */ ";
    std::cout << /* "*/" */;
    std::cout << /* "*/" /* "/*" */;

    1、2合法,3、4不合法。
    3、4发生了多行注释的嵌套使用。

1.4节练习

1.4.1节练习

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

    int main()
    {
        int i = 50, sum = 0;
        while (i <= 100) {
            sum += i;
            ++i;
        }
        std::cout << "50到100依次相加的值为:" << sum << endl;
        return 0;
    }
  • 练习1.10:除了++运算符将运算对象的值增加1之外,还有一个递减运算符(--)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。

    int main()
    {
        int i = 10;
        std::cout << "从10到0依次为:";
        while (i >= 0) {
            std::cout <<i <<" ";
            --i;
        }
        return 0;
  • 练习1.11:编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。

    int main()
    {
        int a, b;
        std::cout << "请输入两个数:";
        std::cin >> a >> b;
        std::cout << "这两个整数范围内的数为:";
        if (a <= b) {
            while (a <= b) {
                std::cout << a << " ";
                ++a;
            }
        }
        else {
            while (a >= b) {
                std::cout << a << " ";
                --a;
            }    
        }    
        return 0;
    }

1.4.2节练习

  • 练习1.12:下面的for循环完成了什么功能?sum的终值是多少?

    int sum=0;
    for(int i=-100; i<=100; ++i)
        sum += i;

    for循环实现了从-100到100的累加功能,sum的终值为0。

  • 练习1.13:使用for循环重做1.4.1节中的所有练习。

    //累加50到100的整数
    int main()
    {
        int sum = 0;
        for (int i = 50; i <= 100; i++)
            sum += i;
        std::cout <<"50到100的累加和为:"<< sum;
        return 0;
    }
    //递减打印10到0之间整数
    int main()
    {
        std::cout << "递减输出依次为:";
        for (int i = 10; i >= 0; --i)
            std::cout<<i << " ";
        return 0;
    }
    //输入两个整数,打印出这两个整数所指定的范围内的所有整数
    int main()
    {
        std::cout << "请输入两个整数:" ;
        int a=0, b=0;
        std::cin >> a >> b;
        std::cout << "这两个整数范围内的数为:";
        if (a <=b) {
            for (int i = a; i <= b; ++i)
                std::cout << i << " ";
        }
        else {
            for (int i = a; i >= b; --i)
                std::cout << i << " ";
        }    
        return 0;
    }
  • 练习1.14:对比for循环和while循环,两种形式的优缺点各是什么

    while循环 for循环
    需求未明确循环次数 需求明确循环次数
    使用循环后还想访问循环语句去控制该变量 局部变量在栈内存中存在,当for循环结束变量会及时释放,不浪费空间
  • 练习1.15:编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。

自己看书,略。

1.4.3节练习

  • 练习1.16:编写程序,从cin读取一组数,输出其和。

    int main()
    {
        int sum = 0, val = 0;
        std::cout << "请输入一组数:";
        while (std::cin >> val)
            sum += val;
        std::cout <<"输入的数和为:"<< sum << endl;
        return 0;
    }

1.4.4节练习

  • 1.17-1.18代码:

    int main()
    {
        int currVal = 0, val = 0;
        if (std:: cin >> currVal) {
            int cnt = 1;
            while (std::cin >> val) {
                if (val == currVal)
                    ++cnt;
                else {
                    std::cout << currVal << " occurs " << cnt << " times" << endl;
                    currVal = val;
                    cnt = 1;
                }
            }
            std::cout << currVal << " occurs " << cnt << " times" << endl;
        }
        return 0;
    }
  • 练习1.17:如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?

所有值都相等的情况,程序输出该值出现次数;没有重复值的情况,输出每一个值及各出现一次。

  • 练习1.18:编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。

所有值相等,输出结果:

42 42 42 42 endl
42 occurs 4 times
没有重复值,输出结果:
```
40 41 42 43 endl
40 occurs 1 times
41 occurs 1 times
42 occurs 1 times
43 occurs 1 times
```
  • 练习1.19:修改你为1.4.1节练习1.10所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。

之前代码已经考虑过这个情况,见上。

1.5节练习

1.5.1节练习

  • 练习1.20:在网站http://www.informit.com/title/0321714113上,第1章的代码目录中包含了头文件Sales_item.h。将它拷贝到你自己的工作目录中。用它编写一个程序,读取一组书籍销售记录,将每条记录打印到标准输出上。
//需先下载头文件,并在项目中导入
int main()
{
    Sales_item book;
    cout << "请输入一条书籍销售记录:";
    std::cin >> book;
    std::cout <<"记录如下:"<< book << endl;
    return 0;
}
  • 练习1.21:编写程序,读取两个ISBN相同的Sales_item对象,输出他们的和。
int main()
{
    Sales_item item1, item2;
    cout << "请输入两条ISBN相同的记录:";
    std::cin >> item1 >> item2;
    std::cout <<"这两条记录的和为:"<< item1 + item2 << endl;
    return 0;
}
  • 练习1.22:编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
//要先输入一个值,再循环输入
    int main()
{
    Sales_item item, sum;
    if (std::cin >> sum) {
        while (std::cin >> item)
            sum += item;
    }
    std::cout << sum << endl;
    return 0;
}

1.5.2节练习

  • 练习1.23:编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录。
//与练习1.17-1.18类似,要先输入一个值,再循环输入
int main()
{
    Sales_item currVal, val;
    int num = 1;
    std::cout << "请输入多条相同ISBN的销售记录:";
    if (cin >> val) {
        while (cin >> currVal) {
            if (val.isbn() == currVal.isbn()) {
                ++num;
            }
            else {
                cout << val.isbn() << "共有" << num << "条销售记录" << endl;
                num = 1;
                val = currVal;
            }
        }
        cout << val.isbn() << "共有" << num << "条销售记录" << endl;
    }
    return 0;
}
  • 练习1.24:输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起。
    用练习1.23代码测试即可。

1.6节练习

  • 练习1.25:借助网站上的Sales_item.h头文件,编译并运行本节所给出的书店程序。

(还未做)

脚本宝典总结

以上是脚本宝典为你收集整理的C++ Primer 第一章 学习笔记及习题答案全部内容,希望文章能够帮你解决C++ Primer 第一章 学习笔记及习题答案所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。