Linux--C语言之分支结构

一、分支结构

​ 分支结构:又被称之为选择结构

(一)概念

​ 选择结构:根据条件成立与否,选择相应的操作。

(二)条件构建

1.关系表达式:

​ 是指用关系运算符将两个表达式连接起来组成的有意义的式子,即含有关系运算符的表达式(>,<,>=,<=,!=,==)

2.逻辑表达式:

​ 用逻辑运算符将关系表达式或逻辑量连接起来构成的有意义的式子,即含有逻辑运算符的表达式(&&,||,!),往往是用来构建复杂的复合条件,比如:

if(year % 100 == 0 && year % 4 !=0) // 这种既含有关系表达式,又含有逻辑表达式的条件叫做复合条件 

3.常量/变量:值是否非0,取值(0|1)

​ 注意:类似以下写法,是无效的,没有意义的。

if(x+y) // 编译通过,但是没有实际意义,不建议这样写
if(5*6)

(三)选择结构的形式

1.单分支

​ 语法:

if(条件表达式)
{
	语句1;
}

​ 说明: 条件表达式成立,执行语句1,否则跳过该分支结构。单分支条件不满足可以不执行。

​ 流程图:

在这里插入图片描述

​ 例子:

int a = 5;
if(a < 0)
{
	a = -a;
}
printf("a=%d\n",a);

​ 例子:

/**
* 需求:从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符
*/
#include <stdio.h>
int main()
{
	// 声明一个变量,存放从键盘录入的字符
	char c;
	printf("请输入一个英文字母:\n");
	scanf("%c",&c);
	// 判断
	if(c >= 'A' && c <= 'Z')
	{
		// c = c + 32;
		c += 32;
	}
	printf("输入的字符是:%c\n",c);
	return 0;
}

2.双分支

​ 语法:

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

​ 说明: 条件表达式成立,执行语句1,否则执行语句2。双分支不管条件是否满足,都要执行。

​ 流程图:

在这里插入图片描述

​ 例子:

#include <stdio.h>
int main(void)
{
	// 声明三个变量来存放计算数
	double x,a,y;
	// 通过键盘录入x,a
	printf("请输入两个数值:\n");
	scanf("%lf,%lf",&x,&a);
	// 检验除数
	if(x != 0 && a != 0)
	{
		y = 1.0/x + 1.0/a;
	}
	else
	{
		y = 10000;
	}
	// 输出
	printf("y=%f\n",y);
	return 0;
}
(1)三目运算符

​ 语法:

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

​ 说明:?: 条件运算符,主要可以简化双分支为同一变量赋值的操作。

​ 求值过程:先计算表达式1的值,非0,则将表达式2的结果作为条件运算符的最终结果;否则将表达式3的结果作为条件运算符最终结果

​ 案例1:

#include <stdio.h>
int main(void)
{
	// 需求:求a,b两个数中最大数
	// 写法1:正常写法
	int a = 5,b = 3;
	if(a > b)
	{
		printf("最大数是:%d\n",a);
	}
	else
	{
		printf("最大数是:%d\n",b);
	}
    
	// 写法2:省略{}
	int a1 = 5,b1 = 3;
	if(a1 > b1)
	printf("最大数是:%d\n",a1);
	else
	printf("最大数是:%d\n",b1);
    
	// 写法3:三目运算符
	int a2 = 5,b2 = 3;
	int ret = a2 > b2 ? a2 : b2;
	printf("最大数是:%d\n",ret);
    
	return 0;
}

​ 案例2:

#include <stdio.h>
int main(void)
{
	// 需求:输入两个实数,按代数值由 小到大的顺序输出这两个实数。
	// 声明变量,存储操作数
	int a,b;
	printf("请输入两个数值作为操作数:\n");
	scanf("%d,%d",&a,&b);
    
	// 校验
	// 方式1
	if(a > b)
	{
		printf("由小到大的顺序是:%d,%d\n",b,a);
	}
	else
	{
		printf("由小到达的顺序是:%d,%d\n",a,b);
	}
    
	// 方式2
	// 创建一个临时变量,用来存放交换信息
	int t = 0;
	if(a > b)
	{
		t = a;
		a = b;
		b = t;
	}
	printf("由小到大的顺序是:%d,%d\n",a,b);
    
    return 0;
}

