一、选择结构概述
有的问题,需要根据不同的条件来执行不同的语句。
比如同样去食堂打饭,你一个学生去了,食堂会按照原价卖饭菜,而且你还可能碰到手抖的大妈,然后emmm。
OK,然后一个老师去了呢,价不价格先不说,大妈的手反正是绝对不会的抖了,哈哈哈哈。
这就是一个简单的选择结构的例子,我们做写的程序就是那个大妈,就要判断来的人是学生还是老师,然后决定是否执行手抖的命令,哈哈哈哈。
选择结构也可以称为分支结构,一个树干(判断)伸出去一堆树枝(不同的输入要执行的不同的语句),够形象吧。
二、实现前提(关系表达式与逻辑表达式)
1.关系表达式与关系运算符
- 想要构成关系表达式首先需要有判断符号吧,这就是关系运算符了。
- 关系运算符的功能是进行关系运算,也就是判断给定的系运算的结果是一个逻辑值。若关系成立,则结果为真,否则为假。C语言中用整数1代表真,用整数0代表假。
- C里面有6种关系运算符:
1. < 小于
2. <= 小于或等于
3. > 大于
4. >= 大于或等于
5. == 等于
6. != 不等于
-
首先日常生活中常见的<(小于)、<= (小于或等于)
同样的有>(大于)、>=(大于或等于)
然后重点来了
== (等于)、!= (不等于)
有一个注意点就是:=跟==比较容易混 -
而且这6个运算符的优先级也是不一样的
==跟!=的优先级比较低
<、<=、>、>=的优先级比较高
a!=a<b
/*根据优先级规则
先进行a<b的判断
结果就真1假0了
然后就是*/
a!=1或者0
算完了出来结果1或者0
结束
- 但一般来说*/%这种运算符的优先级比这些关系运算符高
毕竟先计算完再比较也比较符合常理
具体的可以优先级比较顺序去查一下表格
a>b>c
/*关系运算符结合方式左到右
所以首先a>b进行运算
算完了就是*/
0或1>c了
//本来在数学上成立的式子
//现在就不一定成立了,切记
一般来说
运算的时候按照优先级进行运算
如果优先级相同的话
就根据该符号结合方向来确定运算顺序
- 用关系运算符将运算量连接起来构成的表达式,就称为关系表达式。
关系表达式一般只能够表达单一的条件,如果需要表达复杂的条件,就需要使用逻辑表达式了
2.逻辑表达式与逻辑运算符
- 逻辑运算符:
逻辑非!
逻辑与&&
逻辑或||
数学上不是也有与或非吗,日常生活中也有与或非啊,联想一下就OK - 逻辑与就是两个都真表达式为真,只要有一个假,就为假,两个更不用说了,这个跟日常一样。
逻辑或就时有一个为真,表达式就为真
逻辑非就是真假取反操作
优先级的话
逻辑非最高,第二是逻辑与,第三是逻辑或
神图:真值表
3. 由逻辑运算符将运算量连接起来的表达式叫做逻辑表达式。
表达变量x介于整数1到5之间:
x>1&&x<5
- C语言为了提高编程的灵活性,大大扩展了逻辑运算量的范畴,允许任意标量类型的数据参与逻辑运算(标量类型也就是整型、实型、字符型、枚举型和指针型这5种类型)。
只要逻辑运算量的值为非0,就看作真,只要值为0,就看作假。
a=4;
//a是真,因为上面说了
//非0 就是真
!a;
//逻辑非以后就是假了
还有一个蛮好玩的事情
a的ASCII码是97 非零
A——65
字符0
'0'的ASCII码是48
转义字符
\0代表ASCII码值为0的那个字符,属于0
- 查询ASCII码技巧,方便查询ASCII码对应的字符:
新建一个文本文档,按住ALT+要查询的码值(注意,这里是十进制),松开即可显示出对应字符。例如:按住ALT+97,则会显示出’a’。
ASCII码对应的大小写规则:
数字的ASCII码<大写字母的ASCII码<小写字母的ASCII码。
#include <stdio.h>
int main()
{
int a=1,b=2,c=3,d=4,p=1,q=9999,r;
r=(p=a>b)&&(q=c>d);
printf("p=%d,q=%d,r=%d\n",p,q,r);
return 0;
}
结果p=0,q=9999,r=0
首先1>2为假
所以p=0
然后人都喜欢省力气对吧
逻辑与只要有一个是假
式子就为假对吧
那么既然p=0了
这个式子必定为假了
所以后面的q=c>d没必要计算了
所以q=9999不变
假设多进行一次无谓的运算
这里就是明知道逻辑与为假
还进行后面的q=c>d计算
一次无谓运算0.1秒(夸大了)
那么1000次就是100秒
因为这个没啥必要的运算耽误100秒不值当
所以 你懂得
这个就是逻辑运算短路了
- 逻辑运算短路
(1)表达式1&&表达式2求值时,若表达式1的值为0,则整个表达式的值必定为0;因此不必再对表达式2进行求值。
(2)表达式1||表达式2
求值时,若表达式1的值为1,则整个表达式的值必定为1;因此不必再对表达式2进行求值。
三、算法与流程图
-
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。
-
例如:
编程序从键盘输入一个小写字母,将其转化为相应的大写字母并输出。
S1:从键盘输入一个小写字母存入变量c;
S2: c=c-32;
S3:输出计算结果。
这就是用自然语言描述算法
己知两个整型变量a和b,求出其中的较大数并存于变量max中。
S1:输入变量a和b的值:
S2:如果a>=b,则a—>max;
S3:否则b一>max;
S4:输出max的值。 -
描述算法工具多了去了
自然语言就是用日常对话来展示,但是写的多,如果卸的不够精确的话,别人看了还不一定搞懂
除此以外还有伪代码啊
还有流程图,N-S图啥的 -
看文字不一定看懂,不如看图来的实在
流程图,是对算法的一种图形化表示,用一系列规定的图形、流程线及文字说明来表示算法中的基本操作和控制流程。其优点是直观形象、简洁易懂。
标准图例如下:
-
例题
-
-
N-S图你可以把它理解为取消了流程线,然后将那些条条框框放在一个大的长方形中。
-
四、关于算法说一点吧
做题的时候首先审题
然后考虑一下怎么完成这道题目(用什么算法)
然后就是搭框架,然后设变量,然后把算法表示出来,然后编译运行。
算法是核心
核心
核心
之所以讲那些流程图啊啥的就是为了表示算法的,一眼看出来的题目也有,但更多的都是需要你自己去思考,这个时候写个流程图啊啥的,比写字方便,比较容易推演,这就是优势。
而且,当你做不出来结果的时候,还可以按照流程图推算一下自己是哪个地方漏掉了某种情况还是算法本身就有问题,从而进行算法的修改或者补充。