选择执行(判断语句)
C语言中,选择执行语句有两种:if和switch
主要讲讲if语句
if最简单的用法:
格式:if(表达式)
语句;
功能:表达式为真,则执行语句;表达式为假,则跳过语句执行程序的下面的代码。
---------------------------------------
if的控制范围:
1、 if(表达式)
语句A;//属于If控制
语句B;//不属于if控制
此时if只能控制紧临的第一种语句执行或不执行;
2、 if(表达式)
{
语句A;
语句B;
}
此时if可以控制{}内的所有的语句;
在一般情况下,为了代码的整齐、易懂,就算只有一条语句要控制,也会用{}括起来。
---------------------------------------
if…else…的用法:
if(表达式)
{语句A;}
else
{语句B;}
如果表达式为真,则执行A语句,否则执行B语句;
else的控制范围和if一样。
---------------------------------------
if…else if…else…的用法:
if(表达式1)
{语句A;}
else if(表达式2)
{语句B;}
else
{语句C;}
表达式1为真,则执行语句A,否则,表达式2为真,则执行语句B,如果表达式1、2都为假,则执行语句C;
---------------------------------------
if常见问题解析:
1. 判断区间数
判断区间数时,不能写成 i < xxx < i ,因为编译器执行顺序是先比较 xxx < i 的情况,把得到的结果再来和后面的 xxx 比较,而 xxx < i 的结果是逻辑值,不是0就是1,是固定的,没法再和后面的 xxx 比较,应该写成(i > xxx && i < xxx);
2. 两个变量值互换
互换两个变量的值,必须要使用到第三人变量,这个变量一般申明为t,即temporary(临时的);
int i = 5;
int j = 10;
int t = 0;
t = i;
i = j;
j = t;
3. 数值排序,如:把一列数从大到小排列
这个要用到冒泡算法的思想,拿第一个数与后面的数相比较
当第一个数大的时候,什么都不变,继续与下一个数比较,
当第一个数小的时候,把第一个数与较大的那个数互换,
以此类推,全部比较完后,第一个数就是最大的数,
再依次把第二大的、第三大的…排序出来;
4. 关于空语句
C语言中,分号;表示一段语句的结束,常常有人误把if的格式写成:“if(表达式);”,这样相当于:
if(表达式)
空语句;
这样从语法上说是没有错误的,但是逻辑上有错误,因为If条件为真是,执行一段空语句,也就是什么都不执行;
5. 关于if…else if…else…语句条件都成立时的情况
if(表达式1)
{语句A;}
else if(表达式2)
{语句B;}
else
{语句C;}
对于这段if语句,即便表达式1、2、3都成立,也只会执行语句A,执行完后,跳转到if语句外的程序代码;
6. 关于if范围使用错误
if(表达式1)
语句A;
语句B;
else if(表达式2)
语句C;
else
语句D;
首先,因为if的控制范围,语句B把整个if语句都分隔开,成为三个语句,在语法上,没有哪个语句是else开头;
7. 关于else_1
if(表达式1)
语句A;
else if(表达式2)
语句B;
else(表达式3)
语句C;
这样写是不对的,因为else后面要跟一个完整的语句,而没有哪一个语句是“(表达式)语句C”这样的
8. 关于else_2
if(表达式1)
语句A;
else if(表达式2)
语句B;
else if(表达式3)
语句C;
这样写,语法上是对的,但是逻辑上有缺陷,因为不能包含所有的情况。