C语言9~10 DAY(合集)
数组的概念
什么是数组
数组是相同类型,有序数据的集合。
数组的特征
-
数组中的数据被称为数组的元素,是同构的
-
数组中的元素存放在内存空间里 (char player_name[6]:申请在内存中开辟6块连续的基于char类型的变量空间)
衍生概念:下标(索引)
-
下标或索引代表了数组中元素距离第一个元素的偏移位置。
-
数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址)。
-
数组的下标是从0开始的。
一维数组
数组的定义
-
类型说明符 数组名[数组容量]
说明:
-
数组的类型说明符由数组中的元素来决定,也就是元素是什么类型,数组就是什么类型
-
数组名也是标识符, 我们所说的数组(名),大家可以理解为数据类型是数组的变量(名)。
-
数组容量也可以叫做常量表达式,举例: int ages[10]、int lcd[1024*768]
类型:代表了数组中元素的类型
容量:数组中能存储多少个元素,数组容量可以是一个常量、常量表达式,还可以是符号常量,但必须是整型。
深入理解:定义一个数组,相当于申请了一个可以容纳所指定元素数量的内存单元。所申请的内存单元是连续的。
定义一个数组,相当于定义了多个匿名变量,这些变量可以通过 数组名[下标] 来标识。
举例:
// 定义一个数组 int arr[10]; // 问题:上面数组中,最小下标0,最大下标9
经过上面的案例,分析得到
数组的最大下标 = 数组元素个数(数组容量) - 1
数组元素的访问
原则:数组中的元素不能一次性访问所有元素,只能一个一个的访问。
访问方式:
数组名[下标];
举例:
// 定义一个容纳10个元素的int数组 int arr[10]; // 给数组的第一个元素进行赋值 arr[0] = 89; // 访问数组的第一个元素 int a = arr[0]; // 问题:以下访问是否正确 int b = arr[10]; // error,下标越界异常
注意:数组元素的访问一定不能越界。
案例:
/* 需求:一维数组案例-引用数组元素。利用循环给数组元素a[0]~a[9]赋值0~9,并且逆序输出 */ #include <stdio.h> int main() {// 创建一个数组int arr[10];// 使用for循环给数组赋值for(int i = 0;i < 10;i++){arr[i] = i;}// 逆序输出// 我们通过循环将数组中的元素一个个取出来,称之为遍历for(int j = 9;j >= 0;j--){printf("%d ",arr[j]);}printf("\n"); // 纯粹换行return 0; }
数组的初始化
定义数组的同时,用指定数据来给对应元素赋值。
简化数组定义后,需要对元素一一赋值操作。
语法规则:
-
类型 数组名[容量] = {常量1,常量2,常量3...};
注意事项:
-
数组可以部分初始化:也就是可以给数组中前几个元素初始化,未被初始化的元素系统将自动初始化,如0;如果定义数组时未指定数据容量,则系统会根据初始化元素的个数来决定数组容量。
// 1. 如果定义数组时只给数组前几个初始化,后续剩余元素会自动完成初始化,比如赋值0 int arr[10] = {1,2,3,4,5} // 推荐写法,等价于以下写法 int arr[10] = {1,2,3,4,5,0,0,0,0,0} // 2. 如果定义数组时未指定数据容量,根据初始化元素个数来决定容量 int arr[] = {1,2,3,4,5} // 推荐写法,等价于以下写法 int arr[5] = {1,2,3,4,5}
衍生概念:
-
柔性数组:柔性数组的概念是在C99标准,针对结构体的最后一个成员可以是一个未指定大小的数组;
广义简单理解:数组容量待定或者待确定的数组,举例: int arr[] = {1,2,3,4,5}
面试题:
-
在不知道数组类型的情况下,如何确定数组元素的个数
int length = sizeof(arr) / sizeof(arr[0])
说明:
1. arr就是我们计算的数组本身,`sizeof(arr)`用来计算该数组中总的字节大小。 2. `sizeof(arr[0])`用来计算数组中一个元素所占的字节大小,因为数组中的元素类型相同,所以计算哪一个都行。 3. `sizeof(arr)/sizeof(arr[0])`就是用数组中总的字节数除以每一个元素所占的字节数,从而得到元素的个数。
一维数组案例
案例1:
/* 需求:一维数组案例-非波拉契数列 */ #include <stdio.h> int main() {int i;// 循环变量int f[20] = {1,1}; // 定义一个数组,用来存储数列,默认存储第1位和第2位int length = sizeof(f)/sizeof(f[0]);// 计算数组的元素个数// 生出数列存入数组for(i = 2;i < length;i++){// 给数组元素赋值,从数组的第3个元素开始f[i] = f[i - 2] + f[i - 1];}// 遍历数组// 通过循环将数组中的每一个元素取出来,称之为遍历for(i = 0;i < length;i++){// 遍历的时候,要求一行显示5个数if(i % 5 == 0){printf("\n");}printf("%6d",f[i]);}printf("\n");return 0; }
数组的典型应用:数据排序
冒泡排序
-
向后冒泡 思想:
-
一次只排好一个数,针对n个数,最差情况需要 n-1次就可以排好
-
每次排序将相邻数据两两比较,将较大或较小的数据向后交换,等所有数据都比较完成,将较大/较小的数就会出现在最后,这也是该数应该有的位置。
-
在余下的数中,再次应用第2步的操作,直到只剩下一个数。
-
向前冒泡
思想:
-
一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好
-
每次排序假定第一个元素是最大/最小的,用第一个元素的后面的元素一一与第一个元素比较,遇到较大/较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个数;
-
在余下的数中,再次应用第2步的操作,直到只剩下一个数。
-
一维数组案例
案例2:
/* 需求:一维数组案例-冒泡排序 */ #include <stdio.h> int main() {// 创建一个数组,用来存储排序的数列int arr[11];int i,j,temp;// i:比较的轮数,j:每一轮比较的次数,temp:临时变量,用来比较时交换数据printf("请输入11个测试整数:\n");// 计算数组的大小int length = sizeof(arr) / sizeof(int); // 这里 sizeof(int) 等价于 sizeof(arr[0]);// 通过循环录入数据for(i = 0;i < length; i++){scanf("%d",&arr[i]);}printf("\n");// 对数组arr使用冒泡进行排序(注意:我们使用标准冒泡,大家也可以自行补充优化版的冒泡,如鸡尾酒排序法等等)// 外层循环:控制比较的轮数,因为有11个数,所以我们需要比较 length -1 轮,也就是比较10轮for(i = 0;i < length -1;i++){// 内层循环:每一轮比较的次数,每一轮比较的次数为 length - 1 - i, 3-1-0=2,3-1-1=1,3-1-2=0for(j = 0;j < length-1-i;j++){// 相邻的两个数进行比较,满足条件交换位置if(arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("冒泡排序后遍历数组:\n");for(i = 0; i < length; i++){printf("%4d",arr[i]);}printf("\n");return 0; }
案例3:
/* 需求:一维数组案例-从键盘输入年、月、日,计算并输出该日是该年的第几天。 */ #include <stdio.h> int main() {// 定义变量:年,月,日,统计总天数,循环变量,用来遍历当前月前面的月份int year,month,day,sum,k;// 定义一个数组,用来存放1~12月每月的天数int t[] = {31,0,31,30,31,30,31,31,30,31,30,31};// 柔性数组printf("请输入年份、月份、天:\n");scanf("%d,%d,%d",&year,&month,&day);// 因为二月比较特殊,存在平年和润年这样的因素,所以需要进行平年和润年的判断if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){t[1] = 29; // 润年 2月 29天}else{t[1] = 28; // 平年 2月 28天}sum = day; // 默认记录最后一个月的天数// 这是该年的第几天for(k = 0; k < month -1;k++){sum += t[k]; // 叠加前几个月的天数}printf("%d月%d日是%d年的第%d天。\n",month,day,year,sum);return 0; }
二维数组
定义
-
二维数组本质上是一个行列式的组合,也就是说二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。
-
二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。
语法
类型 数组名[行数][列数];
举例:
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 等价于以下写法 int arr[][3] = {{1,2,3},{4,5,6},{7,8,9}}; // 柔性数组 int arr[3][] = {{1,2},{4,5,6},{7}} // 等价于 {{1,2,0},{4,5,6},{7,0,0}}
应用场合
主要应用于数据有行列要求的情况。
特殊写法
下标可以是整型表达式,如: a[2-1] [2*2-1]
下标可以是已经有值的变量或数组元素, 如 a[2*x-1] [b[3] [1]]
数组元素可以出现在表达式中, 如: b[1] [2]=a[2] [3]/2
初始化
-
分行给二维数组赋初值
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
-
可将所有数据写在一个花括号内,按照排列顺序对元素赋值。
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; // 等价于上面的写法
-
可对部分元素赋初值,其余未赋值部分自动填充 0 | \0 | 0.0...
int a[3][4] = {{1},{5,6},{9}}; // 等价于 int a[3][4] = {{1,0,0,0},{5,6,0,0},{9,0,0,0}}
-
若对全部元素赋初值,自定义数组时可以省略第1为数组的长度,第2维数组的长度必须指明。
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
-
在分行赋初值是,也可以省略第1维的长度。
int a[][4] = {{1,2,3},{0},{0,10}}; // 等价于 int a[][4] = {{1,2,3,0},{0,0,0,0},{0,10,0,0}}
案例
案例1:
/** * 案例:二维数组的遍历 */ #include <stdio.h> int main() {int arr[][3] = {{1},{2,4},{5,6,7}};// 经过论证:二维数组我们必须指明第2维的数组的长度// 获取行元素的大小int length = sizeof(arr) / sizeof(arr[0]); // 如果是二维数组,第1维的长度,应该是如左侧这样获取printf("length:%d\n",length);// 遍历二维数组,需要使用双层for循环,外层遍历行,内层遍历每一行的列for(int row = 0;row < length;row++){// 获取列元素的总大小int len = sizeof(arr[row]) / sizeof(int);for(int col = 0; col < len; col++){// 获取列元素printf("%3d",arr[row][col]);// 意思是获取数组arr 第row行第col列}printf("\n");}return 0; } // 数据类型,分支结构,循环结构,数组
案例2:
/** * 需求:二维数组案例-矩阵的转置(就是将一个2行3列的数组转换为3行2列的数组) */ #include <stdio.h> int main() {// 准备2个数组,存放转前和转后的数据int arr_before[2][3] = {1,2,3,4,5,6};int arr_after[3][2] = {0};// 初始化,每一列上都是0// 遍历arr_beforefor(int i = 0;i < sizeof(arr_before)/sizeof(arr_before[0]);i++){for(int j = 0;j < sizeof(arr_before[i])/sizeof(int);j++){// 转置arr_after[j][i] = arr_before[i][j];}}// 遍历arr_afterfor(int i = 0;i < sizeof(arr_after)/sizeof(arr_after[0]);i++){for(int j = 0;j < sizeof(arr_after[i])/sizeof(int);j++){// 输出printf("%4d",arr_after[i][j]);}printf("\n");}return 0; }
案例3
/** * 需求:二维数组案例-准备一个int类型的二维数组,求该数组中大的最大值,以及对应的行号,列号 */ #include <stdio.h> int main() {// 准备一个二维数组int arr[3][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};// 创建变量,用保存最大值、行号、列号int max = arr[0][0],row=0,col=0;// 遍历集合for(int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++){for(int j = 0;j < sizeof(arr[i]) / sizeof(arr[i][0]);j++){// 判断最大值if(arr[i][j] > max){max = arr[i][j];row = i;col = j;}}}printf("max=%d,row=%d,col=%d\n",max,row,col);return 0; }
字符数组
概念
-
元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。需要注意的一点是,我们C语言中的字符是字节字符。
-
字节字符:也就是一个字符占1个字节
测试题:
char a = 'A' // 正确 char b = '1' // 正确 char c = 65 // 正确 这是ASCII码编号,对应的值是 'A' char d = "A" // 错误,这是字符串的写法,也是char数组的写法,char d[1] = "A" char e = '马' // 错误,中文一个字符超过1一个字节
语法
char 数组名[容量]; char 数组名[行容量][列容量];
字符数组的语法就是之前所学一维数组和二维数组的语法,只不过数据类型是char而已。
注意: 如果我们的char数组初始化的时候,没有完全赋完值的时候,空出来的地方使用 \0 进行填充。
字符案例
案例1:
/** * 需求:字符数组案例-输出一个字符串(I LOVE YOU!) */ #include <stdio.h> int main() {// 准备一个测试字符串 I LOVE YOU!char arr[11] = {'I',' ','L','O','V','E',' ','Y','O','U','!'};// 通过一个for循环进行遍历输出for(int i = 0;i < sizeof(arr)/sizeof(char);i++){printf("%c",arr[i]);}printf("\n");return 0; }
案例2:
/** * 需求:字符数组案例-输出一个用字符组成的菱形图案 */ #include <stdio.h> int main() {// 准备数据char arr[5][5] = {{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{'','*',' ','*',' '},{' ',' ','*',' ',' '}};// 遍历数组for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++){for(int j = 0;j < sizeof(arr[i])/sizeof(char);j++){// 打印菱形printf("%c",arr[i][j]);}// 内层循环每结束一轮,就是一行printf("\n");}printf("\n");return 0; }
字符串和字符串结束标志
说明
字符数组的多样表示
我们的char数组可以以数组的方式一个个输出每个字符;我们的char数组也可以以字符串的方式整体
进行输出所有字符。具体如下面案例:
/* 需求:字符数组->字符串 */ #include <stdio.h> int main() {// 字符串第1种表示:char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};// 字符串第2种表示:char s2[] = {"hello world"};// 字符串第3种表示:char s3[] = "hello world";// 测试,使用字符串方式打印,这样就不用一一遍历printf("%s\n",s1);printf("%s\n",s2);printf("%s\n",s3);return 0; }
注意
-
字符串的长度与字符数组的长度不一定相同。
-
利用字符串常量可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值。
// 正确写法:利用字符串常量给字符数组初始化 char b[15] = "China"; // 错误写法:利用字符串常量给字符数组赋值 char b[15]; b[15] = "China";
字符串的基础操作
字符串输入
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");scanf("%s",name);// 如果是字符串,这里不是变量地址,是变量名printf("您的姓名是:%s\n",name);return 0; }
注意:采用scanf进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格会结束。
-
fgets(数组名,数组容量,stdin);
说明:采用fgets进行字符串输入,可获取所有输入的字符串,包含 \n
,在实际的字符串处理时,我们
可能需要处理 \n
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");fgets(name,sizeof(name)/sizeof(char),stdin);// 输入,返回地址puts(name);// 输出return 0; }
注意:
-
如果输入的字符串不包含 空格 和 换行 ,可以使用scanf() | fgets();
-
如果输入的字符串需要包含 空格 和 换行 ,只能使用fgets();
-
经过对比,我们发现,在字符串的输入中,fgets()更好;
字符串输出
puts(数组名)
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");scanf("%s",name);puts(name);// 输出 问题?字符串如何拼接printf("您的姓名是:%s\n",name);return 0; }
-
printf("%s",数组名);
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");scanf("%s",name);printf("您的姓名是:%s\n",name);return 0; }
字符串拼接
-
strcat(数组名,"需要拼接的字符串") 注意:需要引入 #include <string.h>
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> #include <string.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");fgets(name,sizeof(name)/sizeof(char),stdin);// 输入,返回地址puts(strcat(name," 跑着!"));// 拼接return 0; }
字符串拷贝
-
strcpy(数组名,字符串)
注意:需要引入 <string.h>库
说明:这个方法适合给字符串赋值用。
char str[16] = "马杰克" // 初始化,正确 char str[16]; str[16] = "马杰克" // 赋值,错误 char str[16]; strcpy(str,"马杰克") // 赋值,正确,结果:马杰克
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> #include <string.h> int main() {// 创建一个变量,用来存放人的名字char name[20];printf("请输入您的姓名:\n");scanf("%s",name);strcpy(name,"你好");printf("%s\n",name);// 输出return 0; }
字符串比较
-
strcmp(字符串1,字符串2);
注意:
-
需要引入 <string.h>
-
返回的结果是boolean
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> #include <string.h> int main() {// 创建一个变量,用来存放人的名字char username[20];printf("请输入您的账户:\n");scanf("%s",username);if(strcmp(username,"admin")){printf("账户输入错误!\n");}else{printf("账户输入正确!\n");}return 0; }
获取字符串长度
-
strlen(字符串)
注意:
-
需要 <string.h>
-
返回字符串长度
案例:
/* * 需求:字符数组-字符串的输入输出 */ #include <stdio.h> #include <string.h> int main() {// 创建一个变量,用来存放人的名字char username[20];printf("请输入您的账户:\n");scanf("%s",username);// 获取字符串长度unsigned long len = strlen(username);if(strcmp(username,"admin")){printf("账户输入错误!%lu\n",len);}else{printf("账户输入正确!%lu\n",len);}return 0; }
相关文章:

C语言9~10 DAY(合集)
数组的概念 什么是数组 数组是相同类型,有序数据的集合。 数组的特征 数组中的数据被称为数组的元素,是同构的 数组中的元素存放在内存空间里 (char player_name[6]:申请在内存中开辟6块连续的基于char类型的变量空间) 衍生概念&#x…...

【Kubernetes】应用的部署(一):金丝雀部署
应用的部署(一):金丝雀部署 在项目迭代开发过程中,经常需要对应用进行上线部署。上线部署策略主要有 3 种:金丝雀部署、蓝绿部署 和 滚动部署。 金丝雀部署 也被叫作 灰度部署。金丝雀部署过程:先让一部分…...

1.面试准备篇
筛选简历 找实习用处不大 简历注意事项 注意职业技能和项目经历 职业技能 黄金位置 针对性 引导面试官提问 只写会的 不会的不能写 项目描述 主要设计… 展示指标 找练手项目 来源:Gitee 或者github 主要关注点:功能实现、常见问题、系统设计 面试过程 一面…...
Spring: try-catch 是否还会回滚
问题出现: try-catch 语句 依旧会抛出如下错误 org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnlyat org.springf…...

spdlog日志库--基础介绍
文章目录 1. 简介1.1. spdlog代码特点1.2. 说明1.3. spdlog架构 2. spdlog的安装2.1. 使用包管理器安装2.2. 使用源码安装2.3. 仅使用头文件 3. 相关概念3.0 常用的头文件3.1. level_enum3.2. sink3.3. logger3.4 格式输出3.5 对齐方式3.6 截断3.7 字符串格式化fmt 4. 特性4.1.…...

【网络】网络编程套接字(二)
网络编程套接字(二) 文章目录 1.单执行流的TCP网络程序1.1服务端创建套接字1.2服务端绑定1.3服务端监听1.4服务端获取链接1.5服务端处理请求1.6客户端创建套接字1.7客户端连接服务器1.8客户端发起请求 2.多进程版的TCP网络程序2.1单执行流的弊端2.2多进…...

1.1、centos stream 9安装Kubernetes v1.30集群 环境说明
最近正在学习kubernetes,买了一套《Kubernetes权威指南 从Docker到Kubernetes实践全接触(第六版)》这本书讲得很好,上下两册,书中k8s的版本是V1.29,目前官网最新版本是v1.30。强烈建议大家买一套看看。 Kubernetes官网地址&#x…...
Redis3
目录 什么是缓存穿透?怎么解决? 什么是缓存雪崩?怎么解决? 如何保证数据库和缓存的数据一致性? 如何保证Redis服务高可用? 哨兵的作用 Redis虚拟槽分区有什么优点? 为什么Redis集群最大槽…...
Oracle数据巡检 - 设计巡检模板
设计巡检模板 明确巡检数据库等信息 包括数据库种类、版本、架构、数量等,例如 Oracle DG和Oracle RAC数据库巡检项肯定会有差异,Oracle 11g和12c版本巡检内容也会有所不同。 明确巡检项 这一块需要结合自身的运维经验,列出详尽的巡检项&…...

