C语言基础 (三)选择结构程序设计


系列合集 初窥C语言

四、选择结构程序设计

4.1 关系运算与逻辑运算

4.1.1 关系运算符与关系表达式

符号含义
<小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于

由低到高:赋值运算符 --> 关系运算符 --> 算术运算符
关系表达式:
一般形式为 :表达式 关系运算符 表达式
关系表达式的值是一个逻辑值,要么是“真”,要么是“假”
C语言没有逻辑型变量,用”1“表示”真“,用”0“表示”假“,视所有”非0“为真。

4.1.2 逻辑运算符与逻辑表达式

1)&&(逻辑与)and
2)||(逻辑或)or
3)!(逻辑非)not
由低到高:赋值运算符 --> && 和 || --> 关系运算符 --> 算术运算符 --> !(非)
说明:
1)&& 和 ||是双目运算符,它要求有两个运算量,例如:(a>b)||(x>y)
2)!是单目运算符,它只要求一个运算量,例如:!(a>b)

逻辑表达式:
1)一般形式:表达式 逻辑运算符 表达式
2)运算规则:只有在必须执行下一个表达式才能求解时,才求解该表达式(并不是所有的表达式都被求解)即短路运算
3)对于逻辑与(&&)运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。
4)对于逻辑或(||)运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。
5)&&和||是逻辑运算,&与|是位运算
6)&&同真为真,有假为假,||同假为假,有真为真

4.2 if选择结构

4.2.1 if语句的作用

用来判定所给定的条件是否满足,并根据判定的结果(真或假)决定执行给出的两种操作之一。
例如:

if(x > 0){
	printf("%f",x);
}else {
	printf("%f",-x);
}

4.2.2 if语句三种基本形式

(1)if
(2)if-else
(3)if-else if
前两种形式的if语句一般用于两个分支的情况,当有多个分支选择时,用第三种形式。

if(表达式1)
	语句1else if(表达式2)
	语句2...
else if(表达式(n-1))
	语句(n-1);
else
	语句n;

其语义为:
依此判断表达式的值,
当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。
如果所有的表达式均为假,则执行最后else所在的语句n,然后继续执行后续程序。

4.2.3 if语句注意的问题

1)在三种形式的if语句中,在if关键字之后均为表达式。
2)该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至可以是一个变量。如:if(b),只要表达式的值为非0,即为真。
3)在if语句中,条件判断表达式必须用括号括起来,单条语句之后必须加分号“;”。
如:if(a>b)max = a;
4)在if语句的三种形式中,如果想在满足条件时执行多个语句,要用大括号{}括起来组成一个复合语句,但要注意“}”后不要加分号“;”。

4.2.4 if语句的嵌套

可以在if语句中又包含一个或多个if语句。

if()
	if() 语句1else 语句2else
	if() 语句3else 语句4

else总是与它前面最近的if配对

4.3 条件运算

条件运算符:?(三目运算符)
格式:表达式1 ?表达式2 : 表达式3
使用场合: 若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符处理。
如:

if(a > b) max = a;
else max = b;

可以写成

max = (a > b) ? a : b;

说明:
1)条件运算符符运算优先级低于关系运算符和算术运算符,但高于赋值运算符
2)条件运算符?和:是一对运算符,不能分开单独使用
3)条件运算符的结合方向是自右至左

#include<stdio.h>
#include<stdlib.h>
 
int main() {
	int max = 0;
	int i = 10, j =8, k = 5;
	max = i > j ? i > k ? i : k : j > k ? j : k;
	printf("max = %d\n", max);
	return 0;
}
 
//先判断 j > k ? j : k 
//再判断 i > k ? i : k 
//最后再到 i > j ? i > k
 
//可以这样理解 i > j ? (i > k ? i : k) : (j > k ? j : k);

4.4 switch多分支选择结构

一般形式:

switch(表达式){
case 常量表达式1:语句1case 常量表达式2:语句2...
case 常量表达式n-1: 语句n-1default:语句n;
}

说明:
1)在case后面的各常量表达式的值不能相同,否则会出现错误。
2)在case后,允许有多个语句,可以不用{}括起来,没有语句是,什么也不做,执行后面case的语句,直到遇到break。
3)各case和default子句的先后顺序可以变动,不会影响程序执行结果。但是当default不在末尾时,如果执行了,又没有break语句,那么会继续依次执行下面的语句块,直到遇到break。(default语句会在所有case语句不符合的情况下执行)
4)default子句可以省略不用。

4.5 程序举例

//很简单的题
1.路程(s)越远,每公里运费越低。标准如下:

s<250km没有折扣
250<=s<5002%折扣
500<=s<10005%折扣
1000<=s<20008%折扣
2000<=s<300010%折扣
3000<=s15%折扣

设每公里每吨货物的基本运费为P,货物重为w,折扣为d,则总运费f的计算公式为:
f = pws*(1-d)

#include <stdio.h>
int main()
{
    int c, s;
	float p, w, d, f;
	scanf("%f %f %d", &p, &w, &s);
	if(s > 3000) c = 12;
	else c = s/250;
	switch(c){
	 	case 0: d = 0; break;
		case 1: d = 2; break;
 		case 2: 
	 	case 3: d = 5; break;
		case 4: 
 		case 5:
	 	case 6:
		case 7: d = 8; break;
		case 8:
	 	case 9:
	 	case 10:
	 	case 11: d = 10; break;
	 	case 12: d = 15; break;
	}
	f = p*w*s*(1-d/100.0);
	printf("freight = %15.4f",f);
}

2.比较两个数的大小关系

#include <stdio.h>
int main()
{
	int a, b;
	printf("please input A,B: ");
	scanf("%d %d", &a, &b);
	if(a != b){
		if(a > b) printf("A>B\n");
		else printf("A<B\n");
	}else printf("A=B\n");
}

3.逻辑表达式

#include <stdio.h>
int main()
{
	char c = 'k';
	int i = 1, j = 2, k = 3;
	float x = 3e+5, y = 0.85;
	printf("%d,%d\n", !x*!y, !!!x);
	printf("%d,%d\n", x || i && j-3, i < j && x < y);
	printf("%d,%d\n", i == 5 && c && (j-8), x + y || i + j + k);
}
//0,0
//1,0
//0,1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rpk712

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值