3_分支结构

0、C语言的三大结构

顺序结构
	语句从上至下 ,从左至右执行 

分支结构(选择结构)
	if(),	switch()

循环结构
	goto,	while(),	do while(),		for()

1、if() 语句

if语句的三种基本形式


1)
	if( 表达式 )
		语句;

	只要“表达式”的值为真(非0),那么就执行“语句”
	如果“表达式”的值为假(0),那么就跳过该“语句”,不执行它

		“表达式”:任意一种C语言合法的表达式都可以的 
					任何表达式都是有值的 
					比如: 
						a+b,  3+4,  100,   ... 

		“语句”:分为单语句 和 复合语句 
				
				单语句:只有一个分号;的语句
					例子: 
						if(a>b)
							c=1;
				复合语句:用{}括起来的语句
					例子:
						if(a>b)
						{
							c=1;
							d=2;
						}

		例子:
			int a=200, b=100;
			int c;
			if(a<b)
				c = a;		//不执行
				a = b;		//会执行
				b = a;		//会执行
			printf("%d %d\n",a,b);	// 100  100  


			int a=200, b=100;
			int c;
			if(a<b)
			{
				c = a;		
				a = b;		
				b = a;		
			}
			printf("%d %d\n",a,b);	//200  100

		编程建议:
			不管if语句的后面是单语句还是复合语句,都请自觉写上{}
				
					if( 表达式 )
					{
						语句;
					}
			


2) 
	if( 表达式 )
	{
		语句1;
	}
	else 
	{
		语句2;
	}

	如果“表达式”的值为真(非0),那么就执行“语句1”
		否则(如果“表达式”的值为假(0)),那么就执行“语句2”


		例子:
			int a, b,
			if(5>3)
			{
				a=1;
				b=2;
			}
			else 
			{
				a=3;
				b=4;
			}
			printf("%d %d\n", a,b);	// 1 2 

	
			int a, b,
			if(5>3)
			{
				a=1;
				b=2;
			}
			else 
				a=3;
				b=4;	//会执行
			printf("%d %d\n", a,b);	//  1  4

		编程建议:
			不管if else 语句的后面是单语句还是复合语句,都请自觉写上{}



3) 
	if( 表达式1 )
	{
		语句1;
	}
	else if(表达式2)
	{
		语句2;
	}
	else if(表达式3)
	{
	}
	...
	else 
	{
		语句n;
	}

	先判断“表达式1”的值,如果值为真(非0),那么就执行“语句1”,
			如果“表达式1”的值为假(0),那么就去判断“表达式2”的值, 
					如果“表达式2”的值为真,那么就执行“语句2”,
					否则再去判断“表达式3”的值 .... 一直判断下去
			直到所有的条件都为假时,就执行“语句n”


		例子:
				if(同意)
				{
					//cp
				}
				else if( 你是个好人)
				{
					//朋友
				}
				else if(流氓)
				{
					//栓Q
				}
				else if(嗯....)
				{
					// 备胎  
				}


4)if语句的嵌套 

	if()
	{
		if()
		{}
		else 
		{}
	}
	else if()
	{
	
	}
	else 
	{
	
	}

	注意:else总是和最近的、上面的、同级的、且未匹配的if语句 进行匹配


	练习: 
		1)从键盘上输入两个整数,按从小到大的顺序输出  
			
			int main()
			{
				int a, b;
				scanf("%d%d", &a, &b);	//从键盘上获取一个整数,存储到变量a对应的地址空间中去
		
				if(a>b)
				{
					printf("%d, %d\n", b,a);	
				}
				else
				{
					printf("%d, %d\n", a,b);	
				}
				
			}
				

		2)从键盘上输入三个整数,判断是否能够组成三角形?  YES/NO
					两边之和大于第三边,两边之差小于第三边

					
				#include <stdlib.h>
					int abs(int j);
						功能:求绝对值
						参数:
							j:整数
						返回值:
							返回这个参数j的绝对值
							
				三目运算符:  
					a-b>0 ? a-b : b-a
					
			int main()
			{
				int a, b,c;
				scanf("%d%d%d", &a, &b, &c);
				
				if( a+b>c  &&  abs(a-b)<c)		//if( a+b>c  &&  (a-b>0 ? a-b : b-a)<c)
				{
					printf("YES\n");
				}
				else 
				{
					printf("NO\n");
				}
			
			}

