c及c++程序设计教程第4章逻辑运算和选择控制语句(1)

上传人:今*** 文档编号:105832754 上传时间:2019-10-13 格式:PPT 页数:70 大小:601KB
返回 下载 相关 举报
c及c++程序设计教程第4章逻辑运算和选择控制语句(1)_第1页
第1页 / 共70页
c及c++程序设计教程第4章逻辑运算和选择控制语句(1)_第2页
第2页 / 共70页
c及c++程序设计教程第4章逻辑运算和选择控制语句(1)_第3页
第3页 / 共70页
c及c++程序设计教程第4章逻辑运算和选择控制语句(1)_第4页
第4页 / 共70页
c及c++程序设计教程第4章逻辑运算和选择控制语句(1)_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《c及c++程序设计教程第4章逻辑运算和选择控制语句(1)》由会员分享,可在线阅读,更多相关《c及c++程序设计教程第4章逻辑运算和选择控制语句(1)(70页珍藏版)》请在金锄头文库上搜索。

1、1,第四章 逻辑运算和选择控制语句,一、语句概述 二、C+中特有的输入输出流 三、逻辑判断,2,一、语句概述 C/C+ 程序设计提供了三种基本的流程控制结 构,第一为顺序结构即语句从前往后从上往下顺序 地执行,第二种为选择结构,再一种为循环结构。 选择结构根据给定的条件进行判断,由判断的 结果确定执行两支或多路分支中的一个程序段。再 复杂的程序也是通过程序各种语句的组合实现的, 其组合的结果可视为一个模块,独立的模块构成函 数。,3,名称由定义、声明或说明语句引入。名称遵循标识符的 命名规定。定义对象索引类类型名称,函数调用索引函数名 称,表达式中的变量索引变量名称。在名称的索引点,编译 器向

2、上或向前搜寻名称是否已经定义或说明。名称必须首先 有效说明,然后才能正确索引。 在函数中引入的名称为局部名称,在全局范围引入的名 称为全局名称。 局部范围是函数体界定的范围,全局范围是类声明外和 函数定义外的范围。 局部名称只在当前函数体中索引,全局名称可在其后的 函数体中或源文件中索引。函数名具有全局作用范围。,4,术语定义、声明或说明都引入名称,它们之间区别是细 微的。定义指变量或函数代码的唯一内存分配。声明用于指 对类或结构或联合的描述,一般不占有内存空间。名称的唯 一性通过定义或声明来限定。变量名引用名在其作用范围是 唯一的。数据类型声明语句引入的名称在其作用范围也是唯 一的。函数名在

3、重载的概念上是唯一的。 说明在一个程序段引入一个名称,通知编译器该名称在 别处已经定义或声明过。同一说明可以散见于多处,常见的 说明是函数原型说明、外部连接说明与类名的前置说明。,5,C/C+ 的程序是由语句构成的,语句一般以分号作为语 句分隔和语句的结尾标志,复合语句块则以一对花括号定 界。分号本身又构成空语句,语句以分号“;”作为结束。 语句用于为变量分配内存、顺序求值、分支选择和循环 迭代控制等的操作运算。 表达式语句、函数调用语句、空语句、复合语句和流程 控制语句等属于运行时动态执行的指令,仅放置于函数体 中,称为执行语句。,6,非执行语句是为函数体中的动态代码运行做准备的辅助 性说明

4、语句。C+语句的布置次序相当灵活,执行语句和非 执行语句的分界线不明确,甚至可以相互穿插。 但从语句块的局部看执行语句前总是安排相应的非执行 语句或先辅助性说明语句后执行语句。 变量定义语句介于声明语句和执行语句之间,变量定义 语句为变量分配内存。引用声明语句建立独立变量的等价别 名,变量的内存和引用的名在编译或连接阶段备案,变量的 值和引用关联的过程可在编译阶段静态完成也可动态进行。,7,C/C+语言中的语句主要有下面几种形式,源程序的安 排上大抵上根据下面次序分布: 1、辅助性说明语句(引用、class和模板为C+所独有) 函数原型说明语句。 例如:long f(long); int g(

5、); 外部连接说明语句。 例如:extern int x; extern int 类模板声明语句(仅在全局范围,C+独有) 数据类型声明语句,8,数据类型声明语句是由struct、class和union以及 enum引入的数据描述,其后引入的类型名如CClass, SStruct, UUnion, EEnum具有全局作用域,如果相应的声 明放置在全局范围。以分号结束的数据类型声明语句(类类 型声明语句一般放在全局范围)如下: class CClass long f();float m_f; /类类型声明语句,CClass是类类型名 struct SStructint n; int m; /结构

