【C语言】分支语句与循环语句一些需要注意的点

1.有些场景是必须要加大括号的,不然默认一个if只是管理后面一条语句

【C语言】分支语句与循环语句一些需要注意的点_第1张图片

2.这段代码的执行结果是什么?

【C语言】分支语句与循环语句一些需要注意的点_第2张图片

考查悬空else

else会与离他最近的那个if结合构成一个整体,而执行这个整体的条件显然是a为1,而此处a为0并不会进入if执行,因此什么也不会打印。

3.在写判断语句的时候应该写两个等号,一个等号的话就是赋值,比如if(a==5)是判断而if(a=5)是赋值,赋值这个表达式最终结果是5,为真,因此会进入到if语句中执行。而这种写法恰好编译器还能跑得过去,就有时候很难发现,因此我们在写判断语句的时候就可以写成if(5==a),要习惯把常量放在左边,这样的好处是如果我们少写了一个等号,编译器是跑不过去的,会给我们报错。

4.多分支的语句可以用一个if和多个else if和一个else组成,如果分支特别多,还可以用switch语句

【C语言】分支语句与循环语句一些需要注意的点_第3张图片

switch里面一定是整型表达式,比如下面的day,定义的时候就不能是float day,但是可以是char day,因为char也是整型

【C语言】分支语句与循环语句一些需要注意的点_第4张图片

case后面要跟一个整形常数,不能是变量,比如可以是case 1: case 2:但是不能是case n:,即使前面有int n=1也不行

注意:如果写成这样

【C语言】分支语句与循环语句一些需要注意的点_第5张图片

发现输入1会全打印,输入2会从第二个开始打印,这是因为缺少了break,也就说case几只是决定了入口,break决定了出口,下面是正确写法

【C语言】分支语句与循环语句一些需要注意的点_第6张图片

要是想让多个分支都打印一样的内容,可以写成这样

【C语言】分支语句与循环语句一些需要注意的点_第7张图片

输入1~5都会打印weekday,输入6或7都会打印weekend

如果所有case都不匹配,还可以走default通道,格式是default冒号,如图

【C语言】分支语句与循环语句一些需要注意的点_第8张图片

break的功能是跳出他所在的这个循环,不仅仅可以用于switch语句,还可以用于while,for循环,break一次只能跳出一层循环。

5.continue的作用

【C语言】分支语句与循环语句一些需要注意的点_第9张图片

continue的作用是跳过本次循环后面的代码,直接转向循环的判断部分。比如上面这个代码,n刚上来时是1,不会执行if里面的语句也就是continue,而是会直接执行continue下面的语句,从而打印出了1,2,3,4,但是当n等于5的时候,满足if语句的判断条件,因此执行了continue,从而直接跳过本次循环continue后面的代码直接跳转到while的判断条件去,而由于跳过了后面的n++,此时n的值仍然是5,因此又会执行continue而导致程序陷入死循环。

【C语言】分支语句与循环语句一些需要注意的点_第10张图片

如果把n++放到前面,当n=5的时候会跳过continue后面的代码,最开始打印的是2,而当n等于10的时候n先++变成11,会打印一个11,因此最终运行结果是2,3,4,6,7,8,9,10,11。

for循环

1.for循环有三要素,初始化语句,判断语句,调整语句,中间用分号隔开,默认只能控制一条语句。如图

【C语言】分支语句与循环语句一些需要注意的点_第11张图片

这段代码的打印结果是打印1~10的数字和一个hehe,并不会打印十个hehe

2.对于for循环的两点建议:一是不要在循环体内部修改变量i,第二是尽量采取前闭后开的写法,比如

