Menu Close

C语言分支语句

1.分支结构

C语言分支语句
C语言分支语句

IF ELSE语句称之为分支语句, if 和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:

if(判断条件){
    语句块1
}else{
    语句块2
}

如果判断条件成立,那么执行语句块1,否则执行语句块2 。

如果判断条件成立,那么执行语句块1,否则执行语句块2 ,其执行过程如上图所示。

分支结构的条件判断需要学习关系运算符和逻辑运算符。

2.逻辑表达式

包括 if 语句在内的某些 C 语句(while,for 等)都必须测试表达式的值是“真”还是“假”。

许多编程语言中,类似 i < j 这样的表达式都具有特殊的“布尔”类型或者“逻辑”类型(C++ 的 bool 和 Java 的 boolean)。这样的类型只有两个值,即真(true)和假(false)。

而在 C 语言中,诸如 i < j 这样的比较会产生整数:0(假)1(真)。

但是,非 0 的其他数也可以表示 真。在今天看来,这是 C 语言设计的弊端,它将布尔类型与整型混为一谈,让我们在变成过程中可能稍不小心就会给自己挖一个坑。

2.1 关系运算符

C 语言的关系运算符(relational operator)和数学上的 >,<,≤,≥相对应,只是用在 C 语言的表达式中时产生的结果是 0 或 1 。

例如,表达式 10 < 11 的值是 1,11 < 10 的值是 0 。

关系运算符也可以用于比较整数和浮点数,也允许比较不同类型的操作数。如:5.6 < 5 的值为 0 。

符号 含义
< 小于
> 大于
<= 小于等于
>= 大于等于

关系运算符的优先级低于算数运算符。例如:i + j < k - 1 的意思是 (i + j) < (k - 1)

关系运算符都是左结合的。

注意: 表达式 i < j < k 在 C 语言中是合法的,但是可能不是你所期望的含义。因为 < 运算符是左结合的,所以这个表达式等价于:(i < j) < k

表达式会先检测 i 是否小于 j,然后用比较后产生的结果(1 或 0 )来和 k 进行比较。这个表达式并不是测试 j 是否位于 i 和 k 之间。(正确的写法是:j > i && j < k

2.2 判等运算符

**判等运算符(equality operator):**相等用==表示 。注意不是 = =表示赋值。

注意:

一定要注意不要将 == 写成 = ,编译器可能会给你报错,但是如果没有,在你查错的时候,注意是不是 == 写错了的问题。

符号 含义
== 等于
!= 不等于

和关系运算符一样,判等运算符是左结合的,也是产生 0(假) 或 1(真) 作为结果。

判等运算符的优先级低于关系运算符。例如:

i < j == j < k 等价于:(i < j) == (j < k),含义是:如果 i < j 和 j < k 同真或同假 这个表达式的结果为真。

利用 关系运算符 和 判等运算符

(i >= j) + (i == j)

上面表达式的值为 0,1 或者 2 分别代表 i < j, i > j, i == j

2.3. 逻辑运算符

2.3.1逻辑运算符(logical operator)

符号 含义
! 逻辑非(一元运算符)
&& 逻辑与(二元运算符)
|| 逻辑或(二元运算符)

其实 && 就是 数学中的 且 ,|| 就是数学的的 或

逻辑运算符产生的结果仍然是 0 或 1,操作数经常也是 0 或 1,但这不是必需的。逻辑运算符将任何 非0值操作数当作真来处理,任何0值操作数当作假来处理。

  • 如果表达式的值为 0,那么 !表达式的结果为 1
  • 如果 表达式1 和 表达式2 的值都是非零值,那么表达式1 && 表达式2 的结果为 1
  • 如果 表达式1 和 表达式2 的值 中的任意一个是(或者两个都是)非零值,那么表达式1 || 表达式2 的结果为 1

所有其他情况下,这些运算符产生的结果都为 0

2.3.2 “短路”计算

&& 和 || 运算符都遵循“短路”原则。也就是说,这些运算符首先计算出左操作数的值,然后计算右操作数;

如果表达式的值可以仅由左操作数推导出来,那么将不计算右操作数的值

例2.1 短路计算

如:

#include <stdio.h>;
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0, j = 1;

	if (i && i++) {
		; // 空语句
	}
	printf("%d\n", i); // i 的值没有增加,说明 i++ 没有计算

	if (j || j++) {
		;
	}
	printf("%d\n", j); // j 的值没有增加, 说明 j++ 没有计算
    return 0;
}

结果

0
1

运算符 !的优先级和一元正负号优先级相同,运算符 && 和 || 的优先级低于判等运算符。

例如:i < j && k == m 等价于 (i < j) && (k == m)

运算符 ! 是右结合的,&& 和 || 是左结合的。

3. IF语句

if语句用于条件判断,满足条件时,就执行指定的语句。此过程称为“ C”决策

上面式子中,表达式expression为真(值不为0)时,就执行statement语句。

if后面的判断条件expression外面必须有圆括号,否则会报错。语句体部分statement可以是一个语句,也可以是放在大括号里面的复合语句。

 

下面是一个例子。

例3.1判断一个整数是否是10


#include <stdio.h>;
#include <stdlib.h>
#include <string.h>

int main()
{
    int x;
    if (x == 10);
        printf("x is 10");
    return 0;
}

结果

x is 10

如果有多条语句,就需要把它们放在大括号里面,组成一个复合语句。

例3.2 判断一个整数是否是4,不是4打印一句话

#include <stdio.h>;
#include <stdlib.h>
#include <string.h>

int main()
{
   int x;
   printf("please input a number that smaller than 10\n");
   scanf ("%d",&x);
   if (x != 4);{
   printf("x is %d\n",x);
   printf("please input 4 next time");
  }
  return 0;
}
please input a number that smaller than 10
6
x is 6
please input 4 next time

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts