《重生到现代之从零开始的C语言生活》—— 分支和循环

前言:因为C语言是结构化的程序设计语言,这里面的结构指的是顺序结构,选择结构,循环结构,在日常生活中,所见的事都能拆分成这几个结构或者这三种结构的组合。

if语句

if

if在英文中有如果的意思,在C语言中意思相似

if (表达式)
   要执行的语句

如果表达式成立(为真),则执行语句,如果不成立(为假),则不执行该语句,可以用简单的代码来实现一个分支结构

要强调的是,在C语言中,0为假,非0为真,意思是不管表达式不成立或者是表达式的真实结果真的为0,那么下面的语句都不会执行,有些人很难会把结果的不成立和准确的数字联系起来(我也这样)

else

elseif语句中同样重要,else在C语言中与if搭配起来就是

if(表达式)
  要执行的语句
else
  会怎么样

按照我们能理解的话来形容就是“如果表达式成立,那么执行语句,否则(表达式不成立)会怎么样”
举个栗子:

if(今天晚上交作业)
   不用挨打
else
   要挨打

这个代码的语法意思是如果今天晚上交作业就不会挨打,否则就会挨打

要注意的是,if和else都默认控制一条语句,如果想让他控制多条语句,那么就要用{ }来把想让他们控制的语句包住

if(今天晚上交作业)
  不用挨打
  有鸡腿吃
else
  要挨打

如果晚上交作业,在此代码的前提下只控制着不用挨打,不能控制吃鸡腿
但如果加了{}

if(今天晚上交作业)
 { 
 不用挨打
 有鸡腿吃
  }
else
  要挨打

这样,今天晚上交作业就能控制不用挨打和晚上吃鸡腿啦

嵌套

if…else…语句中可以在嵌套一个if…else…达到多重判断的效果
举个例子

if(今天晚上交作业)
   不用挨打
   {
   if(作业完成的好)
     有鸡腿
     }
else
   要挨打

代码在此语法结构的意思是,如果晚上交作业,那么就不用挨打,如果还写的好,那么就有鸡腿吃,如果晚上不叫作业,那么就要挨打

这时有人会问了:“为什么嵌套的if要在大括号里头啊”,这就牵扯到了另一个问题,悬空else问题,因为else总是和离他最近的if匹配,以免产生歧义,所以我们在嵌套时习惯打一个大括号来区分(当然如果嵌套的是一个完整的if…else…语句或者没有else又或者不加逻辑也正确那么可以选择不加,看自己的判断哦)

关系操作符

我们在写表达式时经常会写到两个变量的关系,这时我们就会用到关系操作符。关系操作符主要有:

  • >大于运算符
  • <小于运算符
  • >=大于等于运算符
  • <=小于等于运算符
  • ==相等运算符
  • !=不相等运算符

有趣的来了,前面我有讲过,C语言中0表示假,非零表示真(大多数为1),所以如果是这样1>2,那么他返回的值的值为1
所以如果连等3<4<5,那么他先判定3<4,判定结果为真,返回值1,随后判定1<5,所以连等的结果可能正确,但是过程可能和你想的不同。

如果想达到连等的效果,可以使用条件操作符

逻辑操作符

如果我们想达到1<x<3的效果,这时我们需要逻辑操作符,将他改成x>1 && x<3,&&就是条件操作符
条件操作符有

  • :逻辑取反运算符(改变单个表达式的真假)
  • &&:逻辑与运算符,可以理解为并且的意思,如果两侧都为真,那么判定为真
  • ||:逻辑或运算符,可以理解为或者的意思,如果两侧有一个为真,那么判断为真

条件操作符

条件操作符是一个三目操作符,形式为:(a)?(b):(c)计算逻辑是:如果a为真,那么计算b,如果a为假,计算c

条件操作符可以让你的代码看起来更简洁一点

比如我想知道a和b哪个值更大,我就可以

...
int c = a>b ? a : b;
printf("c")

短路

C语言的逻辑运算符是从左往右计算,如果的左边表达式符合运算条件,就不会再对右边的表达式求职,这种情况称为短路

假如说

if(a < 3|| a > 1

如果结果满足第一个条件,返回值为1,后面的结果不用判断,直接判断if为真(因为||两边有一个为真就代表表达式为真)

switch语句

Switch语句和if语句的作用相似,都用来实现分支结构,形式是这样:

switch (表达式)
  {
    case a:
    case b:
    default:c
    
    }

就是根据表达式的值来确定case的分支,如果表达式的值是a,那么执行第一个case,如果表达式的值是b,那么执行第二个case,如果都不符合,那么执行default

PS:1. case和后面的数字之间必须有空格。2. 在每一个case语句代码执行完成后,需要加上break才能跳出这个switch语句,如果不加上break呢?

break

如果某一个case语句后面没有break,那么代码就会继续往下执行,可能会执行其他case语句中的代码,直到遇到break或者代码运行结束
所以可以说break语句才是switch语句能够执行的灵魂,实现了能够在分支中控制代码运行的作用,当然break语句不是必须加的,根据实际情况自己做出判断

default

之前在将switch语句的形式中已经讲过,如果都不满足执行case的条件那么就会执行default,有点像if语句中的else
通常情况下我们把default放在所有case的最后但是如果不放到最后也是可以的,只要在switch语句中的任意位置就行

while语句

while语句是一种循环语句,while的语法结构和if的很相似,但是他们的区别是while语句会有循环的效果。

while(表达式)
      要执行的语句;

while的执行流程是:先直接判定表达式,表达式为假,循环直接结束,表达式不为零则执行循环语句,执行完后再判断是否进行下一次循环

for循环

for循环是三种循环中循环最多的,for循环的语法形式是:

for( a ; b ; c )

首先执行a初始化循环变量,接下来执行b的判定部分,如果判断为0则循环结束,如果判断不为零,如果判断不为零则执行循环语句,循环语句执行完后,再去执行c,调整循环变量,然后再去b判断,看是否执行下一次循环
在整个for循环的过程中,a只执行1次,剩下的就是在b和c之间循环
举个例子:

#include<stdio.h>
int main()
{
  int i = 0;
  for(i = 1;i <= 10; i++)
  {
    printf("i");
    return 0;
  }

代码运行顺序是:i = 1,判定i是否<=10,如果i<=10,那么执行printf(“i”),然后i++,然后继续判断i是否<=10,是否进行循环

do while循环

do while循环用的最少,形式也比较特殊

do
  语句
while(表达式)

他和while循环for循环有些不同,while循环for循环都是先判断,再决定是否进入循环语句,而do while循环是直接进入循环体,执行循环语句,然后在执行while循环

do while循环的优点是会直接进行一次语句,然后在执行while循环,所以在do while语句中循环体是至少执行一次
举个栗子:同样都是在屏幕上打印1-10

#include<stdio.h>
int main()
{
  int i = 1;
  do
  {
  printf("1");
  i+=1

   }
   while(i<=10;


    return 0;
 }

注意:目前我所接触的只要do while语句的while表达式后面带

continue

continue语句会直接跳过cintinue后面的语句,例如:

#include<stdio.h>
int main()
{
  int i = 1;
  do
  {
  if(i == 5)
    continue;
  printf("1");//如果continue运行,那么此行跳过
  i+=1//如果continue运行,那么此行跳过

   }
   while(i<=10;


    return 0;

今天的就讲完啦,如果有错误大家多多提意见,大家一起进步!!!

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值