1.什么是语句
C语句可分为以下五类:
-
表达式语句
-
函数调用语句
-
控制语句
-
复合语句
-
空语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
-
条件判断语句也叫分支语句:if语句、switch语句;
-
循环执行语句:do while语句、while语句、for语句;
-
转向语句:break语句、goto语句、continue语句、return语句。
2. 分支语句(选择结构)
C语言选择结构也称分支结构,是一种根据判断条件的成立与否来确定程序执行方向的一种程序设计结构。其中,判断条件中会涉及到关系运算符和逻辑运算符。
2.1 C语言关系运算符及其用法
关系运算实际上就是比较运算,类似于数学当中比较数字大小的运算。C语言提供了 6 种关系运算符(relational operator),如下表所示。
关系运算符 | 描述 | 示例(关系表达式) |
---|---|---|
== | 等于 | a+b == c |
> | 大于 | a+10 > c |
< | 小于 | b < a+10 |
>= | 大于等于 | c >= b |
<= | 小于等于 | a <= c |
!= | 不等于 | a != b |
关系运算符的左右两边可以是变量、数值或算术表达式,用关系运算符连接而成的表达式称为关系表达式。在含有算术运算符的关系表达式中,算术运算符的优先级高于关系运算符。
关系表达式的运算结果是一个逻辑值:“真”或“假”,在 C语言中用数值 1 表示“真”,用数值 0 表示“假”。因而,每当 C语言对关系表达式进行运算时,总是产生结果数值 1 或 0。下面的语句把 1 赋值给变量 a,把 0 赋值给变量 b:
a = (8<10); //(8<10)为“真”,其结果值为 1,因而变量 a 被赋值 1
b = (3==4); //(3==4)为“假”,其结果值为 0,因而变量 b 被赋值 0
下图展示了用不同的算法描述方法对选择结构程序设计流程进行算法描述。
2.2 C语言逻辑运算符及其用法
关系运算符只是测试左右两个值之间的关系(把它们相互比较),逻辑运算符(logical operator)则是把多个关系表达式组合起来,判断最终的结果是“真”还是“假”。因而,有时候逻辑运算符又称为复合关系运算符(compound relation operator)。C语言提供了 3 种逻辑运算符,如下表 所示。
运算符 | 含义 | 说明 | 示例 |
---|---|---|---|
&& | 逻辑与 | 运算符两边的表达式都成立(真),返回 1;只要有一个不成立(假),返回 0 | (23)&&(33) 的值为 0 (2<3)&&(3==3) 的值为 1 |
|| | 逻辑或 | 运算符两边的表达式只要有一个成立,返回 1;只有两边的表达式都不成立时,返回 0 | (23)||(33) 的值为 1 (2<1)||(2==3) 的值为 0 |
! | 逻辑非 | 运算符后边的表达式成立(真),返回 0,否则返回 1 | !(2==3) 的值为 1 !(2<3) 的值为 0 |
对于逻辑运算符优先级的问题,逻辑非!
的优先级最高,不仅优先于关系运算符,甚至优先于算术运算符,其次是逻辑与&&
,逻辑或||
优先级最低,而逻辑与&&
和逻辑或||
的优先级低于关系运算符。当一个判断条件表达式中同时出现关系运算符、逻辑运算符、算术运算符时,其运算优先关系如下:
( ) → 函数、! → *、/、% → +、- → <、>、!=、<=、>= → &&、||
2.3 C语言if else语句的用法
条件语句就是根据判断条件的成立与否(“真”或“假”),来决定接下来该执行什么样的操作。其一般格式如下:
condition 外面的括号是必需的。condition 是用关系运算符和逻辑运算符连接而成的关系判断表达式,其结果是 1(“真”)或 0(“假”),分别表示条件成立或不成立。
语句块 A 或 B 是条件语句的主体部分。如果语句块中包含多条语句,那么其外面必须用花括号{ }
括起来,而且每条语句末尾必须用分号;
结束。但如果语句块中只有一条语句,则花括号可以不写,但是为了方便以后增加语句,建议只有一条语句时也写上花括号。
2.3.1 只使用if语句
条件语句还有另一种比较简化的形式,就是当判断条件成立时执行某些操作,不成立时则结束该条件语句的执行:
- 无论条件语句的执行结果如何,程序总是按照顺序执行的原则,在条件语句结束以后,继续顺序执行跟在它后面的语句。
2.3.2 if else语句的嵌套
if-else 语句的嵌套就是在一个 if-else 语句{ }
括号内的语句块中又包含了另外一个 if-else 语句。其一般格式如下:
2.4 C语言switch case语句的用法
在C语言中,应用条件语句 if-else 可以很方便地使程序实现两个分支,但是如果出现多个分支的情况,虽然可以使用 if-else 语句的嵌套,但是程序会显得比较复杂,不易阅读。
为了实现多个条件分支的选择,C语言提供了 switch case 开关语句。
其一般格式如下:
switch(表达式) //表达式的值只能在下面的 case 值表中出现一次
{
case 值 1:语句序列 1;break; //break 语句的功能是跳出 switch 语句,执行其后面的语句
case 值 2:语句序列 2;break;
case 值 3:语句序列 3;
case 值 4:语句序列 4; //如果没有 break 语句,则会自动继续执行后续 case 的语句序列
……
case 值 n:语句序列 n;break;
default:语句序列n+1; //default 部分是可选项
}
运行 switch 开关语句时,根据表达式的求值结果,选取{ }
括号中的一个 case 分支开始执行。当表达式的值等于值 i 时,就执行 case 值 i 后面的语句序列 i。如果表达式的值没有出现在任何 case 后面,则执行 default 后面的语句序列 n+1。如果没有 default 部分,则结束 switch 语句,执行其后面的语句。
case 后面的值 i 的类型必须和表达式结果值的类型一致。
多个 case 可以共用一组语句序列,即某些 case 的语句序列可为空。比如:
switch(表达式)
{
case 值 1:
case 值 2:
case 值 3:语句序列 3;
}
上述代码中,当表达式的值为值 1 或值 2 或值 3 时,执行相同的语句序列 3。
3. C语言三种循环结构
C语言中的循环控制结构有 3 种基本形式:
-
while 循环语句:当条件成立时,重复操作,否则退出循环
-
do-while 循环语句:重复操作,直到条件不成立时退出循环
-
for 循环语句:用循环变量准确控制重复操作的次数
3.1 while 循环
在C语言中,while 是一种基本的循环,do while 是它的一种变体,有时候两者可以互换。
while 语句适用于“当条件成立时重复操作”的循环控制结构,因而常被称作当型循环。其一般格式如下:
while (condition)
{
循环体; //一条或多条 C 语句
}
condition 就是一个关系判断表达式,它与 if 语句中的 condition 一样,其外面的括号是必需的。循环体是 while 语句的主体部分,是需要重复操作的一条或多条 C 语句,它包含多条语句时,其外侧必须加上花括号{ }
。
如果关系判断表达式 condition 的结果为“真”,就执行循环体里面的语句,之后再次判断 condition,如果结果还是为“真”,则再次执行循环体里面的语句,如此重复操作,直到 condition 的结果为“假”时,不再执行循环体里面的语句,而退出 while 语句,继续执行后续语句。
在循环体内必须存在一条语句,执行后能够改变 condition 中的变量的值,从而使 condition 的判断结果发生变化,出现结果为“假”的情况,终止循环。否则这个循环将会一直重复执行下去,出现“死循环”。
while 语句和 if 语句都是根据关系判断表达式 condition 的判断结果来决定是否执行其主体部分的语句块。两者的不同之处在于,当 condition 为“真”时,if 语句中的主体部分语句块只执行一次,而 while 语句中的循环体会重复执行多次,直到 condition 为“假”才终止循环(见下图)。
另外,while 语句和 if 语句一样,不要在其主体部分外的花括号{ }
后面加上分号。分号只出现在 while 语句循环体内的语句后面。
3.1.1 while语句中的break和continue
break介绍
//break 代码实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
这里代码输出的结果是什么?(1 2 3 4 )
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3 4 6 7 8 9 10
总结:
break在while循环中的作用:
-
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
continue介绍