C.C语言分支和循环语句

文章目录

一. 什么是语句

二. 分支语句(选择结构)

2.1. if 语句

2.1.1. 语法结构

2.1.2. 悬空else

2.1.3. 书写形式的对比

2.1.4. 练习

2.2. switch 语句

3.2.1. 语法结构

3.2.2. 在switch语句中的 break

3.2.3. default子句

3.2.4. 练习

三. 循环语句

3.1. while 循环

3.1.1. 语法格式

3.1.2. while语句中的break

3.1.3. while语句中的continue

3.1.4. 练习

3.2. for 循环

3.2.1. 语法格式

3.2.2. while语句中的break

3.2.3. while语句中的continue

3.2.4. for语句的循环控制变量

3.2.5. 一些for循环的变种

3.3. do while 循环

3.3.1. 语法格式

3.3.2. do while语句中的break

3.3.3. do while语句中的continue

3.4. 综合练习

3.5. 折半查找算法

五. goto 语句


一. 什么是语句

C语句可分为以下五类:

  • 表达式语句

  • 函数调用语句

  • 控制语句

  • 复合语句

  • 空语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。

可分成以下三类:

  • 条件判断语句也叫分支语句:if语句、switch语句。

  • 循环执行语句:do while语句、while语句、for语句。

  • 转向语句:break语句、goto语句、continue语句、return语句。

二. 分支语句(选择结构)

如果你好好学习,校招时拿一个好offer,走上人生巅峰。 如果你不学习,毕业等于失业,回家卖红薯。 这就是选择!

2.1. if 语句

2.1.1. 语法结构

那if语句的语法结构是怎么样的呢?

// 语法结构:No.1
if(表达式)
	语句;
// 语法结构:No.2
if(表达式)
	语句1;
else
	语句2;

// 语法结构:No.3 多分支
if(表达式1)
语句1;
else if(表达式2)
	语句2;
else
	语句3;

【实例代码】

// No.1 代码
#include <stdio.h>

int main() {
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年!\n");

	return 0;
}
// No.2 代码
#include <stdio.h>

int main(int argc, char** argv) {
	int age = 0;
	scanf("%d", &age);

	if (age < 18)
		printf("未成年!\n");
	else {
		printf("成年!\n");
	}
		
	return 0;
}
// No.3 代码
#include <stdio.h>

int main(int argc, char** argv) {
	int age = 0;
	scanf("%d", &age);


	if (age < 18) {
		printf("少年\n");
	}  
	else if (age >= 18 && age < 30) {
		printf("青年\n");
	}  
	else if (age >= 30 && age < 50) {
		printf("中年\n");
	}  
	else if (age >= 50 && age < 80) {
		printf("老年\n");
	}  
	else {
		printf("老寿星\n");
	}

	return 0;
}

解释一下: 如果表达式的结果为真,则语句执行,在C语言中0表示假,非0表示真

如果条件成立,要执行多条语句,怎应该使用代码块。

#include <stdio.h>
int main()
{
	if (表达式)
	{
		语句列表1;
	}
	else
	{
		语句列表2;
	}
	return 0;
}

这里的一对 { } 就是一个代码块。

2.1.2. 悬空else

当你写了这个代码:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	return 0;
}

修改后:else的匹配:else是和它离的最近的if匹配的。

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("hehe\n");
		}
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

2.1.3. 书写形式的对比

下列代码中:代码2和代码4更好,逻辑更加清晰,不容易出错。

//代码1
if (condition) {
	return x;
}
return y;
//代码2
if (condition)
{
	return x;
}
else
{
	return y;
}

//代码3
int num = 1;
if (num == 5)
{
	printf("hehe\n");
}
//代码4
int num = 1;
if (5 == num)
{
	printf("hehe\n");
}

2.1.4. 练习

【练习代码】判断一个数是否为奇数。

#include <stdio.h>

// 判断一个数是否为奇数 
int main(int argc, char** argv) {
	int val = 0;
	scanf("%d", &val);

	if (val % 2 == 0)
		printf("偶数!\n");
	else
		printf("奇数!\n");
}

【练习代码】输出1-100之间的奇数

#include <stdio.h>

int main(int argc, char** argv) {
	int num = 1;

	while (num <= 100) {
		if(num % 2 == 0)
			printf("%d->偶数!\n", num);
		else
			printf("%d->奇数!\n", num);
		num++;
	}
	return 0;
}

2.2. switch 语句

3.2.1. 语法结构

switch语句也是一种分支语句,常常用于多分支的情况。

