- 1
- 0
- 约3.65千字
- 约 6页
- 2017-10-18 发布于江西
- 举报
C 程序设计基础之三
关系运算符和表达式
在程序中经常需要比较两个量的大小关系, 以决定程序下一步的工作。比较两个量的运算符称为关系运算符。 在C语言中有以下关系运算符:
小于 = 小于或等于 大于 = 大于或等于 == 等于 != 不等于
关系运算符都是双目运算符,其结合性均为左结合。 关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,,=,,=的优先级相同,高于==和!=,==和!=的优先级相同。
关系表达式
关系表达式的一般形式为: 表达式 关系运算符 表达式 例如:a+bc-d,x3/2,a+1(bc),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。
如: 50的值为“真”,即为1。(a=3)(b=5)由于35不成立,故其值为假,即为0。
void main(){ char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%d\n,a+5=k+1); printf(%d,%d\n,1J5,X-5.25=X+Y); printf(%d,%d\n,i+j+k==-2*j,k==j==i+5);}char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;printf(%d,%d\n,a+5=k+1);printf(%d,%d\n,1J5,X-5.25=X+Y);printf(%d,%d\n,i+j+k==-2*j,k==j==i+5);
在本例中求出了各种关系运算符的值。 字符变量是以它对应的ASCII码参与运算的。对于含多个关系运算符的表达式,如k==j==i+5,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+5,也不成立,故表达式值为0。
逻辑运算符和表达式
逻辑运算符C语言中提供了三种逻辑运算符 与运算 || 或运算 ! 非运算 与运算符和或运算符||均为双目运算符。具有左结合性。 非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:
按照运算符的优先顺序可以得出:
ab cd等价于(ab) (cd) !b==c||dA) a+bc x+yc) ((x+y)B) P
switch语句
C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:
switch(表达式){ case常量表达式1: 语句1; case常量表达式2: 语句2; … case常量表达式n: 语句n; default : 语句n+1; }?
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
void main(){ int a; printf(input integer number: ); scanf(%d,a); switch (a){ case 1:printf(Monday\n); case 2:printf(Tuesday\n); case 3:printf(Wednesday\n); case 4:printf(Thursday\n); case 5:printf(Friday\n); case 6:printf(Saturday\n); case 7:printf(Sunday\n); default:printf(error\n); } }
本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况, C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
原创力文档

文档评论(0)