2、switch语句 (开关语句)

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

规则:
	拿“表达式”的值 与 case后面的“常量或常量表达式”的值进行匹配 
		一旦怕匹配成功(值相等),那么就执行case后面的语句,
		而且会一直往下执行,直到遇到break 或者switch语句结束
		
		如果没有一个case后面的“常量或常量表达式”的值与之相等,
		那么就默认执行default后面的语句

注意:
	1)switch后面的“表达式”的值必须是整数值(整型、字符型、枚举类型);
	2)case后面的常量或常量表达式的值也必须是整数值,且每一个值必须各不相同
	3)各个case语句和default语句 出现的次序不影响匹配结果,
		一旦匹配成功,就会从此处往下执行,直到遇到break 或者switch语句结束
	4)break的作用 用来跳出switch语句 

		例子:
			switch(a)
			{
				case 1:
					printf("1");
				case 2:
					printf("2");
				case 3:
					printf("3");
				case 4:
					printf("4");
				default:
					printf("5");
			}

			1) 当a==4时,输出结果为   45

			2)当a==5时,输出结果为	  5


			
			switch(a)
			{
				default:
					printf("5");
				case 1:
					printf("1");
				case 2:
					printf("2");
				case 3:
					printf("3");
				case 4:
					printf("4");
				
			}

			1) 当a==5时,输出结果为 	51234

			2)当a==5时,且在default后面增加break时,输出结果为  5
					default:
						printf("5"); break;



	5) case后面的要执行的“语句”,是可以省略的
		意思就是,可以 多个case共用一组“语句”
		
		例子: 
			switch(a)
			{
				case 1:
				case 2:
				case 3:
					printf("小");break;
				case 4:
				case 5:
				case 6:
					printf("大");break;
				default:
					break;
			}


		练习:
			从键盘上获取一个成绩(int),把它对应的等级输出
				A	90~100
				B	80~89
				C	70~79
				D	60~69
				E	0~59


				int main()
				{
					int score;
					scanf("%d", &score);
					
					switch( score/10 )
					{
						case 10:
						case 9:
							printf("A\n");break;
						case 8:
							printf("B\n");break;
						case 7:
							printf("C\n");break;
						case 6:
							printf("D\n");break;
						default:
							printf("E\n");break;
					}
				}

3、练习

		1、从键盘上输入一个日期(年、月、日),求该日期 到 该年年末有多少天?
		
			2022 6 17   
			6,7,8,9,10,11,12   -  17  
			
			3.14
			3,4,5,6,7,8,9,10,11,12   - 14 
			
			2.14
			2,3,4,5,6,7,8,9,10,11,12   - 14     (平年 与 闰年  )
		
		
			int main()
			{
				int year, month, day;	//年月日
				scanf("%d%d%d", &year, &month, &day);
				
				int sum = 0;	//保存结果 天数
				
				switch( month )
				{
					case 1: sum += 31;	//sum = sum + 31;
					case 2: 
						sum += 28; 
						if( year%400 == 0  || (year%4==0 && year%100!=0) )	//闰年2月有29天
						{
							sum++;
						}
					case 3: sum += 31;
					case 4: sum += 30;
					case 5: sum += 31;
					case 6: sum += 30;
					case 7: sum += 31;
					case 8: sum += 31;
					case 9: sum += 30;
					case 10: sum += 31;
					case 11: sum += 30;
					case 12: sum += 31;break;
					default:
						printf("输入的日期不合法 !\n");break;
				}
				
				sum = sum - day;	//减去 已经过去的日期
				
				printf("该日期距离年末还有 %d 天 \n", sum);

				return 0;
			}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RoyLee0826

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

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

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

打赏作者

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

抵扣说明:

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

余额充值