博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer 第一章 学习笔记及习题答案
阅读量:5908 次
发布时间:2019-06-19

本文共 6298 字,大约阅读时间需要 20 分钟。

知识点

函数定义

  • 一个程序包含一个或多个函数(有且只有一个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程序。
    运行结果如下:
    运行结果
  • 练习1.2:改写程序,让他返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理main返回的错误标识。
    运行结果如下:
    在这里插入图片描述
    总结:在大多数系统中,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"<
    <<"abc";std::cout<<"xyz";std::cout<
  • 练习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 <

    运行结果:

    在这里插入图片描述

  • 练习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;    }    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<<< " ";    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 endl42 occurs 4 times
没有重复值,输出结果:```40 41 42 43 endl40 occurs 1 times41 occurs 1 times42 occurs 1 times43 occurs 1 times```
  • 练习1.19:修改你为1.4.1节练习1.10所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。

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

1.5节练习

1.5.1节练习

  • 练习1.20:在网站上,第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头文件,编译并运行本节所给出的书店程序。

(还未做)

转载地址:http://whvpx.baihongyu.com/

你可能感兴趣的文章
汉诺塔--递归和非递归实现
查看>>
2019春总结作业
查看>>
Cherokee 1.0.13 发布
查看>>
axis调用webservice的简单方法
查看>>
could not initialize proxy - no Session
查看>>
计算机数制和运算的一点总结.
查看>>
web容器启动,获取spring bean
查看>>
第二冲刺阶段第十一天
查看>>
机器语言的介绍
查看>>
UML系列 (五) 为什么要用UML建模之建模的重要性
查看>>
http协议和https协议
查看>>
811. Subdomain Visit Count
查看>>
log4j使用总结
查看>>
JS对JSON的操作总结 (转)
查看>>
强制转换原始字符串python (转)
查看>>
[数据结构和算法]快速排序笔记
查看>>
C#由变量捕获引起对闭包的思考
查看>>
SQL Server 把当前日期中月份和几号中的0 去掉
查看>>
Asp.net中的页面跳转及post数据
查看>>
啊哈磊--算法3:快速排序
查看>>