《C语言》选择结构程序设计

一.关系运算符和关系表达式

 1.关系运算符

关系运算符含  义数学中的表示
<小于<
<=小于或等于
>大于>
>=大于或等于
==等于=
!=不等于

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

c>a+b               //运算符由高到低的顺序是+,>

a>b==c             //运算符由高到低的顺序是>, ==

a==b<c         //运算符由高到低的顺序是<, ==

a=b>c               //运算符由高到低的顺序是>, =

a>b==c,a=b!c   //运算符由高到低的顺序是>,==和!=,=,

 2.关系表达式的值

关系表达式的值是一个逻辑值,数学中用“真,假”来表示,C语言中用1和0表示。当表达式成立时为1,否则为0.

c>=a+b               //关系表达式,值为1

a>b==c               //关系表达式,值为0

a==b<c               //关系表达式,值为1

a=b>c                 //赋值表达式,值为0,因a的值为0,a为何为0?因b>c不成立

a>b==c,a=b!=c   //逗号表达式,值为1,执行后a的值为1

f=c>b>a              //赋值表达式,值为0,因c>b>a的结果为0

二.逻辑运算符和逻辑表达式 

1.逻辑运算符

运算符说明结合性举例
&&与运算,双目,对应数学中的“且”左结合1&&0、(9>3)&&(b>a)
||或运算,双目,对应数学中的“或”左结合1||0、(9>3)||(b>a)
!非运算,单目,对应数学中的“非”右结合!a、!(2<5)

&&和||都是双目运算符,!是单目运算符,优先级如下

 2.逻辑表达式

5&&0                 //(参与运算的两个表达式都为真时,结果才为真,否则为假。)5为真,0                              为假,相与的结果为假,也就是 0。

10 || 0                //(参与运算的两个表达式只要有一个为真,结果就为真;)两个表达式都                                为假时结果才为假。10为真,0为假,相或的结果为真,也就是 1。

!0                      //(参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果                                为真。)0 为假,非运算的结果为真,也就是 1。

 逻辑表达式求解时的短路效应

逻辑与&& 和逻辑或|| 的结合性都是从左到右,在求解包含&&或||的表达式,都是先计算运算符左边的式子,一旦确定整个表达式的值,右边就不再求解了

int a = 1, b = 10, c = 2;
	printf("%d,", (a = b) || (c = b));
	printf("%d,%d,%d\n", a, b, c);

运行结果:

1,10,10,2

可以看到,c的值还是原来的2,说明c=b并没有被执行。

原因:表达式(a = b) || (c = b)的计算顺序是先求解||左侧的a=b,其值为10 (因a=b是赋值),因为左侧已经为真,所以右侧 c=b已经不用求解了,故c为2不变 。

三. if语句

1.if 格式

if 和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:

if (判断条件){
    语句块1
} else {
    语句块2
}

意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2 。其执行过程可表示为下图:

 

 2.用案例让你体会if , else if,else

   

  输入二蛋分数,如果100为满分,高于等于80分优秀,高于等于60分及格,50和60之间差一点 ,低于50分不合格。

int n;            //表示要输入的分数
	printf("输入二蛋分数");
	scanf_s("%d", &n);	
	if (n == 100) {
		printf("满分"); 
	}
	if (n >= 80) {
		printf("优秀");
	}
	if (n >= 60) {
		printf("及格");
	}
	if (n >= 50 && n < 60) {
		printf("差一点");
	}
	if (n < 50) {
		printf("不合格");
	}

用100测试一下

 出现此结果的原因:100属于即在满分的区间也在优秀和及格的区间里,而我们需要的是输出满分就可以了。改正一下:

int n;            //表示要输入的分数
	printf("输入二蛋分数");
	scanf_s("%d", &n);	
	if (n == 100) {
		printf("满分"); 
	}
	else if (n >= 80) {
		printf("优秀");
	}
	else if (n >= 60) {
		printf("及格");
	}
	else if (n >= 50 && n < 60) {
		printf("差一点");
	}
	else if (n < 50) {
		printf("不合格");
	}

这里使用了else if
               一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行,100遇到了第一个成立的条件,然后跳出,不执行其他语句块。

或者最后一个else if 可以改为如下:

else 

    printf("不合格");

else  表示其他的条件都不成立时执行此条件

四.表达式1?:表达式2:表达式3

其求值规则是,若表达式1的逻辑值为真,则条件表达式的值等于表达式2的值,否则等于表达式3的值

int a=1,b=3, c;

c=a>b?a:b;                      //表示,如果a>b时c=a,否则c=b;

最大值表示函数:

int max(int a,int b){
  int max;
  return max=a>b?a:b;
}

最小值

int min(int a,int b){
   int min;
  return min=a<b?a:b;
}

 五.switch语句

1.switch 是另外一种选择结构的语句

用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下:

switch(表达式){
    case 整型数值1: 语句 1;
    case 整型数值2: 语句 2;
    ......
    case 整型数值n: 语句 n;
    default: 语句 n+1;
}

它的执行过程是:
(1) 首先计算“表达式”的值,假设为 d。

(2) 从第一个 case 开始,比较“整型数值1”和 d,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。

(3) 如果“整型数值1”和d 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 d 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。

(4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。

 2.实例

int a;
		printf("成绩");
		scanf_s("%d", &a);
		switch (a/10) {
		case 10: printf("A\n");
		case 9: printf("B\n");
		case 8: printf("C\n");
		case 7: printf("D\n");
		case 6: printf("E\n");
		case 5: printf("F\n");
		case 3: printf("G\n");
		case 2: printf("H\n");
		case 1: printf("I\n");
		default:printf("error\n");
		}
		return 0;

输入成绩100, 100/10=10满足case 10

输出结果如下

 我们本意想输出A即可,但是其余BCD……全部都被输出,这本不是我们想要的结果

这时我们使用 break

break 是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。

int main() {
		int a;
		printf("成绩");
		scanf_s("%d", &a);
		switch (a/10) {
		case 10: printf("A\n"); break;
		case 9: printf("B\n"); break;
		case 8: printf("C\n"); break;
		case 7: printf("D\n"); break;
		case 6: printf("E\n"); break;
		case 5: printf("F\n"); break;
		case 3: printf("G\n"); break;
		case 2: printf("H\n"); break;
		case 1: printf("I\n"); break;
		default:printf("error\n"); 
		}
		return 0;
	}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未央吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值