C语言if 语句
用 if 语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。
if 语句的三种形式
- 第一种形式为基本形式:if
if(表达式) 语句
其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。
- 第二种形式为: if-else
- 第二种形式为: if-else
if(表达式)
语句 1;
else
语句 2;
其语义是:如果表达式的值为真,则执行语句 1,否则执行语句 2 。
- 第三种形式为 if-else-if 形式
前二种形式的 if 语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-if 语句,其一般形式为:
if(表达式 1)
语句 1;
else if(表达式 2)
语句 2;
else if(表达式 3)
语句 3;
…
else if(表达式 m)
语句 m;
else
语句 n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个 if 语句之外继续执行程序。 如果所有的表达式均为假,则执行语句 n。然后继续执行后续程序。
if 语句的嵌套
当 if 语句中的执行语句又是 if 语句时,则构成了 if 语句嵌套的情形。
其一般形式可表示如下:
if(表达式)
if 语句;
或者为
if(表达式)
if 语句;
else
if 语句;
在嵌套内的 if 语句可能又是 if-else 型的,这将会出现多个 if 和多个 else 重叠的情
况,这时要特别注意 if 和 else 的配对问题。
例如:
if(表达式 1)
if(表达式 2)
语句 1;
else
语句 2;
其中的 else 究竟是与哪一个 if 配对呢?
应该理解为:
if(表达式 1)
if(表达式 2)
语句 1;
else
语句 2;
还是应理解为:
if(表达式 1)
if(表达式 2)
语句 1;
else
语句 2;
为了避免这种二义性,C语言规定,else 总是与它前面最近的 if 配对,因此对上述例子应按前一种情况理解。
main(){
int a,b;
printf("please input A,B: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b)
printf("A>B\n");
else
printf("A<B\n");
else printf("A=B\n");
}
条件运算符和条件表达式
如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。
由条件运算符组成条件表达式的一般形式为:
表达式 1? 表达式 2: 表达式 3
其求值规则为:如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 2 的值作为整个条件表达式的值。
条件表达式通常用于赋值语句之中。
例如条件语句:
if(a>b) max=a;
else max=b;
可用条件表达式写为
max=(a>b)?a:b;
使用条件表达式时,还应注意以下几点:
- 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。
因此
max=(a>b)?a:b
可以去掉括号而写为
max=a>b?a:b
- 条件运算符?和:是一对运算符,不能分开单独使用。
- 条件运算符的结合方向是自右至左。
例如:
a>b?a:c>d?c:d
应理解为
a>b?a:(c>d?c:d)
这也就是条件表达式嵌套的情形,即其中的表达式 3 又是一个条件表达式。
main(){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d\n",a>b?a:b); //表达式输出2者最大的数
}