一、结构图:

二、代码及练习题

1.1节 编写一个简单的C++程序

1.1节练习

练习1.1:

查阅使用的编译器的文档:我使用的是vs2013,其文档为https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2013/60k1461a(v=vs.120)

编译运行第2页程序:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. return ;
  6. }

返回值为 0 (0x0)

练习1.2:

改写程序,让它返回-1.

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. return -;
  6. }

返回值为 -1 (0xffffffff)

0xffffffff ,0x表示十六进制,计算机里用补码表示。-1的补码(32位系统,每四位二进制可以由一位十六进制代替)为ffffffff

原码、反码、补码,这篇文章讲的不错:https://www.imooc.com/article/16813?block_id=tuijian_wz

正数的原码、反吗、补码一样。

以-1(8位)为例,最高位符号位,1为负数、0为正数。

原码:1000 0001

反码:1111 1110(反码在原码基础上按位取反,符号位不变)

补码:1111 1111(补码在反码的基础上加1)

补码转原码:补码基础上按位取反后加一,符号位在取反时不变,加一时最高位符号位有进位的,进位忽略

1.2 初识输入输出

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "Enter two numbers:" << endl;
  6. int v1 = , v2 = ;
  7. cin >> v1 >> v2;
  8. cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
  9. return ;
  10. }

1.2节练习

练习1.3:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "Hello Word" << endl;
  6. return ;
  7. }

练习1.4:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "Enter two numbers:" << endl;
  6. int v1 = , v2 = ;
  7. cin >> v1 >> v2;
  8. cout << "The product of " << v1 << " and " << v2 << " is " << v1 * v2 << endl;
  9. return ;
  10. }

练习1.5:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "Enter two numbers:" << endl;
  6. int v1 = , v2 = ;
  7. cin >> v1 >> v2;
  8. cout << "The product of ";
  9. cout << v1 ;
  10. cout << " and " ;
  11. cout << v2 ;
  12. cout << " is ";
  13. cout<<v1 * v2 << endl;
  14. return ;
  15. }

练习1.6:

  1. cout << "The sum of "<< v1 ;
  2. << " and "<< v2 ;
  3. << " is "<<v1 + v2 << endl;

程序不合法,原因是<<运算符接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。显然第二、三行缺少ostream对象。

可以修改为:

  1. cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;

或者:

  1. cout << "The sum of "<< v1 ;
  2. cout << " and "<< v2 ;
  3. cout << " is "<<v1 + v2 << endl;

1.3注释简介

c++有两种注释:单行注释(//)和界定符对注释(/**/)

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. * 简单主函数:
  5. * 读取两个数,求它们的和
  6. */
  7. int main()
  8. {
  9. //提示用户输入两个数
  10. cout << "Enter two numbers:" << endl;
  11. int v1 = , v2 = ; //保存我们读入的输入数据的变量
  12. cin >> v1 >> v2; //读取输入数据
  13. cout << "The sum of "<< v1 << " and "<< v2
  14. << " is "<<v1 + v2 << endl;
  15. return ;
  16. }

注释界定符不能嵌套

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. * 注释对/* */ 不能嵌套
  5. *"不能嵌套"几个字会被认为是源码
  6. * 像剩余程序一样处理
  7. */
  8. int main()
  9. {
  10. return ;
  11. }
  1. ///*
  2. //* 单行注释中的任何内容都会被忽略
  3. //* 包括嵌套的注释对也一样会被忽略
  4. //*/

1.3节练习

练习1.7,包含不正确嵌套的程序,返回错误信息

练习1.8

cout << "/*"; //正确
cout << "*/"; //正确
cout << /*"*/"*/; //错误
cout << /* "*/" /* "/*" */; //正确

改为:

  1. cout << /*"*/"*/";

1.4 控制流

1.4.1 while语句

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum = , val = ;
  6. //只要val的值小于等于10,while循环就会持续执行
  7. while(val <=){
  8. sum += val; //将sum+val赋予sum
  9. ++val; //将val加1
  10. }
  11. cout << "Sum of 1 to 10 inclusive is " << sum << endl;
  12. return ;
  13. }

练习1.9

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum = , val = ;
  6. //只要val的值小于等于100,while循环就会持续执行
  7. while(val <=){
  8. sum += val; //将sum+val赋予sum
  9. ++val; //将val加1
  10. }
  11. cout << "Sum of 50 to 100 inclusive is " << sum << endl;
  12. return ;
  13. }

练习1.10

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int val = ;
  6.  
  7. while(val >=){
  8.  
  9. cout << val << endl;
  10. --val;
  11. }
  12. return ;
  13. }

练习 1.11

  1. #include <iostream>
  2. using namespace std;
  3. void fun(int v1,int v2)
  4. {
  5. while (v1 >= v2){
  6.  
  7. cout << v1<<" ";
  8. --v1;
  9. }
  10. cout << endl;
  11. }
  12. int main()
  13. {
  14. int v1,v2;
  15. cout << "请输入两个整数:" << endl;
  16. cin >> v1 >> v2;
  17. if (v1 >= v2) fun(v1, v2);
  18. else fun(v2, v1);
  19. return ;
  20. }

