当前位置: 首页 > news >正文

C语言:分支与循环

       

创造不易,友友们给个三连吧!!

     C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。

我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

一、if语句

1.1 if

if ( 表达式 )语句

在C语⾔中,0为假,非0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。 

使用举例:输⼊⼀个整数,判断是否为奇数

int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1)printf("%d 是奇数\n", num);return 0;
}

1.2 else

如果⼀个数不是奇数,那就是偶数了,这⾥就需要 if...else... 语句了

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

使用举例:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。 

int main()
{int num = 0;scanf("%d", &num);if(num % 2 == 1)printf("%d 是奇数\n", num);elseprintf("%d 是偶数\n", num);return 0;
}

1.3 分支中包含多条语句

默认在 if 和 else 语句中默认都只控制⼀条语句,那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {  } 将代码括起来, else 后也可以跟上⼤括号。方式如下:

int main()
{int age = 0;scanf("%d", &age);if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句{printf("成年了\n");printf("可以交⼥朋友了\n");}else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句{printf("未成年\n");printf("不可以早恋哦\n");}return 0;
}

注:使⽤{ }控制多条语句-这个块也叫:程序块,或者复合语句 

1.4 嵌套if

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

使用举例:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。

int main()
{int num = 0;scanf("%d", &num);if(num == 0)printf("输⼊的数字是0\n");else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构printf("输⼊的数字是正数\n");elseprintf("输⼊的数字是负数\n");return 0;
}

1.5 悬空else

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

我们发现运行代码后啥也不输出,因为实际上 else 是和第⼆个 if 进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不 成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。 

如果我们希望else和第⼀个if匹配,可以这样修改代码:

int main()
{int a = 0;int b = 2;if(a == 1){if(b == 2)printf("hehe\n");}else{printf("haha\n");}return 0;
}

这说明了:某些情况下带上适当的⼤括号,代码的逻辑就会更加的清晰,代码的可读性会更高!

二、switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易用、可读性更好的形式。

switch (expression) {case value1: statement1;break;case value2: statement2;break;………………default: statementbreak;
}

上⾯代码中,根据表达式 expression 不同的值,执行相应的 case 分支中的statement语句。如果找不到对应的值, 就执行default 分支中的statement语句。 

易错点:

1、switch 后的 expression 必须是整型表达式(char类型也是可以的,因为字符是以ASCII码值的形式存储的,ASCII值是整数,字符属于整型家族)

int main()
{char ch = ‘w’;scanf("%c", &ch);switch(ch)//不会报错{case ‘a’:……break;case ‘b’:……break;case ‘c’:……break;}return 0;
}

2、case 后的值,必须是整形常量表达式

3、case 和后边的value之间必须有空格

4、每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。

2.1 if和switch的对比

例如:输⼊任意⼀个整数值,计算除3之后的余数

用if语句写:

int main()
{int n = 0;scanf("%d", &n);if(n%3 == 0)printf("整除,余数为0\n");else if(n%3 == 1)printf("余数是1\n");elseprintf("余数是2\n");return 0;
}

用switch语句写:

int main()
{int n = 0;scanf("%d", &n);switch(n%3){case 0:printf("整除,余数为0\n"); break;case 1:printf("余数是1\n"); break;case 2:printf("余数是2\n"); break;}return 0;
}

2.2 switch中的break

前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?

int main()
{int n = 0;scanf("%d", &n);switch(n%3){case 0:printf("整除,余数为0\n"); case 1:printf("余数是1\n"); case 2:printf("余数是2\n"); }return 0;
}

 输入:7   输出 :余数是1   余数是2

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执行,按顺序执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。 

有些时候我们也可以利用这个特点减小代码量,比如:

题目要求:输⼊1-5,输出的是“⼯作⽇”;输⼊6-7,输出“休息⽇”

int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("⼯作⽇\n");break;case 6:case 7:printf("休息⽇\n");break;}return 0;
}

2.3 switch中的default

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。

就⽐如前⾯做的打印星期的练习,如果 day 的输⼊不是1~7的值,如果我们要提⽰:输⼊错误

