第一章 单元测试

1、单选题:C语言程序从什么开始执行?
A:程序中的main函数
B:包含文件中的第一个函数
C:程序中的第一条可执行语句
D:程序中第一个函数
正确答案:【程序中的main函数】

2、判断题:C语言程序的工作过程是:编辑、编译、连接、运行。
A:错
B:对
正确答案:【对】

3、单选题:下列正确的标识符是?
A:a2_i

B:a[i]
C:int i
D:-a1
正确答案:【a2_i

4、单选题:

C语言中的简单数据类型包括?
A:整形、实型、字符型
B:整形、实型、逻辑型
C:整形、字符型
D:整形、实型
正确答案:【整形、实型、字符型】

5、单选题:

在C++程序中,表达式5%2的结果是?

A:2.5
B:1
C:2
D:3
正确答案:【1】

6、单选题:

若int x=2,y=3,z=4; 则表达式x<z?y:z的结果是?

A:0
B:2
C:4
D:3
正确答案:【3】

7、单选题:

C++的程序是由什么组成的?
A:子程序
B:主程序和子程序
C:函数
D:过程
正确答案:【函数】

8、判断题:以数字0开头的整数是八进制整形常量。
A:对
B:错
正确答案:【对】

9、单选题:要求运算数据必须是整形的运算符号是?

A:<
B:!
C:/
D:%
正确答案:【%】

10、判断题:C++程序的三种基本结构是顺序、选择、循环。
A:错
B:对
正确答案:【对】

第二章 单元测试

1、判断题:结构化程序设计的三种基本结构是顺序结构、循环结构和选择结构。
A:错
B:对
正确答案:【对】

2、判断题:switch语句和if语句不能混合使用。
A:错
B:对
正确答案:【错】

3、判断题:switch语句中可以没有break语句。
A:错
B:对
正确答案:【对】

4、单选题:为了避免嵌套的if-else语句的二义性,C/C++语言规定else总是与()组成配对关系。
A:同一行上的if
B:距离最近的if
C:在其之前未配对的if
D:在其之前未配对的最近的if
正确答案:【在其之前未配对的最近的if】

5、判断题:下述程序的输出结果是: ***
int main()
{
int a=5,b=0,c=0;
if(a=b+c)
cout<<‘***’;
else
cout<<‘$$$’;
return 0;
}

A:对
B:错
正确答案:【错】

6、判断题:以下程序的运行结果是s=2,t=3
#include <iostream>using namespace std;
int main()
{
int s=1,t=1,a=5,b=2;
if (a>0)
s++;
if (a>b)
t+=s;
else if (a==b)
t=5;
else
t=2*s;
cout<<‘s='<<s<<‘,t='<<t<<endl;
return 0;
}

A:错
B:对
正确答案:【对】

7、判断题:以下程序的运行结果是2.
int main()
{
int k=2;
switch(k)
{
case 1:cout<<k++;  break;
case 2:cout<<k++;
case 3:cout<<k++;  break;
case 4:cout<<k++;
default:cout<<“Full!”;
}
return 0;
}
A:错
B:对
正确答案:【错】

