1、国家计算机二级(C+)75 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.以下叙述中错误的是_。 (分数:2.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参2.软件设计中模块划分应遵循的准则是(分数:2.00)A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合3.数据库技术的根本目标是要解决数据的【 】(分数:2.00)A.存储问题B.共享问题C.安全问题
2、D保护问题4.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:2.00)A.局部变量不能被本层模块程序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用5.下列叙述中正确的是_。 (分数:2.00)A.程序设计就是编制程序B.程序的测试必须由程序员自己去完成C.程序经调试改错后还应进行再测试D.程序经调试改错后不必进行再测试6.以下哪个基类中的成员函数表示纯虚函数?(分数:2.00)A.4B.-4C.32004D.07.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.联
3、合查询B.传递查询C.数据定义查询D.子查询8.下列描述中哪个是正确的?(分数:2.00)A.私有派生的子类无法访问父类的成员B.类 A 的私有派生子类的派生类 C 无法初始化其祖先类 A 对象的属性,因为类 A 的成员对类 C 是不可访问的C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员9.一棵二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为(分数:2.00)A.219B.221C.229D.23110.下列程序的运行结果为( )。 #includeiostreamh class Location protected:
4、int X,Y; publiC: void SeX(int myx)X=myx; void SetY(int myy)Y=myy; void showxy( ) cout“X=“ X“ “ “Y“= Y endl; ; Class Rectangle :public Location private: int H,W; public: void SetH(int myh)H=myh; void SetW(int myw) W=myw; void show( ) cout “X=“X“ “Y=“ Y“ “H=“ H“ “ “W=“ W endl; ; void main( ) Rectangle
5、 r1; r1SetX(3); r1SetY(5); r1SetH(4); r1SetW(6); r1showxy( ); r1. show( ); (分数:2.00)A.ThisFormText1ValueB.ThisFormParentValueC.ParentText1ValueD.ThisParentText1Value11.有以下程序: main() int num44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j; for(i=0;i=i;j+) printf(“%4c“, ); for(j=_;jA.i-1B.iC.i+1D.4-i12.下
6、面程序的执行结果是( )。 #include“ iostreamh“ void main( ) int * p,r; p=new in; * p=20; r=sizeof(* p); cout r end1; delete p; (分数:2.00)A.CDateB.IsDateC.DateD.IsText13.若有说明 int a34;,则 a 数组元素的非法引用是( )。(分数:2.00)A.a02*1B.a13C.a4-20D.a0414.下面关于数组的初始化正确的是( )。(分数:2.00)A.0B.22C.12D.1015.以下程序的输出结果是( )。 #includeiostream
7、h void main( ) inti,j,x=0; for(i=0;i 2;i+) x+; for(j=0;j 3;j+) if (j% 2)continue; x+; x+; cout “x=“ x; (分数:2.00)A.x=4B.x=8C.x=6D.x=1216.派生类对象对其基类中的什么成员是可访问的?(分数:2.00)A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.保护继承的保护成员17.派生类继承基类的方式有( )。(分数:2.00)A.SEEKNB.SEEK FOR 基本工资=NC.FIND 1000D.LOCATE FOR 基本工资=N18.下列关于栈的
8、叙述正确的是(分数:2.00)A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据C.只能在栈底插入数据D.不能删除数据19.关于动态存储分配,下列说法正确的是【 】(分数:2.00)A.new 和 delete 是 C语言中专门用于动态内存分配和释放的函数B.动态分配的内存空间也可以被初始化C.当系统内存不够时,会自动回收不再使用的内存单元,因些程序中不必用 delete 释放内存空间D.当动态分配内存失败时,系统会立刻崩溃,因此一定要慎用 new20.若有语句 int * point,a=4;和 point=printf(“%d/n“,c 程序运行后的输出结果是_。 (分数:2.00)
9、A.0B.70C.35D.123.有以下程序 main() int y=10; while(y-);printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分数:2.00)A.y=0B.y=-1C.y=1D.while24.下列语句中,错误的是【 】(分数:2.00)A.const int buffer=256;B.const double*point;C.int const buffer=256;D.double*const point;25.下面程序输出的结果是( )。 #includeiostreamh void main( ) int i; int a33=1,2,3,4,
10、5,6,7,8,9; for(i=0;i3;i+) coutaii“ “; (分数:2.00)A.15B.16C.510D.61026.有以下程序: main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+A.42B.45C.56D.6027.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的【 】(分数:2.00)A.公有成员和私有成员B.私有成员和保护成员C.公有成员和保护成员D.私有成员、保护成员和公有成员28.有如下程序 #include using namespace std; class Base protected:
11、Base()coutA.BB.BAC.ABD.BB29.下列运算符中,不能被重载的是(分数:2.00)A._yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是【 】 (分数:2.00)A.Pointpt;pt;Print();B.const Point pt;pt.Print();C.Pointpt;pt.Move(1,2);D.const Point pt;pt.Move(1,2);32.下列定义中 p 指向的地址可更改,但* p 不能够更改的是( )。(分数:2.00)A.用于输入的友元函
12、数B.用于输入的成员函数C.用于输出的友元函数D.用于输出的成员函数33.有以下程序: #include main() FILE *fp; int i,k,n; fp=fopen(“data.dat“,“w+“); for(i=1;iA.0 0B.123 45C.1 4D.1 234.以下叙述中正确的是_。 (分数:2.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间35.在 E-R 图中,用来表示实体的图形是_。 (分数:2.00)A.矩形B.椭圆形C.菱形D.三角形二、填空题(每空 2 分,共 30
13、分)(总题数:13,分数:390.00)36.在 MyClass 类的定义中,对赋值运算符“=“进行重载。请将画线处缺失的部分补充完整。 1 MyClass:operator=(const MyClass static int c=3; b+;c+; return(a+b+c); main2 int i,a=5; for(i=0;i填空项 1:_38.有如下定义: class MA int value ; public: MA(int n=0)。value(n) ; MA*ta,tb 其中 MA类的对象名标识符是 1。(分数:30.00)填空项 1:_39.以下程序运行后的输出结果是 1。 v
14、oid swap(int x,int y) int t; t=x;x=y;y=t;printf(“%d %d “,x,y); main2 int a=3,b=4; swap(a,b); printf(“%d %d“,a,b); (分数:30.00)填空项 1:_40.下列软件系统结构图的宽度为 1 (分数:30.00)填空项 1:_41.测试用例包括输入值集和 1 值集。(分数:30.00)填空项 1:_42.下列程序的输出结果是 1 #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB) return (aB)
15、?a:b; int main 2 coutfun(3,6),fun(3.14F,6.28F)end1; return 0; (分数:30.00)填空项 1:_43.以下程序的功能是输入任意整数给 n 后,输出 n 行由大写字母 A 开始构成的三角形 字符阵列图形。例如,输入整数 5 时(注意:n 不得大于 10),程序运行结果如下: A B C D E F G H I J K L M N O 请填空完成该程序。 main1 int i,j,n; char ch=A; scanf(“%d“, if(n=n;i+) for(j=1; j=n-i+1;j+) printf(“%2c“,ch); 2
16、; 3 ; else printf (“n is too large!/n“); printf(“/n“); (分数:30.00)填空项 1:_44.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:30.00)填空项 1:_45.指针数组是由 1 构成的数组。 (分数:30.00)填空项 1:_46.已知字符 A 的 ASCII 代码值为 65,以下程序运行时若从键盘输入 B33,则 输出结果是 1。 #include main2 char a,b; a=getchar3;scanf(“%d“, a=a-A+0;b=b*2;
17、printf(“%c %c/n“,a,b); (分数:30.00)填空项 1:_47.C+语言的基本控制结构为顺序结构、选择结构和 1。(分数:30.00)填空项 1:_48.已知程序的结果为 123,请填空。 #includeiostream.h templateclassT classA public: Tx,y,z; voiddisplay( )coutx“y“z; ; voidmain( ) Aintal; 1 2 3 al.display( ); (分数:30.00)填空项 1:_国家计算机二级(C+)75 答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2
18、 分,共 70 分) 下列各(总题数:35,分数:70.00)1.以下叙述中错误的是_。 (分数:2.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参 解析:在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释 放,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变 主调函数的实参的值,也就是说形参的值是不传回给对应的实参的。2.软件设计中模块划分应遵循的准则是(分数:2.00)A.低内聚低耦合B
19、.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。3.数据库技术的根本目标是要解决数据的【 】(分数:2.00)A.存储问题B.共享问题 C.安全问题D保护问题解析:由于数据的集成性使得数据可被多个应用程序所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据库的应用范闱,所以数据库技术的根本目标是解决数据的共享问题。4.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:2.00)A.局部变量不能被本层模块程序调用B.
20、私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用 解析:本题考查模板概念。类模板可以有虚拟类型参数。5.下列叙述中正确的是_。 (分数:2.00)A.程序设计就是编制程序B.程序的测试必须由程序员自己去完成C.程序经调试改错后还应进行再测试 D.程序经调试改错后不必进行再测试解析:程序调试的任务是诊断和改正程序中的错误,改正以后还需要再测试。6.以下哪个基类中的成员函数表示纯虚函数?(分数:2.00)A.4 B.-4C.32004D.0解析:x 数组共有 10 个元素,在花括弧内只提供 3 个初值,这表示只给前面的 3 个成员赋
21、值,后 7 个元素的值为 0,所以,一共有 20 个字节。7.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.联合查询B.传递查询C.数据定义查询D.子查询 解析:参数查询在执行时会弹出对话框,并提示输入必要的信息。8.下列描述中哪个是正确的?(分数:2.00)A.私有派生的子类无法访问父类的成员B.类 A 的私有派生子类的派生类 C 无法初始化其祖先类 A 对象的属性,因为类 A 的成员对类 C 是不可访问的 C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员解析:C+语言中一个派生类能不能继承基类的所有数据成员受继
22、承方式的限制。9.一棵二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为(分数:2.00)A.219 B.221C.229D.231解析:10.下列程序的运行结果为( )。 #includeiostreamh class Location protected: int X,Y; publiC: void SeX(int myx)X=myx; void SetY(int myy)Y=myy; void showxy( ) cout“X=“ X“ “ “Y“= Y endl; ; Class Rectangle :public Location private:
23、int H,W; public: void SetH(int myh)H=myh; void SetW(int myw) W=myw; void show( ) cout “X=“X“ “Y=“ Y“ “H=“ H“ “ “W=“ W endl; ; void main( ) Rectangle r1; r1SetX(3); r1SetY(5); r1SetH(4); r1SetW(6); r1showxy( ); r1. show( ); (分数:2.00)A.ThisFormText1Value B.ThisFormParentValueC.ParentText1ValueD.ThisPa
24、rentText1Value解析:SEEK、FIND 和 LOCATE 命令都可用来查询记录,选项 B)属于语法错误。11.有以下程序: main() int num44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j; for(i=0;i=i;j+) printf(“%4c“, ); for(j=_;jA.i-1B.i C.i+1D.4-i解析: 本题程序为二重循环,外循环控制输出数据的行数,内循环控制输出数据的列数。从本题输出的形式来看,程序要求输出的是 4 行 4 列。12.下面程序的执行结果是( )。 #include“ iostreamh“ vo
25、id main( ) int * p,r; p=new in; * p=20; r=sizeof(* p); cout r end1; delete p; (分数:2.00)A.CDateB.IsDate C.DateD.IsText解析:Access 支持将数据库中的数据通过 Web 页发布,通过 Web 页用户可以方便、快捷地将所有文件作为 Web 发布程序储存到指定的活页夹,或者将其复制到 Web 服务器上。13.若有说明 int a34;,则 a 数组元素的非法引用是( )。(分数:2.00)A.a02*1B.a13C.a4-20D.a04 解析:本题考查数组的定义范围。本题定义 a
26、为 3 行4 列的数组,它可用的行下标最大为 2,列下标最大为 3。注意:a04超过了数组的范围。14.下面关于数组的初始化正确的是( )。(分数:2.00)A.0 B.22C.12D.10解析:本题考查对于运算符“printf(“%d/n“,c 程序运行后的输出结果是_。 (分数:2.00)A.0B.70C.35 D.1解析: 按位“与”时,1 while(y-);printf(“y=%d/n“,y); 程序执行后的输出结果是_。(分数:2.00)A.y=0B.y=-1 C.y=1D.while解析:此题考核的是 while 条件语句及自减运算。当 while 的条件表达式成立时(非零),重
27、复执行循环体, 但此题的 while 循环无循环体,则只要 while 的条件表达式成立,就不断执行 while 条件表达式,直到其条 件表达式不成立,程序就自动跳出 while 循环,直接执行 printf 语句。“y”表示先运用 y 的值,再进行 y 自减。本题一开始先判断 y 为 10 的值是否满足条件(同时 y 的值自减 1),显然 y=10 条件满足,则再次 执行 while 语句,判断 y 为 9 的值是否满足条件(同时 y 的值自减 1)直到判断 y 为 0 的值是否满足 条件(同时 y 的值自减 1,即 y=-1),此时条件为假,退出循环,执行 printf 语句,输出 y=-
28、1。24.下列语句中,错误的是【 】(分数:2.00)A.const int buffer=256;B.const double*point;C.int const buffer=256;D.double*const point; 解析:const 关键字不仅可以修饰类对象本身,也可以修饰类对象的成员函数和数据成员,分别称为常对象、常成员函数和常数据成员。25.下面程序输出的结果是( )。 #includeiostreamh void main( ) int i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) coutaii“ “; (分数:2.00)A.
29、15B.16C.510D.610 解析:YEAR( )函数用于测试日期的年份,其结果是一个数值型数据。本题中,利用求出的年份经过数值运算后,再利用 MOD( )函数求 4 和 10 的余,MOD( )函数功能为返回两个数值相除后的余数。是被除数, 是除数。余数的正、负号与除数相同。如果被除数与除数同号,那么函数值为两数相除的余数;如果异号,则函数值为两数相除的余数在加上除数的值。26.有以下程序: main() int p8=11,12,13,14,15,16,17,18,i=0,j=0; while(i+A.42B.45 C.56D.60解析:本程序的作用是求除 p0外的其他奇数的和。27.
30、在公有派生的情况下,派生类中定义的成员函数只能访问原基类的【 】(分数:2.00)A.公有成员和私有成员B.私有成员和保护成员C.公有成员和保护成员 D.私有成员、保护成员和公有成员解析:本题考核派生类的定义和访问权限。当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类私有成员不可访问。即基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。28.有如下程序 #include using namespace std; class Base protected: Base()coutA.BB.BAC.AB D.BB解析:建
31、立派生类对象时,构造函数的执行顺序如下: 执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右); 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下); 执行派生类的构造函数。本题首先调用基类的构造函数输出字符 A,然后调用派生类的构造函数,输出字符 B。29.下列运算符中,不能被重载的是(分数:2.00)A._yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是【 】 (分数:2.00)A.Pointpt;pt;Print();B.const Poin
32、t pt;pt.Print();C.Pointpt;pt.Move(1,2);D.const Point pt;pt.Move(1,2); 解析:本题考核常对象、常数据成员与常成员函数。如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数,D 选项中对象 pt 为常对象,而成员函数 Move()不是常成员函数,所以这样调用会发生编译错误。32.下列定义中 p 指向的地址可更改,但* p 不能够更改的是( )。(分数:2.00)A.用于输入的友元函数 B.用于输入的成员函数C.用于输出的友元函数D.用于输出的成员函数解析:C+语言中 setfil1 的意思是在
33、空格的地方填上 setfil1 函数中的参数字符,setw 的意思是没置整个输出字符串的字符个数,本题中用:来代替空格。33.有以下程序: #include main() FILE *fp; int i,k,n; fp=fopen(“data.dat“,“w+“); for(i=1;iA.0 0B.123 45C.1 4D.1 2 解析:语句“fprintf(fp,“%d “,i);”的作用是将变量 i 的值按“%d”的格式输出到 fp 指向的文件上;“rewind(fp)” 的作用是使指针重新返回文件的开头;“fscanf(fp,“%d%d“, static int c=3; b+;c+;
34、return(a+b+c); main2 int i,a=5; for(i=0;i填空项 1:_ (正确答案:10111212)解析:静态局部变量是在编译时赋初值的,在程序运行时它已有初值。38.有如下定义: class MA int value ; public: MA(int n=0)。value(n) ; MA*ta,tb 其中 MA类的对象名标识符是 1。(分数:30.00)填空项 1:_ (正确答案:Tb)解析:根据题意可知 MA 类的对象名标识符是 tb。39.以下程序运行后的输出结果是 1。 void swap(int x,int y) int t; t=x;x=y;y=t;pr
35、intf(“%d %d “,x,y); main2 int a=3,b=4; swap(a,b); printf(“%d %d“,a,b); (分数:30.00)填空项 1:_ (正确答案:4 3 3 4)解析:用变量作为函数的实参时,属单向传递,即“值传送”方式,此种函数参数的传递方式只能由实参 传给形参,不能由形参传回来给实参。40.下列软件系统结构图的宽度为 1 (分数:30.00)填空项 1:_ (正确答案:3)解析:在程序结构图的有关术语中,宽度的概念是:整体控制跨度,即各层中所含的模块数的最大值,由图可得此软件系统结构图的宽度为 3。41.测试用例包括输入值集和 1 值集。(分数:
36、30.00)填空项 1:_ (正确答案:输出)解析:软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。42.下列程序的输出结果是 1 #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB) return (aB) ?a:b; int main 2 coutfun(3,6),fun(3.14F,6.28F)end1; r
37、eturn 0; (分数:30.00)填空项 1:_ (正确答案:3,3.14)解析:本题考核模板函数的使用。C编译系统将根据实参表中的实参的类型来确定函数的形参列表中的类型。函数 fun 的功能是返回两者中较小的值,函数调用 fun(3,6)返回的值为 3,函数调用fun(3.14F,6.28F)返回的值为 3.14。43.以下程序的功能是输入任意整数给 n 后,输出 n 行由大写字母 A 开始构成的三角形 字符阵列图形。例如,输入整数 5 时(注意:n 不得大于 10),程序运行结果如下: A B C D E F G H I J K L M N O 请填空完成该程序。 main1 int
38、i,j,n; char ch=A; scanf(“%d“, if(n=n;i+) for(j=1; j=n-i+1;j+) printf(“%2c“,ch); 2 ; 3 ; else printf (“n is too large!/n“); printf(“/n“); (分数:30.00)填空项 1:_ (正确答案:ch+ 或 ch=ch+1 或 +ch , printf(“/n“))解析:此题主要考核的是有关循环的程序分析。程序中使用了两层 for 循环,外循环的作用是控制行数,内循环的作用是控制每行的列数,在此循环内第一个空中填入 ch+的作用是将输出的字符本身加 1,成为 欲输出的下
39、一个字符。第二个空中填入 printf(“/n“)是用来实现换行操作的。44.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:30.00)填空项 1:_ (正确答案:传地址)解析:本题考查的是传值调用和传址调用的区别-传值调用只是进行值的简单复制,返回之后不会改变原来的值;而传址调用是把参数的地址传入,会改变原来的值。 45.指针数组是由 1 构成的数组。 (分数:30.00)填空项 1:_ (正确答案:指针)解析:如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组称之为指针数组,它是指针的集合。 46.已
40、知字符 A 的 ASCII 代码值为 65,以下程序运行时若从键盘输入 B33,则 输出结果是 1。 #include main2 char a,b; a=getchar3;scanf(“%d“, a=a-A+0;b=b*2; printf(“%c %c/n“,a,b); (分数:30.00)填空项 1:_ (正确答案:1 B)解析:C 语言使字符型数据和整型数据之间可以通用。题中执行“a=getchar-|_|-;”后,a 的值 B,在内存中的表现形式为 ASCII 码 66 ;执行“scanf(“%d“, ”后,b 在内存中的表现形式为 33 ,然后经过“a=a-A+0;b=b*2;”运算
41、,得出 a 的值为字符1,b 的值为 ASCII 码 66,最后以字符型输出为 1 B。47.C+语言的基本控制结构为顺序结构、选择结构和 1。(分数:30.00)填空项 1:_ (正确答案:循环结构)解析:C+语言 3 种基本结构就是顺序结构,选择结构,循环结构。 48.已知程序的结果为 123,请填空。 #includeiostream.h templateclassT classA public: Tx,y,z; voiddisplay( )coutx“y“z; ; voidmain( ) Aintal; 1 2 3 al.display( ); (分数:30.00)填空项 1:_ (正确答案:a1.x=1;)解析:通过程序的结果知道数据类型是 int,所以调用时声明模板实参为 int 的,再对 x,y,z 进行赋值。