C语言知识点2--选择结构

C语言知识点–选择结构

选择结构中的判定条件

关系运算符与关系表达式

1、关系运算符:< 、 <= 、 > 、 >= 、 == 、 !=

​ 结合方向:从左往右。

​ 优先级低于算术运算符,高于赋值运算符。

注意:由于浮点数的存储方式,避免直接对实数直接做相等或者不等的判断。可以使用固定阈值的方法:fabs(a-b)<le-6.

逻辑运算符与逻辑表达式

1、逻辑运算符: ! (逻辑非,单目)、&& (逻辑与,双目)、|| (逻辑或,双目)

​ 优先级: !>&&> || 。 !的运算次序从右向左。

​ 在"||" 运算中,只要有一个运算量为非零,结果是1. 若已经算出其左边非零,则符号右边的表达式不进行运算。

​ 在"&&" 运算中,只要有一个运算量是零,结果是0. 若已经算出其左边为零,则符号右边的表达式不进行运算。

# 判断一个个字符变量h 是英文字母

'a'< =h && h <='z' ||'A'<= h && h <= 'Z'

#判断某一年是否为闰年

year%4==0 && year%100 !=0 || year%400 ==0

if语句

单分支的if语句

格式:if(表达式)

​ 内嵌语句;

if (a>b);a++;b++;    //空语句

if (a>b) {a++;b++;}   //都执行

if (a>b) a++;b++;	  //只执行a++

双分支的if语句

格式: if(表达式)

​ 语句1;

​ else

​ 语句2;

​ 表达时候的值非0则执行语句1,为0则执行语句2.

​ 语句1和语句2也可以是 if-else 语句,即嵌套语句。

三目运算符(也可实现上面的功能):

​ 表达式1? 表达式2:表达式3

​ 若表达式1的值非零,则表达式2的值将作为整个表达式的值;否则为表达式3的值。

​ 条件运算符的结合方向是自右向左。

//利用条件运算符实现四舍五入int)(x+0.5//要求x>0int)(x<0? x-0.5:x+0.5)

#include<stdio.h>
#define pi 3.1415926

//将输入的三个数从大到小进行排序

int main()
{
	int a,b,c,max,min;
	printf("请输入第一个值:");
	scanf("%d",&a);
	printf("请输入第二个值:");
	scanf("%d",&b);
	printf("请输入第三个值:");
	scanf("%d",&c);
	printf("您输入的三个数为:%d\t%d\t%d\n",a,b,c);
	max=a>b&&a>c?a:b>c?b:c;
	min=a<b&&a<c?a:b<c?b:c;
	printf("从大到小的值依次为:\n");
	printf("%d\t%d\t%d\n",max,a+b+c-max-min,min);
	return 0;
	
	
}

嵌套的if语句:

​ if(表达式)

​ if(表达式1)

​ 语句1;

​ else

​ 语句2;

​ else

​ if(表达式2)

​ 语句3;

​ else

​ 语句4;

​ if的嵌套语句中,每个else总是与他前面的if对应。

嵌套的if语句的变化形式:

​ if(表达式1) 语句1

​ else if(表达式2) 语句2

​ else if (表达式3) 语句3

​ …

​ else if (表达式n) 语句n

​ else 语句n+1

switch语句

简单形式

格式:

​ switch(表达式){

​ case 常量表达式1:语句1

​ case 常量表达式2: 语句2

​ …

​ case 常量表达式n: 语句n

​ default: 语句n+1

}

​ switch 后的表达式可以是数值型和字符型表达式,case后面的表达式只能是整型常量、字符型常量或符号常量组成的表达式。(注意冒号)

​ switch后表达式的值不是整数则自动取整,case后面的常量表达式不能有变量或函数。

​ 某个常量表达式(包括至于中间位置的default)一旦匹配后将执行其后的所有语句。

​ 若希望执行完某些操作后退出switch语句,一般可使用break语句。

实现多路开关

格式:

​ switch(表达式){

​ case 常量表达式1:语句1;break;

​ case 常量表达式2: 语句2;break;

​ …

​ case 常量表达式n: 语句n;break;

​ default: 语句n+1

}

#include<stdio.h>
#define pi 3.1415926


int main()
{
	//输入年月,输出该月有多少天
    
	int year,month,days;
	printf("year=");
	scanf("%d",&year);
	printf("month=");
	scanf("%d",&month);
	switch(month){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days=31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			days=30;
			break;
		case 2:
			if (year%4 ==0&&year%100!=0 ||year %400==0)
				days=29;
			else
				days=28;
	}
	printf("%d 年 %d 月 有 %d 天",year,month,days); 
	
}

switch语句的巧用:利用switch语句来解决多分支的问题时,可以利用C语言中关系表达式、逻辑表达式的结果是0或1 的特性进行取值。

...
z=1*(x<2)+2*(2<=x&&x<10)+3*(x>=10);
switch(z){
        ...
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值