8、单选题:下面程序段执行结果为
char c = ‘0’+2;
switch {
{
case 1:  cout<<‘A’; break;
case ‘2’: cout<<‘B’;
case 2:  cout<<‘C’;
default: cout<<‘D’;
};
A:BCD
B:A
C:BC
D:D
正确答案:【BCD】

9、单选题:以下是if语句的基本形式;if(表达式)语句,其中“表达式”: A:必须是关系表达式
B:必须是逻辑表达式
C:可以是任意合法的表达式
D:必须是逻辑表达式或关系表达式
正确答案:【可以是任意合法的表达式】

10、判断题:if和else语句必须同时使用。
A:对
B:错
正确答案:【错】

第三章 单元测试

1、单选题:C/C++语言中while和do-while循环的主要区别是
A:do-while的循环体至少无条件执行一次
B:do-while的循环体不能是复合语句
C:while的循环控制条件比do-while的循环控制条件严格
D:do-while允许从外部转到循环体内
正确答案:【do-while的循环体至少无条件执行一次】

2、单选题:以下正确的描述是
A:continue语句的作用是结束整个循环的执行
B:在循环体内使用break语句或continue语句的作用相同
C:从多层循环嵌套中退出时,只能使用goto语句
D:只能在循环体内和switch语句体内使用break语句
正确答案:【只能在循环体内和switch语句体内使用break语句】

3、单选题:若有以下语句
int x = 3;
do {
x -= 2;
cout<<x;
} while (!(–x));
A:输出的是1
B:输出的是3和0
C:是死循环
D:输出的是1和-2
正确答案:【输出的是1和-2】

4、单选题:下面程序段的执行结果是
int a,b,c,t;
a=1;
b=2;
c=2;
while(a<b<c)
{
t=a; a=b; b=t;
c–;
}
cout<<a<<“,”<<b<<“,”<<c<<endl;
A:

1,1,0

B:1,2,0
C:

2,1,1

D:

2,1,0

正确答案:【1,2,0】

5、判断题:当break语句用于do-while、for、while循环语句中时,可使程序终止循环。
A:错
B:对
正确答案:【对】

6、判断题:break和continue语句与if语句连用时,对if语句没有影响。
A:错
B:对
正确答案:【对】

7、判断题:以下程序段中,语句 cout<<m<<” “; 执行的次数是2次。
for(m=20;m>0;m–)
{ if(m % 6==0)
break;
cout<<m<<” “;
}
A:错
B:对
正确答案:【对】

8、判断题:以下程序段中,语句 cout<<m<<‘ ‘; 执行的次数是2次。
for(m=20;m>0;m–)
{ if(m % 6==0)
continue;
cout<<m<<‘ ‘;
}
A:对
B:错
正确答案:【错】

9、多选题:若定义int i,a,k,s; 是死循环的是
A:k=0;
do
{
k++; }while(k>0);
B:a=1;
while(a<10)
{
if(a<5) continue;
a++;
}
C:for (i=1;;i++)
{
if(i=-10) break;
s=s+i;
}
D:i=0;
while (1)
{
i++;
if(i==20)
break;
}
正确答案:【k=0;
do
{
k++; }while(k>0);;a=1;
while(a<10)
{
if(a<5) continue;
a++;
}】

10、判断题:以下程序的运行结果是153.
#include
using namespace std;
int main()
{ int   n;
long  t=1,s=0;
for(n=1;n<=5;n++)
{ t*=n;s+=t;}
cout<<s;
return 0;
}
A:错
B:对
正确答案:【对】

第四章 单元测试

1、单选题:关于函数嵌套,说法正确的是?
A:函数的定义和调用均不可以嵌套
B:函数的定义可以嵌套,但函数的调用不可以嵌套
C:函数的定义和调用均可以嵌套
D:函数的定义不可以嵌套,但函数的调用可以嵌套
正确答案:【函数的定义不可以嵌套,但函数的调用可以嵌套】

2、单选题:关于函数参数,说法正确的是?
A:形参是虚拟的,不占用内存单元
B:实参与其对应的形参共同占用一个内存单元
C:实参与其对应的形参各占用独立的内存单元
D:只有当实参和形参同名才占用一个内存单元
正确答案:【实参与其对应的形参各占用独立的内存单元】

3、单选题:下面关于函数的定义和实现,正确的是?
A:int Fun(int x, int y) { return x+y; }
B:void Fun(double x, y) {  ……  }
C:long Fact(int n); {  …… return; }
D:long Fact(int n) {  int n; …… return ; }
正确答案:【int Fun(int x, int y) { return x+y; }】

4、单选题:对函数不正确的描述是?
A:允许函数递归调用
B:函数形参的作用范围只是局限于所定义的函数内
C:函数说明必须在主调函数之前
D:当用数组名作形参时,形参数组改变可使实参数组随之改变
正确答案:【函数说明必须在主调函数之前】

5、单选题:在调用函数时,如果实参是简单变量,它对应形参之间的数据传递方式是?
A:由实参传给形参,再由形参传回实参
B:地址传递
C:单向值传递
D:传递方式由用户指定
正确答案:【单向值传递】

6、单选题:C语言中函数返回值的类型是由()决定的。
A:调用该函数时的实参的数据类型
B:return语句中的表达式类型
C:函数定义时指定的类型
D:形参的数据类型
正确答案:【函数定义时指定的类型】

7、单选题:在函数调用时,以下说法正确的是?
A:函数调用后必须带回返回值
B:函数间的数据传递不可以使用全局变量
C:主调函数和被调函数总是在同一个文件里
D:实际参数和形式参数可以同名
正确答案:【实际参数和形式参数可以同名】

8、判断题:return语句作为函数的出口,在一个函数体内只能有一个。
A:错
B:对
正确答案:【错】

9、判断题:在函数体定义的变量为局部变量,只在该函数内有效。
A:对
B:错
正确答案:【对】

10、判断题:声明函数原型时,可为一个或多个形参指定默认参数值,如:int f(int x=1, int y=5, int z);。
A:错
B:对
正确答案:【错】

第五章 单元测试

1、判断题:一个数组中的所有元素可以具有不同的数据类型。
A:错
B:对
正确答案:【错】

2、判断题:已知int a[3][4];则a[1,3]是对数组元素的正确引用。
A:错
B:对
正确答案:【错】

3、单选题:若二维数组A有m列,则计算任一元素A[i][j]在数组中相对位置的公式为?(假设A[0][0]位于数组的第一个位置上)
A:i*m+j-1
B:i*m+j+1
C:i*m+j
D:j*m+i
正确答案:【i*m+j+1】

4、单选题:若定义a[][3]={1,2,3,4,5,6,7}; 则a数组中行的大小是?
A:4
B:2
C:3
D:不确定
正确答案:【3】

5、单选题:下面合法的数组定义是?
A:int x[]={1,2,3,4};
B:int x[][]={{2,1},{3,2}};
C:char str[4]=”abcd”;
D:char str={“abcde”};
正确答案:【int x[]={1,2,3,4};】

6、单选题:对一维整型数组的正确定义为?
A:int n=10,a[n];
B:int  n;a[n];
C:#define N 10

int a[N];

D:int a(10);
正确答案:【#define N 10

int a[N];

7、单选题:已知:int  a[10]; 则对a数组元素的正确引用是?
A:a[0]
B:a[3.5]
C:a[10]
D:a(5)
正确答案:【a[0]】

8、单选题:如有定义语句int a[]={2,8,3,9,4,7,5,6,6,4};,则数组a的大小是?
A:不确定
B:11
C:10
D:8
正确答案:【10】

9、单选题:给出以下定义:   char x[ ]=”abcdefg”;  char y[ ]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’}; 则正确的叙述为?
A:数组x的长度大于数组y的长度
B:数组x的长度小于数组y的长度
C:数组x和数组y等价
D:数组x和数组y的长度相同
正确答案:【数组x的长度大于数组y的长度】

10、单选题:以下能对一维数组a进行初始化的语句是?
A:int a[5]=(0,1,2,3,4,);
B:int a[3]={0,1,2};
C:int a{5}={10*1};
D:int a(5)={};
正确答案:【int a[3]={0,1,2};】

第六章 单元测试

1、单选题:有定义如下:int a[5], *p; p=a; 则下列描述错误的是?
A:表达式p=p+1是合法的
B:表达式p-a是合法的
C:表达式a=a+1是合法的
D:表达式a+2是合法的
正确答案:【表达式a=a+1是合法的】

2、单选题:函数定义为Func(int *p),变量定义为n=100,则下面调用该函数正确的是?
A:Fun(20)
B:Fun(20+n)
C:Fun(&n)
D:Fun(n)
正确答案:【Fun(&n)】

3、单选题:若有说明int i, j=2, *p=&i; 则能完成i=j赋值功能的语句是?
A:*p=*&j;
B:i=&j;
C:i=*p;
D:i=**p;
正确答案:【*p=*&j;】

4、单选题:变量的指针,其含义是指该变量的什么?
A:一个标志
B:地址
C:值
D:名
正确答案:【地址】

5、单选题:若有语句int *p, a=10; p=&a; 下面均代表地址的一组选项是?
A:&*a, &a, *p
B:&a, &*p, p
C:a, p, *&a
D:*&p, *p, &a
正确答案:【&a, &*p, p】

6、判断题:下面程序的输出结果是0。
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,0}, *p;
p=a;
cout<<*p+9;
return 0;
}
A:错
B:对
正确答案:【错】

7、单选题:若有定义:int a[5], *p=a; 则对a数组元素的正确引用是?
A:*(p+5)
B:a+2
C:*&a[5]
D:*(a+2)
正确答案:【*(a+2)】

8、单选题:若要对a进行自减运算,则a应有下面说明?
A:int k;
int *a=&k;
B:int p[3];
int *a=p;
C:int b[10];
int *a=b+1;
D:char *a[3];
正确答案:【int b[10];
int *a=b+1;】

9、单选题:若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9}, *p; 则数值不为3的表达式是?
A:p=x+3,*p++;
B:p=x+2,*++p;
C:p=x+2,*(p++);
D:x[3]
正确答案:【p=x+2,*++p;】

10、判断题:在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的变量或函数的值。
A:对
B:错
正确答案:【对】

第七章 单元测试

1、判断题:结构体的定义不为它分配具体的内存空间。
A:错
B:对
正确答案:【对】

2、判断题:结构体定义中,struct是关键字,不能省略,结构体名称用作结构体类型的标志,是用户自定义的标识符。
A:错
B:对
正确答案:【对】

3、单选题:假设有如下语句,则叙述错误的是?
struct abc {
int m;
float n;
}mytype;
A:struct是定义结构体类型的关键字
B:m和n都是结构体成员名
C:mytype是结构体类型名
D:mytype是结构体变量名
正确答案:【mytype是结构体类型名】

4、单选题:若有以下说明和语句,则引用方式不正确的是?
struct worker{
int no;
char *name;
}work, *p=&work;
A:p->no
B:work->no
C:(*p).no
D:work.no
正确答案:【work->no】

5、单选题:以下结构体类型可以用来构造链表的是?
A:struct bb{int a; bb *b;};
B:struct cc{int *a; cc b;} ;
C:struct dd{int *a; aa b;};
D:struct aa{int a; int *b;};
正确答案:【struct bb{int a; bb *b;};】

6、单选题:在声明一个结构体变量时系统分配给它的存储空间是?
A:该结构体中第一个成员所需存储空间
B:该结构体中占用最大存储空间的成员所需存储空间
C:该结构体中最后一个成员所需存储空间
D:该结构体中所有成员所需存储空间的总和
正确答案:【该结构体中所有成员所需存储空间的总和】

7、多选题:以下关于C++结构体类型的说法正确的有?
A:结构体类型的内存容量是所有成员的内存容量之和
B:结构体类型的成员可以是本类型的指针
C:结构体类型中各个成员的数据类型可以不同
D:结构体类型中必须包含数据和对数据的操作
正确答案:【结构体类型的内存容量是所有成员的内存容量之和;结构体类型的成员可以是本类型的指针;结构体类型中各个成员的数据类型可以不同】

8、判断题:访问结构体成员的语句:stu.birthday.year,表示在stu结构体变量中有一个嵌套的结构体成员birthday,birthday有一个结构体成员year。
A:对
B:错
正确答案:【对】

9、判断题:假设单链表的最后一个结点的next指针域指向了第一个结点,则该单链表是有环的。那么如果p指向某一个结点,while(p!=NULL) p=p->next; 会无限循环下去。
A:错
B:对
正确答案:【对】

10、单选题:假设p指向链表中的第一个结点,q指向第二个结点,可以将q指向的结点删除并释放的语句是?
A:p->next=q->next; delete q;
B:p=q->next; delete q;
C:(*p).next=(*q).next; delete p;
D:p=q; delete q;
正确答案:【p->next=q->next; delete q;】

第八章 单元测试

1、判断题:对象是类的一个实例,一个类只能有一个对象。
A:对
B:错
正确答案:【错】

2、判断题:一个类中只能有一个构造函数。
A:错
B:对
正确答案:【错】

3、单选题:下列哪一个不是构造函数的特征。
A:构造函数可以设置默认参数
B:构造函数的函数名和类名相同
C:构造函数必须指定返回值类型
D:构造函数可以重载
正确答案:【构造函数必须指定返回值类型】

