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

从0到1入门C++编程——01 C++基础知识

文章目录

  • 一、工具安装
  • 二、新建项目
  • 三、设置字体、注释、行号
  • 四、C++基础知识
    • 1.数据类型
    • 2.输入输出
    • 3.运算符
    • 4.选择、循环结构
    • 5.跳转语句
    • 6.数组
    • 7.函数
    • 8.指针
    • 9.结构体

一、工具安装

学习C++使用到的工具是Visual Studio,Visual Studio 2010旗舰版下载链接:点此跳转,提取码:m145。
Visual Studio的安装包是一个以.iso为后缀的镜像文件,下载完成后其安装过程可以参考文章VS2010详细安装步骤。


二、新建项目

打开软件后,先点击新建项目,如下图所示。
在这里插入图片描述
按照下图的顺序依次点击,新建一个Visual C++的空项目,名称自己设置,解决方案的名称和名称是同步变化的,给项目找一个存放的位置,点击确定即可。
在这里插入图片描述
项目就建立成功了,在源文件上右击,选择添加,新建项,弹出下图所示的窗口,选择C++文件,然后给文件命名,添加即可。
在这里插入图片描述
接下来在.cpp文件中写入如下C++代码。

#include <iostream>  //头文件不加.h
using namespace std;  //namespace是标识符的各种可见范围,std是C++标准程序库中定义所有标识符的namespace
int main()
{cout<<"Hello World!"<<endl;  //cout是输出,endl是结束行,即换行,中间的"Hello World!"就是要输出的内容system("pause");  //让程序执行框不退出return 0;
}

点击运行按钮后,只要代码没有错误就会输出"Hello World!",如下图所示。
在这里插入图片描述


三、设置字体、注释、行号

可以看到上面代码的编辑窗口中,字体有点小,来把它设置的大一些。
在菜单栏点击工具,找到选项,弹出下面的设置窗口,然后在环境下找到字体和颜色,设置字体的大小即可。
在这里插入图片描述
设置好以后点击确定,编辑器中的字体大小就改变了!
在这里插入图片描述
同样在工具的选项中,找到键盘,显示的命令这里输入注释,选择编辑.注释选定的内容,然后将光标放到按快捷键框中,在键盘上按下你想自定义的快捷键即可,然后点击分配,确定即可。
在这里插入图片描述
同样的方法可以设置编辑.取消注释选定的内容
在这里插入图片描述
这样设置之后,以后选择编辑器中的代码,按下"Ctrl+/"就会注释选定的内容,按下"Ctrl+Shift+/"就会取消注释。
要让代码显示行号,同样在工具——选项下设置,找到文本编辑器——所有语言——常规,勾选行号即可。
在这里插入图片描述


四、C++基础知识

1.数据类型

C++中很多基础知识和C语言一样。
注释和C语言一样,单行注释用双斜线//,多行注释用/**/。
main函数是程序的入口函数,一个程序有且仅能有一个main函数。
变量是给一段指定的内存空间起名,方便我们操作这段内存,定义变量时要指明变量类型,变量类型的存在意义就是规定分配内存的大小。
常量用于记录程序中不可更改的数据。常量可以通过#define来定义,也可以通过const关键字来修饰变量为常量,不可对其更改。
C++中标识符的命名规则:不能使用关键字;只能包含数字、字母或者下划线,且第一个字符不能是数字;标识符的字母区分大小写。标识符的命名一般要做到见名知意。
整型包括short(2字节)、int(4字节)、long(Windows、Linux32位系统是4字节,Linux64位系统是8字节)、long long(8字节)类型。
字符型即char类型,占一个字节,给字符变量赋值时要用单引号将字符括起来,且单引号内只能有一个字符。字符型变量并不是把字符本身放到内存空间中,而是将其对应的ASCII编码放到相应的存储单元中。
实型也称浮点型,有单精度的float类型和双精度的double类型,float类型占4字节,double类型占8字节。用float定义变量时一般在变量的后面加一个字母"f",明确告诉编译器这个小数是单精度,否则编译器默认小数是双精度,然后在运行时多做一步从双精度到单精度的转换。科学计数法用e表示,e后必须为整数,e前为小数的有效位。
关键字是C++中预先保留的标识符,在定义变量或者常量的时候,变量或常量名不能为关键字。
sizeof关键字可以计算数据类型或者变量的字节数,sizeof()括号中写入数据类型或者变量都可。
在这里插入图片描述
转移字符一般用于表示一些不能显示出来的ASCII,常用的转移字符有:换行"\n"、水平制表符"\t"、斜杠"\“、问号”?“。换行符”\n"和"<<endl"的作用是一样的。
斜杠后面跟一个八进制数代表的是ASCII对应的值,例如\60就表示0,因为60对应十进制的48,是0的ASCII。
水平制表符"\t"主要作用是对齐,运行结果如下图所示。
在这里插入图片描述
字符串型在C语言中使用的是数组类型定义的,字符串用双引号括起来。

char str[] = "abcd";

C++中与C语言中定义字符串有所不同,采用string关键字直接定义字符串。

#include <string>  //C++中使用string定义的字符串要引入头文件
string str = "abcd";

上面的两种定义字符串的方式在C++中都是可以使用的。
在这里插入图片描述
布尔类型代表真或假的值,真是true,用1表示,假为false,用0表示。布尔类型占1个字节大小,给布尔类型变量赋非0值代表真,赋0值代表假。

2.输入输出

C语言中的输入输出采用的是scanf和printf,其在C++中仍然可用。
数据的输出前面已经提到了,使用的关键字是cout,语法为:cout<<变量。
数据的输入使用的关键字是cin,语法为:cin>>变量。
在这里插入图片描述

3.运算符

加减乘除、取余、赋值、比较、逻辑运算符等和C语言一样,注意除数不能为0。
小数不能做取模操作,取模的两数需为整数。
前置递增或递减,变量先执行递增或递减操作,然后执行表达式运算;后置递增或递减,先执行执行表达式运算,然后变量再执行递增或递减操作。
三目运算符的语法—— 表达式1?表达式2:表达式3
如果表达式1的值为真,执行表达式2并返回表达式2的结果;如果表达式1的值为假,执行表达式3并返回表达式3的结果。
三目运算符返回的是变量,可以继续赋值。

int a = 10;
int b = 20;
(a > b ? a : b) = 30;  //运行后b = 30

4.选择、循环结构

C/C++基本的三种程序结构:顺序结构、选择结构和循环结构。
顺序结构是指程序按照顺序执行,不发生跳转;选择结构依据条件是否满足有选择的执行相应的功能;循环结构依据条件是否满足,循环多次执行某段代码。
选择结构
如果在if语句后面加了分号,表示条件满足时没有要执行的语句,而跟在后面满足条件后才执行的语句也会被顺序执行。

if(x>10)cout<<"x大于10"<<endl;    //x>10时该语句执行if(x>10);       cout<<"x大于10"<<endl;   //这种情况下,条件满足与否该语句都执行

switch语句执行多条件分支语句,case代表的每个分支执行完以后要有break,代表结束该分支。如果分支后面没有break,该分支执行完后顺序执行下一个分支。
default语句在其他分支条件不满足时执行,相当于if-else if-else语句中的else语句。
switch语句判断的时候只能是整型或者字符型,不能是一个区间。
循环结构
do…while循环先执行一次循环,再进行条件判断。
for循环语句:for(起始表达式;条件表达式;循环体表达式),for循环语句中的表达式可以根据条件全写或全不写,起始表达式只执行一次。
对于嵌套循环,外层执行一次,内层执行一周。
用while循环实现猜数字游戏。

#include <iostream>
#include <ctime>
using namespace std;int main()
{srand((unsigned int)time(NULL));  //随机数种子,根据时间生成随机数int num;num = rand()%100 +1;  //生成一个1-100之间的随机数int guess_num;while(1){cout << "请输入猜测的数字:";cin >>guess_num;if(guess_num > num){cout << "猜大了!" << endl;}else if(guess_num < num){cout << "猜小了!" << endl;}else{cout << "猜对了!" << endl;break;}}system("pause");return 0;
}

运行结果如下图所示。
在这里插入图片描述
3位的水仙花数:3位数的每个位上的数字的3次幂之和等于它本身。例如:153= 1 3 1^3 13+ 5 3 5^3 53+ 3 3 3^3 33

#include <iostream>
using namespace std;int main()
{int num = 100;int a = 0;int b = 0;int c = 0;while(num < 1000){a = num/100;  //百位b = num/10%10;  //十位c = num%10;   //个位if(num == a*a*a + b*b*b +c*c*c)cout << num <<endl;num++;}system("pause");return 0;
}

程序的运行结果如下图所示。
在这里插入图片描述
C++中幂次的表示不能用表示的是异或,可以用函数pow(a,b)来表示a的b次幂,不过a的类型要定义为double。
敲桌子游戏:将1-100数字中,7的倍数或者含有7的数字进行输出。

#include <iostream>
using namespace std;int main()
{int i,j=0;for(i=1;i<=100;i++){if(i%7 == 0 || i%10 == 7 || i/10 ==7){cout << i << " ";j++;}if(j == 5){cout << endl;j = 0;}}system("pause");return 0;
}

程序的运行结果如下图所示。
在这里插入图片描述
乘法口诀表打印。

#include <iostream>
using namespace std;int main()
{int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)cout << j <<"*"<< i << "=" << j*i << "\t";cout << endl;}system("pause");return 0;
}

程序的运行结果如下图所示。
在这里插入图片描述

5.跳转语句

跳转语句有关键字break、continue、goto。
break语句用于跳出选择结构或者循环结构,在switch语句中用于终止case并跳出switch,在嵌套语句中的内层循环中使用用于结束内层循环。
continue在循环语句中的作用是跳出本次循环中尚未执行的语句,继续执行下一次循环。在循环体中,代码执行到continue语句后,后面的语句不再执行,但是不退出循环,而是继续执行下一次的循环。
continue语句的使用,打印1-10中的偶数。
在这里插入图片描述
goto可以无条件的跳转语句,它会跳过某些代码而不执行。
语法为:goto 标记
如果标记的名称存在,执行到goto语句时,就会跳到标记的位置。
在这里插入图片描述

