c++primer(第五版) 阅读笔记_第1章
一、结构图:
二、代码及练习题
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页程序:
#include <iostream>
using namespace std;
int main()
{
return ;
}
返回值为 0 (0x0)
练习1.2:
改写程序,让它返回-1.
#include <iostream>
using namespace std;
int main()
{
return -;
}
返回值为 -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 初识输入输出
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = , v2 = ;
cin >> v1 >> v2;
cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
return ;
}
1.2节练习
练习1.3:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello Word" << endl;
return ;
}
练习1.4:
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = , v2 = ;
cin >> v1 >> v2;
cout << "The product of " << v1 << " and " << v2 << " is " << v1 * v2 << endl;
return ;
}
练习1.5:
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = , v2 = ;
cin >> v1 >> v2;
cout << "The product of ";
cout << v1 ;
cout << " and " ;
cout << v2 ;
cout << " is ";
cout<<v1 * v2 << endl;
return ;
}
练习1.6:
cout << "The sum of "<< v1 ;
<< " and "<< v2 ;
<< " is "<<v1 + v2 << endl;
程序不合法,原因是<<运算符接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。显然第二、三行缺少ostream对象。
可以修改为:
cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
或者:
cout << "The sum of "<< v1 ;
cout << " and "<< v2 ;
cout << " is "<<v1 + v2 << endl;
1.3注释简介
c++有两种注释:单行注释(//)和界定符对注释(/**/)
#include <iostream>
using namespace std;
/*
* 简单主函数:
* 读取两个数,求它们的和
*/
int main()
{
//提示用户输入两个数
cout << "Enter two numbers:" << endl;
int v1 = , v2 = ; //保存我们读入的输入数据的变量
cin >> v1 >> v2; //读取输入数据
cout << "The sum of "<< v1 << " and "<< v2
<< " is "<<v1 + v2 << endl;
return ;
}
注释界定符不能嵌套
#include <iostream>
using namespace std;
/*
* 注释对/* */ 不能嵌套
*"不能嵌套"几个字会被认为是源码
* 像剩余程序一样处理
*/
int main()
{
return ;
}
///*
//* 单行注释中的任何内容都会被忽略
//* 包括嵌套的注释对也一样会被忽略
//*/
1.3节练习
练习1.7,包含不正确嵌套的程序,返回错误信息
练习1.8
cout << "/*"; //正确
cout << "*/"; //正确
cout << /*"*/"*/; //错误
cout << /* "*/" /* "/*" */; //正确
改为:
cout << /*"*/"*/";
1.4 控制流
1.4.1 while语句
#include <iostream>
using namespace std;
int main()
{
int sum = , val = ;
//只要val的值小于等于10,while循环就会持续执行
while(val <=){
sum += val; //将sum+val赋予sum
++val; //将val加1
}
cout << "Sum of 1 to 10 inclusive is " << sum << endl;
return ;
}
练习1.9
#include <iostream>
using namespace std;
int main()
{
int sum = , val = ;
//只要val的值小于等于100,while循环就会持续执行
while(val <=){
sum += val; //将sum+val赋予sum
++val; //将val加1
}
cout << "Sum of 50 to 100 inclusive is " << sum << endl;
return ;
}
练习1.10
#include <iostream>
using namespace std;
int main()
{
int val = ; while(val >=){ cout << val << endl;
--val;
}
return ;
}
练习 1.11
#include <iostream>
using namespace std;
void fun(int v1,int v2)
{
while (v1 >= v2){ cout << v1<<" ";
--v1;
}
cout << endl;
}
int main()
{
int v1,v2;
cout << "请输入两个整数:" << endl;
cin >> v1 >> v2;
if (v1 >= v2) fun(v1, v2);
else fun(v2, v1);
return ;
}
1.4.2 for语句
#include <iostream>
using namespace std; int main()
{
int sum =;
//从1加到10
for (int val = ; val <= ; ++val)
sum += val; //等价于sum =sum+val
cout << "Sum of 1 to 10 inclusive is " << sum << endl;
return ;
}
练习1.12
int sum =;
for (int val = -; val <= ; ++val)
sum += val;
for循环完成-100到100的求和,sum终值为0
练习1.13
#include <iostream>
using namespace std;
int main()
{
int sum = , val = ;
for (int val = ; val <= ;++val)
sum += val;
cout << "Sum of 50 to 100 inclusive is " << sum << endl;
return ;
}
#include <iostream>
using namespace std;
int main()
{
for (int val = ; val >= ;--val)
cout << val << endl;
return ;
}
#include <iostream>
using namespace std;
void fun(int v1, int v2)
{
for (; v1 >= v2; --v1)
cout << v1 << " ";
cout << endl;
}
int main()
{
int v1, v2;
cout << "请输入两个整数:" << endl;
cin >> v1 >> v2;
if (v1 >= v2) fun(v1, v2);
else fun(v2, v1);
return ;
}
练习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 读取数量不定的输入数据
#include <iostream>
using namespace std; int main()
{
int sum = , value = ;
//读取数据直到遇到文件尾,计算所有读入的值的和
while (cin >> value)
sum += value; //等价于sum =sum+value
cout << "Sum is: " <<sum << endl;
return ;
}
键盘输入文件结尾符:windows中先“Ctrl+Z”,然后再“换行Enter”
1.4.4 if语句
#include <iostream>
using namespace std;
int main()
{
//currVal是我们正在统计的数;我们将读入的新值存入val
int currVal=, val=;
//读取第一个数,并确保确实有数据可以处理
if (cin >> currVal){
int cnt = ; //保存我们正在处理的当前值的个数
while (cin >> val){ //读取剩余的数
if (val == currVal) //如果值相同
++cnt; //将cnt加1
else{ //否则,打印前一个值的个数
cout << currVal << " occurs " << cnt << " times" << endl;
currVal = val; //记住新值
cnt = ; //重置计数器
}
}//while 循环在这里结束
//记住打印文件中最后一个值的个数
cout << currVal << " occurs " << cnt << " times " <<endl;
}//最外层的if语句在这里结束
return ;
}
1.5 类简介
1.5.1 Sale_item类
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item book;
//读入ISBN号、售出的册数以及销售价格
cin >> book;
//写入ISBN、售出的册数、总销售额和平均价格
cout << book << endl;
return ;
}
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1,item2;
cin >> item1>>item2; //读取一对交易记录
cout << item1 + item2 << endl; //打印它们的和
return ;
}
练习1.22 编写程序,读取多个具有相同ISBN的销售记录,输出所有记录的和。
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1, item2;
while (cin >> item1)
{
item2 = item1 + item2;
} cout << item2 << endl; //打印它们的和
return ;
}
1.5.2 初始成员函数
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1, item2;
cin >> item1 >> item2;
//首先检查item1和item2是否表示相同的书
if (item1.isbn() == item2.isbn()){
cout << item1 + item2 << endl;
return ; //表示成功
}
else {
cerr << "Data must refer to same isbn" << endl;
return -;
}
}
1.6 书店程序
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item total; //保存下一条交易记录的变量
//读入第一条交易记录,并确保有数据可以处理
if (cin >> total){
Sales_item trans; //保存和的变量
//读入并处理剩余交易记录
while (cin >> trans){
//如果我们仍在处理相同的书
if (total.isbn() == trans.isbn())
total += trans; //更新总销售额
else{
//打印前一本书的结果
cout << total << endl;
total = trans; //total 现在表示下一本书的销售额
}
}
cout << total << endl; //打印最后一本书的结果
}
else {
//没有输入!警告读者
cerr << "No data?!" << endl;
return -;
}
return ;
}
小结
术语表
c++primer(第五版) 阅读笔记_第1章的更多相关文章
- C++ Primer 第四版阅读笔记
阅读笔记 初始化 变量定义指定了变量的类型和标识符,也可以为对象提供初始值.定义时指定了初始值的对象被称为是 已初始化的.C++ 支持两种初始化变量的形式:复制初始化和 直接初始化.复制初始化语法用等 ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- <C++Primer>第四版 阅读笔记 第一部分 “基本语言”
之前阅读时没有及时总结,现在慢慢补上. 第1章 快速入门 main 函数在很多方面都比较特别,其中最重要的是每个C++程序必须含有 main 函数,且 main 函数是(唯一)被操作系统显示调用的函数 ...
- <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”
泛型算法中,所谓"泛型(generic)"指的是两个方面:这些算法可作用于各种不同的容器类型,而这些容器又可以容纳多种不同类型的元素. 第九章 顺序容器 顺序容器的元素排列次序与元 ...
- <C++Primer>第四版 阅读笔记 第四部分 “面向对象编程与泛型编程”
继承和动态绑定与数据抽象一起成为面向对象编程的基础. 模板使我们能够编写独立于具体类型的泛型类和泛型函数. 第15章 面向对象编程 面向对象编程基于三个基本概念:数据抽象.继承和动态绑定.在C++中, ...
- <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”
类定义了数据成员和函数成员:数据成员用于存储与该类类型的对象相关联的状态:而函数成员则负责执行赋予数据意义的操作. 第12章 类 一个类可以包含若干公有的.私有的和受保护的部分:在public部分定义 ...
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...
- Primer C++第五版 读书笔记(一)
Primer C++第五版 读书笔记(一) (如有侵权请通知本人,将第一时间删文) 1.1-2.2 章节 关于C++变量初始化: 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义 ...
- C++ 11 从C++ primer第五版的学习笔记
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
随机推荐
- oracle 自增序列实现 可作为主键
好记性不如烂笔头 记录如何建立oracle 自增序列 表结构 create table TAB_USERINPUT ( RID VARCHAR2(20) not null, VARID VARCHAR ...
- 添加wcf服务引用,无法签出当前文件
写了一些wcf服务接口,使用控制台可以正常启动服务,想要测试一下,新建项目添加服务引用,提示:“无法签出当前文件.该文件可能为只读或已锁定,或者您需要手动签出它.” 在网上找了找,有说可能是因为源代码 ...
- net dll 重新签名
已经有强签名的dll或exe程序无法引用无签名的dll,这时候就需要对dll进行签名,签名的步骤如下: 为没有源码的DLL文件添加强名称 如果项目中引用了其他没有源码的dll文件,并且此dll文件是没 ...
- JS 将数值取整为10的倍数
问题描述: 将数值处理为 10 的倍数,并支持向上或者向下取整 如将 2345 可以处理为 2300 | 2400 | 3000 | 2000 解决方案: /** * 将数字取整为10的倍数 * @p ...
- vue多个路由使用同一个页面,通过name判断参数,渲染页面数据
项目中,发现有多个页面的数据内容相同,只是请求数据的参数不同,就可以使用同一个组件来渲染 这里的客户列表 / 我负责的 / 我参与的 都使用同一个组件,不同点在请求数据的参数 可以看到,通过钩子函数, ...
- Yum项目上线实战 (网站运维)-Linux从入门到精通第十一天(非原创)
文章大纲 一.编译安装与卸载Nginx二.关于LAMP三.LAMP环境部署四.学习资料下载五.参考文章 一.编译安装与卸载Nginx Nginx:是一款比较流行的web服务器软件,类似于Apach ...
- Windows实时预览markdown
1.安装Notepad++ 2.打开Notepad++菜单栏的"插件(P)",然后打开"插件管理" 3.搜索"MarkdownViewer++&quo ...
- MySQL修炼之路一
1. MySQL概述 1. 什么是数据库 存储数据的仓库 2. 都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3. 提供数据库服务的软件 1. 软件分类 MySQL. ...
- vmware虚拟机安装T6客户端
1.虚拟机安装T6 经过测试,vmware 里系统装T6 网络适配器必须使用桥接,nat模式是无法连接数据库的
- activiti 工作流动态设置指定节点任务人、责任人、组的实现方式
首先给大家看一下我的流程图: 流程文件leaveBill.bpmn <?xml version="1.0" encoding="UTF-8"?>&l ...