4、单选题:类的析构函数的作用是?
A:一般成员函数的初始化
B:对象的初始化
C:删除类创建的对象
D:类的初始化
正确答案:【删除类创建的对象】

5、单选题:在C++语言中,数据封装要解决的问题是?
A:数据的规范化
B:便于数据转换
C:防止不同模块之间数据的非法访问
D:避免数据丢失
正确答案:【防止不同模块之间数据的非法访问】

6、单选题:下列关于C++类的描述中错误的是?
A:类与类之间必须是平等的关系
B:类用于描述事物的属性和对事物的操作
C:类与类之间可以通过封装而具有明确的独立性
D:类与类之间可以通过一些手段进行通信和联络
正确答案:【类与类之间必须是平等的关系】

7、单选题:下列情况中,哪一种情况不会调用拷贝构造函数?
A:将类的一个对象赋值给该类的另一个对象时
B:函数的形参是类的对象,调用函数进行形参和实参结合时
C:用派生类的对象去初始化基类对象时
D:函数的返回值是类的对象,函数执行返回调用者时
正确答案:【将类的一个对象赋值给该类的另一个对象时】

8、单选题:下面关于类概念的描述中,错误的是?
A:类是抽象数据类型的实现
B:类就是C语言中的结构体类型
C:类是创建对象的样板
D:类是具有共同行为的若干对象的统一描述体
正确答案:【类就是C语言中的结构体类型】

9、单选题:类的构造函数被自动调用执行的情况是在创建该类的?
A:对象时
B:友元函数时
C:成员函数时
D:数据成员时
正确答案:【对象时】

10、单选题:数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是?
A:数据块
B:类
C:函数体
D:对象
正确答案:【对象】

第九章 单元测试

1、单选题:下列描述错误的是
A:在创建对象前,静态成员不存在
B:静态成员函数不能直接访问非静态成员
C:静态成员不能是虚函数
D:静态成员是类的成员
正确答案:【在创建对象前,静态成员不存在】

2、单选题:下列静态数据成员特性中,错误的是
A:引用静态数据成员时,要在静态数据成员名前加类名和作用域符号
B:说明静态数据成员时前边要加修饰符static
C:静态数据成员不是所有对象共有的
D:静态数据成员要在类体外进行初始化
正确答案:【静态数据成员不是所有对象共有的】

3、单选题:下面关于友元的描述中,错误的是
A:友元函数可以直接访问该类的私有成员
B:利用友元可以提高程序的运行效率,但却破坏了封装性
C:友元关系不能被继承,是双向可交换的
D:一个类的友元类中的所有成员函数都是这个类的友元函数
正确答案:【友元关系不能被继承,是双向可交换的】

4、单选题:如果类A被说明为类B的友元,则
A:类B的成员函数可以访问类A的所有成员
B:类A的成员是类B的成员
C:类A的成员函数可以访问类B的所有成员
D:类B的成员既是类A的成员
正确答案:【类A的成员函数可以访问类B的所有成员】

5、单选题:下列各类函数中,不是类的成员函数的是
A:拷贝构造函数
B:友元函数
C:析构函数
D:构造函数
正确答案:【友元函数】

6、单选题:对静态成员的正确描述是
A:全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域
B:非静态成员函数也可以操作静态数据成员
C:调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D:静态数据成员要在类外定义和初始化
正确答案:【全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域】

7、多选题:关于友元函数说法正确的是
A:友元函数是不能被继承的
B:友元函数需要通过对象或指针调用
C:友元函数没有this指针
D:友元函数破环了封装机制
正确答案:【友元函数是不能被继承的;友元函数没有this指针;友元函数破环了封装机制】

8、单选题:静态成员函数没有
A:this指针
B:指针参数
C:返回值
D:返回类型
正确答案:【this指针】

9、单选题:下面对静态数据成员的描述中,正确的是
A:静态数据成员不能通过类的对象调用,只能通过“类名::标识符”调用
B:类的不同对象有不同的静态数据成员
C:类的每个对象都有自己的静态数据成员
D:静态数据成员是类的所有对象共享的数据
正确答案:【静态数据成员是类的所有对象共享的数据】

