C++初级教程(二)

这篇具有很好参考价值的文章主要介绍了C++初级教程(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、C++中的if语句

C++总存在三种结构,分别是:顺序结构、分支结构、循环结构。而所谓的顺序结构,其实就是说,C++中代码的执行是从上往下、顺序执行的(绝大部分编程语言都是这个特点)。而分支结构中,最常用的则是if语句。
c++ if,C++,c++,开发语言,算法

1、单if语句

(1)if语句的格式
格式为:

if(判断条件){
	代码块;
}

其中:判断条件通常为布尔值或最终运算结果为布尔值的表达式,例如关系表达式。代码块则是需要执行的C++代码。
(2)执行过程
当if语句的判断条件为真时,会执行其中的代码块;如果条件为假,则跳过该代码块,直接执行if语句之后的代码
例如:

#include<iostream>
using namespace std;

int main()
{
	bool is_happy = true;
	bool is_bad = false;
	if(is_happy==true){
		cout<<"今天心情很好"<<endl;
	}
	if(is_bad==false){
		cout<<"今天心情不好。"<<endl; 
	}
	return 0;
 } 

输出结果为:

今天心情很好
今天心情不好

2、if…else语句

(1)if…else语句格式
if…else语句的格式为:

if(判断条件){
	代码块1
}else{
	代码块2
}

(2)执行过程
当if语句的判断条件结果为真时,执行代码块1,else代码块中的内容会被忽略;当if语句的判断条件结果为假时,执行else中的代码块2,而代码块1则不执行。
注意:if…else语句中,代码块1和代码块2只会其中执行一个,不可能两个都执行,也不可能两个都不执行。
例如:

#include<iostream>
using namespace std;

int main()
{
	int age=10;
	if(age>=18){
		cout<<"已经成年了。";
	}else{
		cout<<"还未成年。";
	}
 } 

输出结果为:

还未成年。

else语句不能单独使用,必须要和if语句一起使用,而且一个if只能对应一个else,他们是一一对应的关系。但if语句可以单独使用

3、if…else if语句

(1)语句格式
if…else if语句格式如下:

if(判断条件A){
	代码块1
}else if(判断条件B){
	代码块2
}else{
	代码块3
}

(2)执行过程
当判断条件A为真时,则执行代码块1,其余的所有代码块都会被忽略;当判断条件A为假时,执行判断条件B,如果判断条件B为真,则执行代码块2,如果条件B为假时,则执行代码块3。
同理,if…else if结构中,也只会执行其中的某一个代码块,其余的代码块则会被忽略。
例如:

#include<iostream>
using namespace std;

int main()
{
	int n;
	cout<<"请输入一个整数:"; 
	cin>>n;
	if(n>0){
		cout<<"这是正数";
	}else if(n==0){
		cout<<"这是0";
	}else{
		cout<<"这是负数。";
	} 
 } 

输出结果:

当输入1时,输出:这是正数
当输入0时,输出:这是0
当输入-2时,输出:这是负数。

当然,if…else if语句并不是只能有1个else if结构,而是可以有多个,例如:

#include<iostream>
using namespace std;

int main()
{
	int score;
	cout<<"请输入你的分数:"; 
	cin>>score;
	if(score>=90){
		cout<<"你的成绩等级为A";
	}else if(score>=80){
		cout<<"你的成绩等级为B";
	}else if(score>=70){
		cout<<"你的成绩等级为C";
	}else if(score>=60){
		cout<<"你的成绩等级为D";
	}else{
		cout<<"你的成绩等级为E";
	} 
 } 

而执行过程与if…else if的执行过程相同,从第一个if语句依次往后判断执行,一旦有任何一个if的条件为着,则执行相应代码块,而该结构则运行结束,如果所有if的条件都为假,则执行else语句。

4、if语句嵌套

除了常规的if结构外,还可以将几个结构进行嵌套使用,组成更复杂的分支结构。
例如:

#include<iostream>
using namespace std;

int main()
{
	//从键盘输入性别(m代表男性,w代表女性)和年龄,判断是否达到法定结婚年龄 
	char gender;
	int age; 
	cout<<"请输入你的性别(m代表男性,w代表女性)"; 
	cin>>gender;
	cout<<"请输入你的年龄:";
	cin>>age;
	//男性的法定结婚年龄为22,女性的为20
	//先判断性别,在判断年龄 
	if(gender=='m'){//条件为真,则为男性 
		//判断是否满22岁
		if(age>=22){//条件为真,则达到法定结婚年龄 
			cout<<"先生,你已达到国家法定结婚年龄。";
		} 
		else{//条件为假,则未到法定结婚年龄 
			cout<<"先生,你还未到国家法定结婚年龄。"; 
		}
	} 
	else{//条件为假,则为女性 
		//判断是否满20岁
		if(age>=20){
			cout<<"女士,你已达到国家法定结婚年龄。";
		} 
		else{
			cout<<"女士,你还未到国家法定结婚年龄。";
		}
	}
 } 

二、C++中的switch语句

switch语句也是典型的分支结构代表。
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

1、switch语句的语法

switch(表达式1){
    case 值A  :
       代码块1
   case 值B  :
       代码块2

    // 可以有任意数量的 case 语句
    default : // 可选的
       代码块n;
}

2、switch语句的规则

switch 语句必须遵循下面的规则

  • switch 语句中的变量或表达式的结果值必须是一个整型或枚举类型,或者是一个 class 类型,其中 class有一个单一的转换函数将其转换为整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 后的值必须与 switch中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续执行后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的default语句,出现在switch的结尾。default语句可用于在上面所有case都不为真时执行一个任务。default中的 break 语句不是必需的。

3、switch案例

典型案例:输入年份和月份,判断该月有多少天。
实现代码:

#include<iostream>
using namespace std;

int main()
{
	//从键盘输入年份和月份,判断这个月有多少天 
	int year,month; 
	cout<<"请输入年份:\n";
	cin>>year;
	cout<<"请输入月份:\n";
	cin>>month;
	//判断月份对于的天数,所以判断条件是月份 
	switch(month){
		//case后的值即为month对应的所有可能的情况 
		case 1:
			cout<<"这个月有31天。"<<endl;//一月
			break; 
		//二月,二月份比较特殊,闰年29天,平年28天,所以需要判断是否为闰年
		//闰年判断条件:能被4整除,不能被100整除;或者能被400整除 
		case 2:
			if(year%4==0&&year%100!=0||year%400==0){
				cout<<"这个月有29天。"<<endl;
			}
			else{
				cout<<"这个月有28天。"<<endl;
			} 
			break;	 
		case 3:
			cout<<"这个月有31天。"<<endl;//三月 
			break;	
		case 4:
			cout<<"这个月有30天。"<<endl;//四月
			break;	 
		case 5:
			cout<<"这个月有31天。"<<endl;//五月 
			break;	
		case 6:
			cout<<"这个月有30天。"<<endl;//六月
			break;	 
		case 7:
			cout<<"这个月有31天。"<<endl;//七月 
			break;	
		case 8:
			cout<<"这个月有31天。"<<endl;//八月 
			break;	
		case 9:
			cout<<"这个月有30天。"<<endl;//九月
			break;	 
		case 10:
			cout<<"这个月有31天。"<<endl;//十月 
			break;	
		case 11:
			cout<<"这个月有30天。"<<endl;//十一月 
			break;	
		case 12:
			cout<<"这个月有31天。"<<endl;//十二月 
			break;	
		default:cout<<"你输入的月份有误。"<<endl; 
	}
 } 

该例子还可以使用简化版来实现,代码如下:

#include<iostream>
using namespace std;

int main()
{
	//从键盘输入年份和月份,判断这个月有多少天 
	int year,month; 
	cout<<"请输入年份:\n";
	cin>>year;
	cout<<"请输入月份:\n";
	cin>>month;
	//判断月份对于的天数,所以判断条件是月份 
	switch(month){
		//case后的值即为month对应的所有可能的情况 
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			cout<<"这个月有31天。"<<endl;//一月
			break; 
		//二月,二月份比较特殊,闰年29天,平年28天,所以需要判断是否为闰年
		//闰年判断条件:能被4整除,不能被100整除;或者能被400整除 
		case 2:
			if(year%4==0&&year%100!=0||year%400==0){
				cout<<"这个月有29天。"<<endl;
			}
			else{
				cout<<"这个月有28天。"<<endl;
			} 
			break;	 
		case 4:
		case 6:
		case 9:
		case 11:
			cout<<"这个月有30天。"<<endl;//三月 
			break;	
		default:cout<<"你输入的月份有误。"<<endl; 
	}
 } 

简化版其实就是使用break语句,控制何时结束switch,将相同情况的月份放到一起进行判断。

三、条件运算符

条件运算符的格式为:

表达式1?表达式2:表达式3

请注意冒号的使用和位置。条件表达式的值取决于表达式1的计算结果。如果表达式1为真,则计算表达式2 的值,且表达式2的计算结果则为整个条件表达式的值。如果表达式1为假,则计算表达式3 的值,且表达式3的计算结果则为整个条件表达式的值。
条件运算符被称为三元运算符,因为它需要三个操作数,可以用来替代if…else语句。例如:

#include<iostream>
using namespace std;

int main()
{
	int a=2,b=3;
	if(a>b){
		cout<<a;
	}
	else{
		cout<<b;
	}
 } 

使用条件表达式的写法如下:

#include<iostream>
using namespace std;

int main()
{
	int a=2,b=3;
	a>b?cout<<a:cout<<b;
 } 

在许多时候使用条件运算符会使代码更简洁。

四、while循环

有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
c++ if,C++,c++,开发语言,算法
C++中的循环主要有while循环、do while循环、for循环等。

1、while循环的语法

C++中while循环的语法:

while(循环条件){
	代码块
}

其中,循环条件可以是任意的表达式(但最好使用布尔表达式)。代码块可以是一行代码,也可以是多行代码。只有当循环条件为真时循环才执行。当条件为假时,则结束循环。

2、实例

(1)实例1

#include<iostream>
using namespace std;

int main()
{
	//计算1-10的和 
	int i=1,sum=0;
	//要计算1-10的和,所以i的值最大应该要能够等于10 
	while(i<=10){
		//循环体
		//每循环一次,将i的值加1,并计算和
		sum = sum + i;
		i++;
		//注意i自增和求和两个表达式的顺序,顺序相反会得到不一样的值。 
	}
	//循环结束,输出最后计算的和
	cout<<"1-10的和为:"<<sum; 
}

输出结果为:

1-10的和为:55

同时,还可以使用简化写法:

#include<iostream>
using namespace std;

int main()
{
	//计算1-10的和 
	int i=1,sum=0;
	//要计算1-10的和,所以i的值最大应该要能够等于10 
	while(i<=10){
		//循环体
		//每循环一次,将i的值加1,并计算和
		sum = sum + i++;
		//i++;
		//注意i自增和求和两个表达式的顺序,顺序相反会得到不一样的值。 
	}
	//循环结束,输出最后计算的和
	cout<<"1-10的和为:"<<sum; 
}

但简 化写法的代码可读性不高,所以不推荐

五、do…while循环

do…while 循环是在循环的最后检查它的条件。
do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。

1、do…while循环的语法

C++ 中 do…while 循环的语法:

do{
	代码块
}while(循环条件);

do…while循环会限制性循环中的代码块,执行完代码块后再执行循环条件判断,如果条件为真,则继续循环,如果条件为假,则循环结束。因此:do…while循环至少会执行1次

2、实例

#include<iostream>
using namespace std;

int main()
{
	//输出1-20之间所有的偶数
	int i=1;
	//进入循环 
	do{
		//判断是否为偶数
		if(i%2==0){
			cout<<i<<" ";
		}
		//改变i的值
		i++; 
	} while(i<=20);
}

六、for循环

for循环是C++中用的非常多的一种循环结构。

1、for循环的语法

for循环的语法结构如下:

for(表达式A;表达式B;表达式C){
	代码块
}

其中:

  • 表达式A主要用于初始化循环变量,例如while循环中的int i=1;而且可以同时初始化多个变量,例如:int i=1,j=2;
  • 表达式B扮演循环条件的角色,和while循环的循环条件写法一致。
  • 表达式C用于改变循环变量的值,同时,表达式C中可以包含多个表达式,例如:i++,j++;

2、for循环的执行过程

执行过程:

1)先执行表达式A,初始化变量;
(2)执行表达式B,判断循环条件,如果结果为真,则执行循环体;如果结果为假,则结束循环。
(3)循环体执行结束后,执行表达式C,改变循环变量的值。
(4)继续执行表达式B,判断循环条件,如果结果为真,则执行循环体;如果结果为假,则结束循环。
(5)重复(2)(3)(4)步操作,直到循环结束。

3、实例

#include<iostream>
using namespace std;

int main()
{
	//输出1-100的和
	int sum=0;
	for(int i=1;i<=100;i++){
		sum = sum + i;
	} 
	cout<<"1-100的和为:"<<sum;
}

输出结果为:

1-100的和为:5050

七、嵌套循环

所谓嵌套循环,即是在一个循环内部嵌套另一个循环。
嵌套循环的语法:

循环1{
	循环2{
		...
		循环n{
		}
	}
}

其中,最常见的嵌套循环为双层循环,即循环嵌套一次。多重循环的嵌套可能会导致程序运行时间过长,所以需要慎用。
经典案例:

1、打印九九乘法表

#include<iostream>
using namespace std;

int main()
{
	//打印九九乘法表
	/*
	1x1=1
	1x2=2 2x2=4
	1x3=3 2x3=6 3x3=9
	1x4=4 2x4=8 3x4=12 4x4=16
	.......
	1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81 
	*/ 
	//九九乘法表其实是一个等腰直角三角形,可以看做是由行和列组成
	/*行列关系: 
			行数    列数
			1		1
			2		2
			3		3
			4		4
			...     ...
			9		9 
	*/
	//因此,可以使用双层循环实现,一层循环表示行,一层循环表示列,即可打印。
	//最小数值为1,最大为9,依次递增 
	//打印完一整行之后进行换行,所以应该在外层循环中打印换行符 
	for(int i=1;i<=9;i++){//表示行 
	//第一行有1列,第二行有2列,以此类推 
		for(int j=1;j<=i;j++){//表示列 
		 	//打印乘法算式:需要注意是i在前,还是j在前 
			cout<<j<<"x"<<i<<"="<<i*j<<"  ";
		}
		cout<<"\n";
	} 
}

