【C语言】分支语句(选择结构)详解

news2024/10/5 13:37:42

✨个人主页: Anmia.
🎉所属专栏: C Language

🎃操作环境: Visual Studio 2019 版本

 

目录

什么是分支语句?

if语句

if

if - else单分支

if - else if - else ...多分支

if - if嵌套

switch语句

基本语法

break

default

练习

练习1  

练习2

 练习3

练习4

练习5

练习6

练习7

练习8

练习9

练习10

练习11

练习12

练习13

练习14

后言


 

什么是分支语句?

在生活中需要进行判断和选择的事情很多。

如:

  • 如果你在家,我去拜访你;(需要判断你是否在家)
  • 如果考试成绩是班级前三名,就可以得到奖励;(需要判断是否为班级前三名)
  • 如果遇到绿灯,可以通行;(需要判断是否为绿灯)
  • 70岁以上的老人,乘坐公交车免费;(需要判断是否满70岁)

从以上的例子可以看出,条件判断是一个逻辑值:“是”或“否”,例如,在判断是否为班级前3名时,答案只有两种可能:“是前三名”和“不是前三名”,不会是“第5名”或者“第10名”等。

在计算机语言中,用“真”和“假”(1/0)来表示“是”或者“否”。

在程序中,用选择结构来检查所指定的条件的是否满足,并判断结果执行哪种操作。

在C语言的两种分支结构

  • if
  • switch

if语句

  • if

if(表达式)

{

        语句....
}

  • 流程图

代码逻辑:如果 if 表达式条件成立,则执行语句。如果条件不成立,则不执行 if 中的语句。


  • if - else单分支

if(表达式)

{

        语句1...

}

else

{

        语句2...

}

  • 流程图

代码逻辑:如果 if 表达式成立,则执行语句1,否则执行语句2。


  • if - else if - else ...多分支

if(表达式1)

{

        语句1...

}

else if(表达式2)

{
        语句2...

}

else

{
        语句3...

}

  • 流程图

  • 代码逻辑:如果if 表达式1条件成立,则执行语句1,否则走else,再判断表达式2的条件。如果表达式2条件成立,执行语句2,否则执行语句3。
  • 例子:多分支一般用于分段,如判断一个人的分数。
#include <stdio.h>
int main()
{
	int score = 0;
	scanf("%d", &score);
	if (score < 70)
	{
		printf("general");
	}
	else if (score < 80)
	{
		printf("good");
	}
	else
	{
		printf("excellent");
	}
	return 0;
}
如果小于70分,则输出general,否则判断是否在70-80之间(注意:如果前面的if条件不成立,本次if会自动把前面的条件加入本次判断范围,前面小于70不成立说明分数不在70以下,在判断是否小与80时会自动加入先前的判断结果,则呈现本次只判断70-80之间)。如果70-80之间也不成立,则走了else,本次else后面没有if,说明本次范围时除了前面的全部范围,所以80以上的数字都会输出excellent。
  • if - if嵌套

if(表达式1)

{
        if(表达式2)

        {

                语句1...

        }

}

  • 流程图

代码逻辑:如果表达式1成立,执行外层 if 中的语句,又碰到 if 再判断表达式2,如果成立则执行语句1,否则不执行。

例子:if嵌套,无非就是多层条件判断。如要购买一双鞋,购买条件是必须是会员,商品价格是100元。在这个例子中,不难看出,如果不是会员有钱也买不了,所以外层 if 可以设计成判断是否是会员。如果是(内层if)再判断是否够钱买,如果不是,想都美咯。

#include <stdio.h>
int main()
{
	int vip = 0;// 0 表示无会员,1表示有会员。
	int cash = 0;
	scanf("%d %d", &vip, &cash);
	if (vip == 1)
	{
		if (cash >= 100)
		{
			printf("鞋子");
		}
	}
	return 0;
}

结合上面的例子,相信大家应该对if常见形式有一定的认识吧!接下来看看switch吧。


switch语句

if是分支语句,为什么要会有switch呢?既然存在,必有它的意义。我们来看个例子。

 我们需要从从键盘输入1-7任意一个数字,让编译器输出对应的星期数。如输入1,输出“Monday”。用 if 语句先试试吧 

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	if (day == 1)
	{
		printf("Monday\n");
	}
	else if (day == 2)
	{
		printf("Tuesday\n");
	}
	else if (day == 3)
	{
		printf("Wednesday\n");
	}
	else if (day == 4)
	{
		printf("Thursday\n");
	}
	else if (day == 5)
	{
		printf("Friday\n");
	}
	else if (day == 6)
	{
		printf("Saturday\n");
	}
	else if (day == 7)
	{
		printf("Sunday\n");
	}
	return 0;
}

经过多次调试,发现 if 语句也是可以完成的。但不会感觉很麻烦吗?代码量大,结构不是很清晰。那用switch试试?

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:printf("Monday\n"); break;
	case 2:printf("Tuesday\n"); break;
	case 3:printf("Wednesday\n"); break;
	case 4:printf("Thursday\n"); break;
	case 5:printf("Friday\n"); break;
	case 6:printf("Saturday\n"); break;
	case 7:printf("Sunday\n"); break;
	}
	return 0;
}
 对于这些“点”的范围控制。switch多分支似乎对比 if 多分支更加简洁和明了。数字1 2 3...这些是一个常量字符表达式,字面值等。用 if 写起来比较麻烦,switch正是它的强项,但对范围区间的操作,还得是 if 。所以还是具体问题具体分析,根据需求选择合适的分支语句。


基本语法

 switch(整型表达式)
{
  case 整形常量表达式:
  语句;

   ......
}

 这个是switch的基本语法形式,整型表达式是条件,整型常量表达式整型表达式的其中一种可能性,如果相等则执行后面的语句,直到遇到break,或者到switch语句结束自动结束。

那break又是什么呢?


break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

以上面星期的例子为例,如果不加break会怎么样?

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:printf("Monday\n");
	case 2:printf("Tuesday\n");
	case 3:printf("Wednesday\n");
	case 4:printf("Thursday\n");
	case 5:printf("Friday\n");
	case 6:printf("Saturday\n");
	case 7:printf("Sunday\n");
	}
	return 0;
}

 多次调试后不难看出,没有break语句会从当前case后的语句执行到switch语句完全结束。这似乎没有实现多分支的效果。

switch搭配break循环可以起到跳出当前switch的效果。如上面的成功案例,假如case 1:成立,输出Monday后遇到break就会跳出当前switch,如果没有break会继续向下执行,直到遇到break结束,如果没有break会执行完整个switch中的语句。因此要合理的应用好break。


default

如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯:

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

#include <stdio.h>
int main()
{
	printf("您是否是本店会员?(1:是 / 0:否)\n:>");
	int input = 0;
	scanf("%d", &input);
	switch (input)
	{
	case 1:printf("会员请进"); break;
	case 0:printf("你不是会员"); break;
	default:printf("输入错误,请重新输入!"); break;
	}
	return 0;
}

上面有一个判断是否为会员的代码,是则输入1,不是则输入0,如果输入其他则提示输入错误,这里就可以用default语句了。


练习

练习是对知识点掌握程度的检测,接下来有一些关于分支语句的题目,认真看看一定有所收获! 


练习1  

下面代码执行的结果是

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i<10; i++)
	{
		if (i = 5)
			printf("%d ", i);
	}
	return 0;
}

解析:

上述代码本来的想法应该是:循环10次,每次循环时如果i==5则打印i的结果。

但if语句中表达式的==写成了赋值符号=,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5

i每次修改成5打印后,i的值永远不会等于10,因此造成死循环

故:死循环的打印5


练习2

关于if语句说法正确是:( )

A.if语句后面只能跟一条语句

B.if语句中0表示假,1表示真

C.if语句是一种分支语句,可以实现单分支,也可以实现多分支

D.else语句总是和它的对齐的if语句匹配

解析:

答案解析:

  A:错误,if之后可以跟多条语句,跟多条语句时需要使用{}括起来

  B:错误,0表示假,非零表示真

  C:正确

  D:不一定,要看具体的代码,如果代码不规范,可能没有对齐,比如:

if()
     if()
else
     ;

上述else虽然是和外层if对齐,但是会和内部if进行匹配。(else 会和自己最近的未匹配的if匹配)


 练习3

int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}

则func(1) = (      ).

解析:

switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。

  func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被执行,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。

  因此:选择D


练习4

switch(c)语句中,c不可以是什么类型( )

A.int

B.long

C.char

D.float

解析:

switch语句中表达式的类型只能是:整形和枚举类型

D选项为浮点类型,不是整形和枚举类型

因此:选择D


练习5

下面代码的执行结果是什么( )

#include <stdio.h>
int main() {
	int x = 3;
	int y = 3;
	switch (x % 2) {
	case 1:
		switch (y)
		{
		case 0:
			printf("first");
		case 1:
			printf("second");
			break;
		default: printf("hello");
		}
	case 2:
		printf("third");
	}
	return 0;
}

解析:

switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。

  关于该题解析,请看以下注解:

 #include <stdio.h>
  int main() {
  	int x = 3;
  	int y = 3;
  	switch (x % 2) {  // x%2的结果为1,因此执行case1
  	case 1:
  		switch (y)   // y是3,因此会执行case3,而case3不存在,那只能执行default
  		{
  		case 0:
  			printf("first");
  		case 1:
  			printf("second");
  			break;
  		default: printf("hello"); // 打印hello,打印完之后,内部switch结束,此时外部case1结束
  		}             // 因为外部case1之后没有添加break语句,所以继续执行case2
  	case 2:             // 打印third
  		printf("third");      // 外部switch结束
  	}
  	return 0;
  }

即:先在内部switch的default位置打印hello,紧接着在外部case2中打印third

  因此:选择D


练习6

关于switch说法不正确的是:( )

A.switch语句中的default子句可以放在任意位置

B.switch语句中case后的表达式只能是整形常量表达式

C.switch语句中case子句必须在default子句之前

D.switch语句中case表达式不要求顺序

解析:

A:正确,可以放在任意位置,但是一般建议最好还是放在最后

B:正确,case语句后一般放整形结果的常量表达式或者枚举类型,枚举类型也可以看成是          一个特殊的常量

C:错误,没有规定case必须在default之前,一般case最好放在default之前

D:正确,但一般还是按照次序来

因此:选择C


练习7

