当前课程知识点:C/C++:从基础语法到优化策略 >  Final Exam >  Final exam >  3.3 Relational expressions (> < ==)

返回《C/C++:从基础语法到优化策略》慕课在线视频课程列表

3.3 Relational expressions (> < ==)在线视频

返回《C/C++:从基础语法到优化策略》慕课在线视频列表

3.3 Relational expressions (> < ==)课程教案、知识点、字幕

我们这部分介绍一下关系表达式

表达式是什么呢 其实表达式就是一个值

或者说是一些值的组合

组合采用操作符把它们组合起来

比如说我们说2+3这就组成一个表达式

在我们的for循环里面

那么我们有三个表达式用来去控制这个for循环

那么我们在这主要是讲这个关系表达式

关系表达是有这么六种

六种操作符 分别是小于小于 等于等于和大于

大于等于以及不等于

大家注意 在这边需要特别注意就是关于

两个等于写在一起

那么是判断他是否相等 是否相等

就像前面判断他是否小于 那这是否相等

如果你只有一个等号 那就是赋值操作 赋值操作在这里

大家需要跟我们日常的对等号的理解区分开

那么在这里面呢 就关系表达式 本来是有很简单的东西

但是我们常犯的错误

初学者是等于和等于等于用错了

这是一个很常见的错误

在这呢 给大家看一个例子

程序名叫equal

那这个例子里面呢

在这个例子里面 我们来看

这个例子里面我们首先定义了一个数组

这个数组里面有十个元素 有十个元素

然后呢 我们写一个循环

循环是干嘛 i 等于零如果quizscores[i]等于20

那么i++

那就说如果他等于20就i++ 就会执行这个循环体就把i打印出来

那前面的这个二十二十都是20对不对

到19的时候 那他条件不成立 这个循环就结束了

也就说他会把前面20个分数前面

前面五个分数是20的分数打出来

这个是 但是这个这样的写法是稍微有点无厘头了

然后 这只是个例子来看

这个这个没啥问题 因为条件不成立就结束嘛就结束

这里面其实还是有一个隐患的 有一个隐患的

就说如果你i都是满足 如果有这个i他没有限制i的个数

有越界的隐患越界的隐患

那么如果你不小心把这个等号把这个是判断是否相能写成一个等号

那就变成什么了

首先 循环i等于零初始化 然后就看这个条件成不成立

这个条件永远成立 永远成立

那么这个条件就会怎么样

20等赋给quizscores 那么他这个整体

这个赋值操作 它还是一个表达式

也是一个表达式

它的值是多少 它的值就是20

所以说呢 这个task这个条件是一直成立的

那么你的i++那是不是就会变成死循环呀 死循环

我们先把这个注释掉

注释掉 我们先把前面那个打印一下

我们前面那个编译一下

运行

咱们来看这个 那么前面这五个值

前面这五个值都是20都打印出来了 没啥问题

那么 如果

后面这个不小心写成这个样子会怎么样 编译一下

他会警告 one warning generated

他说现在编译器很聪明 他说你这个地方不对吧

按说for循环里面你这个地方一般大家都是用等号等号 你怎么用个等号

他警告你说 你是不是用这个呀这是提醒

我用的这个编译器实际上是clang还是很聪明的 他的错误提示要更好

那他既然是个警告 你可以不理他嘛 对吧 他是个警告

那我们就只有编译还是成功了嘛

我们来看这里面呀

从零开始那就开始打印012345一直往上打印

刚才数组只有十个值是吧

而且每一个都被赋值了 还有他会带来的一个效

破坏信用的效应是他把这个数组里面的每个元素都赋20

所以说呢 你打印的时候

打印就是你这个数组变了 那我们i就是前面这个值在一直打印

因为后面这个值不是数组的值啊

他这个是个字符串的值

那就往后往后走 那所以说 在这个时候 他就一直在去赋值操作

赋值赋值一直赋 赋上去

如果越界了 这个数组只有十 越界了怎么办

他不管三七二十一就继续赋值 继续操作内存

去野蛮的去操作 那不会停止不会停止

然后一直往后操 也就是说他从这个数值往后面一直操作操作操作不会停下来

停了100多200多越界了很多了 也不停下来

直到突然间读到某一个地方

那个地方不允许他去写

可能是别的程序的地址或怎么别的

那么这个时候程序就崩掉了

抛出一个segmentationfort段错误

然后就告诉程序挂掉了

所以这种错误在大家用指针的时候会非常非常容易出现

这是C++编程的 就是难点

千万切记切记 很多时候数组的访问是不会检查的

千万不要越界 每次去做这些操作的时候 你就要不停的去想

i会不会越界 第i个元素会不会越界 有没有可能越界 你要去仔细去分析

所以说呢这个就是我们讲的要注意的时候注意的

还有我们需要注意的这个例子注意的例子

就是我们字符串的比较 字符串的比较

哪去了 字符串的比较比如说这儿

如果你要比较这两个字符串是不是相同

