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库 这两个库在安装 ...
随机推荐
- 一个数据仓库时代开始--Hive
一.什么是 Apache Hive? Apache Hive 是一个基于 Hadoop Haused 构建的开源数据仓库系统,我们使用它来查询和分析存储在 Hadoop 文件中的大型数据集.此外,通过 ...
- Redis报(error) NOAUTH Authentication required.问题解决
启动后 输入auth+空格+密码 ok
- 动态链接库 —— Dll 基础
1. DLL 的初识 在 windows 中,动态链接库是不可缺少的一部分,windows 应用程序程序接口提供的所有函数都包含在 DLL 中,其中有三个非常重要的系统 DLL 文件,分别为 Kern ...
- 利用Docker设置Node.js
docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上 ...
- android studio 插件开发(自动生成框架代码插件)
android studio 插件开发 起因 去年公司开始上新项目,正好android在架构这方面的讨论也开始多了起来,于是mvp架构模型就进入我们技术选择方案里面,mvp有很多好处,但是有一个非常麻 ...
- React 组件间通信
https://jsfiddle.net/69z2wepo/9719/ <script src="https://facebook.github.io/react/js/jsfiddl ...
- 20155302杨效宸《Java程序设计》课程总结
20155302杨效宸<Java程序设计>课程总结 一.每周作业 第一周学习总结:http://www.cnblogs.com/STILLlover521/p/6457914.html 第 ...
- 20145234黄斐《java程序设计基础》第一周
教材学习内容总结 1.java是SUN公司推出的面相网络的编程语言,当时取名Oak,后改名Java. 2.Java三大平台分别为:Java SE.Java EE与Java ME. 3.Java不仅是程 ...
- MySql数据的插入-replace into
一.新的数据插入方式:REPLACE INTO mysql中常用的插入方式:INSERT INTO 如果要插入不重复的数据的方式:REPLACE INTO 二.二者比较: replace into 首 ...
- 【HDU3117】Fibonacci Numbers
[HDU3117]Fibonacci Numbers 题面 求斐波那契数列的第\(n\)项的前四位及后四位. 其中\(0\leq n<2^{32}\) 题解 前置知识:线性常系数齐次递推 其实后 ...