C++基础学习三

news2024/11/25 18:56:09

目录儿

  • 六、分支语句和逻辑操作符
    • 6.1 if语句
      • 6.1.1 if
      • 6.1.2 if-else
      • 6.1.3 if-else if-else
    • 6.2 逻辑表达式
      • 6.2.1 逻辑或`||`
      • 6.2.2 逻辑与`&&`
      • 6.2.3 逻辑非`!`
      • 6.2.4 逻辑操作符的其他表示方式
    • 6.3 字符函数库cctype
    • 6.4 三目/元操作符
    • 6.5 switch语句
      • 6.5.1 switch引入枚举常量
    • 6.6 break和continue关键字
    • 6.7 读取数字的循环
    • 6.8 简单文件输入、输出
      • 6.8.1 文本I/O和文本文件
      • 6.8.2 写出文本文件
      • 6.8.3 读取文本文档

六、分支语句和逻辑操作符

C++提供了两种分支语句,ifswitch

6.1 if语句

6.1.1 if

句式:

if(测试条件)
{
	语句; // 符合测试条件执行语句
}

例子:输入语句统计字符和空格数量

#include<iostream>

int main() {
	using namespace std;
	cout << "Enter sentence:\n";
	char ch;
	int total = 0;
	int space = 0;
	cin.get(ch);
	while (ch != '.')
	{
		if(ch == ' ') // 若字符为空格
			space++;  // 累加空格数
		total++;      // 累加字符数
		cin.get(ch);
	};
	cout << space << " space, " << total << " characters total in sentence." << endl;
	system("pause");
	return 0;
}

结果
在这里插入图片描述

6.1.2 if-else

句式:

if(测试条件){ 
	语句1; // 符合测试条件执行语句1
}else{ 
	语句2; // 不符合测试条件执行语句2
}

6.1.3 if-else if-else

句式:

if(测试条件1){ 
	语句1; // 符合测试条件1执行语句1
}else if(测试条件2){ 
	语句2; // 符合测试条件2执行语句2
}else if(测试条件3){
	语句3; // 符合测试条件3执行语句3
}else{
	语句4; // 都不符合执行语句4,兜底语句
}

6.2 逻辑表达式

  1. &&
  2. ||
  3. 非  !

6.2.1 逻辑或||

  1. 左右任一表达式为true时结果为true
    表达式一 || 表达式二
    
  2. ||是顺序操作符,从左往右执行,如果左侧表达式为true,则不会再去判定右侧表达式。
    例:
    #include<iostream>
    
    int main() {
    	using namespace std;
    	int i = 2;
    	bool bool_1 = i++ == 2 || i++ == 3; // 左边表达式为 true ,右边表达式不进行判定
    	cout << "i = " << i << endl;        // 输出 i = 3 ,只自增了一次
    	bool bool_2 = i++ == 3 || i++ == 4; // 左边表达式为 false,判定右边表达式
    	cout << "i = " << i << endl;        // 输出 i = 4 ,自增了两次
    	system("pause");
    	return 0;
    }
    

6.2.2 逻辑与&&

  1. 两边表达式都为true时结果才为true
  2. ||也是顺序操作符,从左往右执行,如果左侧表达式为false,则不会再去判定右侧表达式。
  3. 常用作范围取值
    if(age > 18 && age < 65){
    	...
    }
    

    注意别这样式儿:18 < age < 45
    编译器不会捕获这种错误,因为这仍然是有效的C++句式。但是因为<操作符从左向右工作,因此真正的表达式实则为:(18 < age) < 4518 < age要么为1要么为0,都小于45,因此整个测试结果永远为true

