C++学习日记--分支结构(if语句)
2014-02-18 22:38
387 查看
if语句
对于可能发生的事情,我们平时经常会说“如果……,那么……”。语文里,我们叫他条件复句、“如果”之后的内容我们称之为条件,当条件满足时,就会发生“那么”之后的事件。我们来看这样语句英语:if mark>90,cout<<”GOOD!”<<endl.把它翻译成中文就是:如果分数大于90,则输出GOOD。
其实在程序设计中,也是用“如果”来描述可能发生的情况的。他和刚才的那句英语很相似,具体的语法格式是:
我们把若干句语句放在一个大括号中,称为语句块。运行到该if语句,当条件满足时,就会执行语句块内的内容。我们也可以用流程图(图4.1.1)来表示if语句。请注意,if语句的结束是没有分号的,分号只属于语句块中的语句。
一、条件—关系运算
当我们判断一个条件的时候,依赖于这个条件是真是假。说到真和假,我们不难想到布尔型数据,因为他就是分别用0和1来表示真和假。显然条件的位置上应该放置一个布尔型的数据。然而,光靠死板的0和1两个数仍然无法描述可能发生着变化的各种情况。那么我们如何让电脑来根据实际情况作出判断呢?
这里我们要引入关系运算。之前的加减乘除和取余数之类的操作,结果都是整数或实型数据。而关系运算的结果则是布尔型数据,也就是说他们的结果只有两种—真或假。
所谓关系运算,是判断操作符两边数据的关系。这些关系一共有六种,分别是:等于、大于、小于、大于等于、小于等于、不等于。如下表所示:
当操作符两边的数据符合操作符对应的关系时,运算结果为真,否则为假。比如5>1的结果是1(真),’a’==’a’的结果也是1(真);而3<=2的结果为0(假)等等。特别要注意,==和=是两个不同的操作符,前者是判断操作符两边数据的关系,后者是把右边的表达式的结果赋值给左边。
下面我们来看一段程序:
Int main()
{
Int a,b;
Cout<<”请输入两个数:”;
Cin>>a>>b;
If(a>b)//如果a比b大,则将两个数交换
{
Inttemp;//创建一个临时变量
Temp= a;
A=b;
B=temp;
}
Cout<<a<<””<<b<<endl;//将两个数从小到大输出
Return 0;
}
第一次运行结果:
请输入两个数:1 5
1 5
第二次运行结果:
请输入两个数:3 2
2 3
算法时间:交换
交换是程序设计中最基础最常用的一种操作。它的算法在现实生活中也有着形象的操作。交换两个变量里的数据就好像交换ab两个碗中的水。我们必须再拿一个碗来(临时变量)将A碗里面的水先倒到这个临时的碗里,再将B碗的水倒到空的A碗里,最后把临时碗里的水再倒回B碗,那么就完成了这个工作。对照着这个过程去阅读代码是不是有些理解了?至于这个算法的代码,也是非常好记的。记住把临时变量放在首位,然后把任一变量放在等号的右边,下一句语句开头的必须也是这个变量。简单地记就是首尾相连。这个程序完成的工作是将两个无序的整数从小到大的输出。即如果第一个数比第二个数大,先交换在输出,否则直接输出。
二、条件—逻辑运算
学校评三好学生,候选人必须要德智体全面发展才能够评上;学校开运动会,运动员只要在某一个项目上是全校第一就能够获得冠军。现实生活中,有些条件会很严格,要数项同时满足才算符合条件;而有些条件又会很松,只要符合其中某一项就算符合条件了。在程序设计中,我们也会遇到这样的问题。
平时,我们往往是用“并且”和“或”两个词来描述这些情况的。而在程序设计中,我们用逻辑运算来描述。我们平时称他们“与”(相当于并且)、“或”、“非”。“逻辑与”的操作符是&&,“逻辑或”的操作符是||,“非”的操作符是!。下面三个真值表说明了各逻辑运算的结果。
上面两表的第一行和第一列分别是逻辑操作符两侧的值,右下角带有灰色底纹的四个是经过运算后的结果。
如果我们用集合A和集合B分别来描述两个不相同的条件A和B,那么A&&B表示要满足集合A与集合B的交集;A||B表示要满足集合A与集合B的并集;!A表示要满足集合A的补集。
在程序设计中,我们把表达式中运算的次序称作操作符(Operator)的优先级。那么,关系操作符和逻辑操作符的优先级是怎样的呢?
和简单表达是一样,括号的优先级仍然是最高的。无论什么情况都应该先从左到右地计算括号内的结果。当算术操作符、关系操作符和逻辑操作符处于同一级的括号中时,则分别从左向右地依次进行逻辑非运算、算术运算(遵循算术运算的优先级)、关系运算、逻辑与运算和逻辑或运算。(记作“不算关羽活”)。
看程序:
#include “iostream.h”
Int main()
{
Int mark;
Cout<<”请输入成绩(0~100):”;
Cin>>mark;
If(mark>=80&& mark<=100)
{
Cout<<”Good!”<<endl;
}
If(mark>=60 && mark <80)
{
Cout<<”So so”<<endl;
}
If(mark>=0 && mark < 60)
{
Cout<<”Pleasework harder!”<<endl;
}
If(mark<0||mark>100)
{
Cout<<”ERROR!”<<endl;
}
Return 0;
}
第一次运行结果:
请输入成绩(0~100):100
Good!
第二次运行结果:
请输入成绩(0~100):75
So so
第三次运行结果:
请输入成绩(0~100):59
Please work harder!
第四次运行结果:
请输入成绩(0~100):105
我们可以看到,将关系运算和逻辑运算配合使用,可以将数值有效的分段。以上这段程序的功能就是按照不同段的数值输出不同的结果,如果输入的数值超出正常的取值范围,则输出出错信息。
算法时间:纠错
熟悉电脑软件的同学都知道,不少软件或程序有时候会有漏洞(Bug),使得程序的安全性或稳定性受到影响。而产生这些漏洞的部分原因就是程序员在设计程序时有所疏漏,忘记了去考虑一些可能引起错误的特殊情况。我们把这些可能引起程序异常的情况称为临界情况。比如在a/b中,b=0就是一种临界情况。如果不考虑到这种情况,则有可能导致除数为零而是整个程序崩溃。我们学会了if语句以后既能够从一定程度上避免一些可以预知的错误,把那些临界情况引入纠错程序。(比如输出出错信息,或及时中止程序)
三、&&和||的妙用
有时候我们做数学题会遇到这样的问题--(1+5*8)/6*0/(5/6+2),当我们发现整个式子是乘式,并且有一个乘数为0的时候,则会不再做更多的计算,把结果脱口而出。因为无论后面的乘数的什么,都无法改变结果了。
根据真值表我们知道,在逻辑与中,只要有一个假则整个表达式的结果为假;在逻辑或中,只要有一个是真则整个表达式的结果为真。我们发现逻辑与、逻辑或和上面所说的例子有着相似之处,那么电脑会不会像我们一样,不再做更多无谓的计算呢?
答案是肯定的。即在一个或多个连续的逻辑与中,一旦出现一个假,则结果为假,处于该位置以后的条件不再做更多判断;在一个或多个连续的逻辑或中,一旦出现一个真,则结果为真,处于该位置后的条件也不再做更多判断。
比如:
if(m!=0 && n/m<1)
{
Cout<<”OK”<<endl;
}
当m=0时,电脑不会去尝试用n/m了,而是直接跳过证据语句。这样,我们就能避免除数为零的错误了。
对于可能发生的事情,我们平时经常会说“如果……,那么……”。语文里,我们叫他条件复句、“如果”之后的内容我们称之为条件,当条件满足时,就会发生“那么”之后的事件。我们来看这样语句英语:if mark>90,cout<<”GOOD!”<<endl.把它翻译成中文就是:如果分数大于90,则输出GOOD。
其实在程序设计中,也是用“如果”来描述可能发生的情况的。他和刚才的那句英语很相似,具体的语法格式是:
我们把若干句语句放在一个大括号中,称为语句块。运行到该if语句,当条件满足时,就会执行语句块内的内容。我们也可以用流程图(图4.1.1)来表示if语句。请注意,if语句的结束是没有分号的,分号只属于语句块中的语句。
一、条件—关系运算
当我们判断一个条件的时候,依赖于这个条件是真是假。说到真和假,我们不难想到布尔型数据,因为他就是分别用0和1来表示真和假。显然条件的位置上应该放置一个布尔型的数据。然而,光靠死板的0和1两个数仍然无法描述可能发生着变化的各种情况。那么我们如何让电脑来根据实际情况作出判断呢?
这里我们要引入关系运算。之前的加减乘除和取余数之类的操作,结果都是整数或实型数据。而关系运算的结果则是布尔型数据,也就是说他们的结果只有两种—真或假。
所谓关系运算,是判断操作符两边数据的关系。这些关系一共有六种,分别是:等于、大于、小于、大于等于、小于等于、不等于。如下表所示:
当操作符两边的数据符合操作符对应的关系时,运算结果为真,否则为假。比如5>1的结果是1(真),’a’==’a’的结果也是1(真);而3<=2的结果为0(假)等等。特别要注意,==和=是两个不同的操作符,前者是判断操作符两边数据的关系,后者是把右边的表达式的结果赋值给左边。
下面我们来看一段程序:
Int main()
{
Int a,b;
Cout<<”请输入两个数:”;
Cin>>a>>b;
If(a>b)//如果a比b大,则将两个数交换
{
Inttemp;//创建一个临时变量
Temp= a;
A=b;
B=temp;
}
Cout<<a<<””<<b<<endl;//将两个数从小到大输出
Return 0;
}
第一次运行结果:
请输入两个数:1 5
1 5
第二次运行结果:
请输入两个数:3 2
2 3
算法时间:交换
交换是程序设计中最基础最常用的一种操作。它的算法在现实生活中也有着形象的操作。交换两个变量里的数据就好像交换ab两个碗中的水。我们必须再拿一个碗来(临时变量)将A碗里面的水先倒到这个临时的碗里,再将B碗的水倒到空的A碗里,最后把临时碗里的水再倒回B碗,那么就完成了这个工作。对照着这个过程去阅读代码是不是有些理解了?至于这个算法的代码,也是非常好记的。记住把临时变量放在首位,然后把任一变量放在等号的右边,下一句语句开头的必须也是这个变量。简单地记就是首尾相连。这个程序完成的工作是将两个无序的整数从小到大的输出。即如果第一个数比第二个数大,先交换在输出,否则直接输出。
二、条件—逻辑运算
学校评三好学生,候选人必须要德智体全面发展才能够评上;学校开运动会,运动员只要在某一个项目上是全校第一就能够获得冠军。现实生活中,有些条件会很严格,要数项同时满足才算符合条件;而有些条件又会很松,只要符合其中某一项就算符合条件了。在程序设计中,我们也会遇到这样的问题。
平时,我们往往是用“并且”和“或”两个词来描述这些情况的。而在程序设计中,我们用逻辑运算来描述。我们平时称他们“与”(相当于并且)、“或”、“非”。“逻辑与”的操作符是&&,“逻辑或”的操作符是||,“非”的操作符是!。下面三个真值表说明了各逻辑运算的结果。
上面两表的第一行和第一列分别是逻辑操作符两侧的值,右下角带有灰色底纹的四个是经过运算后的结果。
如果我们用集合A和集合B分别来描述两个不相同的条件A和B,那么A&&B表示要满足集合A与集合B的交集;A||B表示要满足集合A与集合B的并集;!A表示要满足集合A的补集。
在程序设计中,我们把表达式中运算的次序称作操作符(Operator)的优先级。那么,关系操作符和逻辑操作符的优先级是怎样的呢?
和简单表达是一样,括号的优先级仍然是最高的。无论什么情况都应该先从左到右地计算括号内的结果。当算术操作符、关系操作符和逻辑操作符处于同一级的括号中时,则分别从左向右地依次进行逻辑非运算、算术运算(遵循算术运算的优先级)、关系运算、逻辑与运算和逻辑或运算。(记作“不算关羽活”)。
看程序:
#include “iostream.h”
Int main()
{
Int mark;
Cout<<”请输入成绩(0~100):”;
Cin>>mark;
If(mark>=80&& mark<=100)
{
Cout<<”Good!”<<endl;
}
If(mark>=60 && mark <80)
{
Cout<<”So so”<<endl;
}
If(mark>=0 && mark < 60)
{
Cout<<”Pleasework harder!”<<endl;
}
If(mark<0||mark>100)
{
Cout<<”ERROR!”<<endl;
}
Return 0;
}
第一次运行结果:
请输入成绩(0~100):100
Good!
第二次运行结果:
请输入成绩(0~100):75
So so
第三次运行结果:
请输入成绩(0~100):59
Please work harder!
第四次运行结果:
请输入成绩(0~100):105
我们可以看到,将关系运算和逻辑运算配合使用,可以将数值有效的分段。以上这段程序的功能就是按照不同段的数值输出不同的结果,如果输入的数值超出正常的取值范围,则输出出错信息。
算法时间:纠错
熟悉电脑软件的同学都知道,不少软件或程序有时候会有漏洞(Bug),使得程序的安全性或稳定性受到影响。而产生这些漏洞的部分原因就是程序员在设计程序时有所疏漏,忘记了去考虑一些可能引起错误的特殊情况。我们把这些可能引起程序异常的情况称为临界情况。比如在a/b中,b=0就是一种临界情况。如果不考虑到这种情况,则有可能导致除数为零而是整个程序崩溃。我们学会了if语句以后既能够从一定程度上避免一些可以预知的错误,把那些临界情况引入纠错程序。(比如输出出错信息,或及时中止程序)
三、&&和||的妙用
有时候我们做数学题会遇到这样的问题--(1+5*8)/6*0/(5/6+2),当我们发现整个式子是乘式,并且有一个乘数为0的时候,则会不再做更多的计算,把结果脱口而出。因为无论后面的乘数的什么,都无法改变结果了。
根据真值表我们知道,在逻辑与中,只要有一个假则整个表达式的结果为假;在逻辑或中,只要有一个是真则整个表达式的结果为真。我们发现逻辑与、逻辑或和上面所说的例子有着相似之处,那么电脑会不会像我们一样,不再做更多无谓的计算呢?
答案是肯定的。即在一个或多个连续的逻辑与中,一旦出现一个假,则结果为假,处于该位置以后的条件不再做更多判断;在一个或多个连续的逻辑或中,一旦出现一个真,则结果为真,处于该位置后的条件也不再做更多判断。
比如:
if(m!=0 && n/m<1)
{
Cout<<”OK”<<endl;
}
当m=0时,电脑不会去尝试用n/m了,而是直接跳过证据语句。这样,我们就能避免除数为零的错误了。
相关文章推荐
- 2013C++-第8周项目——用if语句实现分支结构程序设计
- 黑马程序员---C语言学习笔记之分支结构if语句与switc语句的详解
- C++学习 【3.3】 程序设计初步--选择结构和if语句
- C++学习 【3.3】 程序设计初步--选择结构和if语句
- 第23讲-用if语句实现分支结构-练习
- 第12周 《C语言及程序设计》实践项目——用if语句实现分支结构
- 2012/1/14 《C++ Primer Plus》第六章:分支语句和逻辑操作符 学习笔记
- Swift学习记录 -- 3. 逻辑分支语句(if , else if ,三目运算 ,guard)
- (原创)c#学习笔记04--流程控制03--分支02--if语句
- Python学习入门基础教程(learning Python)--3.1Python的if分支语句 .
- 【C语言】【23】if语句分支结构
- 分支结构、循环结构流控语句(if、switch、for、while)
- 2012/1/14 《C++ Primer Plus》第六章:分支语句和逻辑操作符 学习笔记
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
- 第二十三讲 用if语句实现分支结构
- Python学习入门基础教程(learning Python)--3.2 if-else分支语句 .
- 分支结构之IF语句
- 2.4.2认识分支结构-if语句
- 【C++】学习笔记二十一——if语句
- JAVA if条件语句,switch多分支结构,与逻辑运算符