1.4.2 for语句

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int sum =;
  7. //从1加到10
  8. for (int val = ; val <= ; ++val)
  9. sum += val; //等价于sum =sum+val
  10. cout << "Sum of 1 to 10 inclusive is " << sum << endl;
  11. return ;
  12. }

练习1.12

  1. int sum =;
  2. for (int val = -; val <= ; ++val)
  3. sum += val;

for循环完成-100到100的求和,sum终值为0

练习1.13

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum = , val = ;
  6. for (int val = ; val <= ;++val)
  7. sum += val;
  8. cout << "Sum of 50 to 100 inclusive is " << sum << endl;
  9. return ;
  10. }
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. for (int val = ; val >= ;--val)
  6. cout << val << endl;
  7. return ;
  8. }
  1. #include <iostream>
  2. using namespace std;
  3. void fun(int v1, int v2)
  4. {
  5. for (; v1 >= v2; --v1)
  6. cout << v1 << " ";
  7. cout << endl;
  8. }
  9. int main()
  10. {
  11. int v1, v2;
  12. cout << "请输入两个整数:" << endl;
  13. cin >> v1 >> v2;
  14. if (v1 >= v2) fun(v1, v2);
  15. else fun(v2, v1);
  16. return ;
  17. }

练习1.14 对比for 循环和while循环,两种形式的优缺点各是什么?

for循环和while循环的优缺点如下:

1、在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。

2、在while循环中,循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。

3、两种形式各有优点,但它们在功能上是等价的,可以相互转换。

https://blog.csdn.net/sixabs/article/details/82708318

练习1.15 熟悉编译器生成的错误信息。

1.4.3 读取数量不定的输入数据

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. int sum = , value = ;
  7. //读取数据直到遇到文件尾,计算所有读入的值的和
  8. while (cin >> value)
  9. sum += value; //等价于sum =sum+value
  10. cout << "Sum is: " <<sum << endl;
  11. return ;
  12. }

键盘输入文件结尾符:windows中先“Ctrl+Z”,然后再“换行Enter”

1.4.4  if语句

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. //currVal是我们正在统计的数;我们将读入的新值存入val
  6. int currVal=, val=;
  7. //读取第一个数,并确保确实有数据可以处理
  8. if (cin >> currVal){
  9. int cnt = ; //保存我们正在处理的当前值的个数
  10. while (cin >> val){ //读取剩余的数
  11. if (val == currVal) //如果值相同
  12. ++cnt; //将cnt加1
  13. else{ //否则,打印前一个值的个数
  14. cout << currVal << " occurs " << cnt << " times" << endl;
  15. currVal = val; //记住新值
  16. cnt = ; //重置计数器
  17. }
  18. }//while 循环在这里结束
  19. //记住打印文件中最后一个值的个数
  20. cout << currVal << " occurs " << cnt << " times " <<endl;
  21. }//最外层的if语句在这里结束
  22. return ;
  23. }

1.5 类简介

1.5.1 Sale_item类

  1. #include <iostream>
  2. #include "Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item book;
  7. //读入ISBN号、售出的册数以及销售价格
  8. cin >> book;
  9. //写入ISBN、售出的册数、总销售额和平均价格
  10. cout << book << endl;
  11. return ;
  12. }
  1. #include <iostream>
  2. #include "Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item item1,item2;
  7. cin >> item1>>item2; //读取一对交易记录
  8. cout << item1 + item2 << endl; //打印它们的和
  9. return ;
  10. }

练习1.22 编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。

  1. #include <iostream>
  2. #include "Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item item1, item2;
  7. while (cin >> item1)
  8. {
  9. item2 = item1 + item2;
  10. }
  11.  
  12. cout << item2 << endl; //打印它们的和
  13. return ;
  14. }

1.5.2 初始成员函数

  1. #include <iostream>
  2. #include "Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item item1, item2;
  7. cin >> item1 >> item2;
  8. //首先检查item1和item2是否表示相同的书
  9. if (item1.isbn() == item2.isbn()){
  10. cout << item1 + item2 << endl;
  11. return ; //表示成功
  12. }
  13. else {
  14. cerr << "Data must refer to same isbn" << endl;
  15. return -;
  16. }
  17. }