【比如】

  • 输入1,输出星期一

  • 输入2,输出星期二

  • 输入3,输出星期三

  • 输入4,输出星期四

  • 输入5,输出星期五

  • 输入6,输出星期六

  • 输入7,输出星期日

那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。

这就是switch 语句。

switch(整型表达式)
{
	语句项(是一些case语句);
}

case 整形常量表达式:
	语句;

3.2.2. 在switch语句中的 break

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

int main(int argc, char** argv) {
	int day = 1;

	switch (day) {
		case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期天\n");
			break;
	}
	return 0;
}

有时候我们的需求变了:

  • 输入1-5,输出的是“weekday”;

  • 输入6-7,输出“weekend” ;

所以我们的代码就应该这样实现了:

#include <stdio.h>

int main(int argc, char** argv) {
	int day = 0;

	switch (day)
	{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("weekday\n");
			break;
		case 6:
		case 7:
			printf("weekend\n");
			break;
	}
	
	return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分。

编程好习惯

在最后一个 case 语句的后面加上一条 break语句(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

3.2.3. default子句

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

写在任何一个 case 标签可以出现的位置。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯

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

#include <stdio.h>

int main(int argc, char** argv) {
	int day = 0;

	switch (day)
	{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("weekday\n");
			break;
		case 6:
		case 7:
			printf("weekend\n");
			break;
		default:
			printf("day的值不在1-7范围内!");
	}
	
	return 0;
}

3.2.4. 练习

#include <stdio.h>
int main()
{
	int n = 1;				
	int m = 2;					// n=1, m=2
	switch (n)
	{
	case 1:
		m++;					// n=1, m=3			
	case 2:
		n++;					// n=2, m=3		
	case 3:
		switch (n)				// n=2, m=3		
		{//switch允许嵌套使用
		case 1:
			n++;
		case 2:
			m++;				
			n++;				// n=3, m=4		
			break;
		}
	case 4:
		m++;					// n=3, m=5		
		break;
	default:
		break;
	}
    
	printf("m = %d, n = %d\n", m, n);		// 打印结果m=5, n=3
	return 0;
}

三. 循环语句

3.1. while 循环

3.1.1. 语法格式

C语言中给我们引入了: while 语句,可以实现循环。

while(表达式)
	循环语句;

while语句执行的流程:

代码实例:在屏幕上打印1-10的数字。

#include <stdio.h>

int main(int argc, char** argv) {
	int iVal = 0;

	while (iVal < 10) {
		printf("%d ", iVal + 1);
		iVal++;
	}

	return 0;
}

// 打印结果:1 2 3 4 5 6 7 8 9 10

上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:

3.1.2. while语句中的break

#include <stdio.h>

int main(int argc, char** argv) {
	int iVal = 0;

	while (iVal < 10) {
		if (iVal == 5) {
			break;
		}

		printf("%d ", iVal + 1);
		iVal = iVal + 1;
	}
}

// 打印结果:1 2 3 4 5  (后面就结束了)

总结:break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环,所以:while中的break是用于永久终止循环的

3.1.3. while语句中的continue

#include <stdio.h>

int main(int argc, char** argv) {
	int iVal = 0;

	while (iVal < 10) {
		if (iVal == 5) {
			continue;
		}

		printf("%d ", iVal + 1);
		iVal = iVal + 1;
	}
}

// 打印结果:1 2 3 4 5 (后面就死循环了)

总结:continue在while循环中的作用就是:continue是用于终止本次循环的,也就是本次循环continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断

3.1.4. 练习

函数介绍

int getchar ( void );
/*
	描述:
		从stdin中获取字符
	返回值:
		如果成功,则返回所读取的字符(提升为int值)。
		返回类型为int,以适应特殊值EOF(-1),它表示失败。
		如果标准输入位于文件末尾,则该函数返回EOF并设置stdin的EOF(-1)指示器(feof)。
*/	
	
int putchar ( int character );
/*
	描述:
		将字符写入标准输出,将字符写入标准输出(stdout)。
	参数:
		要读取的字符变量。
	返回值:
		如果发生写错误,则返回EOF并设置错误指示器(error)。
*/
//代码1
#include <stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}
// 这里的代码适当的修改是可以用来清理缓冲区的。

//代码2
#include <stdio.h>
int main()
{
	char ch = '\0';
	while ((ch = getchar()) != EOF)
	{
		if (ch < ‘0’ || ch > ‘9’)
			continue;
		putchar(ch);
	}
	return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的。

3.2. for 循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢?

3.2.1. 语法格式

for(表达式1; 表达式2; 表达式3)
	循环语句;

/*
解释:
	表达式1:表达式1为初始化部分,用于初始化循环变量的。
	表达式2:表达式2为条件判断部分,用于判断循环时候终止。
	表达式3:表达式3为调整部分,用于循环条件的调整。
*/

for语句执行的流程:

实例代码:使用for循环 在屏幕上打印1-10的数字 。

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

现在我们对比一下for循环和while循环 :

#include <stdio.h>

int main(int argc, char** argv) {
	int i = 0;

	//实现相同的功能,使用while
	i = 1;//初始化部分
	while (i <= 10)//判断部分
	{
		printf("hehe\n");
		i = i + 1;//调整部分
	}
	//实现相同的功能,使用while
	for (i = 1; i <= 10; i++)
	{
		printf("hehe\n");
	}
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

3.2.2. for语句中的break

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

//代码1
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

3.2.3. for语句中的continue

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

//代码2
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

3.2.4. for语句的循环控制变量

建议

  • 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

  • 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

3.2.5. 一些for循环的变种

#include <stdio.h>

int main()
{
	//代码1
	for (;;)
	{
		printf("hehe\n");
	}
	//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。
	
	//代码2
	int i = 0;
	int j = 0;
	//这里打印多少个hehe?
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("hehe\n");
		}
	}

	//代码3
	int i = 0;
	int j = 0;
	//如果省略掉初始化部分,这里打印多少个hehe?
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("hehe\n");
		}
	}

	//代码4-使用多余一个变量控制循环
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;
}

3.3. do while 循环

3.3.1. 语法格式

do
	循环语句;
while(表达式);

do while语句执行的流程:

#include <stdio.h>

int main(int argc, char** argv) {
	int i = 10;
	do {
	
		printf("%d\n", i);
	
	} while (i < 10);

	return 0;
}

3.3.2. do while语句中的break

#include <stdio.h>

int main()
{
	int i = 10;
	do
	{
		if (5 == i)
			break;
		printf("%d\n", i);
	} while (i < 10);
	return 0;
}

3.3.3. do while语句中的continue

#include <stdio.h>

int main()
{
	int i = 10;
	do
	{
		if (5 == i)
			continue;
		printf("%d\n", i);
	} while (i < 10);
	return 0;
}

3.4. 综合练习

练习一:计算 n的阶乘。

#include <stdio.h>

int main(int argc, char** argv) {
	int i = 10;
	do {
	
		printf("%d\n", i);
	
	} while (i < 10);

	return 0;
}

练习二:计算 1!+2!+3!+……+10!

#include <stdio.h>

int main()
{
	int i = 10;
	do
	{
		if (5 == i)
			break;
		printf("%d\n", i);
	} while (i < 10);
	return 0;
}

练习三:在一个有序数组中查找具体的某个数字n。

#include <stdio.h>

int main(int argc, char** argv) {
	int buffer[] = { 1,2,3,4,5,6,7,8,9,10 };
	int size = sizeof(buffer) / sizeof(int);

	// 要查找的值
	int k = 4;
	// 暴力循环查找
	int i = 0;
	for (i = 0; i < size; i++) {
		if (k == buffer[i]) {
			printf("找到了->要找的值为%d\n", i);
			break;
		}
	}

	// 没有找到的话,说明遍历的一圈。
	if (i == size) {
		printf("没有找到\n");
	}

	return 0;
}

练习四:编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <windows.h>

int main(int argc, char** argv) {
	char arr1[] = "welcome to lesson!!!!";
	char arr2[] = "#####################";

	int leftSub = 0;
	int rightSub = sizeof(arr1) / sizeof(arr1[0]) - 1;

	printf("%s\n", arr2);
	Sleep(1000);
	while (leftSub <= rightSub) {
		arr2[leftSub] = arr1[leftSub];
		arr2[rightSub] = arr1[rightSub];
		printf("%s\n", arr2);

		Sleep(1000);	// Sleep() 系统休眠, 头文件包含<windows.h>
		leftSub++;
		rightSub--;
	}
	return 0;
}

练习五:编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
	char user[] = "shaxiang";
	char password[20] = { 0 };

	int i = 0;
	for (i = 0; i < 3; i++) {
		printf("请输入密码:> ");
		scanf("%s", password);

		if (strcmp(password, "shaxiang") == 0) {
			printf("登陆成功!\n");
			break;
		}
		else
		{
			printf("密码错误!\n");
		}
	}

	if (i >= 3) {
		printf("密码错误3次,没有机会了!\n");
	}

	return 0;
}

练习六:猜数字游戏实现

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

void Menu() {
	printf("********************************\n");
	printf("*********    1、play    ********\n");
	printf("*********    0、exit    ********\n");
	printf("********************************\n");
}

void Game() {
	// 用户输入猜到的数字
	int num = rand() % 100 + 1;
	printf("随机数生成成功:请输入猜想的数组:> \n");
	
	int in = 0;
	while (1) {
		scanf("%d", &in);

		if (in > num) {
			printf("猜大了!\n");
		}
		else if (in < num) {
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你猜对了!\n");
			break;
		}
	}
}

int main(int argc, char** argv) {
	int in = 0;

	do {
		Menu();
		printf("是否继续猜数字>: ");
		scanf("%d", &in);
		switch (in) {
		case 1:
			// 生成随机数种子
			srand((unsigned int)time(NULL));
			Game();
			break;
		case 0:
			printf("已退出!\n");
			break;
		default:
			printf("错误选择,请重新选择!\n");
		}
	} while (in);
}

3.5. 折半查找算法

#include <stdio.h>

int main(int argc, char** argv) {
	int buffer[] = { 1,2,3,4,5,6,7,8,9,10 };
	// 要查找的值
	int findK = 4;
	
	// 二分查找
	int leftSub = 0;
	int rightSub = sizeof(buffer) / sizeof(int) - 1;
	
	while (leftSub <= rightSub) {
		int mid = (leftSub + rightSub) / 2;
		if (findK < buffer[mid]) {
			rightSub = mid - 1;
		}
		else if (findK > buffer[mid]) {
			leftSub = mid + 1;
		}
		else
		{
			printf("找到了->[%d]下标为[%d]\n", findK, mid);
			break;
		}
	}

	if (leftSub > rightSub) {
		printf("未找到[%d]的下标!", findK);
	}

	return 0;
}

五. goto 语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号,从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码,但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环,多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:

for (...)
{
	for (...)
	{
		if (disaster)
			goto error;
	}
}
…
error :
if (disaster)
// 处理错误情况

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

#include <stdio.h>
#include <windows.h>
int main()
{
	system("shutdown -s -t 60");
	char input[10] = { 0 };
	
again:
	printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
	scanf("%s", input);

	if (0 == strcmp(input, "我是猪")) {
		system("shutdown -a");
	}
	else {
		goto again;
	}

	return 0;
}

而如果不适用goto语句,则可以使用循环:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main_24()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
		scanf("%s", input);
		if (0 == strcmp(input, "我是猪"))
		{
			system("shutdown -a");
			break;
		}
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造你的贪吃蛇游戏:HTML、CSS与JavaScript的完美结合

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

IPSEC VPPN实验

实验背景&#xff1a;FW1和FW2是双机热备的状态。 实验要求&#xff1a;在FW和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置&#xff08;由于是双机热备状态&#xff0c;所以FW1和FW2只需要配置FW1主设备即可&…

portainer管理远程docker和docker-swarm集群

使用前请先安装docker和docker-compose&#xff0c;同时完成docker-swarm集群初始化 一、portainer-ce部署 部署portainer-ce实时管理本机docker&#xff0c;使用docker-compose一键拉起 docker-compose.yml version: 3 services:portainer:container_name: portainer#imag…

Java高频面试之消息队列与分布式篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 消息队列的基本作用&#xff1f; 异步通信&#xff1a;消息队列提供了异步通信的能力&#xff0c;发送方可以将消息发送到队列中&#xff0c;而无需等待接收方立即处理。发送方和接收方可以解耦&#x…

【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表&#xff0c;顺序表支持下标随机访问而且高速缓存命中率高&#xff0c;然而可能造成空间的浪费&#xff0c;同时增加数据时多次移动会造成效率低下&#xff0c;那有什么解决之法呢&#xff…

Matlab|2机5节点牛拉法(含报告)

目录 主要内容 下载链接 主要内容 采用牛拉法计算2机5节点的潮流计算程序&#xff0c;程序迭代稳定&#xff0c;运行可靠&#xff0c;含报告资料。 下载链接

pytorch的梯度图与autograd.grad和二阶求导

前向与反向 这里我们从 一次计算 开始比如 zf(x,y) 讨论若我们把任意对于tensor的计算都看为函数&#xff08;如将 a*b&#xff08;数值&#xff09; 看为 mul(a,b)&#xff09;&#xff0c;那么都可以将其看为2个过程&#xff1a;forward-前向&#xff0c;backward-反向在pyto…