写一个代码打印1-100之间所有3的倍数的数字

 解析:
 

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=1; i<=100; i++)
    {
        if(i%3==0)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

for循环遍历数组,if 判断如果 1-100之间的数取模后结果为0的,则输出这个数。


练习8

写代码将三个整数数按从大到小输出。

例如:

输入:2 3 1

输出:3 2 1

解析:

#include <stdio.h>
int main()
{
	int a, b, c;
	scanf("%d%d%d", &a, &b, &c);
    if (a < b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }
    if (a < c)
    {
        int tmp = a;
        a = c;
        c = tmp;
    }
    if (b < c)
    {
        int tmp = b;
        b = c;
        c = tmp;
    }
    printf("%d %d %d\n", a, b, c);
	return 0;
}

思路:

  • 首先,我们可以使用第一个 if 语句来比较 a 和 b 的大小。如果 a 小于 b,那么我们可以交换它们的值,确保 a 是其中较大的数。这样,我们就能确保 a 是三个数中最大的数。
  • 接下来,我们使用第二个 if 语句来比较 a 和 c 的大小。如果 a 小于 c,我们再次进行交换,确保 a 是三个数中最大的数。
  • 最后,我们使用第三个 if 语句来比较 b 和 c 的大小。如果 b 小于 c,我们进行最后一次交换,确保 b 是三个数中的第二大数。

这样,通过三个 if 语句的比较和交换,我们可以将三个数按照从大到小的顺序排列。最后,我们使用 printf函数将排序后的结果输出。

这种思路可以确保每一次比较和交换都能将当前最大的数放在正确的位置上,从而实现整个排序过程。


练习9

写一个代码:打印100~200之间的素数 

解析:
素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下

//方法一:试除法

int main()
{
	int i = 0;
	int count = 0;


    // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
	for(i=101; i<=200; i++)
	{
		//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
		int j = 0;
		for(j=2; j<i; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
        
		// 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
		if(j==i)
		{
			count++;
			printf("%d ", i);
		}
	}


	printf("\ncount = %d\n", count);
	return 0;
}

//上述方法的缺陷:超过i一半的数据,肯定不是i的倍数,上述进行了许多没有意义的运算,因此可以采用如下

 // 方法二:每拿到一个数据,只需要检测其:[2, i/2]区间内是否有元素可以被2i整除即可,可以说明i不是素数

int main()
{
	int i = 0;
	int count = 0;


	for(i=101; i<=200; i++)
	{
		//判断i是否为素数
		//2->i-1
		int j = 0;
		for(j=2; j<=i/2; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>i/2)
		{
			count++;
			printf("%d ", i);
		}
	}


	printf("\ncount = %d\n", count);
	return 0;
}
  • 为什么是逐个检查该数字是否可以被2到i/2之间的任何数字整除?

因为在判断一个数字是否为素数时,只需要检查它是否能被小于等于它一半的数字整除即可。

假设一个数字n不是素数,即存在一个大于1且小于等于n的数字m能够整除n,那么必定存在一个因子p,使得pm=n。如果p和m都大于n的一半,那么pm也会大于n,与n相等矛盾。因此,我们只需要检查小于等于n一半的数字是否能整除n,即可确定n是否为素数。

所以,内部循环的范围是从2到i/2,用来逐个检查是否存在能整除当前数字i的数。如果存在能整除i的数,那么i就不是素数;如果内部循环完全执行完毕,即没有找到能整除i的数,那么i就是素数。

方法二还是包含了一些重复的数据,再优化:

方法三:
如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。

int main()
{
	int i = 0;
	int count = 0;


	for(i=101; i<=200; i++)
	{
		//判断i是否为素数
		//2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		//...
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}


	printf("\ncount = %d\n", count);
	return 0;
}

方法4
继续对方法三优化,只要i不被[2, sqrt(i)]之间的任何数据整除,则i是素数,但是实际在操作时i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数

int main()
{
	int i = 0;
	int count = 0;


	for(i=101; i<=200; i+=2)
	{
		//判断i是否为素数
		//2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		//...
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}

	printf("\ncount = %d\n", count);
	return 0;
}

练习10

打印1000年到2000年之间的闰年

解析:
要求1000年到2000年之间的闰年,只需要知道求解闰年的方法即可。
闰年的条件:如果N能够被4整除,并且不能被100整除,则是闰年
           或者:N能被400整除,也是闰年
     即:4年一润并且百年不润,每400年再润一次

写法1:

#include <stdio.h>
int main()
{
	int year = 0;
	for(year=1000; year<=2000; year++)
	{
		//判断year是否为闰年
		if(year%4==0)  // 如果year能够被4整除,year可能为闰年
		{
			if(year%100!=0) // 如果year不能内100整除,则一定是闰年
			{
				printf("%d ", year);
			}
		}
		if(year%400 == 0)  // 每400年再润一次
		{
			printf("%d ", year);
		}
	}


	return 0;
}

写法2:

#include <stdio.h>
int main()
{
	int year = 0;
	for(year=1000; year<=2000; year++)
	{
		if(((year%4==0)&&(year%100!=0))||(year%400==0))
		{
			printf("%d ", year);
		}
	}

	return 0;
}

练习11

给定两个数,求这两个数的最大公约数

例如:

输入:20 40

输出:20

解析:

最大公约数:即两个数据中公共约数的最大者
求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法算法
此处主要介绍:辗转相除法


思路:
例子:18和24的最大公约数
第一次:a = 18  b = 24  c = a%b = 18%24 = 18
      循环中:a = 24   b=18
第二次:a = 24   b = 18  c = a%b = 24%18 = 6
      循环中:a = 18   b = 6


第三次:a = 18   b = 6   c=a%b = 18%6 = 0
  循环结束
  
此时b中的内容即为两个数中的最大公约数。

#include <stdio.h>
int main()
{
	int a = 18;
	int b = 24;
	int c = 0;

	while(c=a%b)
	{
		a = b;
		b = c;
	}

	printf("%d\n", b);
	return 0;
}

练习12

在屏幕上输出9*9乘法口诀表

解析:
两个循环进行控制
外层循环控制打印多少行
内部循环控制每行打印多少个表达式以及表达式内容,
比较简单,具体参考代码

#include <stdio.h>
int main()
{
	int i = 0;
	//控制行数
	for(i=1; i<=9; i++)
	{
		//打印每一行内容,每行有i个表达式
		int j = 0;
		for(j=1; j<=i; j++)
		{
			printf("%d*%d=%2d ", i, j, i*j);
		}
		printf("\n");
	}
	return 0;
}

练习13

求10 个整数中最大值

解析:

  1. 采用循环的方式输入一个数组
  2. 使用max标记数组中的最大值,采用循环的方式依次获取数组中的每个元素,与max进行比较,如果arr[i] 大于max,更新max标记的最大值,数组遍历结束后,max中保存的即为数组中的最大值。
#include <stdio.h>
int main()
{
	int arr[10] = {0};
	int i = 0;
	int max = 0;

	for(i=0; i<10; i++)
	{
		scanf("%d", &arr[i]);
	}
	//
	max = arr[0];
	for(i=1; i<10; i++)
	{
		if(arr[i]>max)
			max = arr[i];
	}
	printf("max = %d\n", max);
	return 0;
}

练习14

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

解析:

从上述表达式可以分析出

  1. 该表达式主要由100项,基数项为正,偶数项为负
  2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
  3. 然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
  4. 然后将所有的项相加即可
#include <stdio.h>
int  main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for(i=1; i<=100; i++)
	{
		sum += flag*1.0/i;
		flag = -flag;
	}
	printf("%lf\n", sum);
	return 0;
}

后言

本篇较为详细的将了分支语句中的重点,以及14道测试题检测学习情况。希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/869017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HackRF One Block Diagram

HackRF One r1-r8 Block Diagram HackRF One r9 Block Diagram

FPGA 之 xilinx DDS IP相位控制字及频率控制字浅析

浅析相位环在Xilinx DDS中的理解 本文仅为个人理解之用; 相关仿真结果如下:

Qt5.9.4搭建安卓环境-Qt for Android

目录 需要安装以下内容&#xff1a;安装JDK设置环境变量安装剩余文件 使用新建文件 可能出现的问题第一种解决方法&#xff1a; 第二种解决方法 需要安装以下内容&#xff1a; 下载地址&#xff1a; https://www.qter.org/portal.php?modview&aid10 很多Qt开发会用到的环…

理解-面向对象

目录 对象&#xff1a; 举例&#xff1a; 封装: 好处: 继承: 多态&#xff1a; 类和对象之间的关系 对象&#xff1a; 把一个东西看成对象&#xff0c;我们就可以孤立的审查它的性质&#xff0c;行为&#xff0c;进而研究它和其他对象的关系。 对象是一个应用系统中用…

探索极限:利用整数或字符串操作找出翻转后的最大数字

本篇博客会讲解力扣“1323. 6 和 9 组成的最大数字”的解题思路&#xff0c;这是题目链接。 对于这道题目&#xff0c;我会讲解2种解题思路&#xff0c;分别是直接操作整数&#xff0c;和利用字符串操作。希望大家通过本题学习关于整数和字符串的技巧。 显然&#xff0c;这道题…

如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

问题描述# 上图示例展示了用户通过 IOS 客户端发送请求时&#xff0c;对应后端接口接收到的 Request 内容。从请求内容的整体结果&#xff0c;我们可以看出这是一个 multipart/form-data 的数据格式&#xff0c;由于这种数据是由多个 multipart section 组成&#xff0c;所以我…

ELK常见部署架构以及出现的问题及解决方案

ELK常见部署架构以及出现的问题及解决方案 ELK 已经成为目前最流行的集中式日志解决方案&#xff0c;它主要是由Beats 、Logstash 、Elasticsearch 、 Kibana 等组件组成&#xff0c;来共同完成实时日志的收集&#xff0c;存储&#xff0c;展示等一站式的解决方案。本文将会介…

无情被裁的后续来了

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;技术让梦想更伟大作者&#xff1a;不生气 大家好&#xff0c;给大家分享一个案例&#xff0c;收集好证据&#xff0c;劳动仲裁吧 &#xff0c;裁员时候老板打感情牌&#xff0c;员工呢坚持付出就得回报按照程序来。…

Zabbix 6.0 监控

文章目录 一、Zabbix简介1&#xff09;zabbix 是什么&#xff1f;2&#xff09;zabbix 监控原理3&#xff09;Zabbix 6.0 新特性1、Zabbix server高可用防止硬件故障或计划维护期的停机2、Zabbix 6.0 LTS新增Kubernetes监控功能&#xff0c;可以在Kubernetes系统从多个维度采集…

【计算机视觉|生成对抗】用深度卷积生成对抗网络进行无监督表示学习(DCGAN)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 链接&#xff1a;[1511.06434] Unsupervised Representation Learning with Deep Conv…

python——案例18:判断该元素是否在列表中

案例18&#xff1a;判断该元素是否在列表中test_list[10,-8,25.6,88,0,4]print("查看88是否在列表里面&#xff1a;")for i in test_list:if(i88):print("存在") print("查看88是否在列表中&#xff1a;") if(88 in test_list):print("存在…

Scractch3.0_Arduino_ESP32_学习随记_WIFI一键配网web(五)

WIFI一键配网web 目的器材程序联系我们 目的 使用手机为C02一键配网 器材 硬件: 齐护机器人C02 购买地址 软件: scratch3.0 下载地址:官网下载 程序 程序如下图所示: 当程序上载完成后使用手机连接WIFI名为qdprobot的网络,密码为12345678。连接后会自动弹出配网的网页。…

特征选择 | 变量重要性衡量

特征选择 | 变量重要性衡量 目录 特征选择 | 变量重要性衡量写在前面常规方法存在问题解决策略参考资料 写在前面 特征选择是预测模型构建的关键步骤&#xff0c;旨在1&#xff09;降低数据维度&#xff0c;减少计算量&#xff1b;2&#xff09;剔除一些无关或冗余变量&#xf…

【uniapp】uniapp自动导入自定义组件和设置分包:

文章目录 一、自动导入自定义组件&#xff1a;二、设置分包和预加载&#xff1a; 一、自动导入自定义组件&#xff1a; 【Volar 官网】https://github.com/vuejs/language-tools 二、设置分包和预加载&#xff1a; 【官方文档】https://uniapp.dcloud.net.cn/collocation…

无涯教程-Perl - ord函数

描述 此函数返回EXPR指定的字符的ASCII数值,如果省略则返回$_。例如,ord(A)返回值为65。 语法 以下是此函数的简单语法- ord EXPRord返回值 该函数返回整数。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -wprint("ord() ", ord(G), "\n"…

初出茅庐的小李博客之认识编码器

编码器是什么&#xff1a; 一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器&#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器通常由一个旋转部分和一个固定部分组成&#xff0c;旋转部分随着被测量的物体进行旋转&#xff0c;固定部分则保持不动…

大数据-玩转数据-Redis 安装与使用

一、说明 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址&#xff1a;http://download.redis.io/releases 二、下载 m…

PG常用SQL

数据库 创建数据库 PostgreSQL 创建数据库可以用以下三种方式&#xff1a; 1、使用 CREATE DATABASE SQL 语句来创建。2、使用 createdb 命令来创建。3、使用 pgAdmin 工具。 CREATE DATABASE 创建数据库 CREATE DATABASE 命令需要在 PostgreSQL 命令窗口来执行&#xff0…

Redis安装和配置(Linux)

一、安装准备 VMware虚拟机准备&#xff1a; https://www.vmware.com/cn/products/workstation-pro.html Centos7.0准备&#xff1a; https://www.centos.org/ 二、安装 安装好VMware以后&#xff0c;进入VMware,然后创建新的虚拟机 创建好虚拟机以后&#xff0c;进行安装C…

Fast SAM与YOLOV8检测模型一起使用实现实例分割以及指定物体分割

Fast SAM与YOLOV8检测模型一起使用 部分源代码在结尾处可获取 晓理紫 1 使用场景 实例分割数据集的获取要比检测数据的获取更加困难&#xff0c;在已有检测模型不想从新标注分割数据进行训练但是又想获取相关物体的mask信息以便从像素级别对物体进行操作&#xff0c;这时就可以…