6.2.3 逻辑非!

  1. 表示对它后面的表达式的值取反。
  2. 例:
    #include<iostream>
    #include<climits>
    
    bool is_int(double); // 自定义函数
    
    int main() {
    	using namespace std;
    	double temp; // double contains int,to prevent consumer input an out-of-range num.
    	cout << "Enter an integer value:"; 
    	cin >> temp;
    	while (!is_int(temp)) // 判断是否 int 型
    	{
    		cout << "out of range!plaese try again:";
    		cin >> temp;
    	}
    	int num = int(temp); // after judgementation ,conver safely
    	cout << "Congratulation!You enter an integer value " << num << endl;
    	system("pause");
    	return 0;
    }
    
    // 自定义函数实现
    bool is_int(double x)
    {
    	if (x <= INT_MAX && x >= INT_MIN) // 判定 x 是否在 int 型数据范围内
    		return true;
    	return false;
    }
    
  3. !的优先级高于所有算术操作符和关系操作符。

6.2.4 逻辑操作符的其他表示方式

并不是所有的键盘都提供了用作逻辑操作符的符号,因此C++标准提供了另一种表示方式,如下表所示。
标识符andornot都是C++保留字,这意味着不能将它们用作变量名等。它们不是关键字,因为它们都是已有语言特性的另一种表示方式。另外,它们并不是C语言中的保留字,但C语言程序可以将它们用作操作符,只要在程序中包含了头文件so646.h。C++不要求使用头文件。
在这里插入图片描述

6.3 字符函数库cctype

C++C语言继承了个与字符相关的、非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctype(老式的风格中为ctype.h)中定义的。

例如,如果ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。同样,如果ch是标点符号(如逗号或句号),函数ispunct(ch)将返回true(这些函数的返回类型为int,而不是bool,但通常bool转换让您能够将它们视为bool类型)。

使用这些函数比使用ANDOR操作符更方便。例如,下面是使用ANDOR来测试字符ch是不是字母字符的代码:

if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))

使用isalpha(ch)函数:

if(isalpha(ch))

相比使用函数简洁方便很多。
这个库的主要函数:
在这里插入图片描述
例子:

#include<iostream>
#include<cctype>