2、求质数(素数)

#include<iostream>
using namespace std;

int main()
{
	//打印1-100之间所有的质数
	//质数(素数):只有1和这个数本身能被它自己整除的数叫做质数,例如2,3,5,7,11等
	
	/*解题思路:要判断一个数是否为质数,需要将所有小于这个数本身的正整数和它相除,
				如果没有任何一个能够除尽,则说明这个数是质数,否则,便不是质数。
				使用双层循环进行解题,外层用于控制规定的范围1-100,内层用于判断是否为质数 
	*/
	//1既不是质数,也不是合数,所以1不需要进行判断,初值为2即可 
	for(int i=2;i<=100;i++){//控制范围 
		//由于任何一个数和1相除都能除尽,所以1没有判断的意义,直接从2开始即可 
		//定义布尔变量flag代表是否为质数
		bool flag=false; 
		for(int j=2;j<i;j++){//判断是否为质数 
			//判断时,将2至i之间所有数与i进行取余,如果余数为0,则表示能除尽,不为0,则表示除不尽。
			//而一旦有任意一个数能被i除尽,则说明这个i不是质数 
			if(i%j==0){
				//能除尽,则不是质数,没有继续判断的必要,结束循环 
				//不是质数,将flag值改为true
				flag=true; 
				break; 
			}	
		}
		//如果flag值为true,则说明i不是质数,flag为false,则说明内层循环的if语句一次都没有触发,说明是质数 
		if(!flag){
			cout<<i<<" ";
		}	
	} 
}

八、循环控制语句:break和continue

循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。主要的循环控制语句有break和continue两种。

1、break的用法

C++ 中 break 语句有以下两种用法:

  • 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
  • 它可用于终止 switch语句中的一个 case。
  • 如果是在嵌套循环中使用break,则只会结束break所在的那一层循环,并不影响其他的循环。
    例如:
#include<iostream>
using namespace std;

int main()
{
	for(int i=1;i<=100;i++){
		cout<<i<<" ";
		//添加break语句
		break;
	} 
}

输出结果为:

1

当程序运行遇到break时,for循环会立即结束,所以只输出了一次。
但很少会这么用break语句,通常是结合if语句来使用,例如:

#include<iostream>
using namespace std;

int main()
{
	//输出1-100的和
	int sum=0;
	int i=1;
	while(true){
		sum = sum + i;
		i++;
		if(i>100){
			break;
		}
	} 
	cout<<"1-100的和为:"<<sum;
}

输出结果为:

1-100的和为:5050

2、continue的用法

C++ 中 continue语句有点类似break语句。但它不是强迫终止,continue会跳过当前循环中的代码,强迫开始下一次循环。
例如:

#include<iostream>
using namespace std;

int main()
{
	//输出1-50之间偶数的和
	int sum=0;
	int i=0;
	while(i<=50){
		i++;
		if(i%2!=0) {
			continue;
		}
		sum = sum + i;
	} 
	cout<<"1-50的偶数和为:"<<sum;
}

