首页 > 其他分享 >c语言(单,双,三分支)swich的运算

c语言(单,双,三分支)swich的运算

时间:2024-07-30 19:55:09浏览次数:16  
标签:case 语句 运算 int swich printf score 表达式 分支

分支结构

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

概念

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

条件构建

  • 关系表达式:含有关系运算符的表达式(>,<,>=,<=,!=,==)
  • 逻辑表达式:含有逻辑运算符的表达式(&&,||,!),往往是用来构建复杂的复合条件,比如:
if(year % 100 == 0 && year % 4 !=0) // 这种既含有关系表达式,又含有逻辑表达式的条件叫做复合条件
  • 常量/变量:值是否非0,取值(0|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;
}

在这里插入图片描述

双分支

语法:

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 ? 表达式2 : 表达式3;

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

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

式3 的结果作为 条件运算符 的 最终结果 。

案例:

#include <stdio.h>
int main()
{
// 需求:求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;
}

在这里插入图片描述

案例:

#include <stdio.h>
int main()
{
// 需求:输入两个实数,按代数值由 小到大的顺序输出这两个实数。
// 申明变量,存储操作数
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);
}

在这里插入图片描述

案例:

 #include <stdio.h>
int main ()                 
  {
  	//需求输入3个数a,b,c,要求按由小到大的顺序输出这3个数 
  	
  	//申明变量,用来存放操作 
    float a,b,c,t;
    printf("请输入 a,b,c:");
    scanf("%f,%f,%f",&a,&b,&c);
    if (a>b)
        {
		   t=a;
		   a=b;
		   b=t;
		}    
    if (a>c)
        {
		   t=a;
		   a=c;
		   c=t;
		   }  
    if (b>c)
        {
		   t=b;
		   b=c;
		   c=t;
		}
    printf("%7.2f,%7.2f,%7.2f\n", a,b,c);
   }

在这里插入图片描述

多分支

语法:

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

案例:

#include <stdio.h>

int main()
{
	//需求编一程序,要求输入一个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("%d\n",y);
	//方式2:多分枝if..else if..else..
	//条件判断
	if(x<0)
	{
		y=-1;
	 } 
	 else if(x==0)
	 {
	 	y=0;
	 }
	 else
	 {
	 	y=1;
	 }
	 printf("%d\n",y);
	return 0;
}

在这里插入图片描述

案例:

#include <stdio.h>
/**
* 需求:高校要求粤嵌对实训学生根据实训成绩进行评级
范围:0 <= score <= 100;
评级:
score >= 90 优秀
score >= 80 良好
score >= 70 中等
score >= 60 及格
score < 60 不及格
*/
int main()
{
// 声明一个变量,存储成绩
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");
}
}

在这里插入图片描述
在这里插入图片描述

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,不能是浮点型。

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

案例:

/*
需求:根据成绩进行评级
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()
{
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");
}
}

在这里插入图片描述
在这里插入图片描述

switch语句的case穿透:

  1. case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是

否和它后面的case常量是否相同),这样的现象称之为case穿透。

  1. default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语

句可以放在switch语句{}内的任意位置。

总结

  • 如果只需要一个判断结果,使用 单分支
  • 如果需要两个判断结果,且只能有两个判断结果,使用 双分支
  • 如果需要判断N个结果中的某几个,或者所有,使用 多分支

扩展

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

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

值运算符(=、+=)

QR3WlI-1722340518132)]

[外链图片转存中…(img-n9nkXAuV-1722340518133)]

switch语句的case穿透:

  1. case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是

否和它后面的case常量是否相同),这样的现象称之为case穿透。

  1. default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语

句可以放在switch语句{}内的任意位置。

总结

  • 如果只需要一个判断结果,使用 单分支
  • 如果需要两个判断结果,且只能有两个判断结果,使用 双分支
  • 如果需要判断N个结果中的某几个,或者所有,使用 多分支

扩展

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

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

值运算符(=、+=)

标签:case,语句,运算,int,swich,printf,score,表达式,分支
From: https://blog.csdn.net/m0_74973541/article/details/140805268

相关文章

  • 位运算卷积学习笔记
    位运算卷积学习笔记位运算卷积,即快速沃尔什变换\(\text{FWT}\)和快速莫比乌斯变换\(\text{FMT}\),但事实上最常用的是\(\text{FWT}\),因为\(\text{FMT}\)所求解的内容是\(\text{FWT}\)的子集。位运算卷积首先要知道位运算卷积指的是\[c_i=\sum_{j\odotk=i}a_jb_k\]形......
  • x264 环路滤波原理系列:滤波运算函数
    x264滤波运算函数关系图滤波强度Bs=1、2、3的滤波运算相关函数deblock_luma_c函数原理逻辑过程:for循环处理MB中每个4x4的块;如果tc0[i]小于0,表示当前行不需要去块处理,函数将跳过当前行,通过continue跳转到下一次迭代。for循环遍历4x4块边的像素点;......
  • LeetCode-day30-2961. 双模幂运算
    LeetCode-day30-2961.双模幂运算题目描述示例示例1:示例2:思路代码题目描述给你一个下标从0开始的二维数组variables,其中variables[i]=[ai,bi,ci,mi],以及一个整数target。如果满足以下公式,则下标i是好下标:0<=i<variables.length((aibi%10)ci)......
  • day11 Java基础——基本运算符
    day11Java基础——基本运算符小技巧:CTRL+D复制当前行到下一行例1:packageoperator;publicclassDemo01{publicstaticvoidmain(String[]args){//二元运算符inta=10;intb=20;intc=25;intd=25;......
  • 无法使用任何运算符将具有简单过滤条件的列转换为布尔值
    我正在尝试从python中的dict结构动态形成过滤条件,这是一个非常简单的条件,会给出以下错误:Finalconstructedfiltercondition:Column<'(CompanyCodeIN(1930,1931))'>Typeoffinal_condition:<class'pyspark.sql.column.Column'>PySparkValueError:[CANNOT_CON......
  • C语言:运算符优先级
    由上到下,优先级依次递减运算符结合性()[] -> .从左至右!~++---(type)*&sizeof从右至左*/%从左至右+-从左至右<<>>从左至右<<=>>=从左至右==!=从左至右&从左至右^从左至右|从左至右&&从左至右||从左至右?:从右至左assignments从右至左,从左至右......
  • 【二进制】位运算:与、或、异或、取反、左移、右移
    概述计算机对二进制数据进行的运算(如加、减、乘、除)被称为位运算,即对二进制数的每一位进行操作的运算说明符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0^异或两个位相同为0,相异为1~取反0变1,1变0<<左移各二进位全部左移......
  • c语言(运算符,流程)
    运算符位运算符说明:按位(bit)来进行运算操作的运算符。语法:~&|^<<>>**~:**按位取反说明:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1。举例:unsignedcharret=~0x05;//00000101-->11111010printf("%d\n",~5);//-6**&......
  • Java基础10:拓展运算符、字符串连接符、三元运算符
    扩展运算符publicstaticvoidmain(String[]args){ inta=10; intb=20; a+=b;//a=a+b System.out.println(a+":"+b);}字符串连接符"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。//字符串......
  • Java基础09:逻辑运算符、位运算符
    逻辑运算符逻辑与:&&和&,逻辑或:||和|,逻辑非:!。publicstaticvoidmain(String[]args){ booleana=true; booleanb=false; System.out.println("a&&b="+(a&&b));//false System.out.println("a||b="+(a||b));......