6、类型声明语句, SStruct是结构名 union UUnion double d; char c; /联合类型声明语句,UUnion是联合名 enum EEnum e1,e2, e3; /枚举类型声明语句,EEnum是枚举名,9,2、变量、结构变量和对象定义语句。例如: int i=0,j,sum; SStruct a;CClass obj; 3、执行语句(仅放置在函数体中) 表达式语句。 例如: Lvalue +;- Lvalue;Lvalue =e;Lvalue +=e; 函数调用语句。 例如: printf(“输入两个整数t“); scanf(“%d,%d“,是无意义的表达式语句。,1

7、0, 空语句 只有一个分号的语句,称为空语句。空语句是无表达式 的语句,它在语法上要求一条语句但无需求值时发生作用。 空语句用于循环语句中占据一个语句的位置。例如: for (;*dest=*source; dest+,source+ ) ; /空语句 流程控制语句 复合语句(块) 复合语句由括在花括号 中的0个或多个语句构成。一 个复合语句可用于任何需要语句的地方,复合语句通常称为 程序块。复合语句的语法格式为:,11, 变量j定义语句; /例如:long j; /其后程序段识别同层定义的局部变量j 语句序列; /前面部分的同层程序段不识别其后定义的局部变量k 变量k定义语句; /例如: d

8、ouble k; 语句序列; 语句序列是指若干有序排列的语句。函数体就是由一对 花括号 包含的语句序列构成。在程序中单一语句可以出现 的位置,复合语句也能出现。复合语句常用于选择语句或循 环语句中。在复合语句内引入的变量或名称其可见性局限于 花括号 之内的后续部分。,12,二、C+中特有的输入输出流 C+ 支持面向对象的编程,因此为输入输出提供了一个 面向对象的方法,这就是标准输出流对象cout,以及标准输 入流对象cin。 标准输出流对象cout实现一般的屏幕输出,其使用格式 为: cout左值表达式1左值表达式2;,13,“”是右移运算符,此处亦称为提取符。提取符之后 是左值表达式,最简单

9、的左值表达式是变量。例如: double x,y; cinxy; 此时要求从键盘上输入两个double变量值,用空格分 隔。如键入: 4.1 5.2 则变量x=4.1,y=5.2 语句“coutx;“ 可以理解为:从输入流对象cin中提取值,送往目标变量x, 数据信息是往右移动的。,14,例 返回double ,15,返回引用的函数f1和f2与相关的全局变量d和n在函数调 用的结果上是等效的,但函数在获得结果之前进行了另外的 操作运算。流对象输入方式cinf1()f2()是右移运算符 函数重载。右移运算符的结合律从左到右,因此流对象输入 方式可以理解为:(cinf1() f2() 但语言没有规

10、定基本表达式的初始化求值次序,编译器 可以先求f1的值,再求f2的值。也可以先求f2,再求f1。 初 值出来后再根据从左到右的次序,进行输入流信息的处理。 从上面的结果可以看出,微软采用的策略是参照 scanf 流文件的次序进行函数调用,即从右到左完成函数调用的计 算。同样的分析适应coutf1()“_“f2()endl;。,16,输入输出处理过程不是C/C+语言本身的一部分。格式 化输入输出函数printf、scanf和输入输出流对象cin、cout 在文本编程模式下可完成同样的输入输出功能,两相比较各 有千秋,各有不足。但流对象cin、cout隐含着几种变动。 1. 首先这里面牵涉的一个最

11、重要的变化是main函数作 为C环境下应用程序的入口函数由于全局对象的引入而退住 第二线。 C+编译器允许程序在main函数之前进行必要的初始化 工作。在“#include”预处理语言中所含的 头文件中就定义了全局对象即标准输出流对象 cout,标准输入流对象cin。,17,2. 另外一个重要的变动是 C+ 语言中引进了其它高级 语言中形参变量的引用调用机制,该机制使得被调函数的形 参可以直接改变主控函数相应实参变量,而不必借用取地址 运算符,18,3. 输出流对象cout取代了标准输出函数printf,左移运 算符“”代替函数调用运算符 “()“。 左移运算符“jk; ”将两个右移运算符串联

12、起来,从左到 右进行了两次函数调用。在函数的返回类型上C+进行了扩 张:函数的返回结果是一个可以连续运行的左值表达式。,19,4. printf,scanf函数需要格式控制如%f%s%d匹配不同 的数据以完成数据转换,而cin,cout通过函数重载机制自动 鉴别不同数据的类型,简化了数据的格式转换过程。在简单 的格式转换中采用cin,cout是方便的,但复杂的格式控制 printf,scanf提供紧凑简洁的代码。 在scanf函数中变量j,k前的取地址运算符&到了输入流 cin中消失不见了,这样输入数据流通存在两种几可互换的 语法形式:指针的显式传值和变量的隐含传址。 控制符或操作算子endl

13、与n一样起换行的作用。Endl 表示end line。,20,三、逻辑判断 分支选择结构根据逻辑判断的真伪进行,关系表达式和 逻辑表达式构成逻辑判断分支的开关条件,假结果或零结果 对其后的分支构成屏蔽的短路效果。 关系和逻辑运算符两个操作数的类型可以不同,操作数 可以是字符、整数、浮点或相同属性的指针类型,它们是可 以转换为bool类型的数据。 关系和逻辑运算在整数和浮点型操作数上执行常用的算 术转换。,21,1、关系运算符 关系运算符有六个分为两组,运算符,=, =, =, =, != 连接的表 达式,关系表达式的语法格式为: 操作数1 运算符 操作数2,22,双目关系运算符将其第一个操作数

14、与第二个操作数进行 比较以测试指定关系的有效性或真假性。如果测试的关系成 立或为真,则该关系表达式的结果为1,如果测试的关系不成立 或为假,则该关系表达式的结果为0。例如表达式: 35,1bc 等价于 (ab)c,23,例 关系以及逻辑运算的结果和类型 # include void main() printf (“%d,%d,%dn“,43,1.2=true,sizeof(1=true); printf (“%d,%d,%dn“,4=4.01,1.2!=1.2,sizeof(1.2!=1.2); printf (“%d,%d,%dn“,4.832,43.42.8-4,5+43)+1.6,(y=

15、4.8)3+1.6); x=3+1.6; printf (“%d,%dn“,sizeof(yx),sizeof(4.84.8); printf(“%d,%dn“,sizeof(y|x),sizeof(4.8 说明:关系表达式和逻辑表达式的结果(0或1)在C语言 中为int型的右值,在C+视为bool型的右值。,24,2.逻辑运算符 逻辑运算用于组合操作关系表达式形成多个逻辑条件。 逻辑表达式的结果为0 或1。其结果的类型为bool型(在C语 言中为int型)的右值表达式。逻辑运算符有三个: a. 逻辑非运算符!, b. 逻辑与运算符& , c. 逻辑或运算符| 。 优先级上逻辑非运算符高于算术

16、运算符,算术运算符高 于关系运算符,关系运算符高于逻辑与运算符,逻辑与运算 符高于逻辑或运算符。逻辑或运算符高于赋值运算符。,25,!ab*c 等价于 (!a) (b*c) a+bb*c 等价于 (a+b)(b*c) ab,26,2)逻辑与运算符 逻辑与运算符在两个操作数均为非0时返回值1;否则返 回 0 。逻辑与具有从左到右的结合性即逻辑与表达式严格的 从左到右的次序执行。逻辑与表达式的语法格式为: 操作数1&操作数2 e1&e2 逻辑与表达式的第一个操作数e1首先求值,且完成所有 的副作用。第二个操作数e2仅在第一个操作数求值为真或非 0 时才继续进行计算求值。 逻辑与运算是短路运算,只要求得表达式的结果为0,则 判断结束。逻辑与短路运算对于表达式e1=

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号