优盘未格式化数据恢复实战指南
在数字时代,优盘(USB闪存驱动器)作为便携存储媒介,承载着无数重要的文件与数据。然而,当您插入优盘准备访问资料时,却遭遇了“驱动器未被格式化”的提示,这无疑是一场突如其来的数据危机。本文将…...
【python基础】python基础习题练习(一)
文章目录 一. python语言简介二. python基本语法与常用函数三. python基本数据类型一.选择题二.编程题四. python组合数据类型一.选择题二.简答题三.编程题一. python语言简介 查看python是否安装成功的命令是:python -vPython IDE有:pyCharm、Spyder、Jupter NotebookPython…...
GESP 4级样题 ---> 绝对素数
这题需要判断一个数和它的反转后的数是否都为素数。 可以转成 string 后 reverse 一下。 AC CODE: #include <bits/stdc.h> using namespace std; typedef long long LL; bool isPrime(int x){if(x<2) return false;for(int i2;i*i<x;i){if(x%i0) re…...
大语言模型系列 - Transformer
1. 简介 1.1. 概述 大语言模型Transformer是一种由谷歌公司提出的基于注意力机制的神经网络模型,它在自然语言处理(NLP)领域取得了显著成就,并逐渐被应用于其他领域如语音识别、计算机视觉和强化学习等。 1.2. 学习资源 以下是一些学习大语言模型Transformer的资源地址…...

Java面试之操作系统
1、冯诺依曼模型 运算器、控制器、存储器、输入设备、输出设备 32位和64位CPU最主要区别是一次性能计算多少字节数据,如果计算的数额不超过 32 位数字的情况下,32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下&#…...

springboot船舶维保管理系统--论文源码调试讲解
第二章 相关技术 本次开发船舶维保管理系统使用的是Vue进行程序开发,船舶维保管理系统的数据信息选择MySQL数据库进行存放。 2.1 VUE介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue…...

【机器学习西瓜书学习笔记——神经网络】
机器学习西瓜书学习笔记【第五章】 第五章 神经网络5.1神经元模型5.2 感知机与多层网络学习感知机学习率成本/损失函数梯度下降 5.3 BP神经网络(误差逆传播)5.4 全局最小与局部极小5.5 其他常见神经网络RBF网络RBF 与 BP 最重要的区别 ART网络 第五章 神…...

安装 electron 报错解决
1. 报错 大概率由镜像问题导致 2. 解决 2.1 打开 npm 配置 npm config edit 2.2 添加配置 registryhttps://registry.npmmirror.comelectron_mirrorhttps://cdn.npmmirror.com/binaries/electron/electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron…...

【Material-UI】Icon Button 组件详解
文章目录 一、基础用法1. 禁用状态 二、大小(Sizes)1. 小尺寸(Small)2. 大尺寸(Large) 三、颜色(Colors)1. 主题颜色2. 自定义颜色 四、高级用法和最佳实践1. 无障碍性(A…...

51单片机-第七节-DS1302实时时钟
一、DS1302介绍: 实时时钟芯片,可对年,月,日,周,时,分,秒计时,是一种集成电路。 二、DS1302原理: 1.寄存器定义: Command:操作模式…...

Java毕业设计 基于SSM和Vue的图书馆座位预约系统小程序
Java毕业设计 基于SSM和Vue的图书馆座位预约系统小程序 这篇博文将介绍一个基于SSM框架和Vue开发的图书馆座位预约系统微信小程序,适合用于Java毕业设计。 功能介绍 用户 登录 注册 首页 图片轮播 关于我们 公告信息 图书馆信息 图书馆详情 预约选座 收藏 …...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...