逻辑操作符
!
:逻辑取反运算符(改变单个表达式的真假)。
&&
:逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||
:逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语言中,非0表示真,0表示假
a | !a |
0 | 1 |
非0 | 0 |
a | b | a&&b |
非0 | 非0 | 1 |
非0 | 0 | 0 |
0 | 非0 | 0 |
0 | 0 | 0 |
a | b | a||b |
非0 | 非0 | 1 |
非0 | 0 | 1 |
0 | 非0 | 1 |
0 | 0 | 0 |
- 短路:
逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。 如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++; //第一部分假,&&整体假,后两个被短路
printf("i = %d\na = %d\n b = %d\n c = %d\nd = %d\n", i, a, b, c, d);
//输出结果为i = 0 a = 1 b = 2 c = 3 d = 4
int i = 0,a=1,b=2,c =3,d=4;
i = a++ && ++b && d++; //&&全真,i = 1
printf("i = %d\na = %d\n b = %d\n c = %d\nd = %d\n", i, a, b, c, d);
//输出结果为i = 1 a = 2 b = 3 c = 3 d = 5
int i = 0,a=1,b=2,c =3,d=4;
i = a++||++b||d++;//第一部分真,||整体真,后两个被短路
printf("i = %d\na = %d\n b = %d\n c = %d\nd = %d\n", i, a, b, c, d);
//输出结果为i = 1 a = 2 b = 2 c = 3 d = 4
swich
switch
语句是⼀种特殊形式的
if...else
结构,⽤于判断条件有多个结果的情况。
它把多重 的 else if
改成更易用、可读性更好的形式。
switch
(expression) {
case
value1: statement
break;
case
value2: statement
break;
default
: statement
}
-
switch 后的表达式中的值无法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default 子句。 switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行 default 子句。在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。 不过我们通常把 default 子句放在最后处理的。
-
switch 后的 expression 必须是整型表达式 ;case 后的值,必须是整形常量表达式。字符也归类到整型,它的本质为ASCOII码值。
-
case 和后边的数字之间必须有空格 每⼀个 case 语句中的代码执行完成后,需要加上 break , 才能跳出这个switch语句。
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期七\n");
break;
}
\\输⼊1~5,输出的是“⼯作⽇”,输⼊6~7,输出“休息⽇”
int day;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
case 6:
case 7:
printf("休息日");
default:
printf("输入错误");
}
while循环
-
while 语句的语法结构和 if 语句非常相似。
if(表达式) 语句; while(表达式) 语句;//如果循环体想包含更多的语句,可以加上⼤括号
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语 句,语句执行完后再继续判断,是否进行下⼀次判断。
//在屏幕上打印 1~10 的值
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
//输入一串数,逆序输出
int n = 0;
scanf("%d",&n);
while (n) //while(n!=0)
{
printf("%d", n % 10);
n = n / 10;
}