C编程中的条件语句用于根据条件进行决策。 当语句周围没有条件时,条件语句将顺序执行。
如果为语句块放置一些条件,则执行流程可能会根据条件评估的结果而变化。 此过程称为“ C”决策。
关系运算符
下表显示了C语言支持的关系运算符。假设变量A=10,变量B=20,则 –
运算符 | 描述 | 示例 |
---|---|---|
== | 检查两个操作数的值是否相等。 如果相等,则条件成立。 | (A == B)结果为false |
!= | 检查两个操作数的值是否相等。 如果值不相等,则条件成立。 | (A != B) 结果为true |
> | 检查左操作数的值是否大于右操作数的值。 如果是,则条件成立。 | (A > B) 结果为false |
< | 检查左操作数的值是否小于右操作数的值。 如果是,则条件成立。 | (A < B)结果为true |
>= | 检查左操作数的值是否大于等于右操作数的值。 如果是,则条件成立。 | (A >= B) 结果为false |
<= | 检查左操作数的值是否小于等于右操作数的值。 如果是,则条件成立。 | (A <= B)结果为true |
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。C的六个关系运算符,和布尔表达式结合给出测试结果,返回true或false。
注意,相等运算符(==)与赋值运算符(=)是不一样的。
关系运算符表达式
关系表达式的一般形式为:
表达式 关系运算符 表达式
例如:
a+b>c-d
x>3/2
‘a’+1<c
-i-5*j==k+1
都是合法的关系表达式。由于表达式也可以又是关系表达式。 因此也允许出现嵌套的情况。
例如:
a>(b>c)
a!=(c==d)
等。
关系表达式的值是True(真)和False(假),用“1”和“0”表示。
如:
5>0 的值为True“真”,即为 1。(a=3)>(b=5)由于 3>5 不成立,故其值为False假,即为 0。
关系运算符的举例可以在以下条件语句中看到。
在“ C”编程中,可以使用条件语句:
1. If statement (IF 语句)
2. If-else statement (IF Else 语句)也称分支语句,因为程序将根据评估条件的结果决定执行哪个语句。
IF语句
它是强大的条件语句之一。 if语句负责修改程序的执行流程。 if语句始终与条件一起使用。 在If主体内执行任何语句之前,先评估条件。 if语句的语法如下:
if (condition) instruction;
条件评估为true或false。 True始终是一个非零值,而false则零。 指令可以是单个指令,也可以是用大括号{}括起来的代码块。
以下程序说明了“ C”编程中if构造的用法:
#include<stdio.h> int main() { int num1=1; int num2=2; if(num1<num2) //test-condition { printf("num1 is smaller than num2"); } return 0; }
- 在上面的程序中,我们初始化了两个变量,分别为num1,num2,其值分别为1、2。
- 然后,我们使用if和一个检验表达式来检查哪个数字最小,哪个数字最大。我们在if构造中使用了关系表达式。 由于num1的值小于num2,因此条件的计算结果为true。
- 因此它将在If块内打印该语句。 此后,控制将超出该块,并且程序将终止并获得成功的结果。
#include<stdio.h> int main() { int x = 41; x =x+ 1; if (x == 42) { printf("You succeed!");} return 0; }
请记住,评估为非零值的条件被认为是正确的。
#include<stdio.h> int main() { int present = 1; if (present) printf("There is someone present in the classroom \n"); return 0; }
IF ELSE 语句
if-else 语句是If的扩展版本。 if-else的一般形式如下:
if (test-expression) { True block of statements } Else { False block of statements } Statements;
test-expression – 测试表达式
在这种类型的构造中,如果test-expression的值为true,则将执行语句的true块。 如果test-expression的值为false,则将执行false语句块。 无论如何,执行后,控件将自动转移到If块外出现的语句。
以下程序说明了if-else构造的用法:
我们将使用某个值初始化变量,然后编写程序以确定该值是小于10还是大于10。
开始吧。
#include<stdio.h> int main() { int num=19; if(num<10) { printf("The value is less than 10"); } else { printf("The value is greater than 10"); } return 0; }
结果:
The value is greater than 10
IF ELSE 语句分析
- 我们已经初始化了一个值为19的变量num。我们必须使用“ C”程序找出该数字是大于还是小于10。 为此,我们使用了if-else语句。
- 在这里,我们提供了条件num <10,因为我们必须将值与10进行比较。
- 如您所见,第一个块始终是true块,这意味着,如果测试表达式的值为true,则将执行第一个块If。
- 第二个块是else块。 此块包含如果测试表达式的值为false则将执行的语句。 在我们的程序中,num的值大于10,因此测试条件变为false,所以,false将执行。 因此,我们的输出将来自else块,即“值大于10”。 if-else之后,程序将以成功的结果终止。
在C语言中,我们可以使用多个IF ELSE语句,甚至if ELSE语句的嵌套。
条件表达式
表达if-else语句的另一种方法是引入?:运算符。 在条件表达式中,?:运算符只有一个与if和else相关的语句。
#include <stdio.h> int main() { int y; int x = 2; y = (x >= 6) ? 6 : x;/* This is equivalent to: if (x >= 5) y = 5; else y = x; */ printf("y =%d ",y); return 0;}
嵌套IF ELSE 语句
当需要一系列决策时,使用嵌套的if-else。 嵌套意味着在另一个内部使用一个if-else构造。
利用程序来说明:
#include<stdio.h> int main() { int num=1; if(num<10) { if(num==1) { printf("The value is:%d\n",num); } else { printf("The value is greater than 1"); } } else { printf("The value is greater than 10"); } return 0; }
输出结果:
The value is:1
上面的程序检查数字是否小于或大于10,并使用嵌套的if-else语句打印结果。
- 首先,我们声明了一个变量num,其值为1。然后,我们使用了if-else构造。
- 在外部if-else中,提供的条件检查数字是否小于10。如果条件为true,执行内部循环。 在该例中,条件为真,因此将进入内部块进行运算
- 在内部块运算中,我们再次有一个条件检查我们的变量是否包含值1。 当条件为真时,它将处理If块,否则将处理else块。 在这种情况下,条件为真,因此如果执行了一个程序段,并且该值被打印在输出屏幕上。
- 上面的程序将打印变量的值并成功退出。
注意:在嵌套的if-else中,我们必须谨慎对待if else开始位置对齐,因为此过程涉及多个if-else构造,因此很难弄清各个构造。 适当的缩进可以轻松读取程序。
嵌套ELSE IF 语句
当需要有很多决定是,你可以使用嵌套ELSE IF语句。
嵌套ELSE IF语句语法结构:
if (test - expression 1) { statement1; } else if (test - expression 2) { Statement2; } else if (test - expression 3) { Statement3; } else if (test - expression n) { Statement n; } else { default; } Statement x;
这种类型的结构称为else-if阶梯。 该链通常看起来像一个梯子,因此也称为else-if阶梯。这种结构也称阶梯结构。
测试表达式从上到下进行评估。 只要找到真实的测试表达式,就会执行与其关联的语句。 当所有n个测试表达式都为false时,将执行默认的else语句。
我们来看下面实际例子:
#include<stdio.h> int main() { int marks=83; if(marks>75){ printf("First class"); } else if(marks>65){ printf("Second class"); } else if(marks>55){ printf("Third class"); } else{ printf("Fourth class"); } return 0; }
结果:
First class
上面的else-if阶梯结构根据测试中的分数打印成绩。
- 我们已经用标记初始化了一个变量。 在else-if阶梯结构中,我们提供了各种条件。
- 变量标记中的值将与第一个条件进行比较,因为它是正确的,与此相关的语句将被打印在输出屏幕上。
- 如果第一个测试条件为假,则将其与第二个条件进行比较。
- 该过程将一直进行到对所有表达式求值,否则控制将退出else-if阶梯,并且将打印默认语句。
条件运算符和条件表达式
如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
条件运算符为 ?和:,它是一个三目运算符,即有三个参与运算的量。
由条件运算符组成条件表达式的一般形式为:
表达式 1? 表达式 2: 表达式 3
其求值规则为:如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 2 的值作为整个条件表达式的值。
条件表达式通常用于赋值语句之中。
例如条件语句:
if(a>b) max=a;
else max=b;
可用条件表达式写为
max=(a>b)?a:b;
执行该语句的语义是:如 a>b 为真,则把 a 赋予 max,否则把 b 赋予 max。
使用条件表达式时,还应注意以下几点:
1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此
max=(a>b)?a:b
可以去掉括号而写为
max=a>b?a:b
2) 条件运算符?和:是一对运算符,不能分开单独使用。
3) 条件运算符的结合方向是自右至左。
例如:
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",a>b?a:b); }
用条件表达式对上例重新编程,输出两个数中的大数。
摘要
- 决策或分支语句将根据测试表达式的结果选择一条路径。它也称为控制语句,因为它控制程序的执行流程。
- C为决策陈述提供if,if-else语句。
- 当必须测试多个路径时,我们还可以将if-else相互嵌套。
- 当我们必须根据表达式的结果检查各种方式时,使用else-if阶梯。