第三章 选择结构

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);

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值