int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("⼯作⽇\n");break;case 6:case 7:printf("休息⽇\n");break;default:printf("输⼊错误\n");break;}return 0;
}

2.4 switch语句中的case和default的顺序问题

在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。

不过我们通常是把 default子句放在最后处理的。

三、while循环

C语⾔提供了3种循环语句, while 就是其中⼀种。 while 语句的语法结构和 if 语句⾮常相似。

while(表达式)语句;//如果循环体想包含更多的语句,可以加上⼤括号

3.1 while和if对比

//代码1
#include <stdio.h>
int main()
{if(1)printf("hehe\n"); //if后边条件满⾜,打印⼀次hehereturn 0;
}

打印一次hehe 

int main()
{while(1)printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehereturn 0;
}

 循环打印hehe

while语句只要后面的条件满足,可以实现循环执行语句!! 

首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语 句,语句执⾏完后再继续判断,是否进行下⼀次判断。

3.2 while循环的正确使用

因为while循环只要后面的条件满足就可以实现死循环,所以我们需要在while循环的里面的语句增加调整部分使得while每次循环都渐渐接近条件不满足的情况,最后退出。

int main()
{int i = 1;while(i<=10){printf("%d ", i);i++;}return 0;
}

初始化部分:int i=1

判断部分:i<=10

调整部分:i++

3.3 while循环的练习

题目:输⼊⼀个正的整数,逆序打印这个整数的每⼀位

例如: 输⼊:1234,输出:4 3 2 1

             输⼊:521,输出:1 2 5

题⽬解析:

1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4

2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。

3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。

int main()
{int n = 0;scanf("%d", &n);while(n){printf("%d ", n%10);n /= 10;}return 0;
}

四、for循环

for 循环是三种循环中使⽤最多的

for(表达式1; 表达式2; 表达式3)
语句;//如果循环体想包含更多的语句,可以加上⼤括号

      ⾸先执⾏ 表达式1初始化循环变量,接下来就是执⾏表达式2的判断部分, 表达式2的结果如果 ==0,则循环结束; 表达式2的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式 3 ,调整循环变量,然后再去表达式2 的地⽅执⾏判断, 根据表达式2的结果是否为0,决定循环是否继续。

      整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

4.1 for循环的使用

在屏幕上打印1~10的值

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

4.2 for循环和while循环的对比

        for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分非常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。 

注:for循环的初始化部分,判断部分,调整部分都可以省略,但是要注意判断部分省略了表示判断部分恒为真,会无限循环下去。

五、do-while循环

在循环语句中 do while 语句的使⽤最少

do语句;//想包含更多的语句,可以加上⼤括号
while(表达式);

 while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳 出循环;

⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的 结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。

所以在 do while 语句中循环体是⾄少执行⼀次的,这是 do while 循环比较特殊的地⽅。 

练习:输⼊⼀个正整数,计算这个整数是⼏位数?

例如: 输⼊:1234 输出:4

            输⼊:12 输出:2

int main()
{int n = 0;scanf("%d", &n);int cnt = 0;do{cnt++;
n = n / 10;} while (n);printf("%d\n", cnt);return 0;
}

       这⾥并⾮必须使⽤ do while 语句,但是这个代码就⽐较适合使⽤ do while 循环,因为n即使是 0,也是1位数,要统计位数的。 

六、break和continue语句

       在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终止循环,这是⾮常常⻅的现象。C语⾔中 提供了 break 和 continue 两个关键字,就是应该到循环中的。 

break 的作⽤是⽤于永久的终止循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。

continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

6.1 while和do while循环中的break和continue

break:

