
C语⾔是结构化的程序设计语⾔这⾥的结构指的是顺序结构、选择结构、循环结构。C语⾔是能够实现这三种结构的。我们可以使⽤ if 、 switch 实现分⽀结构使⽤ for 、 while 、 do while 实现循环结构。在学习分支和循环语句前我们首先来学习下关系运算符、判等运算符和逻辑运算符。一、逻辑表达式1.1关系运算符C语⾔⽤于⽐较的表达式称为“关系表达式”relationalexpression⾥⾯使⽤的运算符就称为“关系运算符”relational operator主要有下⾯4个。• ⼤于运算符• ⼩于运算符• ⼤于等于运算符• ⼩于等于运算符这些运算符在C语言的表达式中产生的结果只有两种是0假非0真。关系运算符可以用于比较整数和浮点数也允许比较混合类型的操作数。关系运算符的优先级低于算术运算符。例如ijk-1意思是ij(k-1)。关系运算符都是左结合的。注意这是个相等运算符这是赋值运算符不要混淆。为防止写成将变量放在等号的右边如果把 误写成 编译器就会报错。另外还需要注意的是i j k在C语言中是合法的但可能不是你所期望的含义。因为运算符是左结合的所以这个表达式等价于ijk,换句话说表达式首先检查i是否小于j然后用比较后产生的结果1或0来和k进行比较。这个表达式并不是测试j是否位于i和k之间正确的表达式应该是ijjk。以后写代码应注意此问题。1.2 判等运算符判等运算符有以下两个和关系运算符一样判等运算符也是左结合的并且产生0假非0真作为结果。• 相等运算符• ! 不相等运算符判等运算符的优先级低于关系运算符。1.3逻辑操作符 , || , 逻辑运算符提供逻辑判断功能⽤于构建更复杂的表达式主要有下⾯三个运算符。• ! 逻辑取反运算符改变单个表达式的真假。• 逻辑与运算符就是并且的意思两侧的表达式都为真则为真否则为假。• || 逻辑或运算符就是或者的意思两侧⾄少有⼀个表达式为真则为真否则为假。短路计算运算符和运算符||都对操作数进行“短路”计算。也就是说这些运算符首先计算出左操作数的值然后计算右操作数如果表达式的值可以仅由左操作数的值推导出来那么将不计算右操作数的值。如(i ! 0) (j / i 0)为了得到此表达式的值首先必须计算表达式i ! 0的值如果i不等于0那么需要计算表达式j / i 0的值从而确定整个表达式的值为0或非0。如果计算出i ! 0等于0时整个表达式肯定为假就不必计算后面表达式的值了。1.4条件操作符条件操作符也叫三⽬操作符需要接受三个操作数的形式如下条件操作符的计算逻辑是如果exp1为真exp2计算计算的结果是整个表达式的结果如果exp1为假exp3计算计算的结果是整个表达式的结果。二、选择语句2.1 if的语法形式判断表达式的值如果结果不为0则语句执行否则语句不执行。2.2 elseif表达式 语句1 else 语句2当表达式的值为非0的时候执行语句1当表达式的值为0的时候执行语句2。默认在 if 和 else 语句中默认都只控制⼀条语句。2.3 嵌套if在 if else 语句中 else 可以与另⼀个 if 语句连⽤构成多重判断。以上就是嵌套if语句的语法有了嵌套if语句就可以完成更多复杂逻辑的判断。2.4悬空else问题当if语句嵌套时应当心“悬空else”的问题。上面的else子句究竟属于哪一个if语句呢缩进格式暗示它属于最外层的if语句。然而C语言遵循的规则是else子句应该属于离它最近的且还未和其他else匹配的if语句。然而从规则看它是和内层的if匹配。在上例中else子句要和外层if匹配需在外层if表达式后加上{ 内层if}如下图所示2.5 switch语句在日常编程中常常需要把表达式和一系列值进行比较从中找出当前匹配值虽然级联式if可以达到目的但C语言还提供了switch作为if级联的替换。case 1: 这样用来表示程序跳转的标识称为标签标签的值必须为常量不可为变量程序跳转到该标签后会顺序执行其后的语句执行break语句后程序就跳出switch语句继续执行switch后面的语句。在switch后的表达式中的值无法匹配代码中的case语句的时候这时候要不要做处理要不就得在switch语句中加入default子句。在switch语句中case语句和default语句是没有顺序要求的只要你的顺序是满足实际需求就可以。三、循环控制语句C语言提供了do...while、while和for三种循环语句。3.1 do...while语句3.1.1 do while的语法do while循环是先直接进入循环体执行循环语句然后再执行while后的判断表达式表达式为非0就会进行下一次表达式为0则不再继续循环如下图执行流程。3.2 while语句while语句的格式while(表达式) 语句首先上来就是判断表达式表达式的值为0循环直接结束表达式的值不为0则执行语句语句执行完成后再继续判断是否进行下一次判断。3.3 for循环3.3.1语法形式for循环是三种循环中使用最多的for语句非常适合应用在使用“计数”变量的循环中其语法形式如for(声明或者表达式1;表达式2;表达式3)语句表达式1用于循环变量的初始化表达式2用于循环结束条件的判断表达式3用于循环变量的调整3.3.2for循环的执行流程首先执行表达式1初始化循环变量接下来就是执行表达式2的判断部分表达式2的结果0则循环结束表达式2的结果如果!0则执行循环语句循环语句执行完后再去执行表达式3调整循环变量然后再去表达式2的地方执行判断表达式2的结果是否为0决定循环是否继续。3.3.3 for语句的惯用法•从0向上加到n-1for(i0;in;i){ 语句;}•从1向上加到nfor(i1;in;i){语句;}•从n-1向下减到0for(in-1;i0;i--){语句;}•从n向下减到1for(in;i0;i--){语句;}四、break和continue语句在循环执行的过程中如果某些状况发生的时候需要提前终止循环这是非常常见的现象。C语言中提供了break和continue两个关键字就是应用到循环中的。• break的作用是用于永久的终止循环只要break被执行直接就会跳出循环继续往后执行。• continue的作用是跳过本次循环中continue后边的代码在for循环和while循环中有所差异的。4.1 while循环中的break和continue4.1.1break例子从例子打印可以看出当n等于3的时候循环在break的地方终止不再打印不再循环所以break的作用就是永久的终止循环只要break被执行break外的第一层循环就终止了。4.1.2 continue例子到这里我们就能分析出来continue可以帮助我们跳过某一次循环continue后边的代码直接到循环的判断部分进行下一次循环的判断如果调整是在continue后边的话可能会造成死循环。4.2 for循环中的break和continue4.2.1 break例子for其实和while循环中的break一样只要执行到了break循环就彻底终止。4.2.2 continue例子在for循环中continue的作用是跳过本次循环中continue后的代码直接去到循环的调整部分。