​ 案例3:

#include <stdio.h>
int main(void)
{
	// 需求:输入3个数a,b,c,要求按由小到大的顺序输出这3个数
	// 声明变量,用来存放操作数
	int a,b,c,tmp;
	printf("请输入三个整数:\n");
	scanf("a=%d,b=%d,c=%d",&a,&b,&c);
    
	// 条件判断
	if(a > b)
	{
		tmp = a;
		a = b;
		b = tmp;
	}
	if(a > c)
	{
		tmp = a;
		a = c;
		c = tmp;
	}
	if(b > c)
	{
		tmp = b;
		b = c;
		c = tmp;
	}
	printf("a,b,c三个数按照由小到大的顺序是:%d,%d,%d\n",a,b,c);
	return 0;
}

3.多分支

​ 语法:

if(条件1)
{
	语句1;
} else if(条件2)
{
	语句2;
}
...
else 
{
	语句n+1;
}

​ 流程图:

在这里插入图片描述

​ 案例1:

#include <stdio.h>
int main(void)
{
	// 需求:编一程序,要求输入一个x值,输出y值
	// 方式1:嵌套的if..
	int x,y;
	printf("请输入一个整数:\n");
	scanf("%d",&x);
    
	// 条件判断
	if(x < 0)
	{
		y = -1;
	}
	else
	{
		// x >= 0
		if(x == 0)
		{
			y = 0;
		}
		else
		{
   			y = 1;
		}
	}
	printf("方式1:x=%d,y=%d\n",x,y);
    
	// 方式2:多分支if..else if....else..
	// 条件判断
	if(x < 0)
	{
		y = -1;
	}
	else if(x == 0)
	{
		y = 0;
	}
	else
	{
		y = 1;
	}
	printf("方式2:x=%d,y=%d\n",x,y);
    
    return 0}

​ 案例3:

#include <stdio.h>
/**
* 需求:高校要求粤嵌对实训学生根据实训成绩进行评级
  范围:0 <= score <= 100;
  评级:
		score >= 90 优秀
		score >= 80 良好
		score >= 70 中等
		score >= 60 及格
		score < 60 不及格
*/
int main(void)
{
	// 声明一个变量,存储成绩
	int score; 
	printf("请录入学生成绩:\n");
	scanf("%d",&score);
    
	// 对score进行合法校验
	if(score >= 0 && score <= 100)
	{
		// 对合法输入的成绩进行评级
		if(score >= 90)
		{
			printf("优秀\n");
		}
		else if(score >= 80)
		{
			printf("良好\n");
		}
		else if(score >= 70)
		{
			printf("中等\n");
		}
		else if(score >= 60)
		{
			printf("及格\n");
		}
		else
		{
			printf("不及格\n");
		}
	}
	else
	{
		printf("成绩录入不合法!\n");
	}
    return 0;
}

4.switch

​ 语法:

switch(表达式) // 不能是布尔型 和 浮点型
{
	case 常量表达式1:
		语句体1;
		break;
    case 常量表达式2:
		语句体2;
		break;
	...
	case 常量表达式n:
		语句体n;
		break;
	default:
		语句体n+1;
         break;// 可以省略
}

​ 流程图:

在这里插入图片描述

​ 说明:

​ ⑴ switch后括号内的表达式可以是任何类型的表达式;

​ ⑵ 若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行default后面 的语句;

​ ⑶ 每个case后面的常量表达式的值都必须不相同,否则出现矛盾;

​ ⑷ 各个case 和default出现的次序不影响执行结果;

​ ⑸ case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case(case穿透) ;

​ ⑹ 多个case可共用一组语句。

​ 注意:

​ (1)表达式一般写一个变量,变量的值是一个确定的常量。