int main()
{int i = 1;while(i<=10){if(i == 5)break;//当i等于5后,就执⾏break,循环就终⽌了printf("%d ", i);i = i+1;}return 0;
}

运行结果:1 2 3 4                因为打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。

所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。 那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

continue: 

int main()
{int i = 1;while(i<=10){if(i == 5)continue;//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环printf("%d ", i);i = i+1;}return 0;
}

程序会死循环             因为 continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

所以continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏ 下⼀次循环的判断。

do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,所以不做讲解。 

6.2 for循环中的break和continue

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

 运行结果:1 2 3 4                因为打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。

这也说明的break在循环结构里面作用是一致的,就是 永久的终⽌循环

int main()
{int i = 1;for(i=1; i<=10; i++){if(i == 5)continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分printf("%d ", i);}return 0;
}

运行结果:1 2 3 4 6 7 8 9 10          因为这⾥continue跳过了后边的打印,来到了i++的调整部分 在 for 循环中

     continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调 整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。  

     这也说明了continue在for和while循环中略有差异,对于for循环来说,因为调整部分是写在上面的,所以无论如何都不能跳过调整部分,最多就是少执行一次,而对于while循环来说,如果调整部分在continue后面,那么必然会造成死循环!! 

七、循环的嵌套

三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决 问题,就是我们所说的:循环嵌套

题目:找出100~200之间的素数,并打印在屏幕上。

题目解析:

1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。

2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤循环解决。(嵌套循环)

3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。(设置一个flag作为打印标志)

int main()
{int i = 0;//循环产⽣100~200的数字for(i=100; i<=200; i++){//判断i是否为素数//循环产⽣2~i-1之间的数字int j = 0;int flag = 1;//假设i是素数for(j=2; j<i; j++){if(i % j == 0){flag = 0;break;
}}if(flag == 1)printf("%d ", i);}return 0;
}

注:n=a*b。假设n是16,a=8则b=2,a=4则b=4,所以我们发现一个整数如果想要拆分成两个因子想乘的话,那么这两个因子至少有一个会小于等于根号n,所以判断n是否是质数,不需要遍历      2——n-1的数字了,只要遍历2——根号n的数字就可以了,这样运行效率就会更高!!!

优化版:

int main()
{int i = 0;//循环产⽣100~200的数字for(i=100; i<=200; i++){//判断i是否为素数//循环产⽣2~i-1之间的数字int j = 0;int flag = 1;//假设i是素数for(j=2; j<=sqrt(i); j++){if(i % j == 0){flag = 0;break;
}}if(flag == 1)printf("%d ", i);}return 0;
}

sqrt是一个开平方的库函数,头文件是<math.h> 

八、goto语句

     C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

int main()
{printf("hehe\n");goto next:printf("haha\n");next:printf("跳过了haha的打印\n"); return 0;
}

         goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;

        但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出 使⽤ goto 就非常的方便了。 

for(...)
{for(...){for(...){if(disaster)goto error;}}
}
error://...

       本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套 就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。 

九、随机数生成方法

9.1 rand

C语⾔提供了⼀个函数叫 rand,这函数是可以⽣成随机数的

int rand (void);

       rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。 

rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h 

int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

 运行结果:41  18467  6334   26500    19169

 注意:虽然⼀次运⾏中产⽣的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次⼀模⼀样,因为rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。

        之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。

9.2 srand

C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器的

       程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。

       那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了!因此我们需要用到time!!

9.3 time 

在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发生变化的

在C语⾔中有⼀个函数叫 time ,就可以获得这个时间

time_t time (time_t* timer);

         time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型(和size_t一样,在64位机器是8个字节,在32位机器是4个字节)。

使用注意事项:

1、time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。

2、如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

3、time函数的时候需要包含头⽂件:time.h

4、时间戳是不断变化的,所以我们将time函数的返回值作为种子。