for(int i=0;i

3.for循环的语法如下

【C语言】分支语句与循环语句一些需要注意的点_第12张图片

三个表达式由两个分号隔开,三个表达式在语法上都允许省略,也允许多个变量,如图是一个多变量的例子,只要是表达式即可

再看省略表达式的

【C语言】分支语句与循环语句一些需要注意的点_第13张图片

这个代码的结果是死循环打印hehe,因为对于for循环来说规定如果判断部分什么也不写(空语句),编译器默认为真,会进去到循环去,初始化和判断语句为空语句的话就什么也没做,因此打印结果为死循环。

虽然语法支持空语句,但是建议不要随便省略,举个例子

【C语言】分支语句与循环语句一些需要注意的点_第14张图片

如果我们不省略for循环里面的i=0和j=0,那么将会打印16个hehe,但是当我们省略之后,虽然i和j也在前面定义的时候也是0,却只打印了四个hehe,这个错误在于整个循环只对j进行了一次初始化。因为刚上来i=0,j=0,经过一轮循环之后i变成1,j变成4,打印了四个hehe,然后开始第二轮循环,这时候i是1,j仍然是4,压根不会进入内部嵌套的循环去,第三轮和第四轮同理,因此最终只有第一轮打印了四个hehe。

练习

【C语言】分支语句与循环语句一些需要注意的点_第15张图片

答案是0次,因为for循环的判断部分是一个等号,一个等号是赋值的意思,把0赋给k,最后结果是0(假),因此不会进入到for循环里面去。

注:int a = b = 5;这个代码最终会把a初始化为5,逻辑是从右往左先把5赋值给b,(这样b=5这个表达式的结果就是5),然后把(b=5)这个表达式的值也就是5赋给a,因此a被初始化成了5.因此k=0这个表达式的值就是0,为假,因此不会进入到for循环内。

变量的左值和右值

例如 int a=0; a=20; int b=a; int a=0会在内存中申请一块空间来存放变量a,a=20会把20放到这块空间里面,这时候用的就是左值,int b=a是拿空间里的20赋给b,这时候用的就是a的右值,也即左值就是空间,右值就是空间的内容。

do..while()循环

【C语言】分支语句与循环语句一些需要注意的点_第16张图片

这个循环的特点是至少会执行一次循环语句,因为他是不管三七二十一上来就先干一次

break和continue在do..while循环中的作用

【C语言】分支语句与循环语句一些需要注意的点_第17张图片

打印结果是1 2 3 4,因为i为5的时候直接break跳出循环了

【C语言】分支语句与循环语句一些需要注意的点_第18张图片

打印结果为1 2 3 4之后是死循环,因为i为5的时候跳过了本次循环后面的代码,此时i并没有改变,仍然是5,因此陷入死循环。

练习

1.计算n的阶乘(不考虑溢出)

【C语言】分支语句与循环语句一些需要注意的点_第19张图片

注意初始化的时候是0还是1即可

计算1!+2!+.....n!

【C语言】分支语句与循环语句一些需要注意的点_第20张图片

这个代码的效率是比较低的,因为在计算3的阶乘的时候其实只要用2的阶乘在乘3即可,而这个代码是又计算了一遍2的阶乘,简化后的代码如下

【C语言】分支语句与循环语句一些需要注意的点_第21张图片

练习

编写代码,演示多个字符从两端移动,向中间汇聚。

【C语言】分支语句与循环语句一些需要注意的点_第22张图片

求right的时候用的是strlen,它用于计算字符串的长度,计算结果不包括字符串的结束标志\0,而在定义字符串的时候是用char类型字符数组来定义的,要求right也可以用操作符sizeof(arr1)/sizeof(arr1[0])-2来计算,因为sizeof计算结果中包括了\0。

编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。

【C语言】分支语句与循环语句一些需要注意的点_第23张图片

要注意的是比较两个字符串是否相等不能写成password=="123456",应该使用库函数strcmp(),如果两个字符串相等,strcmp()返回值为0,如果前者比后者大,strcmp()返回值大于零,前者比后者小,strcmp()返回值小于0。具体原理后面再介绍。

猜数字游戏

这个代码的难点在于如何去生成一个随机的数字,可以利用库函数rand(),格式就是rand(),啥参数也不用传,但是这样有一个问题就是每次运行生成的数都是随机的,但是再次运行的话生成的数还是这几个数,所以不行,究其原因是因为在使用rand()之前应该先用srand,srand是一个初始化随机数的生成器,rand函数的语法规定在调用rand之前必须要调用srand,格式是srand(unsigned int),如果我们传相同的数,就生成相同的数,因此我们要传一个变化的数,而电脑上的时间是一直在变化的,因此可以利用库函数time。

插入一个知识点叫时间戳,时间戳就是一个数字,这个数字可以转化成某个时间。time函数的功能就是返回当前时刻对应的时间戳。其头文件为time.h,格式如图

【C语言】分支语句与循环语句一些需要注意的点_第24张图片

可以看到参数类型和返回类型都是time_t类型的,这个其实就是long long 类型的重新起了一个名字而已,参数类型无所谓,直接传空指针,返回值是我们需要的,他的类型也是time_t,返回值是一个变化的值,如果写成srand(time(NULL))又出现了问题就是srand需要的是一个unsigned int类型的变量, 我们直接强制类型转换就行了。这个srand函数在整个主函数中只需要调用一次即可,不需要写到循环里。

【C语言】分支语句与循环语句一些需要注意的点_第25张图片

你可能感兴趣的:(c语言,算法,开发语言,网络,c++)