输出结果:

1-50之间的偶数和为:650

每当执行到continue时,continue之后的语句都不会再继续执行,而是直接回到循环的开头,重新开始一次新的循环。

3、break和continue的区别

break语句用于结束整个循环结构,而continue语句则只是结束循环当中的某一次循环,加快循环的进程,并不会直接结束整个循环结构文章来源地址https://www.toymoban.com/news/detail-760144.html

到了这里,关于C++初级教程(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《GreenPlum系列》GreenPlum初级教程-05GreenPlum语言DDL&DML&DQL

    1.1 创建数据库 1)语法 CREATE DATABASE name; CREATE DATABASE是SQL命令,用于创建一个新的数据库。 name是自定义的数据库名称。这个名称是必须要填写的,而且在当前数据库服务器上必须是唯一的。 [WITH] [OWNER [=] dbowner] 这是一个可选项。OWNER指定了新数据库的所有者。如果未指定,新

    2024年01月22日
    浏览(46)
  • Stable Diffusion初级教程

    一、入门篇 1. 理解基本概念 扩散模型(Diffusion Models) :扩散模型是一种生成模型,通过逐步添加噪声到数据样本中,然后学习如何逐步去除这些噪声来恢复原始数据。 Latent Diffusion Model (LDM) :LDM是Stable Diffusion的基础,它结合了扩散模型和潜在空间表示。在LDM中,扩散过程

    2024年04月28日
    浏览(35)
  • PyTorch 初级教程:构建你的第一个神经网络

    PyTorch 是一个在研究领域广泛使用的深度学习框架,提供了大量的灵活性和效率。本文将向你介绍如何使用 PyTorch 构建你的第一个神经网络。 首先,我们需要安装 PyTorch。PyTorch 的安装过程很简单,你可以根据你的环境(操作系统,Python 版本,是否使用 GPU 等)在 PyTorch 的官方

    2024年02月14日
    浏览(63)
  • 《GreenPlum系列》GreenPlum初级教程-02GreenPlum单节点安装

      如果有充分的资源,可以做分布式安装GreenPlum。如果资源不足,可以做单节点安装,同样可以用来熟悉GreenPlum语法。本章计划使用Docker创建一个Centos7的镜像,并在Centos7中安装GreenPlum。如果不打算使用Docker的话,可以直接从第二步安装GreenPlum开始。 《Docker系列》Docker安装

    2024年01月24日
    浏览(44)
  • Java中泛型和Object类型 初级进阶教程(一)

    在学习的过程中,常常看到某个类或者接口等中使用 ListT, TestT,其中T的作用是什么呢? 1 在类中使用泛型 2 使用多个泛型 3 在类中使用泛型 4 在方法中使用泛型 5 限制泛型类型 6 通配符 (Wildcard) 总结:泛型和Object类型之间的区别 类型安全: 泛型 T : 泛型提供了编译时类型

    2024年02月01日
    浏览(54)
  • 大数据学习初级入门教程(十七) —— Elasticsearch 8.7.0 完全分布式集群的安装、配置、启动和测试

    好久没用 Elasticsearch 集群了,参考以前写的《大数据学习初级入门教程(八) —— Elasticsearch 7.6.2 单节点的安装、启动和测试_elasticsearch 7.6.2需要专属网络_孟郎郎的博客-CSDN博客》、《大数据学习初级入门教程(九) —— Elasticsearch 7.6.2 伪分布式集群的安装、配置、启动和测

    2024年02月04日
    浏览(45)
  • C++算法初级11——01背包问题(动态规划2)

    辰辰采药 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时

    2024年02月02日
    浏览(50)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(77)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(70)
  • 【C++】STL 算法 - 拷贝替换算法 ( 元素复制算法 - copy 函数 | 元素替换算法 - replace 函数 | 替换符合要求的元素算法 - replace_if 函数 )

    在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 copy 元素复制算法函数 用于 将 一个容器中的元素 复制 到 另外一个 容器中 ; copy 元素赋值函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围 内的 元素 复制 到输出序列中 , 从输出容器 的 指定开始位置

    2024年01月20日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包