所以随机数生成代码可以这样写:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{//使⽤time函数的返回值设置种⼦//因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换srand((unsigned int)time(NULL));//srand的参数类型是unsigned int,所以要强转printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

注意:srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。 (所以我们一般把他放在main函数里面的靠前位置),如果每生成一次随机数之前就调用一次srand函数,那么得到随机数会非常地接近。

9.4 设置随机数的范围

⽣成0~99之间的随机数的⽅法

rand() %100;//余数的范围是0~99

要⽣成100~200的随机数的⽅法 

100 + rand()%(200-100+1)//余数的范围是0~100,加100后就是100~200

要⽣成a~b的随机数的⽅法 

a + rand()%(b-a+1)

十、猜数字游戏的实现

写一个猜数字游戏

要求:

1、电脑⾃动⽣成1~100的随机数

2、玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束

3、如果5次猜不出来,就算失败

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{int r = rand() % 100 + 1;int guess = 0;int count = 5;while (count){printf("\n你还有%d次机会\n", count);printf("请猜数字>:");scanf("%d", &guess);if (guess < r){printf("猜⼩了\n");}else if (guess > r){printf("猜⼤了\n");
}else{printf("恭喜你,猜对了\n");break;}count--;}if (count == 0){printf("你失败了,正确值是:%d\n", r);}
}
void menu()
{printf("***********************\n");printf("****** 1. play ******\n");printf("****** 0. exit ******\n");printf("***********************\n");
}
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("游戏结束\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=jsa1iwfcqyng

相关文章:

C语言:分支与循环

创造不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; C语⾔是结构化的程序设计语⾔&#xff0c;这⾥的结构指的是顺序结构、选择结构、循环结构&#xff0c;C语⾔是能够实 现这三种结构的&#xff0c;其实我们如果仔细分析&#xff0c;我们⽇常所⻅的事情都可以拆分…...

【linux系统体验】-archlinux折腾日记

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化 三、问题总结3.1 终端中文乱码 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤&#xff1a; 磁盘分区安装 Linux内核配置系统&#xff08;…...

常用数字处理格式校验

1、前端校验 1.1 要求为数字类型&#xff08;不限位数与正负&#xff09; input输入框添加 type“number” <el-input type"number"/>当typenumber时&#xff0c;仍然可以输入字母e或E。解决方法是&#xff1a;给typenumber的输入框添加一个正则表达式&…...

2024.1.26力扣每日一题——边权重均等查询

2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先&#xff08;会超时&#xff0c;通不过&#xff09;方法二 不需要构建图&#xff0c;直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2846 我的题解 …...

C语言操作符超详细总结

文章目录 1. 操作符的分类2. 二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字 2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制 3. 原码、反码、补码4.移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&#xff1a;&、|、^、~6. 逗号表达式…...

【Java八股面试系列】JVM-内存区域

目录 Java内存区域 运行时数据区域 线程独享区域 程序计数器 Java 虚拟机栈 StackFlowError&OOM 本地方法栈 线程共享区域 堆 GCR-分代回收算法 字符串常量池 方法区 运行时常量池 HotSpot 虚拟机对象探秘 对象的创建 对象的内存布局 句柄 Java内存区域 运…...

计划任务功能优化,应用商店上架软件超过100款,1Panel开源面板v1.9.6发布

2024年2月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.6版本。 在v1.9.5和v1.9.6这两个小版本中&#xff0c;1Panel针对计划任务等功能进行了多项优化和Bug修复。此外&#xff0c;1Panel应用商店新增了3款应用&#xff0c;上架精选软件应用超过1…...

蓝桥杯(Web大学组)2023省赛真题3:收集帛书碎片

需要实现&#xff1a; 1.将二维数组转为一维数组&#xff1b; 2.数组去重 一、将二维数组转为一维数组&#xff1a; 二、数组去重&#xff1a; function collectPuzzle(...puzzles) {// console.log(puzzles);// console.log(...puzzles);// TODO:在这里写入具体的实现逻辑/…...

使用QT编写一个简单QQ登录界面

widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口标题this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(…...

TryHackMe-Net Sec Challenge练习

本文相关的TryHackMe实验房间链接&#xff1a;TryHackMe | Why Subscribe nmap nmap -T5 -p- 10.10.90.32 -T5 扫描速度 -p- 全端口扫描 答题&#xff1a; 这题叫我们找藏在http服务下的flag&#xff0c;根据上面扫出来的端口&#xff0c;所以我们开始搞80 这里简单介绍一下…...

面试 JavaScript 框架八股文十问十答第五期

面试 JavaScript 框架八股文十问十答第五期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;常见的位运算符有…...

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情&#xff0c;而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群&#xff0c;这样才能让你们的公司想盈利就盈利&#xff0c;想战略就战略&#xff0c;想融资就融资。 一般从事运营的人有着强大的自信心&#xff0c;后台数据分析…...

CTFshow web(命令执行 41-44)

web41 <?php /* # -*- coding: utf-8 -*- # Author: 羽 # Date: 2020-09-05 20:31:22 # Last Modified by: h1xa # Last Modified time: 2020-09-05 22:40:07 # email: 1341963450qq.com # link: https://ctf.show */ if(isset($_POST[c])){ $c $_POST[c]; if(!p…...

XML介绍和基本语法

XML简介 XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于标记电子文件使其具有结构性的标记语言。它允许用户定义自己的标记元素&#xff0c;使得信息的共享和数据的存储更加便捷和通用。XML广泛应用于Web开发、配置文件、数据交…...

Android:Android Studio安装及环境配置

1开发环境搭建 Android开发需要使用java的jdk环境,所以需要下载JAVA JDK。 1.1安装配置JAVA JDK Java的JDK下载: https://www.oracle.com/technetwork/java/javase/downloads/index.html 配置java的环境变量: JAVA_HOME:java安装路径。 新增环境变量CLASSPATH 在Path环境…...

力扣刷题之旅:进阶篇(三)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 一、动态规划&#xff08;DP&#xff09; 首先&#xff0c;让我们来…...

代码随想录 Leetcode55. 跳跃游戏

题目&#xff1a; 代码(首刷自解 2024年2月9日&#xff09;&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int noz 0;for (int i nums.size() - 2; i > 0; --i) {if (nums[i] 0) {noz;continue;} else {if (nums[i] > noz) noz …...

Go Context -- 管理请求的上下文信息

在Go语言中&#xff0c;管理请求的上下文信息对于构建可靠的并发程序至关重要。context 包为我们提供了一种优雅的方式来传递请求的取消信号、超时信息和请求范围的值。接下来将深入探讨Go中的 context 包&#xff0c;包括其基本概念、用法、实际应用场景和最佳实践&#xff0c…...

springboot170图书电子商务网站的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

设计模式(结构型模式)适配器模式

目录 一、简介二、使用2.1、目标接口2.2、被适配者2.3、适配器2.4、使用 一、简介 适配器模式是一种结构型设计模式&#xff0c;允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的类能够协同工作。适配器模式通常用于连接两…...

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…...

158基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序

基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序&#xff0c;输出齿轮啮合轨迹及传递误差。程序已调通&#xff0c;可直接运行。 158 matlab 弧齿锥齿轮啮合轨迹 传递误差 (xiaohongshu.com)...

C#中的浅度和深度复制(C#如何复制一个对象)

文章目录 浅度和深度复制浅度复制深度复制如何选择 浅度和深度复制 在C#中&#xff0c;浅度复制&#xff08;Shallow Copy&#xff09;和深度复制&#xff08;Deep Copy&#xff09;是两种不同的对象复制方式&#xff0c;满足不同的应用场景需求&#xff0c;它们主要区别在于处…...

2.6日学习打卡----初学RabbitMQ(一)

2.6日学习打卡 初识RabbitMQ、 一. MQ 消息队列 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信。 同步通信相当于两个人当面对话&#xff0c;你一言我一语。必须及时回复 异步通信相当于通…...

Rust语言之集合

文章目录 一、元组&#xff08;tuple&#xff09;1.元组定义2.元组使用解构索引 3.元组修改非可变元组可变元组类型不一致 二、数组1.数组不可变数组定义可变数组定义数组使用数组修改数组的遍历 2.动态数组-向量&#xff08;Vector&#xff09;向量定义向量遍历向量追加向量插…...

有道论文翻译接口,python版和lua版

论文翻译接口python版 import requests import hashlib from urllib.parse import quotedef get_md5(s,is_hexTrue):md5hashlib.md5()md5.update(s.encode())if is_hex:return md5.hexdigest()return md5.digest()def translate(source_url,from_en,tozh-CHS):params {from: f…...

java大数据hadoop2.9.2 Flume安装操作

1、flume安装 &#xff08;1&#xff09;解压缩 tar -xzvf apache-flume-1.9.0-bin.tar.gz rm -rf apache-flume-1.9.0-bin.tar.gz mv ./apache-flume-1.9.0-bin/ /usr/local/flume &#xff08;2&#xff09;配置 cd /usr/local/flume/conf cp ./flume-env.sh.template…...

环境配置:Ubuntu18.04 ROS Melodic安装

前言 不同版本的Ubuntu与ROS存在对应关系。 ROS作为目前最受欢迎的机器人操作系统&#xff0c;其核心代码采用C编写&#xff0c;并以BSD许可发布。ROS起源于2007年&#xff0c;是由斯坦福大学与机器人技术公司Willow Garage合作的Switchyard项目。2012年&#xff0c;ROS团队从…...

2024.2.7-8 寒假训练记录(21)

文章目录 洛谷P3193 [HNOI2008] GT考试ATC abc339E Smooth SubsequenceATC abc339F Product Equality 洛谷P3193 [HNOI2008] GT考试 题目链接 KMPdp矩阵快速幂 还没有理解得很清楚&#xff0c;主要是对KMP理解还不够深刻 #include <bits/stdc.h>using namespace std;…...

C++ pair 的使用

pair的作用 C 中的 std::pair 是标准模板库 (STL) 提供的一个容器&#xff0c;它能够存储两个不同类型的数据作为一个整体&#xff0c;其中first&#xff1a;访问 pair 的第一个元素。second&#xff1a;访问 pair 的第二个元素。 int main() {pair<string, int> p;//通…...

AAAI 2024 | Adobe提出全新上下文提示学习框架CoPL,高效提升下游性能

论文题目&#xff1a;CoPL: Contextual Prompt Learning for Vision-Language Understanding 论文链接&#xff1a;https://arxiv.org/abs/2307.00910 提示学习&#xff08;Prompt Learning&#xff09;在近几年的快速发展&#xff0c;激活了以Transformer为基础的大型语言模型…...

Arcgis使用过程中常见问题解决方法

Arcgis无法连接数据库/数据库连接或创建失败解决方法 最近在使用arcgis过程中出现无法连接数据库或者是无法创建数据库。连接到数据库失败&#xff1b;无法创建新的数据库&#xff0c;权限被拒绝&#xff08;如下图&#xff09;。 出现这个原因是你所用的电脑系统文件dao360.…...

office文件转pdf在线预览

一、工具类 package com.sby.utils;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.Locale;import com.aspose.cel…...

设计模式2-对象池模式

对象池模式&#xff0c;Object Pool Pattern&#xff0c;当你的应用程序需要频繁创建和销毁某种资源&#xff08;比如数据库连接、线程、socket连接等&#xff09;时&#xff0c;Object Pool 设计模式就变得很有用。它通过预先创建一组对象并将它们保存在池中&#xff0c;以便在…...

Oracle笔记-为表空间新增磁盘(ORA-01691)

如下报错&#xff1a; 原因是Oracle表空间满了&#xff0c;最好是新增一个存储盘。 #查XXX命名空间目前占用了多大的空间 select FILE_NAME,BYTES/1024/1024 from dba_data_files where tablespace_name XXXX #这里的FILE_NAME能查到DBF的存储位置#将对应的datafile设置为30g…...

【专业技术】高效并行分布式深度学习策略,助力模型训练与量化

尊敬的客户&#xff0c;您好&#xff01;我们是一家专注于提供高效深度学习解决方案的专业团队&#xff0c;为您提供并行分布式策略、高效精调策略、大模型无损量化和高性能推理服务。 我们的服务包括&#xff1a; 并行分布式策略&#xff1a;我们的Trainer封装支持多种并行配…...

力扣-137. 只出现一次的数字 II

文章目录 力扣题目代码 力扣题目 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a;…...

Rust 格式化输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、format! 宏二、fmt::Debug三、fmt::Display四、? 操作符 循环打印 前言 Rust学习系列-本文根据教程学习Rust的格式化输出&#xff0c;包括fmt::Debug&…...

c#进程(Process)常用方法

在C#中&#xff0c;Process类提供了一系列用于操作进程的常用方法&#xff0c;以下是其中一些常用的方法&#xff1a; Start()&#xff1a;启动一个新的进程。 Process.Start("notepad.exe");Kill()&#xff1a;终止进程。 Process.GetProcessesByName("note…...

Vue源码系列讲解——虚拟DOM篇【三】(更新子节点)

1. 前言 在上一篇文章中&#xff0c;我们了解了Vue中的patch过程&#xff0c;即DOM-Diff算法。并且知道了在patch过程中基本会干三件事&#xff0c;分别是&#xff1a;创建节点&#xff0c;删除节点和更新节点。创建节点和删除节点都比较简单&#xff0c;而更新节点因为要处理…...

一个设备内存2M,一个1G大小的文件,这个文件有若干行,输出其中的带有hello的行以及行数

第一种 linux上的awk命令&#xff1a; awk {if($1 "113.111.211.224"){print $0}} temp.log 第二种&#xff1a;PHP程序yield &#xff0c;和awk这个命令用的时间差不多一样&#xff0c;效率是很高的 $file __DIR__."/temp.log";foreach(readfilecong…...

json模块(高维数据的存储与读取)

json模块是 Python 标准库中的一个模块&#xff0c;用于处理 JSON&#xff08;JavaScript Object Notation&#xff09;格式的数据。JSON是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。模块提供了在 Python 中进行 JSON 编码&…...

ONLYOFFICE文档8.0新功能浅探

ONLYOFFICE文档8.0新功能浅探 上个月末这个月初的几天&#xff0c;ONLYOFFICE版本更新了&#xff01;更新到了一个比较整的大的版本号&#xff0c;8.0版本&#xff0c;看来这个生产力工具的升级速度基本上能保持每年两个版本号的速度&#xff0c;还是很快的&#xff0c;一般来…...

在vscode 中配置 pyside6 环境

在vscode中编写pyside环境配置 start 记录一下在 vscode 中编写 pyside6 程序&#xff0c;环境如何配置。 前提 请自行安装好 python。请自行安装好 vscode。安装 vscode 插件 Python&#xff0c;PYQT Integration。 配置环境 1.借助 pip 安装我们的pyside6 pip install…...

C语言:月份缩写

题目描述 从一月份到十二月的英文全称依次是&#xff1a;“January”,“February”,“March”,“April”,“May”,“June”,“July”,“August”,“September”,“October”,“November”,“December” 对应的缩写依次是&#xff1a;“Jan.”,“Feb.”,“Mar.”,“Apr.”,“Ma…...

线阵相机系列-- 1. 什么是线阵相机

线阵相机的概念 根据工业相机像素排列方式的不同&#xff0c;分为面阵相机和线阵相机。面阵相机的像素排列为一个完整的面&#xff0c;一次获取整幅二维图像&#xff0c;而线阵相机的像素以一条线排列&#xff0c;每次得到的图像呈现出一条线&#xff0c;通过设置扫描频率以及…...

CISCRISC? CPU架构有哪些? x86 ARM?

编者按&#xff1a;鉴于笔者水平有限&#xff0c;文中难免有不当之处&#xff0c;还请各位读者海涵。 是为序 我猜&#xff0c;常年混迹CSDN的同学应该不会没听说过CPU吧&#xff1f; 但你真的了解CPU吗&#xff1f;那笔者问你CPU有哪些架构呢&#xff1f; 如果你对你的答案…...

【C语言】(15)指针进阶

1. 指针与const 在C语言中&#xff0c;const关键字和指针一起使用时&#xff0c;可以创建对常量的引用&#xff0c;或者创建指向常量的指针。这对于保护重要数据不被意外修改以及提高程序的可读性和运行时的安全性非常有用。 1.1 const的基本用法 const关键字用于声明一个变…...

力扣精选算法100道—— 连续数组(前缀和专题)

连续数组&#xff08;前缀和专题&#xff09; 目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 ❗为什么hash设置成<0,-1>键值对 ❗与和为K的子数组比较hash的键值对 &#x1f6a9;代码实现 &#x1f6a9;了解题意 我们看到给定数组里面只有0和1&#xff0c;我们…...

flutter 国内源

Flutter 在中国由于网络原因&#xff0c;从官方默认的国外源下载Dart包和Flutter SDK可能会比较慢或者不稳定。为了加速依赖包的获取与Flutter SDK的安装&#xff0c;可以使用国内镜像源。以下是一些国内常用的Flutter和Dart包镜像源&#xff1a; 清华大学开源软件镜像站 Flu…...