C++ Primer Plus学习:第五章
C++入门第五章:循环和关系表达式
for循环
for循环的组成部分
- 设置初始值。
- 执行测试,看循环是否应该继续执行。
- 执行循环操作。
- 更新用于测试的值。
以上操作由括号括起,每个部分均是一个表达式,彼此分号隔开,控制部分后面的语句叫循环体,若测试表达式均为true,它被执行。
for(initialization;test-expression;update-expression)
body
C++将整个for循环看成一个语句。
循环只进行一次初始化。
for循环和后面的括号加一个空格,以区别函数调用。
表达式和语句
10;就是一个表达式,值为10。
C++规定赋值表达式的值为等号左边的部分。
如果加上分好,就变成一个语句。
修改规则
例:for (int i=1;i<5;i++) body
声明循环变量可在for循环中进行。
修改步长
i++也可变为i=2*i+1;i=i*I;
递增运算符(++)和递减运算符(++)
++x和—x代表先加1,后使用。
x—和x++代表先使用,后加1。
注:这两个操作符在不同的系统上使用结果可能不同。
y=(4+x++)+(6+x++);在不同的系统中,有可能是逐步加1或统一加1。
副作用和顺序点
副作用:计算表达式时对某些东西(如存储在变量中的值)进行修改。
顺序点是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有副作用进行评估。C++中,分号就是一个顺序点,这意味着程序处理下一条语句之前将确保对所有的副作用都进行了评估。这意味着程序处理下一条语句之前,赋值运算符、递增运算符和递减运算符执行的所有操作都必须完成。
前缀格式和后缀格式
对内置类型,前缀和后缀表达式没有区别,但是对于用户定义的类型,往往前缀表带是比后缀表达式效率高。
组合运算符
操作符 |
作用(L为做操作数,R为右操作数) |
+= |
L=L+R |
-= |
L=L-R |
*= |
L=L*R |
/= |
L=L/R |
%= |
L=L%R |
复合语句(语句块)
可使用两个花括号来构造一条复合语句(代码块)。代码块由一对花括号和它们包含的语句组成,被视为一条语句。
逗号运算符
常用于for循环中的循环控制语句不止一个时。
逗号表达式的值是最后一个表达式的值。
关系运算符
操作符 |
含义 |
< |
小于 |
<= |
小于等于 |
== |
等于 |
> |
大于 |
>= |
大于或等于 |
!= |
不等于 |
字符串的比较
C-分隔字符串函数:strcmp(a,b);
a在b之前,返回赋值,a和b相同,返回0,a在b后,返回正值。
不可使用以下方式比较:
char name[20];
strcpy(name,"abc");
name=="abc"
但是可以这样:
string name;
name="abc";
name=="abc";
while循环
while (test-condition)
body;
测试条件为真时,则执行,否则不执行。
设计循环的指导原则:
- 指定循环终止的条件
- 在首次测试之前初始化条件
- 在条件再次测试之前更新条件
等待一段时间:编写延时循环
clock()函数,返回程序开始执行后所用的时间。
需载入头文件——ctime/time。这当中定义了一个符号常量——CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数。
程序示例:
#include<time>
……
clock_t(类型别名定义) start=clock();
while (clock()-start<delay)
;
类型别名
C++建立类型别名的方法有两种。
一种是使用预处理器:
#define BYTE char //预处理器将所有BYTE替换为char
第二种是使用C++关键字typeof来创建别名。
typeof char byte; //将byte作为char的别名
typeof typeName aliasName;
预处理器是完全替代,typeof更智能。
#define F_P float *;
F_P pa,pb;等价于float * pa,pb。即只对于pa有效。但是typeof则不会有这样的问题。
do-while循环
do
body
while(test-expression);
此循环为出口条件循环。
基于范围的for循环
C++11新增了一种循环:基于范围的for循环。这简化了一种常见的循环任务,对数组或者容器类的每个元素执行相同的操作。
例:double price={1.2,2.4,3.6,4.8,6.0};
for (double x:price)
cout<<x<<std::endl;
循环和文本输入
cin支持三种模式的单字符输入。
原始cin
如果程序要通过循环来读取来自键盘的文本输入,必须有办法知道何时停止读取。一种方法是选择某个某个特殊字符,我们称之为哨兵字符,将其作为停止标记。
例:
char ch;
int count=0;
cin>>ch;
while(ch!='#')
{
cout<<ch;
++count;
cin>>ch;
}
注意:上述程序会忽略空格和换行符。
使用cin.get(char)进行补救
char ch;
int count=0;
cin.get(ch);
while(ch!='#')
{
cout<<ch;
++count;
cin.get(ch);
}
文件尾操作
键盘模拟文件尾的快捷键:
Unix:Ctrl+D;
Windows:Ctrl+Z和Enter
VC++、Borland C++5.5、GNU C++ 能够识别Ctrl+Z。
通过cin的两个成员函数eof()和fail()来检测文件尾,若为文件尾哦,即检测到EOF,cin.eof()和cin.fail()均返回true,否则返回false。这两个函数返回的是最近读取的结果。
则,上述程序变为:
char ch;
int count=0;
cin.get(ch);
while(cin.fail==false)
{
cout<<ch;
++count;
cin.get(ch);
}
使用cin.clear()可清除EOF标记。
常见的字符输入做法
常用:cin.get(ch);
while (cin.fail()==false)
{
………
cin.get(ch);
}
简单方式:
cin.get(ch);
while (!cin.fail())
{
………
cin.get(ch);
}
或者
cin.get(ch);
while (cin)
{
………
cin.get(ch);
}
还可以:
cin.get(ch);
while (cin.get(ch))
{
………
}
注:EOF不是输入中的值,而是指没有字符。
由于EOF不是有效的字符编码,所以不能与char类型相互兼容,所及先将返回值赋给int型变量,输出时再进行类型转换。
例:
int ch;
int count=0;
while((ch=cin.get())!=EOF)
{
cout.put(char(ch));
++count;
}
嵌套循环与二维数组
二维数组:
int a[3][3]; //三行三列的二维数组
以行为单位进行保存数据。
a[0]是有3个元素的数组。
初始化二维数组:
int a[3][3]=
{
{1,2,3},
{4,5,6},
{7,8,9}
},
C++ Primer Plus学习:第五章的更多相关文章
- Java基础知识二次学习--第五章 数组
第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节 视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- 【C++】《C++ Primer 》第十五章
第十五章 面向对象程序设计 一.OOP:概述 面向对象程序设计(OOP)的核心思想是数据抽象.继承和动态绑定. 通过使用数据抽象,可以将类的接口和实现分离. 使用继承,可以定义相似的类型并对其相似关系 ...
- C语言学习第五章
今天要进行一个重要元素数组的学习了.这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项. 一. 数组的基本概念 数组是可以在内存中连续存储多个元素的结 ...
- 深度学习框架PyTorch一书的学习-第五章-常用工具模块
https://github.com/chenyuntc/pytorch-book/blob/v1.0/chapter5-常用工具/chapter5.ipynb 希望大家直接到上面的网址去查看代码,下 ...
- C++ Primer Plus学习:第二章
C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...
- Artech的MVC4框架学习——第五章Model的绑定
第一Model绑定本质就是为目标Action方法生成参数列表的过程,参数数据存在于http请求.请求的 URL .消息报头或主体中. 第二aciton 参数的元数据通过 ParameterDescri ...
- C++ Primer Plus学习:第九章
C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...
- C++ Primer Plus学习:第一章
C++入门第一章:预备知识 C++简介 C++融合了三种不同的编程方式: C语言代表的过程性语言. C++在C语言基础上添加的类代表的面向对象语言. C++模板支持的泛型编程. C++简史 20世纪7 ...
- Python爬虫学习==>第五章:爬虫常用库的安装
学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...
随机推荐
- Redis底层数据类型
Redis主要数据结构:简单动态字符串(SDS).双端链表.字典.跳跃表.整数集合.压缩列表和快速列表: 一.简单动态字符串(SDS): Redis没有直接使用C语言中的传统的字节数组保存字符串,而是 ...
- PHP-掌握基本的分布式架构思想
虽然说写PHP目前都是接触的业务代码,发现写久了,也要熟悉相应的架构 在高并发,高可用的系统下,都是使用高性能的分布式架构,最近在学习相关知识 分享一张图片: 欢迎关注公众号[phper的进阶之路], ...
- 如何使用yii2的缓存依赖特性
目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...
- 【翻译】理解 LSTM 网络
目录 理解 LSTM 网络 递归神经网络 长期依赖性问题 LSTM 网络 LSTM 的核心想法 逐步解析 LSTM 的流程 长短期记忆的变种 结论 鸣谢 本文翻译自 Christopher Olah ...
- pyhton习题20190201
#20190131'''检查ipV4的有效性,有效则返回True,否则返回False,(提示使用split函数进行分割)'''import osdef print_ping_ip(ip): s = o ...
- 《浅析Entity Framework Core中的并发处理》引起的思考
看到一篇关于EF并发处理的文章,http://www.cnblogs.com/GuZhenYin/p/7761352.html,突然觉得为什么常见业务中为什么很少做并发方面的考虑.结合过去的项目,这样 ...
- 20155213 2016-2017-2《Java程序设计》第三周学习总结
20155213 2016-2017-2<Java程序设计>第三周学习总结 教材学习内容总结 类与对象 类和对象的关系:类决定对象,对象反映类的性质 定义值域成员:在新建的类中定义变量,可 ...
- 20155235 《Java程序设计》 实验二 Java面向对象程序设计
20155235 <Java程序设计> 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L ...
- 20155305乔磊2016-2017-2《Java程序设计》第四周学习总结
20155305乔磊2016-2017-2<Java程序设计>第四周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为. 面向对象中,子类继承父类,就是把程序中相同的代 ...
- STM32L431仿真卡在HAL_InitTick(TICK_INT_PRIORITY);
1. 使用IAR 8.20版本,STM32L431RBT芯片,JLINK V9仿真器,实际仿真测试的时候卡在如下的函数 /* Use SysTick as time base source and c ...