是相同注意用词 我说的是相同是指的内容相同

比如说他你希望他是个mate比如说你这定义一个字符串

有四个字符 问号第一个是 第二个是a t e

记住 四个字符 你要实验是五个 因为最后一个字符是

零他的他的值是零

所以说呢 在这他就说我们比较一下这个word

这个word是不是mate

如果不是 如果不是的话 它的返回值如果是

如果两个内容相同 那就返回零否则就是非零

也可能大于一可能小于一就按照字母顺序就字典顺序是由

string compare 他比出来的

那么相同就停下 不同 如果不同就怎么办

不同 就用ch把word的第零个字符换成ch

ch是从a开始++ ++那一直加到m 所以就停下来了

对吧 那么记住这是字符串的比较情形 这个不要采用等号

你采用等号的话 那就表示的是word的这个指针的

因为它这个数组 数组就是看成指针

这个指针也说这个地址是不是相同

所以他永远是false 所以记得要做字符串比较 是这个

时间关系 我们就不去运行它了

还有例如果是另外一个例子 另外一个例子里面

如果我们字符串的类型是string

string string的话是一个c++模板类里面定义字符串的类型

在这个时候 我们就可以采用等号了 第二个例子 我们看一下

这面其他都是一样的 不同的是这个地方

和string类型 string类型

string类型 它这个操作符不等于还有大于的 它都做了定义

做定义这个就是比较的实际上是

他这两个内容是不是相同啊

这个是运算符的重载 后面我们会专门来讲这个东西是什么

那这个地方的话 那我们可以这个运行一下吧

所以说 他从这问号开始 aate bate cate 一直到

late late之后然后再下一个是mate mate就相等

这个就不会打印了

然后呢 他就结束 之后就打印后面这个

所以说他是word is mate 是mate

C/C++:从基础语法到优化策略课程列表:

Week 1 Quick start

-1.1 Basic knowledges

-1.2 Setting Out to C++

-Lecture notes

-Example code

-Quiz 1

Week 2 Data types

-2.1 Compile and link

-2.2 Integers

-2.3 Floating-point numbers

-2.4 C++ Arithmetic Operators

-Lecture notes

-Example code

-Quiz 2

Week 3 Expressions and statements

-3.1 Some operators

-3.2 for loop

-3.3 Relational expressions (> < ==)

-3.4 while loop

-3.5 Branching statements (if else)

-3.6 Logical expressions

-3.7 switch statement

-3.8 break and continue statements

-3.9 File input and output

-Lecture notes

-Example code

-Quiz 3

Week 4 Array, string and structures

-4.1 Array

-4.2 Array strings

-4.3 string class strings

-4.4 Structures, Unions and Enumerations

-Lecture notes

-Example code

-Quiz 4

Week 5 Pointers and memory management

-5.1 Pointers

-5.2 Allocate memory: C style

-5.3 Allocate memory: C++ style

-5.4 Managing memory for data

-Lecture notes

-Example code

-Quiz 5

Week 6 Functions

-6.1 Function review

-6.2 Various functions

-6.3 Recursion and pointer to functions

-6.4 Reference and const

-Lecture notes

-Example code

-Quiz 6

Week 7 Functions and optimization

-7.1 Adventures in functions

-7.2 Speedup your program

-Lecture notes

-Example code

-Quiz 7

Week 8 ARM and OpenCV

-8.1 C/C++ with ARM development board

-8.2 Some tricks in OpenCV

-Lecture notes

-Example code

-Quiz 8

Week 9 Class

-9.1 Classes in C++

-9.2 Constructors and destructors

-9.3 this pointer

-Lecture notes

-Example code

-Quiz 9

Week 10 Operator overloading and type casts

-10.1 Operators in cv::Mat in OpenCV

-10.2 Operator overloading

-10.3 Friend functions

-10.4 Automatic conversions and type casts for classes

-Lecture notes

-Example code

-Quiz 10

Week 11 Dynamic memory management and classes

-11.1 Dynamic memory and classes

-11.2 New and improved String class

-11.3 Using pointers to objects

-Lecture notes

-Example code

-Quiz 11

Week 12 Class inheritance and memory management

-12.1 Class inheritance

-12.2 Static and dynamic binding

-12.3 Access control: protected

-12.4 Inheritance and dynamic memory allocation

-Lecture notes

-Example code

-Quiz 12

Week 13 Constructor, assignment and class templates

-13.1 Constructor and assignment

-13.2 Classes with object members

-13.3 Private inheritance

-13.4 Class templates

-Lecture notes

-Example code

-Quiz 13

Week 14 CNN, exceptions in C++

-14.1 CNN for image classification

-14.2 Exceptions

-Lecture notes

-Example code

-Quiz 14

Week 15 Friends, nested classes, RTTI and type cast

-15.1 Friends

-15.2 Nested classes

-15.3 RTTI and type cast operators

-Lecture notes

-Example code

-Quiz 15

Final Exam

-Final exam

3.3 Relational expressions (> < ==)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。