​ (2)当遇到break或者switch语句的右大括号时,switch语句结束。

​ (3)表达式中的数据类型:char,short,int,long,long long,不能是浮点型。

​ 表达式和常量的数据类型要一致(支持隐式转换),比较是否相同。

​ 案例1:

/*
需求:根据成绩进行评级
score <= 100;
评级:
	90 <= score < 100 优秀 90~99/10 == 9 && 100/10 ==10
	80 <= score < 90 良好 80~89/10 == 8
	70 <= score < 80 中等 70~79/10 == 7
	60 <= score < 70 及格 60~69/10 == 6
	score < 60 不及格
*/
#include <stdio.h>
int main(void)
{
	int score;// 成绩
	printf("请输入实训成绩:\n");
	scanf("%d",&score);
	if(score >= 0 && score <= 100)
	{
		// 对成绩进行加工
		int l = score / 10;
		switch(l)
		{
			case 10:// 100分
			case 9:// 90~99分
				printf("优秀\n"); // 这里:多个case共用一块代码
			break;
			case 8:
				printf("良好\n");
			break;
			case 7:
				printf("中等\n");
			break;
			case 6:
				printf("及格\n");
			break;
			default:
				printf("不及格\n");
		}
	}
	else
	{
		printf("成绩录入不合法!\n");
	}
    return 0;
}

​ 案例2:

/*
需求:实现一个简易计算器,要求实现+,-,×,/运算
*/
#include <stdio.h>
int main()
{
	printf("简易计算器 v1.0\n");
	printf("请输入两个操作数:\n");
    
	double x,y;// 存放计算数
	char ch;// 运算符
    
	scanf("%lf,%lf",&x,&y);
	scanf("%c",&ch);// 消除上面产生的最后一个回车符
	printf("请输入运算符:(+、-、.*、/)\n");
	scanf("%c",&ch);
    
	// 计算
	switch(ch)
	{
		case '+':
			printf("%.2lf+%.2lf=%.2lf\n",x,y,x+y);
		break;
		case '-':
			printf("%.2lf-%.2lf=%.2lf\n",x,y,x-y);
		break;
		case '.':
		case '*':
			printf("%.2lf*%.2lf=%.2lf\n",x,y,x*y);
		break;
		case '/':
			if(y == 0)
			{
				printf("除数不能为0\n");
			}
			else
			{
				printf("%.2lf/%.2lf=%.2lf\n",x,y,x/y);
			}
		break;
		default:
			printf("输入错误!");
		}
		return 0;
}

5.switch语句的case穿透:

​ (1)case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是否和它后面的case常量是否相同),这样的现象称之为case穿透。

​ (2)default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语句可以放在switch语句{}内的任意位置。

二、总结

​ 1.如果只需要一个判断结果,使用单分支

​ 2.如果需要两个判断结果,且只能有两个判断结果,使用双分支

​ 3.如果需要判断N个结果中的某几个,或者所有,使用多分支

三、扩展

(一)条件表达式中的运算符优先级

​ 逻辑非(!) > 算数运算符 (±*/%)>关系运算符(> < >= <= != == )> 逻辑运算符(&&、||)> 赋

值运算符(=、+=)

(二)设置vim中tab字符数

设置vim默认tab长度

  1. 打开终端;

  2. 输入 vim~/.vimrc命令,按回车键。这将创建一个名为.vimrc的文件(如果尚不存在)或打开现有文件夹;

  3. 在文件夹中添加以下内容来设置tab长度,例如设置为4个空格:

    set tabstop = 4
    set shiftwidth = 4
    set expandtab
    

​ set tabstop = 4 设置tab停止的长度为4个空格,set shiftwidth = 4设置自动缩进长度也是4个空格,set expandtab设置 使用空格而不是制表符进行缩进;

  1. 保存并关闭文件。在vim编辑器中,按下Esc键,然后在英文状态下输入“:wq”,最后按回车键;
  2. 重新启动终端或运行source ~/.vimrc 命令以应用更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值