4.1 绪论
前面 咱学完了顺序结构 我们了解到 编程 是严格自上而下去执行的,但是你要明白他不可能永远这么简单 ,当你写一个复杂的程序时,如果你只用一些自上而下的结构你会代码写的很复杂,有可能写不出来 ;所以衍生出了选择结构 和 循环结构;
现在去学习选择结构 ,啥是选择结构, 其实对于本章而言 选择结构 就是两个 .
一个是if语句;
还有就是switch语句 ;
前者一般是用于两个选择;多个并列就得else if ,再就要嵌套;
而switch 可以用于多个并列;
怎么区别这三者
4.2 if语句的一般形式
那么咱们看一下 if 语句的一般形式 :
if(…)
语句;
这个语句可以是一个简单句,就一个语句;也可以是复合语句。但是复合语句必须用花括号括起来。
if(3) a=1; b=2; 这句话的意思是if后面之后a=1这一个语句。b=2不属于if语句的子句。
这是没有else 的if语句,如果满足执行 不满足直接跳过
还有就是 包括else的语句
if (…)
语句;
else
语句;
这是最简单的,只有一层if else
如果现在 咱们 有好几层怎么办
if(…)语句1;
else if 语句 2;
else if 语句3 ;
else if 语句4 ;
else 语句5;
记住这不是 嵌套 !!!!顶多算if else 并列!!
4.3 关系运算符
1.关系运算符 :关系 就是大于 小于 这些
一共有六种 分别是 : >; < ; >=; <=; ==; !=; 注意: 1.这六种 优先顺序不是完全一样的 ,其中前四种 优先顺序大于 后两种 ; 2.但是它们都属于 关系运算符之中 ,那么剩下的其他运算符优先顺序是如何的呢 括号-> 单目运算符 ->算数运算符 ->关系运算符-> 赋值运算符 (具体见chapter 3 图表)
2.关系运算表达式;
就是表达式 加上了关系运算符构成的式子 ;
注意:
1.所谓的关系表达式一般都放在 判断括号里面 也有放在一般的语句里面
2.但是把 注意 其结果 只有两个数值 1或 0 是代表真和假。记住结果是数值啊 可以赋值滴!!!
4.4 逻辑运算符
1.逻辑运算符:记住 逻辑
逻辑运算符一共就有三个; && ;这是 “与” 的意思 ,什么是与,那就是当左边与右边都是正确的时候 即1的时候,整个结果才是1;如果不全是1,哪怕有一个是0;那都会导致整个结果输出的是0;即false的意思; || ;这是 “或” 的意思,什么是或,或是只要有一个是正确的 那么这个就是正确的 ,只有当两个都是0的时候,那时输出的结果才是错误的; ! ; 否定 ;什么意思呢,否定就是正确变成错误 错误变正确;0-1;1-0; 注意: 1.那么这三个运算符他有什么先后优先级呢;首先是!其次是&&然后是||。 2.那么逻辑运算符整体和其他运算符怎么看先后 括号->单目运算符(包括 !)->算数运算符->关系运算符->赋值运算符->&& ->|| ps:!属于单目运算符;
2.逻辑表达式
包含逻辑运算符的表达式;
注意:
1.假如逻辑表达式在判断框子里面;逻辑表达式的结果只能输出整数0或1;0 有false的意思 1隐含true的意思;但是括号可以是除了0/1以外的其他数字。
比如 if(a) a等于1 2 3 4 5时,属于1=true 执行;a=0时属于0=false不执行 再比如!0就是输出结果为1;;;;; !1 , !2, ! 3,输出结果为0 而0 包含有false的意思 其他123456等 均含有true的意思; #include <stdio.h> int main(){ int a; a=0; if(a){ printf("%d",a); } else printf("aaaaaaaaaaaaaa"); return 0; } 在这个式子里面,如果a=123456789 等任意个非0数值,都会执行printf("%d",a) else 是当等于0时候执行的; 输出aaaaaaaaaaaaaaa; #include <stdio.h> int main(){ int a; a=1; if(!a){ printf("%d",a); } else printf("shabi"); return 0; }
逻辑运算表达式 没必要全部运行 ,比如计算机会从左到右去运行一个东西;当运行到能判断这个表达式结果的时候 那么他就会跳出来 不运行了;
4.5 bool型
1 0 这种有逻辑关系判断出来的结果是否可以直接存放在一个变量里面呢?
我觉得可以 但是用 int float 还是 我感觉都不妥,我要存在一个特殊的储存变量里面 ,那么规定 bool;
#include <stdio.h> int main(){ float sc; scanf("%f",&sc); bool a,b; a=sc>=60; b=sc<=69; printf("%d %d ",a,b); if(a==true&&b==true) printf("the grade is c\n"); return 0; }
bool的存储结果是1;但是等价于true ;所以这段代码是可以执行的;
头文件必须写#include (有些编译器可以不写)
4.6 条件表达式
啥是条件, 就是正确就执行 ,错误就执行另外一个 。if else 叫做语句 ,我们不用这个语句,咱说的是运算符 。
一般形式:
表达式1?表达式2:表达式3
表达式一 :是用来判断条件的可以是 关系 可以是逻辑 ,一般可以用括号括起来。当然也可以不用,后面的 “?&&:” 是必须加上:一起构成条件运算符,缺一不可;
表达式2 表达式3 :他们可以是运算表达式 数值 赋值 函数等表达式…
总的来说一下就是:表达式1判断 ,如果正确 ,直接执行表达式2 ;如果错误 去执行 表达式3;
举个栗子把。
判断一个字母 是否为大写字母 是 写出小写 不是 不变 #include<stdio.h> int main(){ char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?ch+32:ch; printf("%c\n",ch); return 0; }
4.7 嵌套语句
if 语句的嵌套结构
前面咱们 遇到了 分支具体我也不举例了,就是那else if
这儿咱们用的是 if嵌套
if (…) 语句1;
if(…)语句2;
else 语句3;
else
if(…) 语句4;
else 语句5;
这是属于嵌套 if 后面 接着 if 不是else
注意:
1.这么多 if ,到底 那个 才是 谁的else ; else 与他最近的一个if 相遇;
比如 else 与语句4 那个 if结合 一般都是最近 的
自下而上 第二个 else 没有if 与之匹配 那么 他就属于 第一级别的 else
再上面 else 与if 语句2 匹配
最上面 的if自己成一个总的 if;
同理 咱们 看看 下面 这个例子: if () if() else if() else 下面四行都是内嵌的 总的第一级别 只有一个 那就是 第一行的 if()
2.他与 else if的区别 这个是属于第一级别 也有 第二级别的 第一级别 &第二级别 是不一样的;
而那个else 都是 属于一个级别 ()内也都是属于 同一类型 的判断 条件 ;
#include <stdio.h> int main(){ int a; scanf("%d",&a); if(a<0) printf("y=-1\n"); else if(a=0) printf("y=0\n"); else printf("y=1\n"); return 0; } 在这个例子中,使用的的else if 的分支;他们之间的关系是同级别的; 或者说是同一类的;都是a;
4.8 switch-case 分支语句
之前咱们说到 说循环 一般 只有两种结构 if
现在说switch
首先写一下 switch结构的形式:
!!
#include <stdio.h> int main(){ char a; scanf("%c",&a); switch(a) { case 'a' :printf("y=-1\n");break; case 'b':printf("y=0\n");break; default:break; }return 0; }
switch (表达式)
{case ‘整数型’: 语句1;break;
case ‘整数型’ : 语句2;break;
case ‘整数型’ : 语句3;break;
case ‘整数型’ : 语句4;break;
case ‘整数型’ : 语句5;break;
default :语句;
}
#include <stdio.h> int main(){ int a; scanf("%d",&a); switch(a>0) { case 1 :printf("y=-1\n");break; case 0 :printf("y=0\n");break; default:break; }return 0; } 如果是是数据是整数那么可以不用打单撇号;直接写
switch (表达式)
{case 整数型: 语句1;break;
case 整数型 : 语句2;break;
case 整数型 : 语句3;break;
case 整数型 : 语句4;break;
case 整数型 : 语句5;break;
default :语句;
}
什么是switch 首先他就是为了实现 多分支结构选择 ;
表达式里面 ,什么表达式都行. 只要给switch 返回 一个结果必须返回整数型 (因为case 后面 只能是整数型 整数或者字符 比如 case1 ;case ‘A’😉;
执行过程:
返回一个结果 他就在语句里面找 找到这个一样的 从这儿去执行语句;
这一句 下一句 下下句 ;直到遇到break ;跳出 switch ;跳到 这个大括号右边 那个位置
break 你想加就加 不加就往下执行;
也可以 好几个 case 用一个语句 。
4.9 例题
题目 :判断是否为润每年
#include <stdio.h> int main(){ int a; int i; for(i=0;i<=i+1;i++){ scanf("%d",&a); if((a%4==0&&a%100!=0)||(a%400==0)) printf("%d是闰年",a); else printf("%d不是闰年",a); } return 0; } 我制造了一个死循环; 这一题就是对运算符一个综合运用;首先看总体的意思, 怎么执行的呢;首先从左到右; 遇到括号先执行括号内部,a%4处理结果;然后是a%4==0处理结果1; 然后遇到&&知道要继续执行后面才能回头执行&&; 处理a%100 得出结果;处理a%100!=0得出结果1; 然后处理&&;得出结果加入为1; 然后遇到||,系统判断整个表达式结果为1;执行结束; 如果第一个结果不是1,继续执行;




