目录
一、关系运算符
在 C 语言中,关系运算符通常用来比较两个值之间的关系。关系运算符有:>、>=、<、<=、== 和 !=。分别对应数学上的:大于、大于等于、小于、小于等于、等于和不等于。
关系运算符的作用和数学上雷系,如:大于(>)用来判断左边的值是否大于右边,如果大于则返回真(通常为 1),否则返回假(0)。
在 C 语言中,关系表达式的值是真和假,真是非 0 值(通常为 1),假是 0。
代码如下:
5 > 3 为真,所以输出的值为 1,而 5 < 3 为假,所以输出的值为 0。其他关系运算符的用法也是一样的。
二、if 条件判断语句
if 语句中,若条件表达式为真,则执行紧跟在 if 后面的第一条语句;否则跳过该语句。在 C 语言中,非 0 为真,0 为假。
1. if 一般格式
if 语句的一般格式如下:
if (条件表达式)
语句 1
语句 2
如果条件表达式的值为真,那么执行语句 1,否则跳过语句 1,执行语句 2。如下代码:
上述代码中,表达式 5 > 3 的值为真,所以执行语句 if 后的语句打印 xixi。若改成 5 < 3,那么便不会打印 xixi。如下代码:
2. if else 格式
if else 语句的一般格式如下:
if (条件表达式)
语句 1
else
语句 2
语句 3
如果条件表达式的值为真,那么执行语句 1,然后再执行语句 3;否则执行语句 2,再执行语句 3。代码如下:
3. if else 嵌套格式
如下代码:
上述代码中,先判断 a > b,若 a > b 则输出 a > b;否则判断 a == b,若 a== b 则输出 a == b;否则输出 a < b。可以看到若第一个 if 被否定之后,就判断下一个 if,以此类推,直到所有的 if 都被否定,那么执行 else 语句。
而上述代码中 if 语句的实质其实就是下面的代码:
// 判断
if (a > b)
{
printf("a > b\n");
}
else
{
if (a == b)
{
printf("a == b\n");
}
else
{
printf("a < b\n");
}
}
只不过第一种形式的代码更加美观易懂。
4. if else 语句的注意事项
else 语句会和离他最近的 if 语句进行配对,所以不要写出如下的代码:
这里因为 else 语句是和离它最近的 if (2 > 3) 语句配对的,所以当表达式 2 > 3 的结果为假时,执行 else 语句。正确的写法是使用花括号将对应的语句括起。
三、条件操作符(?:)
条件操作符的使用格式为:表达式1 ? 表达式2 : 表达式 3
若表达式 1 的值为真,则结果为表达式 2 的值,否则为表达式 3 的值。
如下代码:
上述代码中的条件表达式的结果为变量 a 和变量 b 之间的较大值,若 a > b,则结果为 a,否则结果为 b。当然,条件运算符中的三个表达式都可以使用括号括起的复杂表达式。
四、逻辑操作符
在 C 语言中有三个逻辑操作符,逻辑与(&&)、逻辑或(||)和逻辑非(!)。
1. 逻辑与(&&)
逻辑与表达式的一般格式为:表达式 1 && 表达式 2
当左右两边的表达式均为真时,结果为真;否则为假。如下代码:
该操作符的计算顺序为从左到右,若表达式 1 为假,则结果为假。跳过表达式 2,不进行计算。
第一个逻辑与表达式由于 0 为假,则不计算 a++ 表达式,则 a 的值仍为 0。第二个逻辑与表达式由于 1 为真,计算表达式 a++,则 a 的值为 1。
2. 逻辑或(||)
逻辑或表达式的一般格式为:表达式 1 || 表达式 2
当左右两边的表达式均为假时,结果为假;否则结果为真。如下代码:
该操作符的计算顺序也是从左到右,若表达式 1 的值为真,则结果为真。跳过表达式 2,不进行计算。
第一个逻辑或表达式中左侧表达式为真,则不计算右侧表达式。第二个逻辑或表达式中左侧表达式为假,计算右侧表达式。
3. 逻辑非(!)
逻辑非表达式的一般格式为:!表达式
把当前表达式的结果取反,也就是真变假,假变真。如下代码:
由于逻辑非运算符的优先级较高,一般对后面的表达式加上括号。
五、switch 语句
在 C 语言中,switch 语句是一种多分支选择结构,当我们有多个选项时,就可以使用该结构,如下代码:
// switch 语句演示
printf("你最喜欢的水果是什么?\n");
printf("1)苹果 2)香蕉\n");
printf("3)橘子 4)火龙果\n");
// 输入
int input;
scanf("%d", &input);
// switch 判断
switch (input)
{
case 1 :
printf("Apple\n");
break;
case 2 :
printf("Binana\n");
break;
case 3 :
printf("Orange\n");
break;
case 4 :
printf("Pitaya\n");
break;
default:
printf("输入错误,选择结束\n");
}
上述代码中,该 switch 语句会根据圆括号中变量的值去寻找 case 后面对应的标签,然后执行相应的语句,然后 break 跳出 switch 语句,继续后面的代码。倘若没有对应的标签,那么执行 default。
如下,输入 1,打印 Apple。
输入 5,如下:
1. switch 语句的注意事项
(1)去掉 break
如果把里面的 break 语句都去掉,那么该 switch 语句会根据你选择的标签一直向下执行,直到该 switch 语句结束。如下:
(2)default 可以没有
在 switch 语句中,如果没有 default,且没有对应的标签,那么直接跳过该 switch 语句,执行下一条语句。如下:
(3)类型限定
switch 后圆括号中只能是整型表达式,case 后的标签只能是整形常量表达式。字符也是整型,也可以使用字符进行选择和标签。
六、while 循环
while 循环的一般格式如下:
while (条件判断)
{
循环体
}
如下代码打印 1 - 10:
在上述代码中,只要满足条件 i <= 10,那么就执行循环体,然后继续判断,再执行循环体,如此反复,直到不满足条件,也就是条件为假。其中,int i = 1 称为初始化循环变量,i <= 10 称为条件判断,++i 称为更新循环变量。剩余部分就是每次循环需要完成的任务。
while 循环的逻辑如下图所示:
七、for 循环
for 循环的逻辑和 while 循环一样,但是它的初始化循环变量、条件判断和更新循环变量三个步骤是放在一起的,而 while 循环是分开的。
如下代码,打印 1 - 10:
上述代码中,圆括号中的三个部分使用分号隔开,且初始化循环变量 i = 1,只在进入 for 循环后执行一次。后面就是判断条件、循环体和更新循环变量,然后再次判断条件,直到条件不满足,如此反复。
1. for 循环的变体
for 循环的变体实际上就是圆括号中三个表达式的省略,可以省略其中的任意个,但是两个分号需要保留。如下两个代码,还是打印 1 - 10:
、
前一个代码把初始化循环变量放在了 for 循环前面,而后一个代码把更新循环变量放在了循环体中。
**注意:**如果省略了判断条件,那么默认为真,也就是该循环一直执行,除非使用 break 语句跳出。如下代码:
八、do - while 循环
do - while 循环的逻辑与前面两个循环稍有差异,该循环先执行一遍循环体,然后再判断条件。如下代码,打印 1 - 10:
该循环的逻辑如下:
九、break 和 continue 语句
在 C 语言中,break和continue语句都用于控制循环的执行流程,但它们的作用有所不同。
1. break
break 语句用在循环中,可以跳出离它最近的当前循环,如下代码:
由于该 while 循环的判断条件恒为真,该循环本来该是一个死循环,但是里面有一条 if 条件语句,当 i 为 5 时,执行 break 跳出循环。
break 语句还可以用在前面所讲述的 switch 语句中,其作用是当执行完对应标签的语句时,跳出 switch 语句。
2. continue 语句
continue 语句只能在循环中使用,其作用是跳过本次循环体的剩余语句,进入下一次循环。如下代码:
可以看到上述代码中并没有打印 5,倘若没有 continue 语句,那么该代码的运行结果应该是打印 1 - 10。当 i 为 5 时,执行 continue 语句,跳过 printf(),进行下一次条件判断。
十、嵌套循环
嵌套循环就是一个循环里面包含着另一个循环,如果我们要打印 1 - 100,且 10 个数字为一行,那么就需要使用嵌套循环。外层循环控制行,内层循环控制列,如下代码:
外层循环 10 次,对应 10 行,内层循环也是 10 次,对应每行 10 列。变量 n 需要在外面定义,因为整个嵌套循环它都在变化,若在内部定义,则每次外层循环 n 都要被重新初始化。
十一、goto 语句
在 C 语言中使用 goto 语句可以转到代码的任何地方,它是一种无条件跳转语句,其使用格式为:
goto 标签名;
标签名: 语句;
倘若我们继续使用上面的打印 1 - 100 的代码,但是打印到 50 的时候就停止打印,这个时候就需要使用 goto 语句。如果使用 break 语句的话,需要使用两次,因为 break 语句只能跳出离它最近的当前循环。如下代码:
可以看到上述代码只打印 1 - 50,当 n 为 51 时,goto 语句跳转打印 Bye. 。倘若使用 break 需要判断两次,如下:
注意: 由于 goto 语句会破坏代码的逻辑性,一般不再代码中使用 goto 语句。但是从多个嵌套循环中跳出的时候,通常需要使用 goto 语句。