int main() {
	using namespace std;
	cout << "Enter a sentence for analysis,any type '@' to terminate input:\n";
	char ch;
	int spaces = 0;
	int alphas = 0;
	int digits = 0;
	int puncts = 0;
	int others = 0;
	cin.get(ch);
	while (ch != '@')
	{
		if (isalpha(ch)) 
			alphas++;
		else if (isdigit(ch))
			digits++;
		else if (ispunct(ch))
			puncts++;
		else if (isspace(ch))
			spaces++;
		else
			others++;
		cin.get(ch);
	};
	cout << alphas << " letters, "
		 << digits << " digits, "
		 << puncts << " puncts, "
		 << spaces << " spaces, "
		 << others << " others, "
		 << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

6.4 三目/元操作符

C++有个常被用来代替if else语句的组合操作符 ?:,这个组合操作符被称为条件操作符/三元操作符,它是C++中唯一一个需要3个表达式的操作符。该操作符的通用格式如下:

表达式一?表达式二:表达式三

如果表达式一为true,则整个条件表达式的值为表达式二的值;否则,整个表达式的值为表达式三的值。
等效于:

if(表达式一)
	表达式二
else
	表达式三

例:输入俩数,判断大小

#include<iostream>

int main() {
	using namespace std;
	int a, b, c;
	cout << "Enter two integers:";
	cin >> a >> b; // 连续读取赋值
	cout << "the larger between " << a << " and " << b;
	a > b ? c = a : c = b; // a>b c=a; a<b c=b;
	cout << " is " << c << endl;
	system("pause");
	return 0;
}

在这里插入图片描述
从可读性来说,三元操作符最适合用于简单关系和简单表达式。当关系和表达式比较复杂时(如多重嵌套分支),使用if else语句来表达可能更清晰。

6.5 switch语句

在多种选择分支结构中可以用if else结构来处理,除此之外,C++还提供了一种适用于大型列表选择的switch语句,格式如下:

switch(整型表达式){ // 测试条件必须是一个结果为整数值的表达式,如 switch(1){...}
	case 条件一:语句一; // 匹配值,需是整数常量,如 case 5:
	case 条件一:语句二; // 匹配值,需是整数常量,如 case 4:
	case 条件一:语句三; // 匹配值,需是整数常量,如 case 3:
	// ... n 个 case
	default: 语句四;   // 默认匹配,可选,当以上所有 case 的值都和表达式不匹配时,就跳到默认匹配。
}
  • 用测试表达式的值由上往下依次匹配每个case的整数常量,相等则执行那个case对应的语句。
  • default是默认兜底匹配,是一个可选项,如果省略它,又没有匹配的case,就直接跳到switch 后面的语句处执行。

在上面的结构中,如匹配到一个case 2,执行完这个case 2语句二后它还会继续往下去匹配后面的case,但是通常我们面对的需求是让每个case都能有效隔离,每一次switch都只执行一个case,不想它继续往下穿透,这个时候就要配合break关键字使用:

switch(整型表达式){ // 测试条件必须是一个结果为整数值的表达式,如 switch(1){...}
	case 条件一:语句一;break;  // 匹配值,需是整数常量,如 case 5:
	case 条件二:语句二;break;  // 匹配值,需是整数常量,如 case 4:
	case 条件三:语句三;break;  // 匹配值,需是整数常量,如 case 3:
	// n 个 case
	default: 语句四; // 默认匹配,可选,当以上所有 case 的值都和表达式不匹配时,就跳到默认匹配。
  • 碰到break关键字后switch就会停止继续往下穿透匹配。
  • default匹配项不用加break关键字,因为已经是switch结构的末端。

例:

#include<iostream>

void showmenu();
void report();
using namespace std;
int main() {
	int choice;
	showmenu();
	cin >> choice;
	while (choice != 4)
	{
		switch (choice)
		{
		case 1:cout << "\a\n";  // 响铃
		case 2:cout << "警告警告警告警告警告警告警告警告警告警告警告警告\n"; break;
		case 3:report(); break;
		default:cout << "非法选项,请重新输入!\n";
		}
		showmenu();
		cin >> choice;
	}
	cout << "Bye!" << endl;
	system("pause");
	return 0;
}

void showmenu() {
	cout << "Please enter 1,2 or 3:\n"
		"1) 告警     2)告警提示     3) 打印报告    4离开) \n";
};
void report() {
	cout << "报告内容本容.\n";
};

在这里插入图片描述
可以看到因为我的case 1没有加break,所以当我选择1的时候它执行了case 1case 2的语句。这种穿透在某些场景很好用,比如输出当前月份前面的所有月份等等。

  1. switch语句的每个case都必须是整数(包括char),所以和if else语句相比,它不能用于范围取值、浮点测试等场景。
  2. 如果所有选项都是用整数常量来标识的、选项超过两个的,就代码长度和执行速度而言,switch语句的效率更高

6.5.1 switch引入枚举常量

上面的例子我们每个case值用的都是整数常量,除此之外,有一些需要做映射的场景比如一种颜色对应一个数字,这时候可以使用枚举enum定义一组颜色常量,并把其作为case的匹配值,实际上的值是每个枚举常量对应的下标:

#include<iostream>

enum MyEnum // 定义枚举
{
	red,
	orange,
	yellow,
	green,
	blue,
	indigo,
	violet
};
int main() {
	using namespace std;
	cout << "Enter color code(0-6): ";
	int code;
	cin >> code;
	while (code >= red && code <= violet)
	{
		switch (code)
		{
		case red:cout << "红色\n"; break;           // 下标值 0
		case orange:cout << "橙色\n"; break;        // 下标值 1
		case yellow:cout << "黄色\n"; break;        // 下标值 2
		case green :cout << "绿色\n"; break;        // 下标值 3
		case blue:cout << "蓝色\n"; break;          // 下标值 4
		case indigo:cout << "靛色\n"; break;        // 下标值 5
		case violet:cout << "紫色\n"; break;        // 下标值 6
		}
		cout << "Enter color code(0-6): ";
		cin >> code;
	};
	cout << "Bye!" << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

6.6 break和continue关键字

breakcontinue关键字都使程序能够跳过部分代码。可以在switch语句或任何循环中使用break关键字,使程序跳到switch或循环后面的语句处执行。continue关键字主要用于循环结构中中,让程序跳过循环体中余下的代码,并开始新一轮循环。

比较简单不说。。。

6.7 读取数字的循环

假设要编写个将一系列数字读入到数组中的程序,并允许用户在数组填满之前结束输入。一种方法
是利用cin:

int n;
cin >> n;

但是如果用户输入了一个字母而不是数字,将会发生以下四种情况:

  • n的值保持不变。
  • 不匹配的输入将被留在输入队列中。
  • cin对象中的一个错误标记被设置。
  • cin方法的调用将返回false(如果被转换为bool类型)。
  1. cin方法返回false意味着可以用非数字输入来结束读取数字的循环。
  2. 非数字输入设置错误标记意味着必须重置该标记,程序才能继续读取输入。clear()方法重置错误输入标记,同时也重置文件尾(EOF条件)。输入错误和EOF都将导致cin返回false

案例一:
假设要编写一个程序,来计算平均每天捕获的鱼的重量。这里假设每天最多捕获5条鱼,因此一个包含5个元素的数组将足以存储所有的数据,但也可能没有捕获这么多鱼,所以如果数组被填满或者输入了非数字输入,结束循环。

#include<iostream>

const int MAX = 5;

int main() {
	using namespace std;
	double fish[MAX];
	cout << "Enter the weights of your fish.(enter q to terminate)\n";
	cout << "fish #1:";
	int i = 0;
	while (i < MAX && cin >> fish[i])
	{
		if (++i < MAX) { // i自增,判断数组是否还有空位
			cout << "fish #" << (i + 1) << ":"; // 这里不能再用自增,否则i就自增了两次
		}
	};
	cout << "cin.fail() = " << cin.fail() << ",结束循环" << endl; // 取出错误标记的值看看
	// 统计总量
	cout << "统计总量:\n";
	double total = 0;
	for (int j = 0; j < i; j++)
	{
		total += fish[j];
		cout << "fish #" << (j + 1) << " = " << fish[j] << "\n";
	}
	cout << "total = " << total << endl;

	system("pause");
	return 0;
}

在这里插入图片描述

输入字母q后,cin >> fish[i]发生了如下事情:

  • cin并没有把字母q赋值给fish[i]
  • 字母q仍被留在输入队列中。
  • cin对象中一个错误标记(通过cin.fail()可以拿到)被设置为1
  • cin方法的调用将返回false(如果被转换为bool类型),不满足循环条件,跳出循环。

案例二:
假设程序要求用户提供5个高尔夫得分,以计算平均成绩。如果用户输入非数字输入,程序将拒绝,并要求用户继续输入数字。程序发现用户输入了错误内容时,应采取3个步骤:

  1. 重置cin错误标记以接受新的输入。
  2. 删除错误输入。
  3. 提示用户再输入。

请注意,程序必须先重置cin,然后才能删除错误输入。

#include<iostream>

const int MAX = 5;

int main() {
	using namespace std;
	double scores[MAX];
	cout << "Enter your golf scores(must enter " << MAX << " rounds).\n";
	int i = 0;
	for ( i = 0; i < MAX; i++)
	{
		cout << "round #" << (i + 1) << ":"; // 这里不能再用自增,否则i就自增了两次
		while (!(cin >> scores[i])) // 如果输入不正确
		{
			cin.clear(); // 清除错误标志
			while (cin.get()!= '\n') // 把非法字符从缓冲区中删除
				continue;
			cout << "Please enter a number: ";
		};
	}
	
	
	cout << "cin.fail() = " << cin.fail() << ",结束循环" << endl;
	// 统计总量
	cout << "统计总量:\n";
	double total = 0;
	for (int j = 0; j < i; j++)
	{
		total += scores[j];
		cout << "round #" << (j + 1) << " = " << scores[j] << "\n";
	}
	cout << "total = " << total << endl;

	system("pause");
	return 0;
}

在这里插入图片描述
核心代码是这块:

while (!(cin >> scores[i])) // 如果输入不正确
{
	cin.clear(); // 清除错误标志
	while (cin.get()!= '\n') // 把非法字符从缓冲区中删除
		continue;
	cout << "Please enter a number: ";
};

如果用户输入88,合法输入,cin >> scores[i]表达式为true,则!(cin >> scores[i])表达式为false,将值放到数组中,不进入内部循环;
如果用户输入fdfdff,表达式(cin >> scores[i])false则表达式!(cin >> scores[i])true,此时不会将值放入数组中,进入循环。循环的第一条语句使用clear()方法重置输入,如果省略这条语句,程序将拒绝继续读取输入。接下来,程序在循环中使用cin.get()来读取行尾之前的所有字符,从而删除这一行中的错误输入。另一种方法是读取到下一个空白字符,这样将每次删除一个单词,而不是一次删除整行。最后程序告诉用户,应输入一个数字。

6.8 简单文件输入、输出

很多时候直接键盘输入并不是很好的选择,当数据量很大的时候,用得很频繁的时候,让程序直接读取文件获取内容的方式巴适。同时很多时候我们会有保存程序执行结果的需求,把内容直接写出到一个文件夹就非常巴适,而不是打印到控制台。

6.8.1 文本I/O和文本文件

这里再来介绍些文本I/O的概念。使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据类型是什么,输入一开始都是字符数据。然后,cin对象负责将文本转换为其他类型。

假设有如下输入行:

38.5 15.2

如果是赋值给char类型的变量

char ch;
cin >> ch;

输入行中的第一个字符被赋给ch。在这里,第一个字符是数字3,其字符编码(二进制)被存储在变
ch中。输入和目标变量都是字符,因此不需要进行转换。注意,这里存储的不是数值3,而是字符3的编码。执行上述输入语句后,输入队列中的下一个字符为字符8,如此直到遇见结束符。

如果是赋值给int类型的变量

int n;
cin >> n;

在这种情况下,cin将不断读取,直到遇到非数字字符。也就是说,它将读取38,碰到.点停止,并把它作为输入队列中的下个字符。cin通过计算发现,这两个字符对应数值38,因此将38的二进制编码复制到变量n中。

如果是赋值给double类型的变量

double x;
cin >> x;

在这种情况下,cin将不断读取,直到遇到第一个不属于浮点数的字符。也就是说,cin读取38.5,遇到空格停止,并把其作为输入队列中的下一个字符。cin通过计算发现,这4个字符对应于数值38.5,因此将38.5的二进制编码(浮点格式)复制到变量x中。

如果是赋值给char类型数组

char wordk[50];
cin >> word;

在这种情况下,cin将不断读取,直到遇到空白字符。也就是说,它读取38.5,遇到空格停止,并把其作为输入队列中的下一个字符。然后,cin将这4个字符的字符编码存储到数组word中,并在末尾加上一个空字符。这里不需要进行任何转换。
还有用getline()函数的情况

char wordk[50];
cin.getline(word,50);

在这种情况下,cin将不断读取,直到遇到换行符。所有字符都将被存储到数组word中,并在末尾加
上个空字符。换行符被丢弃,输入队列中的下一个字符是下一行中的第一个字符。这里不需要进行任何
转换。

6.8.2 写出文本文件

文件输出于文本输出(使用cout对象)类似:

  • 必须包含头文件fstream
  • 头文件fstream定义了一个用于处理输出的ofstream类。
  • 需要声明一个或多个ofstream变量(对象),。
  • 必须指明名称空间std,例如,为引用元素ofstream,必须使用编译指令using或前缀std::
  • 需要将ofstream对象与文件关联起来。为此,方法之一是使用open()方法。
  • 使用完文件后,应使用close()方法将其关闭。
  • 可结合使用ofstream对象和操作符>>来输出各种类型的数据。

注意,虽然头文件iostream提供了一个预先定义好的名为coutostream对象,但您必须声明自己的ofstream对象,为其命名,并将其同文件关联起来:

ofstream fout;           // 声明自己的`ofstream`对象
fout.open("test.txt");   // 通过路径关联对应的文本文件"text.txt"
double d = 2131.2;
fout << d;               // 输出到文件

重要的是,声明一个ofstream对象并将其同文件关联起来后,便可以像使用cout那样使用它。所有可
用于cout的操作和方法(如<<endlsetf())都可用于ofstream对象。

例子:输入汽车信息,分别输出到控制台和文本文件

#include<iostream>
#include<fstream>

int main() {
	using namespace std;
	char automobile[50];
	int year;
	double price_1;
	double price_2;
	// 声明文件输出流对象
	ofstream outFile;
	// 关联文本文件,开启输出流
	outFile.open("carinfo.txt");

	cout << "Enter the make and model of automobile:";
	cin.getline(automobile, 50);
	cout << "Enter the model year:";
	cin >> year;
	cout << "Enter the original asking price:";
	cin >> price_1;
	price_2 = 0.92 * price_1;

	// 输出到控制台
	cout << fixed;      // 以浮点数形式输出
	cout.precision(2);  // 保留小数点后两位
	cout.setf(ios_base::showpoint); // 保留精度,整数也强制显示小数(小数点后的0)
	cout << "Make and model:" << automobile << endl;
	cout << "Year:" << year << endl;
	cout << "Was asking $" << price_1 << endl;
	cout << "Now asking $" << price_2 << endl;
	// 输出到文本文件
	outFile << fixed;
	outFile.precision(2);
	outFile.setf(ios_base::showpoint);
	outFile << "Make and model:" << automobile << endl;
	outFile << "Year:" << year << endl;
	outFile << "Was asking $" << price_1 << endl;
	outFile << "Now asking $" << price_2 << endl;
	// 关闭输出流
	outFile.close();
	return 0;
}

注意outFile.open("carinfo.txt");
当文本文档carinfo.txt不存在的时候,会新建一个名为carinfo.txt的文本文件。
当文本文档carinfo.txt已经存在的时候,会先截断该文件,即将其长度截短到0,丢弃原有内容,然后将新的输出加入到该文件中。

6.8.3 读取文本文档

  • 必须包含头文件fstream
  • 头文件fstream定义了个用于处理输入的ifstream类。
  • 需要声明一个或多个ifstream变量(对象),并以自己喜欢的方式对其进行命名,条件是遵守常用
    的命名规则。
  • 必须指明名称空间std,例如,为引用元素ifstream,必须使用编译指令using或前缀std:
  • 需要将ifstream对象与文件关联起来。为此,方法之一是使用open()方法。
  • 使用完文件后,应使用close()方法将其关闭。
  • 可结合使用ifstream对象和操作符<<来读取各种类型的数据。
  • 可以使用ifstream对象和get()方法来读取一个字符,使用ifstream对象和getline()来读取一行
    字符。
  • 可以结合使用ifstreameof()fail()等方法来判断输入是否成功。
  • ifstream对象本身被用作测试条件时,如果最后一个读取操作成功,它将被转换为布尔值true,否
    则被转换为false.

基础用法:

ifstream inFile;      // 声明输入流对象
inFile("test.txt");   // 关联文档
if(inFile.is_open()){ // 确实是否打开文件成功
	exit(EXIT_FAILURE);
}

is_open()方法在文件被成功打开的时候返回true,否则返回false。如果编译器不支持,可以用老的方法good()来替代,但是后者没有前者严格。
exit()函数和用于操作系统通信的参数EXIT_FAILURE都定义在cstdlib头文件中

例子:

#include<iostream>
#include<fstream>

int main() {
	using namespace std;
	ifstream inFile;
	inFile.open("carinfo.txt"); // 读取上面程序保存的文本文件
	char temp[60];
	inFile.getline(temp, 60);
	while (inFile.good()) // 没发生错误,非eof
	{
		cout << temp << endl;
		inFile.getline(temp, 60);
	}
	if (inFile.eof()) // 如果读到了文件结束符
	{
		cout << "Read Over!" << endl;
	}
	else
	{
		cout << "Unknow Error!" << endl;
	}
	inFile.close();
	return 0;
}

参考资料:《C++ Primer Plus》

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

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

相关文章

【OpenCall】ICASSP2023通用会议理解及生成挑战赛邀请函

ICASSP2023 通用会议理解及生成挑战赛(General Meeting Understanding and Generation Challenge,缩写为 MUG)是ICASSP2023 系列大挑战(SPGC)之一&#xff0c;由魔搭ModelScope社区、阿里巴巴达摩院语音实验室&语言技术实验室&#xff0c;阿里云天池联合浙江大学数字媒体计…

Linux基本搭建和操作

Linux基本搭建和操作1、创建三台虚拟机2、创建使用SSH远程连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包安装jdk安装mysql8、创建脚本文件9、运行脚本文件10、免密登录配置11、远程拷贝文件1、创建三台虚拟机 序号虚拟机名称静…

高效技巧-打表法

打表法 打表是一种典型的用空间换时间的技巧 一般指将所有可能需要用到的结果事先计算出来&#xff0c;这样后面需要用到时就可以直接查表获得。 打表常见的用法有如下几种: ①在程序中一次性计算出所有需要用到的结果&#xff0c;之后的查询直接取这些结果这个是最常用到的…

开源之路——如何发布属于自己的npm包

开源之路——如何发布属于自己的npm包1、前言2、起步2.1、初始化项目2.2、安装webpack相关依赖2.3、添加入口文件和封装方法2.4、设置源2.5、添加用户2.6、发布3、使用1、前言 在进行开发的过程当中&#xff0c;难免会出现一些重复性的工作&#xff0c;例如说我们要对一个数组…

电脑如何格式化重装系统

​众所周知&#xff0c;默认情况下&#xff0c;计算机重新安装系统将设置格式化磁盘。如果您选择其他需要格式化的硬盘&#xff0c;您必须如何操作&#xff1f;一般来说&#xff0c;我们是pe手动格式磁盘可以避免立即格式化硬盘造成的一些问题。让我们谈谈如何格式化硬盘重做系…

【软件测试】测试的天花板?资深测试怎么一路爬的......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试职业的天花板是…

脑图谱的验证方法

方法 目的 与其他分割比较区域内的同质性 比较不同分割的平均区域内同质性 有约束的几何扰动比较 验证分割区域内部的功能同质性 留一交叉验证 验证相似矩阵的稳定性 剪影宽度silhouette width (SI) 计算簇内和簇外的功能信号相似性差异 骰子系数dice coefficient 衡…

G1D36-import-keras.save_model-code-沐沐的调参课

1、python导入函数 https://zhuanlan.zhihu.com/p/64893308 服了 https://blog.csdn.net/weixin_45195364/article/details/119857246?spm1001.2101.3001.6650.6&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-1198572…

OSCS开源安全周报第22期:NuGet 仓库中被发现 13.5 万个包含钓鱼地址的组件包

本周安全态势综述 OSCS 社区共收录安全漏洞15个&#xff0c;公开漏洞值得关注的是 Jenkins Google Login Plugin 存在开放重定向漏洞&#xff08;CVE-2022-46683&#xff09;&#xff0c;Netty <4.1.86.Final 存在拒绝服务漏洞&#xff08;CVE-2022-41881&#xff09;&…

【数据结构】Java实现顺序表

文章目录线性表顺序表顺序表的模拟实现1、新增元素,默认在数组最后新增2、判定是否包含某个元素3、查找某个元素对应的位置4、获取顺序表长度5、在 pos 位置新增元素6、获取 pos 位置的元素7、给 pos 位置的元素设为 value8、删除第一次出现的关键字key9、清除顺序表线性表 什…

接口性能测试,这个还真有用啊。

目录&#xff1a;导读 一、概述 二、为什么要做接口压力测试 三、接口压力测试的局限性 四、谁来做接口压力测试 五、如何做接口压力测试 六、如何设计接口压力测试方案 七、压力测试报告应该包含哪些结果 八、如何解读压力测试的结果 九、如何根据测试结果定位性能问…

Pandas提取数据的几种方式

文章目录前言Pandas读取数据的几种方式1. read_csv2. read_excel3. read_sql总结前言 快期末了&#xff0c;数据挖掘的大作业需要用到python的相关知识&#xff08;这太难为我这个以前主学C的人了&#xff0c;不过没办法还是得学&#x1f602;&#xff09;&#xff0c;下面是我…

[附源码]计算机毕业设计Python的疫苗接种管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

算法刷题打卡第50天:排序数组---快速排序

排序数组 难度&#xff1a;中等 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5]快速排…

安科瑞霍尔闭环电流传感器在电动观光旅游车上的应用浅析

摘要&#xff1a; 本文介绍了基于霍尔闭环原理&#xff0c;即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法&#xff0c;替代传统的霍尔器件&#xff0c;较好的解决了电动车行业现有霍尔传感器的基本问题&#xff0c;在稳定性上更加优越。 关键词&#xff1a;霍尔闭…

Linux----tr命令详细使用方法

【原文链接】Linux----tr命令详细使用方法 文章目录一、tr命令使用方法1.1 tr命令的作用1.2 tr命令格式1.3 tr命令常用的选项1.4 常用的匹配字符串二、tr命令常用实例2.1 如何查看文本中的控制字符2.2 将所有小写字母转换为大写字母2.3 将文件中的数字替换为&符号2.4 对命令…

android studio 升级 Dolphin | 2021.3.1 Patch 1 跟 View.isInEditMode,xml无法预览

最近一段时间Google又更新了AS的版本,一些小伙伴尝试了更新,发现在之前版本上好好的xml布局预览,在新版本上不显示了,新版本如下图所示。 一般来说出了新版本之后我们不会马上更新,因为会觉得新版本不稳定,问题多,但其实是问题不大,解决了就好了,那么我现在就遇到了一…

毕业设计 - 基于JSP的超市积分管理系统【源码 + 论文】

文章目录前言一、项目设计1. 模块设计系统功能需求管理员功能柜员功能2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 web项目: 基于JSP的超市积分管理系统 一、项目设计 1. 模块设计 系统功能需求 &#xff08;1&#xff09;柜员信息的管理&#xff1a;包括…

交换机端口震荡

交换机端口是支持网络连接和通信的物理网络组件。作为 IT 基础架构的关键部分&#xff0c;它们通过在 OSI 数据链路层转发和接收数据包来促进网络。它们还执行一些关键的网络功能&#xff0c;例如处理第 3 层数据包、创建和管理 VLAN、连接路由器、启用互联网连接等。因此&…

Arweave -- 永久性存储分享

Arweave Arweave 是一种新型存储&#xff0c;它支持具有可持续和永久的数据&#xff0c;允许用户和开发人员真正永久地存储数据 Arweave 项目&#xff0c;以前称为 Archain&#xff0c;正在创建一个与互联网平行的永久、去中心化和不可审查的信息档案。Arweave 的新颖“block…