3.1逻辑与关系运算
-
逻辑
计算机的语言依靠电信号,只有高低电平之分,所以只有两种逻辑:成立和不成立。成立称为逻辑真,不成立称为逻辑假。
与算数运算符不同,逻辑运算符的操作数只有两个,真或假。逻辑运算符的操作数只能由逻辑值来充当。
编程时常用0表示逻辑假,1表示逻辑真。实际上非0都表示逻辑真 -
逻辑运算符
&&逻辑与 如果两个操作数都非0,则结果为真。
|| 逻辑或 两个操作数中有任意一个非0,则结果为真。
! 逻辑非 如果条件为真,则逻辑非运算符将使其变为假。
注意:
1.逻辑与&&也称短路与,即当&&左边的操作数已经是逻辑假,则右边就不需要再判断,整个运算结果就是假。
2.逻辑或的短路运算与逻辑与相似,即||运算符左边如果为真,右边的值不影响运算结果,右边就不会参与运算,程序直接跳过。 -
关系运算
关系运算符本质是比较运算。C语言提供的关系运算有:> , >= , < , <= , == , != 六种二元关系运算符。
关系运算符的运算结果是逻辑值,取值为真或假,结果用于逻辑运算。
3.2选择结构if
- if语句单分支
if(逻辑表达式)
{
/*如果逻辑表达式为真将执行的语句*/
}
- if…else语句 双分支结构
if(boolean_expression)
{
/*如果布尔表达式为真将执行的语句*/
}
else
{
/*如果布尔表达式为假将执行的语句*/
}
- if…else if…else if…else语句 多分支结构
if(boolean_expression 1)
{
/*当布尔表达式1为真时执行*/
}
else if(boolean_expression 2)
{
/*当布尔表达式2为真时执行*/
}
else if(boolean_expression 3)
{
/*当布尔表达式3为真时执行*/
}
else
{
/*当上面条件都不为真时执行*/
}
注意:
在编程规范时,if语句需要尽量使用{}来体现执行的代码块,不能通过缩进的方式来实现代码块。
为了避免错误,if语句块中不管有多少条语句,都使用花括号结构。写代码时,出现if或者else,马上写一对大花括号。编程不易错,提高代码可读性。
3.3多分支switch
- switch语句 多分支结构
switch(expression)
{
case constant-expression:
statements(s);
break; /*可选的*/
case constant-expression:
statements(s);
break; /*可选的*/
/*可以有任意数量的case语句*/
default: /*可选的*/
statements(s);
}
注意:
1.switch为等值判断,而if为等值和区间都可以,if的使用范围大;
2.程序遇到break结束执行语句块,不要轻易漏掉break;
3.一个表达式控制的多分支结构,其表达式的值还必须能表示成有限个离散点。如果问题性质具有明显的多个离散点,每个点处执行不同处理的特点,这时用switch语句比if语句结构清晰很多。
3.4选择结构综合编程
- 班费X元(整数,大于等于8)购买若干支钢笔。钢笔价格为6元、5元、四元,想买尽量多的钢笔,同时不想有剩余钱。设计方案。
#include <stdio.h>
int main()
{
int x; //money
int sixpen=0, fivepen=0, fourpen=0; //pen nums
int remain;
printf("input money>=8\n");
scanf("%d", &x);
if (x<8)
{
printf("money is invalid!\n");
}
else
{
remain = x%4;
switch(remain)
{
case 0 :
fourpen = x/4;
break;
case 1 :
fourpen = x/4 - 1;
fivepen = 1;
break;
case 2 :
fourpen = x/4 - 1;
sixpen = 1;
break;
case 3:
fourpen = x/4 - 2;
fivepen = 1;
sixpen =1;
break;
}
printf("%d = fourpen*%d + fivepen*%d + sixpen*%d", x, fourpen, fivepen, sixpen);
}
}