C语言零基础入门—10.选择结构程序设计-2
任务:
1- 逻辑表达式;
2- break与continue的区别;
1. 逻辑表达式
1.1 引入
我们在讲解逻辑表达式之前,需要系统的讲解一下C语言里边的运算符与表达式。
1.1.1 概念
- 运算符
我们在生活中常用的加,减,乘,除都被称之为运算符,但是在编程语言中,仅仅这些是肯定不够用的。所以又定义了一些其他的运算符,当运算符多了之后,为了区分方便,就给运算符进行了分类(~~先不说多少类,下边再说~~)。
总结:运算符就是对数据进行加工处理的操作符号。
- 表达式就是把数据用运算符结合起来形成的式子。
1.1.2 运算符的分类
C语言中的运算符有很多,非常多。C语言中,除了控制语句 ~~(if,switch等)~~ 和输入输出以外,其他的基本操作都可以作为运算符进行处理。
- 分类:暂且介绍几种常用的。
- 算术运算符:+,-,*,/,%,++,--
- 关系运算符:>,<,==,>=,<=,!=
- 赋值运算符:=,+=,-=,*=,/=
- 逻辑运算符:!,&&,||
- 等等。
1.2 运算符介绍
1.2.1 算术运算符
算术运算符就是我们最常见的数学中的计算符号而已,比如:加减乘除,用法与数学一致。
但是C语言中又增加了三个特殊的符号。
- 运算符 ++
这个被叫做 自增 符号,它的作用如下:
int a = 1;
a++; // a++ 就等同于 a=a+1 (就是加1)
//此时a的值就是2
- 运算符 --
叫做 自减 符号,就是 减1 - 运算符 %
他被叫做 求余 符号,它的作用就是求出两个数相除之后产生的余数。
:栗子1.
int a = 5;
int b = 2;
int c = a % b; //此时c的值是1
//因为5除2余数为1
:栗子2.
int a = 10;
int b = 3;
int c = a % b; //此时c的值是1
//因为10除3余数为1
:栗子3.
int a = 1;
int b = 3;
int c = a % b; //此时c的值是1
//因为1除3余数为1
第三个栗子可能会懵,大家想:1除3除不尽对吧,所以商为0,余数为1了。
大家记住一句话:小数除大数,余数为小数本身。
1.2.2 关系运算符
这个就是比较数据之间的大小关系的运算符号而已,所以就是,大于,小于,大于等于这些了,我们需要注意的就是他们在C语言中长什么样子就好了而已。
还有值得一提的就是以下两个了:
:第一个:==
这个符号的意思就是 等于。
这个与我们的习惯不同,我们日常生活中的等于是=,但是在C语言中符号=有其他用处了(被叫作 赋值)。
:第二个:!=
他的意思就是 不等于。
1.2.3 赋值运算符
其实赋值运算符我们在前边已经用过很多次了,只是没有给大家说明白而已,大家都当作理所当然了。
int a = 3; //这个意思就是:把3赋值给变量a
int b = a; //这个意思就是把变量a的值赋给变量b
我们需要区分的就是,赋值(=)与 等于(==) 是不同的,等于(==)是用来判断两个值是否相等的,赋值(=)是用来把一个值 赋给另一个变量。
这个里边还有一些其他形式的赋值语句:
a+=b; 等同于: a=a+b;
a-=b; 等同于: a=a-b;
a*=b; 等同于: a=a*b;
a/=b; 等同于: a=a/b;
还有一些其他类似的表达式,都可以这样子用,大家自己根据需要使用。
1.2.4 逻辑运算符
终于讲到我们的重头戏了,我们说到逻辑运算符,我们需要记住一点就可以了,逻辑的值只有两种情况:逻辑真,逻辑假。
逻辑真的意思就是得到的结果是true,逻辑假的意思就是得到的结果是false。
:第一个:&& (逻辑与)
他的作用就是&&表达式前后都成立(都为真)的时候才返回true
栗子:
if(a==3 && b==4){
printf("成立");
}
解读:上述程序的意思就是,只有当a的值是3,“并且”b的值是4的时候,才输出成立
拓展:C语言内部会先判断&&表达式前边的式子是否成立,也就是说,当a的值不是3的时候,后边就不会在判断了,而是直接返回false。
:第二个:|| (逻辑或)
(按住shift键,再按enter键上边那个键就是了)
他的作用就是||表达式前后只要有一个成立(只要有一个为真)的时候就返回true
栗子:
if(a==3 || b==4){
printf("成立");
}else{
printf("不成立");
}
解读:上述程序的意思就是,只要 a的值是3,“或者”b的值是4的时候,就输出。
执行结果:
1. 当a的值是3,b的值随意: 输出 成立。
2. 当a的值随意,b的值是4: 输出 成立。
3. 当a的值不是3,b的值不是4: 输出 不成立。
拓展:C语言内部会判断||表达式前后的所有值,才可以得到最终结果。
:第三个:!(逻辑非)
他的作用就是把true变成false,把false变成true。
栗子:
if( !(a==3) ){
printf("成立");
}
解读:上述程序的意思就是,只要 a的值 不是3 才输出成立。
1.3 不得不提的优先级
这里说的优先级也就是数学中常用的先算那一部分的事情:
:栗子:
a+b*c/d-e // 这个式子的优先级就是先算 b*c,再算除法,再算加法,再算减法。
在我们的C语言中,也有优先级,但是我现在说再多,大家也记不住,所以记住一句话:当你写出一个比较复杂的计算式的时候,用括号与空格来控制谁与谁先计算。
:栗子:
:a+b*c/d-e //这个看着不是很明了
:a + (b*c)/d - e //适当的使用空格,括号,不就完了嘛。
2. break与continue
这两个的作用是让流程控制语句终止的,但是终止的内容是不一样的。
break : 是结束最接近break的一个流程控制语句。
continue : 是结束循环控制语句 中的某一次。
2.1 程序示例
2.1.1没有终止语句的程序
在演示break与continue之前我们先演示下不具有终止语句的程序。
#include<stdio.h>
void main(){
char score;
printf("请输入A,B,C,D中的某一个值:");
scanf("%c",&score);
switch(score){
case 'A' : printf("你输出的内容是-1- %c n",score);
case 'B' : printf("你输出的内容是-2- %c n",score);
case 'C' : printf("你输出的内容是-3- %c n",score);
case 'D' : printf("你输出的内容是-4- %c n",score);
default: printf("输入有误,程序结束!n");
}
}
这一段程序就是把break去掉之后,的演示。
- 结果展示:
当我们输入某一个等级之后,他会把从匹配等级处开始的 下面所有等级的语句都执行一次。这是switch语句的一个特性。所以必须要有终止语句。
2.1.2 break
#include<stdio.h>
void main(){
char score;
printf("请输入A,B,C,D中的某一个值:");
scanf("%c",&score);
switch(score){
case 'A' : printf("你输出的内容是-1- %c n",score);
break;
case 'B' : printf("你输出的内容是-2- %c n",score);
break;
case 'C' : printf("你输出的内容是-3- %c n",score);
break;
case 'D' : printf("你输出的内容是-4- %c n",score);
break;
default: printf("输入有误,程序结束!n");
}
}
- 运行结果:
当我们输入每一个等级之后,只要判断到有这个等级的时候,就会终止往下继续判断。这个终止的实现就是每一个case后面的break起到的作用。
break : 是结束最接近break的一个流程控制语句。 意思就是:当执行到break的时候,就结束掉距离break最近的一个流程控制语句,往break上面去找就是switch了,所以就把switch结束掉。
2.1.3 continue
这个我就不举程序的例子了,因为我们还没讲到循环。
continue : 是结束一个循环控制语句 中的某一次。 意思就是:我们循环输出的时候,其中有一次的结果我们不想输出,就可以使用continue不让他输出,但是不影响循环中的其他输出。(~~不像break会结束掉整个循环程序~~)
3. 结束
至此,选择程序设计就讲完了,布置一个作业。
- 作业:编写程序,当我们输入某个年份的时候,会得出这个年份是闰年还是平年。
公众号:小小猿笔记