| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> [循环和关系表达式]——C++ Prime Plus-ch5 -> 正文阅读 |
|
[C++知识库][循环和关系表达式]——C++ Prime Plus-ch5 |
1.for循环——执行特定的次数①介绍——满足测试条件,执行循环,不满足,跳出循环
1.循环执行一次初始化,通常使用表达式将变量设置为起始值; 2.测试表达式可以使用任意表达式,C++将结果强制转换为Bool类型。for循环是入口条件测试,这意味着在每次循环前,都将计算测试表达式的值,当表达式的值为false时,将不会执行循环体。 3.更新表达式:可以是任何有效c++表达式,还可以是其他控制表达式。 注:for语句看上去有些像函数调用,因为他后边跟了一对括号,常用方法是,在for和括号之间加一个括号,而省略函数名与括号之间的空格。 ②表达式,语句和非表达式1.表达式:任何值或者任何有效的值和运算符的组合都是表达式。例如 10 是 值为10的表达式,28*20是值为560的表达式。 x = 20 是值为20的表达式(C++将赋值表达式的值定义为左侧成员的值);<<运算符的优先级比表达式中使用的运算符高,因此代码要使用括号来获得正确的运算顺序。
2.副作用:为判定表达式 x =100;C++必须将100赋给x.当判定表达式的值的这种操作改变了内存中的数据时,我们说表达式有副作用。有可能把赋值看做预期效果,有时判定表达式看作预期效果,但从这里来看,判定表达式是主要作用。并不是所有的表达式都有副作用,x+15将计算出新值,但x的值不会改变,++x + 15就有副作用,x加1. 3.语句任何表达式后加上分号,就是语句,但语句删除分号,不一定是表达式(返回语句声明语句和for语句都不满足删除分号后是个表达式) C++小规则——可以在for循环的初始化部分中声明变量,循环结束,变量不存在(C现在也可以了)。 ③for语句中的常用符号介绍1.回到for循环
实例提醒,可以使用std::而不是编译指令using来让选定的标准名称可用。 2.修改步长
3.使用for循环访问字符串
4.递增运算符和递减运算符这两种运算符是处理将值加1和减1在操作的简约、方便的方法。运算符有两种格式,前缀和后缀。 前缀 —— 表达式的值先使用,变量再+1; 后缀 ——? 变量先+1,后使用表达式的值; 如果表达式的值未使用,则这两种从逻辑上来说没有任何区别,但是从执行速度来说,对于C++内置类型,没有区别,对于用户定义的类,前缀将值+1,返回结果,后缀先复制一个副本,将其+1,将复制的副本返回,对于类而言,前缀版本效率更高。 注:对同一条语句中不能对一个值多次进行递增或者递减操作,操作会变得模糊不清。 5.副作用和顺序点副作用——计算表达式对某些东西(变量的值)进行了修改; 顺序点——程序过程中的一个执行点,再进行下一步之前确保对所有的副作用都进行了评估,分号就是一个顺序点,任何完整的表达式末尾都是一个顺序点。 在C++11中,不再使用术语“顺序点”,使用了术语“顺序”。 6.递增运算符和指针可以将递增运算符用于指针和基本变量,解引用,递增递减顺序如何,取决于优先级。 后缀递增递减优先级相同,但高于前缀运算符,结合方式从右往左; 前缀递增递减 解引用 优先级相同,从右往左的结合方式。
7.组合赋值运算符+=? ? -+? ? *=? ? /=? ? ?%=; 8.复合语句两个花括号构造一条复合语句(代码块),代码块被认为成一条语句,如果在语块中定义一个新的变量,仅当程序执行该语块中的语句时,该变量才存在,执行完该语句块后,变量被释放,如果语句外和语句内有相同的变量,在语句中,新变量将隐藏旧变量;执行结束后,旧变量再次可见。 9.逗号运算符语句块允许把两条或更多的语句仿造C++句法中只能放一条语句的地方,逗号运算符对表达式也能完成同样的任务;
逗号不总是运算符,int i,j;逗号将变量列表中相邻的名称分开; 其他说明: 到目前为止,逗号运算符最常见的用途是将两个或更多的表达式放到一个for循环表达式中,这确保了先计算第一个表达式,然后计算第二个(逗号是顺序点);其次,C++中规定,逗号表达式的值是第二部分的值,并且逗号运算符的优先级是最低的。
10.关系表达式<? ? ? ? ? ?<=? ? ? ? ? ? ? ?==(判断相等有两个等号)? ? ? ? ? ? ? ? ? ? ?>? ? ? ? ? ? ? ? ?>=? ? ? ? ? ?!= ④C-风格字符串比较由于C++将C-风格字符串视为地址,因此如果使用关系运算符来比较它们,将无法得到满意的结果。应使用C-风格字符串库中的strcmp()函数来比较。该函数接受两个字符串地址作为参数,如果两个字符串地址相同返回0,第一个字符串按字母顺序排在第二个字符串之前,返回正数(大小在小写前),排在后边返回负数。 ⑤比较string类字符串类设计可以使用关系符来直接比较。 ⑥基于范围的for循环(C++11)C++11新增了一种循环:基于范围的for循环。这简化了一种常见的循环任务,对数组或(容器类)的每个元素执行相同的操作,如下实例:
? 在后边章节详细讨论。? 2.while循环——判断是否达到某个条件(循环)①介绍
while语句:入口循环条件,首先计算圆括号内的测试条件表达式,如果为true,执行循环体,执行完成后重新返回测试条件,对它进行重新评估,直到测试条件为false,如果测试条件一开始变为false,则程序不会执行循环体。 逐字符遍历字符串直到遇到空值字符的技术时C++处理C-风格字符串的标准方法,由于字符串包含了结尾标记,因此程序通常不需要直到字符串的长度。string对象不使用空字符来标记字符串末尾,16章讨论用于标识string对象中最后一个字符的技术。 ②for与while比较for和while在本质上几乎是等效的,究竟使用哪一个只是风格上的问题。存在三个差别: 1.for循环中省略了测试条件时,将认为条件为true; 2.for循环中,可使用初始化语句声明一个局部变量,while不可以; 3.循环体包含continue语句,情况不同,在第六章介绍。 ③编写延时程序
程序介绍: 头文件ctime定义了一个符号常量——CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数,将系统时间除以这个值,就可以得到秒数,或者将秒数乘这个值,就可以得到对应的系统时间。其次,头文件将clock_t作为clock()返回类型的别名,这意味着可以将变量声明为clock_t类型,编译器将会把它转换为long、unsigned int或适合系统的其他类型。 ④类型别名C++为类型建立别名的方式有两种: 1.预处理器??
2.typedef来创建别名
当声明一系列变量时,预处理器效果没有typedef好:typedef就不会有这样的问题。
3.do while循环——条件为false,循环终止介绍:出口条件循环,这意味着循环首先执行循环体,然后在判定测试表达式,决定是否应该继续执行循环。通常,入口条件循环比出口条件循环好,因为入口条件循环再循环开始之前对条件进行检查,但有时候do while测试更合理,例如,请求用户输入时,程序必须先获得输入,才能对其进行测试。
4.循环和文本输入cin对象支持3种不同模式的单字符输入,其用户接口各不相同,下面介绍。 ①使用原始的cin进行输入使用循环读取来自键盘输入,则必须有办法直到何时停止,一种方法是选择某个特殊字符——有时被称为哨兵字符,将其作为停止标记。
程序说明:①该程序在循环之前读取第一个字符,这样循环可以测试第一个字符,因为第一个字符可能是#,因为程序采用入口条件循环,因此在这种条件下,能够正确地跳过整个循环。 ②程序在输出过程中省略了空格,这是因为cin在读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。 ③只有在用户按下回车键后,他输入的内容才会被发送给程序,这就是在运行该程序时,可以在#后面输入字符的原因。? ②使用cin.get(char)进行补救1.改进通常,逐个字符读取输入的程序需要检查每个字符,包括空格、制表符和换行符。
现在,该程序回显了每一个字符,并将全部字符计算在内,在C语言中,要修改变量的值,必须把变量的地址传递给函数,但是cin.get(ch)并没有传递ch的地址,为什么ch改变了,因为在C++中,只要函数将参数声明为引用即可。在第八章详细介绍。 ?2.三个cin.get()函数:cin.get(字符串地址(名字),要接受的字符个数(整数)) cin.get(ch),第一部分中的函数; cin.get(),前边章节用于跳过换行键输入。 在C++中,这称为函数重载的oop特性,函数重载允许创建多个同名函数,条件是他们的参数列表不同,第八章讨论。 3.怀旧版cin.get()C语言中有函数getchar()和putchar(),它们在C++中依然适用,只要像C语言中那样包含头文件cstdio,也可以使用istream和ostream类中类似功能的成员函数。 不接受任何参数的cin.get()成员函数返回输入中的下一个字符,可以这样使用ch = cin.get(); 该函数的工作方式与C语言中的getchar()相似,将字符编码作为int值返回;而cin.get(ch)返回一个对象,而不是读取的字符,同样的,可以使用cout.put()函数来显示字符。cout.put(ch).该函数的工作方式类似C语言中的putchar(),只不过其参数类型为char,而不是int. 为了成功使用cin.get(),需要知道其如何处理EOF条件。cin.get测试条件有:
注:EOF表示的不是有效字符编码,因此可能不与char类型兼容。例如,在有些系统中,char类型是没有符号的,因此char变量不可能为EOF值(-1).由于这种原因,如果使用cin.get()没有参数并测试EOF,则必须将返回值赋给int变量,而不是char变量。另外,如果将ch类型声明为int,而不是char,则必须在显示ch时将其强制转为char类型。
③文件尾条件程序检测到文件结尾后,cin将两位(eofbit failbit)都设置为1.可以通过成员函数eof()来查看eofbit是否被设置,如果检测到EOF后,cin.eof()将返回Bool值true,否则返回false,同样,如果eofbit或failbit被设置为1,则fail()函数返回true,否则返回false.大多数情况选择fail函数来验证,因为可用于更多的实现。 EOF结束输入:对于键盘输入来说,有可能使用模拟EOF来结束循环(ctrl + z +enter),但稍后要读取其他输入,cin.clear()方法可以清除EOF标记,使输入继续进行,在17章纤细介绍。 5.嵌套循环和二维数组
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:33:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |