第三章
第三章主要学习控制语句,如图所示
3.1 if语句的分析
运用if语句前,要先了解if语句所包含的C语言运算符,即
if语句的标准格式为
注意:
if语句的小括号里面属于判断语句,只有小括号里面的判断条件成立,才能执行大括号里面的程序。
同时在小括号的判断语句中,只有双等号(==)才具有判断功能,单等号没有。
if语句小括号里面的判断语句的本质就是,机器识别1,判断为真,接着执行大括号里面的语句。机器识别为0,判断为假,不执行大括号里面的内容。
If语句的案例:
现有两个数,用代数值的方法由小到大输出,(在C语言当中,赋值运算永远是右边的变量值赋予左边的变量)
现有三个数,用代数值的方法由小到大输出
由此可见,当if语句中出现两个判断条件时,要用上C语言的逻辑运算符,下面接着学习逻辑运算符
3.2 逻辑运算符
这节比较简单,直接上案例实操一下
这个案例对逻辑运算符进行了运用,并且其中包含了一个小知识点,就是当return -1在程序中段出现时,说明在判断为真的情况下,程序会执行return -1,接着程序直接结束,不在执行后续的代码。(Return -1)对应代码的主函数int main。代表直接结束程序。
而return 0是函数的返回值,函数中要写明return 0,表示返回。因为函数(除void)在遇到return时才能返回。一定要有,代表程序结束。
用途:return 0用来告知程序的结束。
必须有的地方:如果函数类型是int,则必须输入return 0。若函数类型是void,则可以不输入return 0。
3.3if…else语句
一、if…else语句的基本格式与简单运用
if…else语句的基本格式为
例题实操:
代码如图所示的,需要注意的是,这里面的else if(){}并不属于if else的嵌套运用,这里的else if与第一个if是同级别的,在判断data的数值大小的时候,if和else if的小括号内语句会进行同时判断。
二、if…else语句的嵌套
直接上案例
3.4 switch…case语句
如图所示,这是语句的基本格式
案例:
代码如图所示
在这里,我们发现,多个case可以归为一类,共同输出一个语句。
练习题
1.
可以用if…else语句也可以用switch…case语句
代码如下:
这里的代码除了if…else语句外,我还对distance进行了强制转换为了浮点型数据,还对输出形式进行%-5.2f的运用。5的意思是输出的小数点前的数字的最大宽度,小于这个宽度的数字就补空格,大于将按其实际长度输出
2.
代码如下:
这里有个小知识点,就是关于算数运算符优先级的问题
这里有个截图(这个图片是截自网上大佬的)
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
3.5 do…while循环语句
do…while循环语句的基本格式
While循环语句的基本格式
我们可以看到这两种形式的本质是相同的,while小括号内的逻辑数为1才能说明括号内的条件成立。
其中,我get到一个新知识点,就是times++,下面我将用i++和++i来分析学习这方面内容
C语言中++i和i++是有区别的!快速记忆的话就是
1、i++是先输出i的值,再运算i=i+1;
2、++i是先运算i=i+1,再输出i的值;
i++和++i都是c语言里的自增,但是它们自增的顺序不同。
性能区别:在大量数据的时候++i的性能要比i++性能要好。i++由于是需要在使用当前值之后再+1,所以会需要一个临时的变量来进行转存。而++i则是直接进行+1的操作,省去了对内存的操作环节,所以能够提高性能。
学习案例
3.6 for循环语句
for循环语句的基本格式
由此可见,for循环语句的本质是和while循环语句的本质是一样的,两者可以直接互换,
除此之外,for循环语句还有几个变式(以上诉代码为例)
- for(;data<10;data++)
- for(;data<10;)
- for(data=0;data<10;)
- for(;;)这个变式代表的是无限死循环,等同于while循环语句里的while(1)。
这说明for循环语句里面的表达式1和表达式2可以不写在括号内,但在整个代码里必须有。不然循环无法实现。
在表达式1中可以对数据进行类型定义,但这步操作,在有些编码器中不能实现。
3.7 运用break语句和continue语句
一、break语句
break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。即满足条件时便跳出循环。
例:
代码如下:
拓展一下:for语句的嵌套
代码
二、Continue语句
continue 语句只结束本次循环,而不是终止整个循环。
continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。
例子:
取余符号在C语言中采用的是%,例如(10%3)代表的含义是求10除于3后的余数,余数不为零,代表不能整除。
代码如下:
由本个例子可知,在C语言for循环语句中,当执行到continue语句时不是直接去执行表达式2进行判断,而是先执行表达式3。
除第一次执行表达式1之外,之后的循序是:表达式2->for语句块(遇到continue后跳出本次循环)->表达式3 ->表达式2->for语句块(遇到continue后跳出本次循环)->表达式3 ->表达式2……。
continue语句和break语句的区别是:
continue语句只结束本次循环,而不终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
注意
1、break可以在if-else中使用直接跳出当前循环。
2、在多层循环中, 一个break语句只向外跳一层。
continue语句的作用是跳过循环体中剩余的语句并到循环末尾而强行执行下一次循环。
continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。
本章自我完成作业:
1.输入两个正整数m和n,求其最大公约数和最小公倍数?
最大公约数求法:
辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
最小公倍数求法:
由于两个数的乘积等于最小公倍数乘于最大公约数,所以要求最小公倍数,可以先求最大公约数。
2.水仙花数
所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。