10、单选题:友元的作用是
A:加强类的封装性
B:提高程序的运用效率
C:实现数据的隐藏性
D:增加成员函数的种类
正确答案:【提高程序的运用效率】

第十章 单元测试

1、单选题:关于函数模板,以下描述错误的是?
A:类模板的成员函数都是函数模板,类模板实例化后,成员函数随之实例化
B:一个类定义中,只要有一个函数模板,则这个类是模板类
C:函数模板的实例化由编译器实现
D:函数模板必须由程序员实例化为可执行的模板函数
正确答案:【函数模板必须由程序员实例化为可执行的模板函数】

2、单选题:下列类模板说明中,正确的是?
A:template
B:template(class T1, class T2)
C:template
D:template
正确答案:【template】

3、单选题:函数模板定义如下,下列选项正确的是?
template
Max(T a, T b, T &c)
{ c=a+b; }
A:int x, y; char z;
Max(x,y,z);
B:float x; double y, z;
Max(x,y,z);
C:int x, y; float z;
Max(x,y,z);
D:double x, y, z;
Max(x,y,z);
正确答案:【double x, y, z;
Max(x,y,z);】

4、单选题:下列有关类模板的描述错误的是?
A:使用时,模板参数与函数参数相同,是按位置而不是按名称对应的。
B:类模板和模板类是同一个概念。
C:模板把数据类型作为一个设计参数,称为参数化程序设计。
D:模板参数表中可以有类型参数和非类型参数。
正确答案:【类模板和模板类是同一个概念。】

5、单选题:类模板的使用实际上是将类模板实例化为一个什么?
A:抽象类
B:函数
C:对象
D:类
正确答案:【类】

6、单选题:类模板的实例化在什么时候进行?
A:在运行时进行
B:属于动态联编
C:在连接时进行
D:在编译时进行
正确答案:【在编译时进行】

7、单选题:类模板的模板参数?
A:

只可作为成员函数的参数类型

B:

只可作为成员函数的返回类型

C:

三种均可

D:

只能作为数据成员的类型

正确答案:【

三种均可

8、单选题:下列关于函数重载的叙述错误的是?
A:函数重载就是用相同的函数名定义多个函数
B:重载函数的参数列表必须不同
C:const关键字可以用于对重载函数的区分
D:函数返回值的类型不能用于对重载函数的区分
正确答案:【函数重载就是用相同的函数名定义多个函数】

9、单选题:下列关于模板形参的描述中错误的是?
A:可以用typename修饰模板形参
B:模板形参表必须用括号()括起来
C:可以用class修饰模板形参
D:模板形参表必须在关键字template之后
正确答案:【模板形参表必须用括号()括起来】

10、单选题:说明函数模板的关键字是?
A:static
B:inline
C:template
D:virtual
正确答案:【template】

第十一章 单元测试

1、单选题:在表达式x+y*2中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符,则operator+和operator*分别有多少个参数?
A:1 1
B:2 1
C:1 2
D:2 2
正确答案:【1 2】

2、单选题:以下关于运算符重载的叙述中,正确的是?
A:若重载运算符‘+’,则相应的运算符函数名为:+
B:通过运算符重载,可以定义新的运算符
C:重载二元运算符时,必须声明两个形参
D:有的运算,其运算符只能作为友元函数重载
正确答案:【有的运算,其运算符只能作为友元函数重载】

3、判断题:运算符重载函数必须是类的成员函数。
A:错
B:对
正确答案:【错】

4、单选题:关于运算符重载的描述中正确的是?
A:运算符重载可以改变结合性
B:运算符重载可以改变优先级
C:运算符重载可以改变操作数的个数
D:运算符重载不可以改变语法结构
正确答案:【运算符重载不可以改变语法结构】

5、单选题:友元运算符obj1>obj2被C++编译器解释为?
A:>(obj1,obj2)
B:obj1.operator(obj2)
C:operator>(obj1,obj2)
D:obj2.operator>(obj1)
正确答案:【>(obj1,obj2)】

剩余章节答案支付后查看
如有疑问请及时联系QQ 50895809反馈
如遇卡顿看不了剩余内容请换个浏览器即可打开

没找到的科目也可以提醒我们更新

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注