6.数组

数组是一个集合,里面存放了相同类型的数据元素,其内存是连续的。数组元素的下标是从0开始索引的。
一维数组
一维数组定义的三种方式:
方式一:数据类型 数组名[数组长度];
方式二:数据类型 数组名[数组长度] = {value1,value2,…};
方式三:数据类型 数组名[] = {value1,value2,…};
数组名是常量,不可以进行赋值操作。
一维数组名称的用途:可以统计整个数组在内存中的长度;获取数组在内存中的首地址。
在这里插入图片描述
在Debug模式下运行代码,两个int型的变量之间相差12个字节,这是因为在int变量的前后各增加了4个字节,用于存储调试信息,将Debug改为Release模式就正常了。
在这里插入图片描述
把一个数组的元素逆置。

#include <iostream>
using namespace std;int main()
{int a[] = {1,2,3,4,5};int temp = 0;int length = sizeof(a)/sizeof(a[0]);for(int i=0;i<length/2;i++){temp = a[i];a[i] = a[length-1-i];a[length-1-i] = temp;}for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)cout << a[i] << " ";cout << endl;system("pause");return 0;
}

冒泡排序的实现。

#include <iostream>
using namespace std;int main()
{int a[] = {4,2,8,0,5,7,1,3,9};int i,j,temp = 0;int length = sizeof(a)/sizeof(a[0]);for(i=0;i<length-1;i++){for(j=0;j<length-i-1;j++){if(a[j] > a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}for(i=0;i<length;i++)cout << a[i] << " ";cout << endl;system("pause");return 0;
}

二维数组
二维数组定义的四种方式:
方式一:数据类型 数组名[行数][列数];
方式二:数据类型 数组名[行数][列数] = {{value11,value12,…},{value21,value22,…},…};
方式三:数据类型 数组名[行数][列数] = {value1,value2,value3,value4,…};
方式四:数据类型 数组名[ ][列数] = {value1,value2,value3,value4,…};
二维数组在定义时必须指明列数,其中方式二比较直观,建议在代码中使用。
二维数组的数组名同样可以查看二维数组占用的内存空间,获取二维数组的首地址。
在这里插入图片描述

7.函数

函数的作用就是将一段经常使用的代码封装起来,在程序中需要使用的时候直接调用即可。
函数的定义一般要包括:返回值类型、函数名、参数列表、函数体语句和return表达式。

返回值类型 函数名(参数列表)
{函数体语句return表达式
}

函数常见的形式有:无参数无返回值、有参数无返回值、无参数有返回值、有参数有返回值。
函数声明的作用是告诉编译器函数的名称以及调用的样式,函数的主体可以单独定义。函数声明可以多次,但是函数的定义只能有一次。
函数在调用的时候,实参会传递给形参。值传递时,函数的形参发生变化,并不会影响到实参,因为实参内存和形参内存空间不同,交换发生在形参内存空间中,所以对实参没有影响。
在这里插入图片描述
要想真正的交换实参的两个值,就不能进行值传递,而要传入地址,交换的时候就通过地址交换了实参的值。
在这里插入图片描述函数的分文件编写:创建.h头文件,在该头文件中进行函数的声明,并且引入必要的头文件;创建.cpp源文件,在里面定义函数,并且将创建的.h头文件以双引号的形式加以引用,将函数与头文件关联起来;最后在需要调用的程序文件中引入.h头文件,调用函数即可。

8.指针

可以通过指针来保存一个地址,然后间接的访问内存。
指针说到底就是一个地址,在指针变量前面加*号代表解引用,也就找到了指针地址里存放的数据。
指针变量和同类型变量之间建立关系通过取址符&实现。
空指针:指针变量指向内存中编号为0的地址空间。一般将指针变量初始化为空指针,但是空指针指向的内存是不可以访问的。0-255之间的内存空间是系统占用的,不可以访问。
野指针:指针变量指向非法的内存空间。未经申请就访问的地址空间,比如给指针直接指向一个0x1100的地址,然后访问就会出错。
const修饰指针——常量指针,归根结底是指针,指针的指向可以修改,但是指针指向的值不可以修改。最典型的就是指针指向字符串常量,指针可以指向不同地址的字符串常量,但是字符串的值不能被修改。

int a=10;
int b=20;
const int *p;
p = &a;
p = &b;  //可以
*p = 30;  //不可以

const修饰常量——指针常量,归根结底是一个地址常量,因此指针的指向不可以修改,但是指针指向的值可以修改。比较典型的是某些硬件,其地址是固定的,不能被修改,但是其存放的值是可以修改的。

int a=10;
int b=20;
int * const p = &a;
*p = 30;  //可以
p = &b;  //不可以

简单总结一下常量指针和指针常量的区别,const修饰啥,啥就不能修改。

const int *p;  //const修饰*p,*p不能改变
int * const p;  //const修饰p,p不能改变

const既修饰指针,又修饰常量,指针的指向和指针指向的值都不可以被修改。某些硬件地址里面的值被写死了,这种情况下就啥也不能修改了。
在32位操作系统下,任何类型的指针变量的大小都是4个字节,因为其存放的是地址。在64位操作系统下,指针变量的大小都是8个字节。
在这里插入图片描述
指针、数组、函数的综合应用例子,写一个函数对一个数组进行冒泡排序。

#include <iostream>
using namespace std;void BubbleSort(int *a,int len)
{int i,j,temp;for(i=0;i<len-1;i++){for(j=0;j<len-i-1;j++){if(a[j]>a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}
}int main()
{int a[] = {4,2,8,6,0,5,7,1,3,9};int len = sizeof(a)/sizeof(a[0]);BubbleSort(a,len);for(int i=0;i<len;i++)cout << a[i] << " ";cout << endl;system("pause");return 0;
}

9.结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型,结构体就是不同数据类型的集合。
语法:struct 结构体名 {结构体成员列表};
定义结构体的时关键字struct不可省略;创建结构体变量的时候关键字struct可以省略;结构体变量利用操作符"."访问结构体成员。
结构体定义变量的三种方式。

#include <iostream>
#include <string>
using namespace std;struct student
{string name;int age;int score;
}s3;    //方式三int main()
{//方式一 struct student s1;     //可以省略struct关键字,但是定义结构体的时候不可以省略s1.name = "aaa";s1.age = 20;s1.score = 90;//方式二 student s2 = {"bbb",21,96};   //可以省略struct关键字//方式三s3.name = "ccc";s3.age = 22;s3.score = 98;cout <<"姓名:"<<s1.name<<" 年龄:"<<s1.age<<" 分数:"<<s1.score<<endl;cout <<"姓名:"<<s2.name<<" 年龄:"<<s2.age<<" 分数:"<<s2.score<<endl;cout <<"姓名:"<<s3.name<<" 年龄:"<<s3.age<<" 分数:"<<s3.score<<endl;system("pause");return 0;
}

程序运行结果如下图所示。
在这里插入图片描述
结构体数组的语法:struct 结构体名 数组名[元素个数] = {{},{},…};
将上面的例子表示成结构体数组的形式如下。

#include <iostream>
#include <string>
using namespace std;struct student
{string name;int age;int score;
};int main()
{struct student arr[3]=    //可以省略struct关键字{{"aaa",20,90},{"bbb",21,96},{"ccc",22,98}};for(int i=0;i<3;i++){cout <<"姓名:"<<arr[i].name<<" 年龄:"<<arr[i].age<<" 分数:"<<arr[i].score<<endl;}system("pause");return 0;
}

结构体指针的作用是通过指针访问结构体中的成员,指针访问结构体成员需要通过"->"符号实现。

#include <iostream>
#include <string>
using namespace std;struct student
{string name;int age;int score;
};int main()
{struct student arr[3]={{"aaa",20,90},{"bbb",21,96},{"ccc",22,98}};struct student *p;p = arr;for(int i=0;i<3;i++){cout <<"姓名:"<<p->name<<" 年龄:"<<p->age<<" 分数:"<<p->score<<endl;p++;}system("pause");return 0;
}

结构体嵌套结构体:结构体中成员变量可以是另外一个结构体。

#include <iostream>
#include <string>
using namespace std;struct student
{string name;int age;int score;
};struct teacher
{string name;int age;struct student stu;
};int main()
{struct teacher t1;t1.name = "taaa";t1.age = 50;t1.stu.name = "aaa";t1.stu.age = 20;t1.stu.score = 90;struct teacher t2 = {"tbbb",53,{"bbb",22,96}};cout <<"老师姓名:"<<t1.name<<" 年龄:"<<t1.age<<" 学生姓名:"<<t1.stu.name<<" 学生年龄:"<<t1.stu.age<<" 学生成绩:"<<t1.stu.score<<endl;cout <<"老师姓名:"<<t2.name<<" 年龄:"<<t2.age<<" 学生姓名:"<<t2.stu.name<<" 学生年龄:"<<t2.stu.age<<" 学生成绩:"<<t2.stu.score<<endl;system("pause");return 0;
}

程序运行结果如下图所示。
在这里插入图片描述
结构体作为函数的参数应用。

#include <iostream>
#include <string>
using namespace std;struct student
{string name;int age;int score;
};void print_info1(struct student stu)
{stu.score = 91;cout <<"1."<<"姓名:"<<stu.name<<" 年龄:"<<stu.age<<" 分数:"<<stu.score<<endl;
}void print_info2(struct student *stu)
{stu->score = 96;cout <<"3."<<"姓名:"<<stu->name<<" 年龄:"<<stu->age<<" 分数:"<<stu->score<<endl;
}int main()
{struct student stu={"aaa",20,90};print_info1(stu);  //值传递cout <<"2."<<"姓名:"<<stu.name<<" 年龄:"<<stu.age<<" 分数:"<<stu.score<<endl;print_info2(&stu); //地址传递cout <<"4."<<"姓名:"<<stu.name<<" 年龄:"<<stu.age<<" 分数:"<<stu.score<<endl;system("pause");return 0;
}

上述程序的运行结果如下图所示。
在这里插入图片描述
函数值传递不改变实参的值,函数中地址传递会改变实参的值。如果是值传递,形参中会拷贝一份实参中的值,这在数据量很大的时候不太可行,因此进行地址传递,但是要确保某些数据不被修改,需要加关键字const。
上面的例子中就在函数中对结构体成员的值进行了修改,为了让函数只读结构体而不改变结构体成员的值,在形参前面加const。

void print_info2(const struct student *stu)
{cout <<"3."<<"姓名:"<<stu->name<<" 年龄:"<<stu->age<<" 分数:"<<stu->score<<endl;
}

这样修改函数后,如果尝试修改结构体成员的值,会直接报错。
结构体的综合应用案例一:
设计学生和老师的结构体,老师的结构体中包含老师的姓名和一个存放5名学生的数组成员,学生的结构体中有姓名和成绩,创建数组存放3名老师,通过函数来给每个老师及所带的学生赋值,并打印老师数据以及老师所带学生的数据。

#include <iostream>
#include <string>
using namespace std;struct student
{string sname;int score;
};struct teacher
{string tname;struct student stu[5];
};void get_value(struct teacher *t,int len)
{string nameseed = "ABCDE";for(int i=0;i<len;i++){t[i].tname = "Teacher_";t[i].tname += nameseed[i];  //拼接字符串cout << t[i].tname << "老师带的学生:" << endl;for(int j=0;j<5;j++){t[i].stu[j].sname = nameseed[i];t[i].stu[j].sname += "_Student_";t[i].stu[j].sname += nameseed[j];cout << "输入第"<<j+1<<"个学生的成绩:";cin >> t[i].stu[j].score;}}
}int main()
{struct teacher t[3];int len = sizeof(t)/sizeof(t[0]);get_value(t,len);for(int i=0;i<len;i++){cout <<t[i].tname<<"老师带的学生及成绩:"<<endl;cout <<"学生姓名 "<<"   成绩"<<endl;for(int j=0;j<5;j++)cout <<t[i].stu[j].sname<<"  "<<t[i].stu[j].score<<endl;}cout <<endl;system("pause");return 0;
}

上面程序的运行结果如下图所示。
在这里插入图片描述
结构体的综合应用案例二:
设计一个英雄结构体,结构体包括成员的姓名、年龄、性别,创建结构体数组,数组中存放5名英雄,通过冒泡排序的算法,将数组中存放的英雄按照年龄进行升序排列,并打印排序后的结果。

#include <iostream>
#include <string>
using namespace std;struct hero
{string name;int age;string sex;
};void BubbleSort(struct hero *h,int len)
{struct hero temp;for(int i=0;i<len-1;i++){for(int j=0;j<len-i-1;j++){if(h[j].age > h[j+1].age){temp = h[j];h[j] = h[j+1];h[j+1] = temp;}}}
}void print_info(struct hero *h,int len)
{cout<< "姓名 "<<"年龄 "<<"性别"<<endl;for(int i=0;i<len;i++){cout<<h[i].name<<"  "<<h[i].age<<"    "<<h[i].sex<<endl;}
}int main()
{struct hero h[5]={{"刘备",23,"男"},{"关羽",22,"男"},{"张飞",20,"男"},{"赵云",21,"男"},{"貂蝉",19,"女"}};int len = sizeof(h)/sizeof(h[0]);cout<< "排序前:"<<endl;print_info(h,len);BubbleSort(h,len);cout<< "排序后:"<<endl;print_info(h,len);system("pause");return 0;
}

上面程序的运行结果如下图所示。
在这里插入图片描述


本文参考视频:
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难

相关文章:

从0到1入门C++编程——01 C++基础知识

文章目录 一、工具安装二、新建项目三、设置字体、注释、行号四、C基础知识1.数据类型2.输入输出3.运算符4.选择、循环结构5.跳转语句6.数组7.函数8.指针9.结构体 一、工具安装 学习C使用到的工具是Visual Studio&#xff0c;Visual Studio 2010旗舰版下载链接&#xff1a;点此…...

C#编程-编写和执行C#程序2

C#编程-编写和执行C#程序 问题陈述 Dvid所在的团队正在为网球比赛开发自动排名软件。他负责创建一个程序来接受网球选手的以下详细信息并将其显示在屏幕上: 1.姓名 2.排名 您需要帮助David创建该程序。 要创建所需的程序,David需要执行以下步骤: 1.打开“记事本”。 2.在“…...

Day02-ES6

一.proxy代理 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…...

2023年12月记录内容管理

文章目录 前言1.[vue构建项目](https://mp.csdn.net/mp_blog/creation/editor/134829688)2. [Nodejs后端express框架](https://mp.csdn.net/mp_blog/creation/editor/134841711)3. [前端知识点](https://mp.csdn.net/mp_blog/creation/editor/132810879)4.[前端知识点-vue篇&am…...

【测试基础】构造测试数据之 MySQL 篇

构造测试数据之 MySQL 篇 作为一名测试工程师&#xff0c;我们经常会构造测试数据进行一些功能验证。为了暴露更多的问题&#xff0c;在测试数据的构造上&#xff0c;我们应该尽可能的构造不同类型字段的数据&#xff0c;且一张表的字段最好不低于 10 10 10 个。 对于 MySQL …...

基于单片机的语音识别自动避障小车(论文+源码)

1.系统设计 此次基于单片机的语音识别自动避障小车&#xff0c;以STC89C52单片机作为系统的主控制器&#xff0c;利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示&#xff0c;当距离低于阈值时会通过WT588语音模块进行报警提示&#xff0c;并且小车会后退来躲避…...

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 模块一…...

【信息安全原理】——入侵检测与网络欺骗(学习笔记)

&#x1f4d6; 前言&#xff1a;在网络安全防护领域&#xff0c;防火墙是保护网络安全的一种最常用的设备。网络管理员希望通过在网络边界合理使用防火墙&#xff0c;屏蔽源于外网的各类网络攻击。但是&#xff0c;防火墙由于自身的种种限制&#xff0c;并不能阻止所有攻击行为…...

JVM GC 算法原理概述

对于JVM的垃圾收集&#xff08;GC&#xff09;&#xff0c;这是一个作为Java开发者必须了解的内容&#xff0c;那么&#xff0c;我们需要去了解哪些内容呢&#xff0c;其实&#xff0c;GC主要是解决下面的三个问题&#xff1a; 哪些内存需要回收&#xff1f; 什么时候回收&…...

【数值分析】LU分解解Ax=b,matlab自己编程实现

LU分解&#xff08;直接三角分解&#xff0c;Doolittle分解&#xff09; A x b , A L U Axb \,\,,\,\, ALU Axb,ALU { L y b U x y \begin{cases} Lyb \\ Uxy \end{cases} {LybUxy​ 矩阵 L {L} L 的对角元素为 1 {1} 1 &#xff0c;矩阵 U {U} U 的第一行和 A {A} A …...

华为HCIE-Datacom课程介绍

厦门微思网络HCIE-Datacom课程介绍 一、认证简介 HCIE-Datacom&#xff08;Huawei Certified ICT Expert-Datacom&#xff09;认证是华为认证体系中的顶级认证&#xff0c;HCIE-Datacom认证定位具备坚实的企业网络跨场景融合解决方案理论知识&#xff0c;能够使用华为数通产品…...

QT(C++)-QTableWight添加行和删除空行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、前言2、QTableWidget的添加行3、删除行 1、前言 最近要用QT开发项目&#xff0c;对QT不是很熟&#xff0c;就根据网上的查到的知识和自己的摸索&#xff0c;将一…...

软件测试/测试开发丨Python 面向对象编程思想

面向对象是什么 Python 是一门面向对象的语言面向对象编程&#xff08;OOP&#xff09;&#xff1a;Object Oriented Programming 所谓的面向对象&#xff0c;就是在编程的时候尽可能的去模拟真实的现实世界&#xff0c;按照现实世界中的逻辑去处理问题&#xff0c;分析问题中…...

一次降低进程IO延迟的性能优化实践——基于block层bfq调度器

如果有个进程正频繁的读写文件&#xff0c;此时你vim查看一个新文件&#xff0c;将会出现明显卡顿。即便你vim查看的文件只有几十M&#xff0c;也可能会出现卡顿。相对的&#xff0c;线上经常遇到IO敏感进程偶发IO超时问题。这些进程一次读写的文件数据量很少&#xff0c;正常几…...

C语言易错知识点十(指针(the final))

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 许久不见&#xff0c;甚是想念&#xff0c;真的是时间时间&#xff0c;你慢些吧&#xff0c;不能再让头发变秃…...

React 18 新增的钩子函数

React 18 引入了一些新的钩子函数&#xff0c;用于处理一些常见的场景和问题。以下是 React 18 中引入的一些新钩子函数以及它们的代码示例和使用场景&#xff1a; useTransition&#xff1a; 代码示例&#xff1a;import { useTransition } from react;function MyComponent()…...

安装与部署Hadoop

一、前置安装准备1、机器2、java3、创建hadoop用户 二、安装Hadoop三、环境配置1、workers2、hadoop-env.sh3、core-site.xml4、hdfs-site.xml5、linux中Hadoop环境变量 四、启动hadoop五、验证 一、前置安装准备 1、机器 主机名ip服务node1192.168.233.100NameNode、DataNod…...

MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之General Tablespaces&#xff08;通用表空间/一般表空间&#xff09;General tablespaces&#xff08;通用表空间/一般表空间&#xff09;通用表空间的功能通用表空间的限制 创建通用表空间&#xff08;一般表空间&#xff09;创建语法…...

循环生成对抗网络(CycleGAN)

一、说明 循环生成对抗网络&#xff08;CycleGAN&#xff09;是一种训练深度卷积神经网络以执行图像到图像翻译任务的方法。网络使用不成对的数据集学习输入和输出图像之间的映射。 二、基本介绍 CycleGAN 是图像到图像的翻译模型&#xff0c;就像Pix2Pix一样。Pix2Pix模型面临…...

数组--53.最大子数组和/medium

53.最大子数组和 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连…...

centos 编译安装 python 和 openssl

安装环境&#xff1a; centos 7.9 &#xff1a; python 3.10.5 和 openssl 3.0.12 centos 6.10 &#xff1a; python 3.10.5 和 openssl 1.1.1 两个环境都能安装成功&#xff0c;可以正常使用。 安装 openssl 下载地址 下载后解压&#xff0c;进入到解压目录 执行&#xf…...

【nodejs】前后端身份认证

前后端身份认证 一、web开发模式 服务器渲染&#xff0c;前后端分离。 不同开发模式下的身份认证&#xff1a; 服务端渲染推荐使用Session认证机制前后端分离推荐使用JWT认证机制 二、session认证机制 1.HTTP协议的无状态性 了解HTTP协议的无状态性是进一步学习Session认…...

数据结构【线性表篇】(三)

数据结构【线性表篇】(三&#xff09; 文章目录 数据结构【线性表篇】(三&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…...

Python装饰器的专业解释

装饰器&#xff0c;其实是用到了闭包的原理来进行操作的。 单个装饰器&#xff1a; 以下是一个简单的例子&#xff1a; def outer(func):print("OUTER enter ...")def wrapper(*args, **kwargs):print("调用之前......")result func(*args, **kwargs)p…...

vue3框架笔记

Vue Vue 是一个渐进式的前端开发框架&#xff0c;很容易上手。Vue 目前的版本是 3.x&#xff0c;但是公司中也有很多使用的是 Vue2。Vue3 的 API 可以向下兼容 2&#xff0c;Vue3 中新增了很多新的写法。我们课程主要以 Vue3 为主 官网 我们学习 Vue 需要转变思想&#xff0…...

pytest --collectonly 收集测试案例

pytest --collectonly 是一条命令行指令&#xff0c;用于在运行 pytest 测试时仅收集测试项而不执行它们。它会显示出所有可用的测试项列表&#xff0c;包括测试模块、测试类和测试函数&#xff0c;但不会执行任何实际的测试代码。 这个命令对于查看项目中的测试结构和确保所有…...

dev express 15.2图表绘制性能问题(dotnet绘图表)

dev express 15.2 绘制曲线 前端代码 <dxc:ChartControl Grid.Row"1"><dxc:XYDiagram2D EnableAxisXNavigation"True"><dxc:LineSeries2D x:Name"series" CrosshairLabelPattern"{}{A} : {V:F2}"/></dxc:XYDi…...

WorkPlus:领先的IM即时通讯软件,打造高效沟通协作新时代

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而IM即时通讯软件作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的IM即时通讯软件&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通…...

学习SpringCloud微服务

SpringCloud 微服务单体框架微服务框架SpringCloud微服务拆分微服务差分原则拆分商品服务拆分购物车服务拆分用户服务拆分交易服务拆分支付服务服务调用RestTemplate远程调用 微服务拆分总结 服务治理注册中心Nacos注册中心服务注册服务发现 OpenFeign实现远程调用快速入门引入…...

WPF 显示气泡提示框

气泡提示框应用举例 有时候在我们开发的软件经常会遇到需要提示用户的地方&#xff0c;为了让用户更直观&#xff0c;快速了解提示信息&#xff0c;使用简洁、好看又方便的气泡提示框显得更加方便&#xff0c;更具人性化。如下面例子&#xff1a;(当用户未输入账号时&#xff0…...

L1-062:幸运彩票

题目描述 彩票的号码有 6 位数字&#xff0c;若一张彩票的前 3 位上的数之和等于后 3 位上的数之和&#xff0c;则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。 输入格式&#xff1a; 输入在第一行中给出一个正整数 N&#xff08;≤ 100&#xff09;。随后 N 行…...

python+vue高校体育器材管理信息系统5us4g

优秀的高校体育馆场地预订系统能够更有效管理体育馆场地预订业务规范&#xff0c;帮助管理者更加有效管理场地的使用&#xff0c;有效提高场地使用效率&#xff0c;可以帮助提高克服人工管理带来的错误等不利因素&#xff0c;所以一个优秀的高校体育馆场地预订系统能够带来很大…...

10 款顶级的免费U盘数据恢复软件(2024 年 更新)

你曾经遇到过U盘无法访问的情况吗&#xff1f;现在我们教你如何恢复数据。 在信息时代&#xff0c;数据丢失往往会造成巨大的困扰。而USB闪存驱动器作为我们常用的数据存储设备&#xff0c;其重要性不言而喻。但是&#xff0c;U盘也可能会出现各种问题&#xff0c;如无法访问、…...

C# json 转匿名对象及C#关键字的处理

调用第三方接口&#xff0c;返回的json字符串&#xff0c;为了方便使用转为C#匿名对象&#xff1a; /// <summary>/// json转为匿名对象/// </summary>/// <typeparam name"T"></typeparam>/// <param name"json"></para…...

关于彻底通过外网,自动批量下载Python的pip依赖包后到企业内网重安装的步骤-比单个包的要方便多了。

关于彻底通过外网&#xff0c;自动批量下载Python包后到企业内网重安装的步骤 前言&#xff1a; 哎&#xff0c;在本人的前面的博客中&#xff0c;分享的方法可能是不通用的。因为在一次实践中发现它不能总是通用且麻烦。所以本次记录分享一个更方便快速的方式。 上期前言&am…...

Oracle T4-4小型机上配置Ldom部署rac

Ldom控制域配置 (两台主机一样&#xff0c;以hydb1为例) roothydb1 # ldm add-vds primary-vds0 primary roothydb1 # ldm add-vcc port-range5000-5100 primary-vcc0 primary roothydb1 # ldm add-vsw net-devigb0 primary-vsw0 primary roothydb1 # ldm add-vsw net-devixgbe…...

【2023Hadoop大数据技术应用期末复习】填空题题型整理

大数据的 4V 特征包含&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09; 答案&#xff1a;大量、多样、高速、价值Hadoop 三大组件包含&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09; 答案&…...

劫持 PE 文件:新建节表并插入指定 DLL 文件

PE格式简介 PE(Portable Executable)格式&#xff0c;是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。 Portable 是指对于不同的Windows版本和不同的CPU类型上…...

HTTP分数排行榜

HTTP分数排行榜 介绍一、创建数据库二、创建PHP脚本三、上传下载分数四、测试 介绍 Unity中向服务器发送用户名和得分&#xff0c;并存入数据库&#xff0c;再讲数据库中的得分按照降序的方式下载到Unity中。 一、创建数据库 首先&#xff0c;我们要在MySQL数据库中建立一个…...

Android 实现 Slots 游戏旋转效果

文章目录 前言一、效果展示二、代码实现1.UI布局2.SlotAdapter2.SlotsActivity 总结 前言 slots游戏&#xff1a; Slots游戏是一种极具流行度的赌博和娱乐形式&#xff0c;通常被称为老虎机或水果机。它们在赌场、线上游戏平台和手机应用中广泛存在。一般这类游戏都使用Unity…...

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…...

拒绝采样(算法)总结

先说说什么是拒绝采样算法&#xff1a;就类似于数学上的求阴影面积的方法&#xff0c;直接求求不出来&#xff0c;就用大面积 - 小面积 阴影面积的办法。 所谓拒绝 和 采样 &#xff1a;就像是撒豆子计个数&#xff0c;计算概率问题一样&#xff0c;大桶里面套小桶&#xff0c…...

分布式数据库事务故障恢复的原理与实践

关系数据库中的事务故障恢复并不是一个新问题&#xff0c;自70年代关系数据库诞生之后就一直伴随着数据库技术的发展&#xff0c;并且在分布式数据库的场景下又遇到了一些新的问题。本文将会就事务故障恢复这个问题&#xff0c;分别讲述单机数据库、分布式数据库中遇到的问题和…...

Spark中的数据加载与保存

Apache Spark是一个强大的分布式计算框架&#xff0c;用于处理大规模数据。在Spark中&#xff0c;数据加载与保存是数据处理流程的关键步骤之一。本文将深入探讨Spark中数据加载与保存的基本概念和常见操作&#xff0c;包括加载不同数据源、保存数据到不同格式以及性能优化等方…...

2023-12-20 LeetCode每日一题(判别首字母缩略词)

2023-12-20每日一题 一、题目编号 2828. 判别首字母缩略词二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words 和一个字符串 s &#xff0c;请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符…...

C# 事件(Event)

C# 事件&#xff08;Event&#xff09; C# 事件&#xff08;Event&#xff09;通过事件使用委托声明事件&#xff08;Event&#xff09;实例 C# 事件&#xff08;Event&#xff09; 事件&#xff08;Event&#xff09; 基本上说是一个用户操作&#xff0c;如按键、点击、鼠标移…...

2312d,d的sql构建器

原文 项目 该项目在我工作项目中广泛使用,它允许自动处理联接方式动态构建SQL语句. 还会自动直接按表示数据库行结构序化.它在dconf2022在线演讲中介绍了:建模一切. 刚刚添加了对sqlite的支持.该API还不稳定,但仍非常有用.这是按需构建,所以虽然有个计划外表,但满足了我的需要…...

以太网二层交换机实验

实验目的&#xff1a; &#xff08;1&#xff09;理解二层交换机的原理及工作方式&#xff1b; &#xff08;2&#xff09;利用交换机组建小型交换式局域网。 实验器材&#xff1a; Cisco packet 实验内容&#xff1a; 本实验可用一台主机去ping另一台主机&#xff0c;并…...

启封涂料行业ERP需求分析和方案分享

涂料制造业是一个庞大而繁荣的行业 它广泛用于建筑、汽车、电子、基础设施和消费品。涂料行业生产不同的涂料&#xff0c;如装饰涂料、工业涂料、汽车涂料和防护涂料。除此之外&#xff0c;对涂料出口的需求不断增长&#xff0c;这增加了增长和扩张的机会。近年来&#xff0c;…...

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…...