1.6 书店程序

  1. #include <iostream>
  2. #include "Sales_item.h"
  3. using namespace std;
  4. int main()
  5. {
  6. Sales_item total; //保存下一条交易记录的变量
  7. //读入第一条交易记录,并确保有数据可以处理
  8. if (cin >> total){
  9. Sales_item trans; //保存和的变量
  10. //读入并处理剩余交易记录
  11. while (cin >> trans){
  12. //如果我们仍在处理相同的书
  13. if (total.isbn() == trans.isbn())
  14. total += trans; //更新总销售额
  15. else{
  16. //打印前一本书的结果
  17. cout << total << endl;
  18. total = trans; //total 现在表示下一本书的销售额
  19. }
  20. }
  21. cout << total << endl; //打印最后一本书的结果
  22. }
  23. else {
  24. //没有输入!警告读者
  25. cerr << "No data?!" << endl;
  26. return -;
  27. }
  28. return ;
  29. }

小结

术语表

c++primer(第五版) 阅读笔记_第1章的更多相关文章

  1. C++ Primer 第四版阅读笔记

    阅读笔记 初始化 变量定义指定了变量的类型和标识符,也可以为对象提供初始值.定义时指定了初始值的对象被称为是 已初始化的.C++ 支持两种初始化变量的形式:复制初始化和 直接初始化.复制初始化语法用等 ...

  2. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  3. <C++Primer>第四版 阅读笔记 第一部分 “基本语言”

    之前阅读时没有及时总结,现在慢慢补上. 第1章 快速入门 main 函数在很多方面都比较特别,其中最重要的是每个C++程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显示调用的函数 ...

  4. <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”

    泛型算法中,所谓"泛型(generic)"指的是两个方面:这些算法可作用于各种不同的容器类型,而这些容器又可以容纳多种不同类型的元素. 第九章 顺序容器 顺序容器的元素排列次序与元 ...

  5. <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”

    继承和动态绑定与数据抽象一起成为面向对象编程的基础. 模板使我们能够编写独立于具体类型的泛型类和泛型函数. 第15章 面向对象编程 面向对象编程基于三个基本概念:数据抽象.继承和动态绑定.在C++中, ...

  6. <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”

    类定义了数据成员和函数成员:数据成员用于存储与该类类型的对象相关联的状态:而函数成员则负责执行赋予数据意义的操作. 第12章 类 一个类可以包含若干公有的.私有的和受保护的部分:在public部分定义 ...

  7. 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1

    本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...

  8. Primer C++第五版 读书笔记(一)

    Primer C++第五版 读书笔记(一) (如有侵权请通知本人,将第一时间删文) 1.1-2.2 章节 关于C++变量初始化: 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义 ...

  9. C++ 11 从C++ primer第五版的学习笔记

    1. auto (page107) auto 推断会忽略const   const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...

随机推荐

  1. C语言语法教程-链表

    链表是一群结构体(称为结点)通过指针连起来.这种结构体类型,比较特殊,叫自引用结构体类型.它有一个指针指向和和结构体一样的类型,其余是数据成员. 头指针指向第一结点,尾指针一定要用空表示,这叫有头有尾 ...

  2. C# vb .NET从pdf读取识别条形码线性条码

    如何在C#,vb等.NET平台语言里实现快速准确从pdf文件读取,或者从Pdf指定页面读取条形码或QR二维码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的条形 ...

  3. Redis基本使用(一)

    redis window系统的redis是微软团队根据官方的linux版本高仿的 官方原版: https://redis.io/ 中文官网:http://www.redis.cn 1 redis下载和 ...

  4. Spring扩展点之BeanFactoryPostProcessor

    前言 BeanFactoryPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下 public interface BeanFactoryPostProcessor { ...

  5. 软件开发的生产力vs质量

    在<人月神话>里看到引用的一篇论文,<没有银弹:软件工程的本质性与附属性工作>(英语:No Silver Bullet-Essence and Accidents of Sof ...

  6. 7.vertical-align属性

    本节学习目标: 图片.表单和旁边的文字对齐 解决图片底部默认空白缝隙问题 1.图片.表单和旁边的文字对齐 默认的图片.表单等行内元素或行内快元素是和文字的基线对齐的,但在实际情况下,我们想让他们中间对 ...

  7. android studio学习----Failed to resolve: com.android.support:design:22.1.1

    这个目前好像没有合适的办法,唯一可行的就是 点击那个提示  进行SDK Manager下载就可以了 但是天朝的网啊,我试了很多次,突然的可以下载,运气啊 类似这一系列问题解决办法就是  重新更新SDK ...

  8. Android调用系统相机和相册并解决data为空,OOM,图片角度不对的问题

    最近公司项目用到手机拍照的问题,好不容易在网上copy了一些代码,但是运行起来一大堆bug,先是三星手机上运行程序直接崩掉,debug了一下原来是onActivityResult中data返回为空,找 ...

  9. sqlldr导入数据取消回显记录条数

    之前在脚本中使用sqlldr导入数据时,如果表的数据量较大的话,会使日志文件变得极大,之后在网上查找了很久,才在一个偶然的机会找到这个参数 silent=all 但是最近发现这样写有个问题,就是加了这 ...

  10. spring boot缓存excel临时文件后再操作

    1. 引入poi的两个依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi ...