C语言分支和循环语句

news2024/11/23 20:31:02

目录

1.什么是语句😊

2.分支语句(选择结构)😊

2.1 if语句🐾

2.2 switch语句🐾

3.循环语句 😊

3.1 while循环🐾

3.2 for循环🐾

3.3 do...while()循环🐾

3.4 有关循环语句的练习🐾

3.5 折半查找法🐾

4. goto语句😊


1.什么是语句🤞

C语言中的语句大致可分为下面五类:🥰

1. 表达式语句

2. 函数调用语句

3. 控制语句

4. 复合语句

5. 空语句

 其中,我们今天主要讲的是控制语句,控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:👇

1. 条件判断语句也叫分支语句:if语句、switch语句

2. 循环执行语句:do while语句、while语句、for语句

3. 转向语句:break语句、goto语句、continue语句、return语句。

2.分支语句(选择结构)🤞

在人生中处处面临着选择,每种选择都会有相应的结果:

 C语言中如何实现这种多样的选择呢?

2.1 if语句🤞

if语句的语法结构:

if(表达式)

        语句1;

if(表达式)

        语句2;

如果是多分支语句,也可以这样写:

if(表达式1)

        语句1;

else if(表达式2)

        语句2;

else

        语句3;

 让我们来举个例子吧:

#include<iostream>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else
		printf("成年\n"); 
	return 0;
}

 上面是一个简单的if语句,而下面这种稍微复杂一点:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("青少年\n");
	else if (age >= 18 && age <= 30)
		printf("青年\n");
	else if (age >= 31 && age <= 50)
		printf("中老年\n");
	else if (age >= 81 && age <= 100)
		printf("老年\n");
	else
		printf("老妖精\n");
	return 0;
}

 注意:当有多个条件并存时,要使用“&&”

错误示例 :

正确示例: 

 能否将上述代码中的else去掉呢,变成下面这样:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("青少年\n");
    if (age >= 31 && age <= 50)
		printf("青年\n");
	if (age >= 31 && age <= 50)
		printf("中老年\n");
	if (age >= 81 && age <= 100)
		printf("老年\n");
	if (age > 100)
		printf("老妖精\n");
	return 0;
}

 答案是可以,但是第一种代码执行的效率可能要高,因为第一种到遇到满足的条件,其后面的判断语句就不会再执行,最多执行5次判断,最少只会执行一次判断,如果是第二种代码,则会执行每一条if语句,一定会执行5次判断。 

上述代码还可以这样写:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("青少年\n");
	else
	{
		if (age >= 31 && age <= 50)
			printf("青年\n");
		else if (age >= 31 && age <= 50)
			printf("中老年\n");
		else if (age >= 81 && age <= 100)
			printf("老年\n");
		else
			printf("老妖精\n");
	}
	return 0;
}

这种写法是if语句的嵌套使用 ,和上面的代码执行逻辑是一样的

关于大括号的省略:🤞

当if或else下面只控制一条语句时,可以省略大括号,如果有多条语句,则大括号不能省略,当有if嵌套时也可以省略大括号:

例如:👇

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else
	{
		printf("成年\n");
		printf("交女朋友\n");
	}
	return 0;
}

//if嵌套省略大括号的情景
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("青少年\n");
	else
		if (age >= 31 && age <= 50)
			printf("青年\n");
		else if (age >= 31 && age <= 50)
			printf("中老年\n");
		else if (age >= 81 && age <= 100)
			printf("老年\n");
		else
			printf("老妖精\n");
	return 0;
}

 好的编程习惯是不管是一条语句还是多条语句都把大括号加上

测验:下面代码的输出结果是什么?

 绝大多数人是这样认为的:先判断第一条if语句,条件不成立,则执行else中的内容,输出“haha”,然而正确的答案是屏幕上什么也不打印;

其实是这串代码的对齐方式欺骗了我们,当我们正确的对其代码后,结果就显而易见了:因为这种if嵌套是可以省略大括号的,当我们加上括号就是左边这样:

小贴士:

在我们写像这样的代码:

 如果我们少写了一个‘=“编译的结果就会出现错误:

 因为编译器会将一个等号认作是赋值语句,将a的值赋值为1.此时if条件就是永真了。

为了避免出行这种错误,我们可以把a写在后边:

 如果少写了一个’=‘,编译器就会报错,方便我们及时发现。

练习:

1.判断一个数是否为奇数

#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a % 2 == 1)
    {
        printf("是奇数\n");
    }
    else
    {
        printf("不是奇数");
    }
    return 0;
}

2.输出1-100间的奇数

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

2.2 switch语句🤞

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

有这样一种情况:我们从键盘上输入数字1-7,程序就会输出对应的星期。这用代码怎么实现呢?

如果用if...else...语句就是下面这样实现的:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    if (day == 1)
        printf("星期一\n");
    else if (day == 2)
        printf("星期二\n");
    else if (day == 3)
        printf("星期三\n");
    else if (day == 4)
        printf("星期四\n");
    else if (day == 5)
        printf("星期五\n");
    else if (day == 6)
        printf("星期六\n");
    else if (day == 7)
        printf("星期天\n");
    else
        printf("输入错误\n");
    return 0;
}

像这样的代码,其实更适合用switch语句来实现:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    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;
    default:
        printf("输入错误");
        break;
    }
    return 0;
}

其中,case后面的数必须是整形常量,不能是变量

switch后边括号里边变量类型可以是整形,字符型。但是不能是浮点型。

switch语句中break的作用:结束switch语句,防止进入下一条语句。

有时候我们的需求变了,就可以适当的删去一些break:

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

2. 输入6-7,输出“weekend”

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

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    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("输入错误");
        break;
    }
    return 0;
}

default子句的作用:

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结果就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。

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

 好的编程习惯:

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

3.循环语句 🤞

3.1 while循环🤞

我们已经掌握了if语句,当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。

 

 要在屏幕上输出1-10的数字,用代码怎么实现呢?

#include<stdio.h>
int main()
{
	int n = 1;
	while (n <= 10)
	{
		printf("%d ", n);
		n++;
	}
	return 0;
}

 如果在循环体内加上break和continue语句会发生什么呢:

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

加上break的作用就是让循环终止,在上述代码中,当n=5的时候,执行break语句,于是程序就终止 了循环,在屏幕上只输出了 1 2 3 4,在循环中,当某个条件发生时,不想让循环继续执行下去,就可以使用break来达到目的。

break的作用:终止循环。

下面来看看continue的作用:

#include<stdio.h>
int main()
{
	int n = 1;
	while (n <= 10)
	{
		if (n == 5)
			continue;
		printf("%d ", n);
		n++;
	}
	return 0;
}

  当执行这段代码,屏幕上只出现了1 2 3 4,但是4后面的光标却一直在闪烁,说明程序并没有结束,而是出现了死循环,原因就是continue引发的。当程序执行时遇到continue,程序就会结束当前的循环,然后进入下一次循环,因此当n=5是,程序执行continue语句,导致后面的语句直接跳过进入下一次循环,但是在以后的每一次进入循环,n的值都是5,所以程序陷入了死循环。

如果改变n++的位置,就可以避免死循环的发生:

#include<stdio.h>
int main()
{
	int n = 1;
	while (n <= 10)
	{
		n++;
		if (n == 5)
			continue;
		printf("%d ", n);
	}
	return 0;
}

continue的作用:跳过本次循环continue后边的语句,直接去while循环的判断部分

下面让我们来看几个代码:

#include <stdio.h>
int main()
{
 int ch = 0;
 while ((ch = getchar()) != EOF)
       putchar(ch);
    return 0;
}

这个代码的作用是读取键盘输入得字符并输出在屏幕上,到读取到的内容为空(按下ctrl+z)的时候结束程序

EOF:end of file,文件结束标志

EOF的应用:

在scanf函数中,scanf读取成功,返回的是读取到的数据个数,读取失败返回EOF

在getchar中,getchar读取成功返回的是字符的ASCII码值,读取失败返回EOF

 这串代码做适当的修改可以用来清空代码缓冲区:

例如:有这样的情景:

#include <stdio.h>
int main()
{
    char password[] = { 0 };
    printf("请输入密码:->");
    scanf("%s", password);
    printf("请确认密码(N/Y):>");
    char input;
    input=getchar();
    if (input == 'Y')
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

 上述代码是一个输入密码的操作,输完密码后需要我们来输入一个字符来确认密码,当我们输入字符后,在屏幕上打印“确认成功”或者是“确认失败”

但是我们运行代码并输入密码后运行结果是这样的:

 我们还没有输入‘Y或者’N’屏幕上却自动的输出了 “确认失败 ”,这是什么原因呢?

当我们从键盘缓冲区输入123456并按下回车键,键盘缓冲间里就有了“1233456\n”,但scanf函数只会的去‘\n'前面的内容,因此键盘缓冲区你还剩下‘\n’没有被读取,当执行getchar函数时,‘\n’就会被getchar给读走,然后再赋给input。

要想解决这个情况,我们需要想办法把‘\n’给处理掉  ,可以单独放一个getchar来吃掉‘\n’,如下面的代码:👇

#include <stdio.h>
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:->");
    scanf("%s", password);
    printf("请确认密码(N/Y):->");
    getchar();
    char input;
    input = getchar();
    if (input == 'Y')
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

这样程序就可以正常运行了。

还有一种情况,当我们从键盘输完123456,有输入了空格和其他字符,这样也会引起错误:

 原因是scanf不能读取空格,遇到空格就结束输入,后面的字符停留在了输入缓冲区被getchar读取到了。

解决方法:👇

#include <stdio.h>
int main()
{
    char password[20] = { 0 };
    printf("请输入密码:->");
    scanf("%s", password);
    printf("请确认密码(N/Y):->");
    //清理缓冲区中剩余数据
    while (getchar() != '\n')
    {
    }
    char input;
    input = getchar();
    if (input == 'Y')
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

3.2 for循环🤞

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

首先来看看for循环的语法:

 表达式1 表达式1为初始化部分,用于初始化循环变量的。

 表达式2 表达式2为条件判断部分,用于判断循环时候终止。

 表达式3 表达式3为调整部分,用于循环条件的调整。

实际使用:

使用for循环 在屏幕上打印1-10的数字.

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

 for循环不加大括号只能控制一条语句,如果想要控制多条语句,必须加上一组大括号。

在for循环里也可以使用break和continue语句:

加break:👇

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

 加continue:👇

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

for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问 题。

#include<stdio.h>
int main()
{
	for (;;)
	{
		printf("hehe");
	}
	return 0;
}

 这个代码的三个表达式都省略了,意味着判断是恒为真的,代码将死循环的打印“hehe”

比较下面两串代码的输出结果:👇

 左边代码输出结果:👇

 右边代码输出结果:👇

 原因:右边的代码省略了第一个表达式,当外层循环第一次执行结束后,j的值已经变成了4,无法进入第二层循环,因此只打印4次

3.3 do...while()循环🤞

do语句的语法:

 

 使用do while循环打印1-10:

代码:👇 

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	}while(i <= 10);
	return 0;
}

在do while循环里也可以使用break和continue,基本方法和上面的循环一样。

3.4 有关循环语句的练习🤞

1. 计算 n的阶乘。

 代码:👇

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 1;
	for (i = 1; i <= n; i++)
	{
		ret *= i;
	}
	printf("%d\n", ret);
	return 0;
}

2. 计算 1!+2!+3!+……+10!

代码:👇 

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 1, sum = 0;
	for (i = 1; i <= n; i++)
	{
		ret *= i;
		sum += ret;
	}
	printf("%d\n", sum);
	return 0;
}

 3. 编写代码,演示多个字符从两端移动,向中间汇聚。

 代码的效果就是依次在屏幕上输出下面图片上的每一行:

 代码:👇

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char arr1[] = "Nice to meet you!";
	char arr2[] = "#################";
	int left = 0;
	int right = strlen(arr1) - 1;
	while(left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(500);
		system("cls");
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}

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

 代码:👇

#include<stdio.h>
#include<string.h>
int main()
{
	int i = 0;
	char password[20] = { 0 };
	char s[20] = "123456";//假设密码是123456
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:\n");
		scanf("%s", &password);
		if (strcmp(password, s) == 0)
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
	}
	if (i == 3)
	{
		printf("退出程序\n");
	}
	return 0;
}

3.5 折半查找🤞

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

代码模板: 👇

#include <stdio.h>
int main()
{
	int g[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k, flag = 0;
	int left = 0;
	int right = sizeof(g) / sizeof(g[0]) - 1;
	printf("请输入要查找的数:\n");
	scanf("%d", &k);
	while(left<=right)
	{
		int mid = (left + right) / 2;
		if (g[mid] == k)
		{
			printf("找到了,下标是:%d\n",mid);
			flag = 1;
			break;
		}
		else if (g[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}
	if (flag == 0)
	{
		printf("找不到\n");
	}
	return 0;
}

4. goto语句🤞

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

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

随意滥用goto语句可能引发错误:

#include<stdio.h>
int main()
{
again:
	printf("hehe");
	goto again;
 	return 0;
} 

 程序死循环的打印“hehe”了

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

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

 如果需要跳出多层循环,就需要用到goto语句了

goto语句只能在一个函数内部跳转,不能跨函数跳转,下面为错误案例:👇

使用goto语句写一个关机程序😊

1.程序运行起来后,1分钟内电脑关机

2.如果输入:我是猪,就取消关机 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char input[20];
    system("shutdown -s -t 60");
again:
    printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就取消关机\n");
    scanf("%s", input);
    if (strcmp(input, "我是猪") == 0)
    {
        system("shutdown -a");
    }
    else
    {
        goto again;
    }
 	return 0;
} 

 不使用goto语句的写法:👇

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

 

总结:这篇文章主要写的是C语言中的分支和循环语句的使用方法,后期将继续写关于C语言的文章。如果我写的有什么的不好之处,请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~😘

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

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

相关文章

太太太太太卷了,累了

我们聊到互联网行业的时候&#xff0c;一个不可避免的话题就是“内卷” 在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…

春秋云境:CVE-2022-25401(任意文件读取漏洞)

目录 一、题目 二、curl访问flag文件 一、题目 介绍&#xff1a; Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 进入题目 是一个登录页面 sql和暴破都无解。 官方POC 国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 …

初阶数据结构之顺序表的增删查改(二)

文章目录 [TOC](文章目录) 前言一、顺序表1.1顺序表的概念1.2顺序表的分类1.3、顺序表的接口定义 二.顺序表的完整实现2.1代码的完成实现 总结 前言 线性表的含义&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种…

CSAPP第五章 面向编译器的优化(2)

回顾 先复习一下之前的东西。 练习5.7 我们可以看到&#xff0c;相比combine4生成的基于指针的代码&#xff0c;GCC使用了C代码中数组引 用的更加直接的转换。循环索引i在寄存器rdx中&#xff0c;data的地址在寄存器rax中。和 前面一样&#xff0c;累积值acc在向量寄存器xm…

bthome协议分析及esp32上的实现

前言 最近自己搞了些智能家居的小节点&#xff0c;但由于wifi入网方式功耗太高&#xff0c;于是关注起了蓝牙 bthome是一种灵活的低功耗BLE数据格式协议&#xff0c;用于广播传感器数据&#xff0c;此协议支持数据加密&#xff0c;目前最新为v2版本。在home assistant中也支持…

( “树” 之 BST) 108. 将有序数组转换为二叉搜索树 ——【Leetcode每日一题】

108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&#xff1a; 输入…

【pytorch函数笔记】torch.split

官方文档&#xff1a;https://pytorch.org/docs/stable/generated/torch.split.html?highlightsplit torch.split(tensor, split_size_or_sections, dim0) Splits the tensor into chunks. Each chunk is a view of the original tensor. If split_size_or_sections is an in…

栈的基本操作(C语言实现)创建,销毁,入栈,出栈

前言 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;栈的…

Linux网络编程服务端的创建

文章目录 前言一、编程前的准备1.相关函数的了解二、accept函数特别注意点三、具体函数的实现四、运行客户端和服务端进行通信验证总结前言 上篇文章讲解了如何创建一个客户端,这篇文章将创建一个服务端用来和上篇文章的客户端进行通信。 一、编程前的准备 1.相关函数的了解…

服务(第九篇)tomcat的部署和优化

tomcat的介绍&#xff1a; 免费的、开放源代码的Web应用服务器&#xff08;用java开发的&#xff09; Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目 由Apache、Sun和一些公司及个人共同开发而成 深受Java爱好者的喜爱&#xff0c;并得到部分软…

干货|实验操作难入门?快来看JoVE视频网站!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 当导师要求我们学习、模仿一些学术大神所做的心理学实验&#xff0c;尤其是采用脑影像、脑电技术等高端仪器的实验时&#xff0c;我们往往会因为缺少对具体操作细节的了解而感到困惑或困难。…

【python视图2】基于networkx的10个绘图技巧

一、说明 networkx在02年5月产生&#xff0c;是用python语言编写的软件包&#xff0c;便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络…

MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS

项目使用东西 硬件 Spartan-7 SP701 FPGA 7系列FPGA电阻网络实现的MIPI接口 OV5640 MIPI接口 软件 AMD Vivado 2020 版本以上 AMD Vitis 2020 介绍 MIPI 接口现在非常流行&#xff0c;国产FPGA目前基本都带MIPI接口&#xff0c;而AMD-Xilinx是从U系列开始支持MIPI电平&#x…

使用CMake的CPack工具打包项目

为了介绍如何使用CMake的CPack工具进行项目打包&#xff0c;这里使用了前文CMake项目使用ctestgtest进行单元测试中的示例。 为了更接近实际开发中项目的情况&#xff0c;自行下载gtest并进行源码编译来模拟实际项目中的依赖项&#xff1b;在实际的开发中&#xff0c;可能会有…

chatgpt智能提效职场办公-ppt怎么压缩文件大小

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 压缩PPT文件大小有以下几种方法&#xff1a; 压缩图片大小&#xff1a;在PPT当中&#xff0c;图片是占用存储空间最大的部分&#xff0…

物联网多协议、多场景自定义测试|XMeter Cloud 更新

近日&#xff0c;全球首个物联网 MQTT 负载测试云服务 XMeter Cloud 推出了自定义场景测试功能。 该功能将满足用户自主定义测试场景和测试更广泛协议的需求&#xff0c;实现对除 MQTT 以外的 TCP、WebSocket、HTTP 等其他网络协议的测试&#xff0c;帮助用户构建更复杂的测试…

mybatis模糊查询以及结果封装详解

mybatis模糊查询以及结果封装详解 创建maven项目&#xff1a;项目结构如图所示 准备数据库表&#xff1a; 准备pom.xml所需的依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0…

程序地址空间(下)

目录 &#xff1a; 1.接上部分内容再谈谈地址空间是什么&#xff1f;&#xff1f; 2.页表MMU&#xff08;硬件设备&#xff09; 3.为什么要搞个虚拟地址映射到物理地址 4.解释为什么最开始的问题&#xff1f;&#xff1f;&#xff1f; ---------------------------------------…