一、关系运算符与关系表达式
1.关系运算符
用来对两个数值进行比较,其结果为布尔类型(“1” 或 “0”),即 ture(真)或者 false(假),只有两个数才能比较,都是左结合性
- < :小于
- <= :小于等于
- > :大于
- >= :大于等于
- == :等于(区别于 “=” 的赋值含义)
- != :不等于
2.关系表达式
用关系运算符将两个运算对象连接起来的式子,关系成立时,表达式的值为 1,否则是 0 。一般形式为:
表达式 关系运算符 表达式
例如:
a >= b
5 - a < 9 + b
m ! = ( j = = k )
3.运算优先级
运算符的优先级是指不同运算符之间的执行顺序,优先级高的运算符先执行。在表达式中,括号可以改变运算符的优先级,括号中的表达式先执行。常见的运算符优先级从高到低依次为:
!(非 运算符)>算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符
详细概述为:
1. 括号 ()
2. 一元运算符 !、++、--
3. 算术运算符 *、/、%
4. 算术运算符 +、-
5. 移位运算符 <<、>>
6. 比较运算符 <、<=、>、>=
7. 相等运算符 ==、!=
8. 位运算符 &
9. 位运算符 ^
10. 位运算符 |
11. 逻辑运算符 &&
12. 逻辑运算符 ||
13. 条件运算符 ?:
14. 赋值运算符 =
15. 其他运算符
二、逻辑运算符与逻辑表达式
1.逻辑运算符
优先级:!(非) > &&(与) > ||(或)
- && :与 运算符(双目,左结合)
- || :或 运算符(双目,左结合)
- ! :非 运算符(单目,右结合)
2.逻辑表达式
一般形式:
表达式 逻辑运算符 表达式
逻辑表达式的结果为 “真” 或 “假”,分别用 “0” 或 “1” 表示,不一定所有的运算都要被执行,当某个运算对象的值可以确定整个表达式的值时,其他的运算将不再需要被执行:
- (表达式1)&&(表达式2)&&(表达式3)。当所有运算符都为True时,整个表达式的值才为True,如果有一个表达式为False,则不用看其他表达式,可以直接断定整个表达式的值为False
- (表达式1)||(表达式2)||(表达式3)。与(1)相反,当所有运算符都为False时,整个表达式的值才为False,如果有一个表达式为Ture,则不用看其他表达式,可以直接断定整个表达式的值为Ture
- (表达式1)&&(表达式2)||(表达式3)。由于优先级,可以将整个表达式理解为 ||(或)的表达式,按照(2)来处理
三、if 语句
1.单分支 if 语句
格式:
if (表达式)
{
< 语句块 >
}
- 当表达式的值为True时,执行 if 的语句块,否则跳过语句块,直接执行 if 语句下面的一条语句
- 用花括号括起来的语句组为复合语句,若语句只有一条时,可以省略花括号({})
2.双分支 if 语句
格式:
if (表达式)
<语句块1>
else
<语句块2>
说明:先确定表达式的值,若值为True,则执行语句块1,否则执行语句块2。当语句块是多条语句时,用花括号括起来
3.多分支选择结构
格式:
if(表达式1)
<语句块1>
else if(表达式2)
<语句块2>
...
else if(语句块n)
<语句块n>
else
<语句块 n+1>
说明:先执行表达式1,若值为Ture,则执行语句块1,然后执行整个 if 语句块之后的语句,否则执行表达式2,若表达式2的值为Ture,则执行语句块2,然后执行整个 if 语句块之后的语句,否则执行语句块3......若前面 n-1 个表达式的值都为False,但第n个表达式的值为Ture,则执行语句块 n,若所有的表达式都为False,则执行语句块 n+1
4.if 的嵌套
在 if 语句中包含一个或多个if语句,称为 if 语句的嵌套,一般有下面两种嵌套情况:
1.内嵌一个 if 语句
if(表达式1)
<语句块1>
else
if(表达式2)
<语句块2>
else
<语句块3>
2.内嵌多个 if 语句
if(表达式1)
if(表达式2)
<语句块1>
else
<语句块2>
else
if(表达式3)
<语句块3>
else
<语句块4>
...
说明:
- else 语句不能单独使用,必须与 if 配对。else 总是与离它上面最近的、尚未与其他 else 配对的 if 语句配对,一般是从后往前找,确定 else 与 if 的配对关系,不能被缩进迷惑
- 如果 if 和 else 的个数不同,可以用花括号确定配对关系,提升可读性,形式如下:
if()
{ if(表达式1) <语句块1> }
else
<语句块2>
5.条件运算符
一种简短的控制结构,它允许根据一个条件来决定程序流程的走向,包含三个部分:
- 一个条件,它可以是任何能够返回布尔值(true 或 false)的表达式
- 一个成立时的结果,它是当条件为 true 时要执行的代码块
- 一个不成立时的结果,它是当条件为 false 时要执行的代码块
格式为:
(表达式1)?(表达式2):(表达式3)
类似于:
if(表达式1)
<表达式2>
else
<表达式3>
说明:
- 首先执行表达式1,若结果为ture,则执行表达式2,若结果为false,则执行表达式3
- 若遇到嵌套,运算顺序为从右向左
例如:a ? b ? a :c > d ? c : d 应该理解为 a > b ? a : (c > d ? c : d )
四、switch 语句
格式:
switch(表达式)
{
case 常量表达式 1:
< 语句1 >;
[ break ];
case 常量表达式 2:
< 语句2 >;
[ break ];
...
case 常量表达式 n:
< 语句n >;
[ break ];
default:语句 n + 1;
}
说明:
- 执行流程:程序先计算 switch 表达式的值,若值与某个 case 后的常量表达式相等,则执行对应 case 所包含的语句(若没有 break ,则执行该 case 后面的所有语句,包括之后其他 case 的语句)
- 若表达式的值不等于任何 case 后面的值,则执行 default 所属的语句,若没有 default 语句,则不执行 switch 语句中的任何语句,即跳过属于 switch 的任何语句,执行之后的程序
- switch 以及 case 后面的值,通常是整型或字符型,且 case 后的值不能相同
- 各个 case 以及 default 语句可以任意排列先后顺序
- 多个 case 可以共用同一组执行语句,表示多种情况,都执行同一个命令
4-13
题目:编制实现给一百分制成绩评定等级,要求输出成绩等级:90分及以上为A、80~90为B、70~79为C、60~69为D、60以下为E。
分析:1.一个成绩变量,int c 2.输入与输出 scanf、printf 3.按成绩分五档来选择判断 else if 或者 switch
#include <stdio.h>
int main(void)
{
int a;
printf("input the score:");
scanf("%d", &a);
switch(a / 10)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("E\n");
break;
default:
printf("Error!");
}
return 0;
}
4-14
题目:模拟计算器,实现两个数的加、减、乘、除运算,并且再电脑上输出运算结果。
分析:1.两个运算数、一个运算符号,float a,b ; char c 2.输入与输出,scanf 和 printf 3.按运算符号分四档来选择判断,switch
#include <stdio.h>
int main(void)
{
float x, y, m;
char z;
printf("input:x(+、—、*、/) y:");
scanf("%f%c%f", &x, &z, &y);
switch(z)
{
case '+':
m = x + y;
printf("%f + %f = %f", x, y, m);
break;
case '-':
m = x - y;
printf("%f - %f = %f", x, y, m);
break;
case '*':
m = x * y;
printf("%f * %f = %f", x, y, m);
break;
case '/':
m = x / y;
printf("%f / %f = %f", x, y, m);
break;
default:
printf("Error!!!");
}
return 0;
}