【Web】浅聊Java反序列化之C3P0——JNDI注入利用

目录 简介 原理分析 EXP 前文&#xff1a;【Web】浅聊Java反序列化之C3P0——URLClassLoader利用 【Web】浅聊Java反序列化之C3P0——不出网Hex字节码加载利用 简介 出网的情况下&#xff0c;这个C3P0的Gadget可以和fastjson&#xff0c;Snake YAML , JYAML,Yamlbeans , …

【Javascript编程实操05】1、小明买洗发水、香皂、牙刷组合 2、利用循环写出100以内的奇数的和及偶数的和

前言 1、小明买洗发水、香皂、牙刷组合 代码&#xff1a; 实现效果&#xff1a; 2、利用循环写出100以内的奇数的和及偶数的和 代码&#xff1a; 实现效果&#xff1a; 总结 前言 本次主要是继续针对Javascript阶段的for循环的实操练习&#xff0c;共有2个实操&#xff…

vscode setting.json 全局设置 工作区设置 位置 优先级

vscode中setting.json有两种配置权限 一、全局配置&#xff1a;setting.json文件位于C:\Users\Administrator\AppData\Roaming\Code\User\settings.json 二、工作区配置&#xff1a;setting.json文件位于工作区的.vscode\settings.json 当两种配置同时存在时&#xff0c;工作区…

单链表详解(如何实现单链表)

文章目录 前言 一、单链表是什么&#xff1f;二、单链表的实现总结 顺序表的缺点 1.中间/头部的插入删除&#xff0c;时间复杂度为O (N) 2.realloc 扩容&#xff08;特别是异地扩&#xff0c;需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff09;会有不小的…

【开源】JAVA+Vue.js实现高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

Day24:安全开发-PHP应用文件管理模块显示上传黑白名单类型过滤访问控制

目录 文件管理模块-上传-过滤机制 文件管理模块-显示-过滤机制 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技术&#xff1a;输入输出&#…

泛微OA服务器获取 token

泛微OA服务器获取 token 文章目录 泛微OA服务器获取 token一、泛微官方方法1 ecology 系统配置2 发放/生成许可证(appid)3 限制许可证使用ip地址&#xff08;该步骤也可以跳过&#xff09;4 使用 postman 注册5 获取 token6 访问业务系统接口 二、java 代码获取 token三、封装到…

【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Redis实战与进阶》 本专栏带你Redis从入门到入魔 这是苏泽的个…

一次生产环境上的dockerd启动失败原因分析

今夜原计划对 生产环境 上的 SDN 组件进行一次紧急扩容操作的&#xff0c;但业务基础环境中的 Docker-Engine 启动不起来了、原定计划也就无法继续进行了。 尽管查清了基础业务环境中的故障原因&#xff0c;但金主DD说今天先不干了&#xff0c;那就整理整理思路写篇流水账吧 。…

Linux环境下使用线程方式操作UART读写功能

目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数&#xff1a;usr_serial_open 2.2 关闭串口函数&#xff1a; usr_serial_close 2.3 发送数据函数&#xff1a; usr_serial_sendbytes 2.4 接收数据函数&#xff1a; thread_uart_readbytes …

波卡 Alpha 计划启动,呼唤先锋创新者重新定义 Web3 开发

原文&#xff1a;https://polkadot.network/blog/the-polkadot-alpha-program-a-new-era-for-decentralized-building-collaboration/ 编译&#xff1a;OneBlock 区块链领域不断发展&#xff0c;随之而来的是发展和创新机会的增加。而最新里程碑是令人振奋的 Polkadot Alpha …

生态,带给用友新机会? | ToB产业观察

ITValue 近年来&#xff0c;不少厂商都将生态调整到战略级别&#xff0c;但做生态往往需要实打实、接地气的生态策略。 作者&#xff5c;杨丽 首发&#xff5c;钛媒体APP ITValue 3月初&#xff0c;用友召开了新一年的首场生态发布会&#xff0c;为接下来一年动作定调&#xff…

17、电源管理入门之Power supply子系统

目录 1. Power supply框架都做些什么 2. 相关数据结构和接口 2.1 数据结构 2.2 接口 3. 充电驱动 3.1 Charger Manager 3.2 Fuel Gauge 3.3 Charger IC 4. 怎样基于power supply class编写PSY driver 参考资料: 对于便携设备来说,电源管理更加的重要,因为电池电量…