版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江苏科技大学课程实践报告设计题目: 程序设计(vc+)实践 设计时间 20011-2-21 至 2011-2-25 学院(系): 船舶与海洋工程 专业班级: 船海2班 学生姓名: 彭鹏 学号 0941901220 指导老师: 邹晓华 2011年02月 任务一一、实践任务1试建立一个类pp,求出下列多项式的前n项的值。 二、详细设计1、类的描述与定义(1)私有数据成员l int n:前若干项的项数。l double x:存放x的值。l double *p:根据n的大小动态申请存放pn(x) 前n项的数组空间。(2)公有成员函数l pp(int num,double x1):构造函数,初始化数据成
2、员n和x,使p指向动态申请的数组空间。l pp():析构函数,释放p指向的动态内存空间。l double fun(int n1,double x):递归函数,用于求多项式的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。l void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。l void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。2、主要函数设计在主函数中完成对该类的测试。先输入num和x1,并定义一个pp类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输
3、出多项式前num项的值。三、源程序清单#includeclass ppprivate:int n;double x;double*p;public:pp(int num,double x1)n=num;x=x1;p=new doublen;pp()if(p) delete p;double fun(int n1,double x);void process();void show();double pp:fun(int n1,double x)if(n1=0) return 1;else if(n1=1) return x; else if(n11) return (2*n1-1)*x*fun
4、(n1-1,x)-(n1-1)*fun(n1-2,x)/n1;void pp:process()for(int i=0;in;i+)pi=fun(i,x);void pp:show()coutn=nendlx=xendl;for(int i=0;in;i+)coutpitt;if(i+1)%4=0) coutendl;void main()int num;double x1;coutnumx1;pp items(num,x1);cess();items.show();四、实践小结应熟练掌握递归函数的应用,写递归函数时应先进行递归结束条件的判定。五、运行结果任务二一、实践任务2
5、试建立一个类sp,求,另有辅助函数power(m,n)用于求。二、详细设计1、类的描述与定义(1)私有数据成员l int n,k:存放公式中n和k的值;(2)公有成员函数l sp(int n1,int k1):构造函数,初始化成员数据n和k。l int power(int m, int n):求mn。l int fun( ):求公式的累加和。l void show( ):输出求得的结果。2、主要函数设计在主程序中定义对象s,对该类进行测试。三、源程序清单#includeclass spprivate:int n,k;public:sp(int n1,int k1)n=n1;k=k1;int p
6、ower(int m,int n);int fun();void show();int sp:power(int m,int n) int s=1;for(int i=0;in;i+) s*=m;return s;int sp:fun()int s=0;for(int i=1;i=n;i+)s+=power(i,k);return s;void sp:show()coutf(n,k)=fun()endl;void main()int n1,k1;coutn1k1;sp s(n1,k1);s.fun();s.show();四、实践小结掌握用循环语句求mn,和m!,熟练掌握函数的调用。五、运行结果
7、任务三一、实践任务3建立一个类move,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。二、详细设计1、类的描述与定义(1)私有数据成员l float array20:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l move(float b,int m):构造函数,初始化成员数据。l void average():输出平均值,并将数组中的元素按要求重新放置。l void print():输出一维数组。2、主要函数设计在主程序中用数据1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3对该类进行测试。三、源程序清单#incl
8、udeclass moveprivate:float array20;int n;public:move(float b,int m)for(int i=0;im;i+)arrayi=bi;n=m;void average();void print();move();void move:average()float ave=0;int i,j;for(i=0;in;i+)ave+=arrayi;ave/=n;coutaveendl;float turn20;j=0;for(i=0;in;i+)if(arrayi=ave)turnj=arrayi;j+;j=0;for(i=0;iave)turn
9、n-1-j=arrayi;j+;for(i=0;in;i+)arrayi=turni;void move:print()for(int i=0;in;i+)coutarrayi ;void main()float b1=1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3;int num;num=sizeof(b1)/sizeof(float);move s(b1,num);s.average();s.print();四、实践小结应熟练掌握数组与指针的应用。五、运行结果任务四一、实践任务4建立一个类move,将数组中最大元素的值与最小元素的值互换。二、详细设计1、类的描述与定义(
10、1)私有数据成员l int *array:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l move(int b,int m):构造函数,初始化成员数据。l void exchange():输出平均值,并将数组中的元素按要求重新放置。l void print():输出一维数组。l move():析构函数。2、主要函数设计在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。三、源程序清单#includeclass moveprivate:int *array;int n;public:move(int b,int m)array=new
11、intm;n=m;for(int i=0;im;i+)arrayi=bi;void exchange();void print();move()if(array) delete array;void move:exchange() float ave=0; for(int i=0;in;i+)ave+=arrayi;ave/=n;cout平均值为aveendl;int max,min;max=min=array0;int m;for(i=0,m=0;i=max) m=i,max=arrayi;int l;for(i=0,l=0;in;i+) if(arrayimax) l=i,max=arra
12、yi;i=arraym,arraym=arrayl,arrayl=i; void move:print() for(int i=0;in;i+)coutarrayi ;void main() int text=21,65,43,87,12,84,44,97,32,55;int num;num=sizeof(text)/sizeof(int);move s(text,num);s.print();coutendl;s.exchange();s.print();四、实践小结学会求数组中最大元素与最小元素方法,并实现交换。五、运行结果任务五一、实践任务5定义一个类palindrome,实现绝对回文数
13、。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。二、详细设计1、类的描述与定义(1)私有数据成员l int n:整型数字。l int y: 标记是否为回文数。(2)公有成员函数l palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。l void huiwen () :判断数n是否为绝对回文数。l void show( ) :若该数为回文数,则在屏幕显示。2、主要函数设计在主程序中定义int a,由键盘输入数字。定义一个palindrome类对象p,用a初始化p,完成对该类的测试。三、源程序清单#in
14、cludeclass palindromeprivate:int n;int y;public:palindrome(int x)n=x;y=0;void huiwen();void show();void palindrome:huiwen()int i=0,j=0; int m; m=n;while(m)m/=10;i+;m=n; while(m)m/=2;j+;int*s10=new inti; int*s2=new intj; m=n; for(int k=0;ki;k+)s10i-1-k=m%10;m/=10;m=n; for(k=0;kj;k+)s2j-1-k=m%2;m/=2;i
15、nt num10=0; for(k=0;ki/2;k+)if(s10i-1-k=s10k) num10+;else break;int num2=0; for(k=0;kj/2;k+)if(s2j-1-k=s2k) num2+;else break;if(num10=(i/2)&num2=(j/2) y=1;void palindrome:show()int i=0,j=0; int m; m=n;while(m)m/=10;i+;m=n; while(m)m/=2;j+;int*s10=new inti+1; int*s2=new intj+1; m=n; for(int k=0;ki;k+
16、)s10i-1-k=m%10;m/=10;m=n; for(k=0;kj;k+)s2j-1-k=m%2;m/=2;if(y) cout该数为绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k+)couts10k;cout二进制表示为:;for(k=0;kj;k+)couts2k;elsecout该数不是绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k+)couts10k;cout二进制表示为:;for(k=0;kj;k+)couts2k;coutendl;void main()int a;couta;palindrome p(a);p.huiwen
17、();p.show();四、实践小结将整型转换会整型数组类型,再进行回文数判断,从而实现回文数用数组判断的通用性。五、运行结果任务六一、实践任务6定义一个字符串类string,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。二、详细设计1、类的描述与定义(1)私有数据成员l char *str; l int y:标记是否为回文字符串。(2)公有成员函数l string (char *s) :构造函数,用给定的参数s初始化数据成员str。y初始化为0。l void huiwen () :判断str所指向的字符串是否为回文字符串。l
18、void show( ) :在屏幕上显示字符串。2、主要函数设计在主程序中定义字符串char s=”ababcedbaba”作为原始字符串。定义一个string类对象test,用s初始化test,完成对该类的测试。三、源程序清单#include#includeclass stringprivate:char*str;int y;public:string(char*s)int n=strlen(s);str=new charn+1;strcpy(str,s);y=0;void huiwen();void show();string()if(str) delete str;void string
19、:huiwen()/判断str所指向的字符串是否为回文字符串;int n,judge=0;n=strlen(str);for(int i=0;i(n/2);i+)if(stri=strn-1-i) judge+;if(judge=i) y=1;void string:show()/输出;if(y=1) couty=1,该字符串是回文数strendl;else couty=0,该字符串不是回文数strendl;void main()/测试;char s=ababcedbaba;string test(s);test.huiwen();test.show();四、实践小结掌握判断回文字符串的一般形
20、式。五、运行结果任务七一、实践任务7建立一个类phalanx,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。1 2 5 104 3 6 119 8 7 1216 15 14 131 2 4 3 1二、详细设计1、类的描述与定义(1)私有数据成员l int (*p)20:指向按照折叠规律存放方阵的二维整型数组。l int startnum:折叠方阵的起始数。l int n:存放方针的层数。(2)公有成员函数l phalanx (int s, int m ):构造函数,初始化成员数据。l void process(
21、):生成起始数为startnum的n行方阵。l void print():输出折叠方阵。l phalanx( ):析构函数。2、主要函数设计在主程序中对该类进行测试。三、源程序清单#includeclass phalanxprivate:int(*p)20;int startnum;int n;public:phalanx(int s,int m)startnum=s;n=m;p=new intm20;void process();void print();phalanx()if(p) deletep;void phalanx:process()/生成起始数为stratnum的n行螺旋方阵;i
22、nt turn;turn=p00=startnum;int i,j;for(int k=n-2;k=0;k-)/按照折叠方阵的生成过程进行赋值;for(i=0,j=n-k-1;i=0;j-)pij=+turn;void phalanx:print()for(int i=0;in;i+)for(int j=0;jn;j+)coutpijt;coutendl;void main()int s1,m1;couts1m1;phalanx test(s1,m1);cess();test.print();四、实践小结根据折叠方阵的产生方式进行相应的逻辑循环实现。五、运行结果任务八一、实践任
23、务8建立一个matrix,生成并显示一个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。1 2 3 4 5 16 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9二、详细设计1、类的描述与定义(1)私有数据成员l int a20 20:二维整型数组存放螺旋方阵。l int startnum:螺旋方阵的起始数。l int n:存放方针的层数。(2)公有成员函数l matrix (int s, int m ):构造函数,初始化成员数据startnum和n。l void process
24、():生成起始数为startnum的n行螺旋方阵。l void print():输出螺旋方阵。2、主要函数设计在主程序中定义matrix类的对象t对该类进行测试。三、源程序清单#includeclass matrixprivate:int a2020;int startnum;int n;public:matrix(int s,int m)startnum=s;n=m;void process();void print();void matrix:process()/生成起始数为startnum的n行螺旋方阵;int i,j;int k;int turn=startnum;for(k=1;k=
25、n/2;k+)/逻辑性:按照螺旋方阵的生成过程(按顺时针方向从外向里旋转填数),进行赋值;for(i=k-1,j=k-1;jn-(k-1);j+)aij=turn+;j-;turn-;for(;i=k-1;j-)aij=turn+;j+;turn-;for(;i=k;i-)aij=turn+;an/2(n-1)/2=n*n-1+startnum;void matrix:print()/输出螺旋方阵;int i,j;for(i=0;in;i+)for(j=0;jn;j+)coutaijt;coutendlendl;void main()/测试;int s,m;coutsm;matrix t(s,
26、m);cess();t.print();四、实践小结发现本质的逻辑关系,利用循环语句实现。五、运行结果任务九一、实践任务9定义一个字符串类cstring,并设计一个算法对该串中各个不同字符出现的频率进行统计。二、详细设计1、类的描述与定义(1)私有数据成员l char *str:指向要统计的字符串。l char (*p)2:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ascii值存放;在输出次数时,输出该ascii字符对应的ascii值即可)。l int size:存放字符串中出现的所有不同的字符的个数。(2)公有成员函数l cs
27、tring (char *s) :根据s参数初始化数据成员str;p和size初始值为0。l void count():p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:可以借助临时数组或指针来实现)。l void show():屏幕显示字符串、字符串的每个字符和与之对应的次数。l cstring():释放动态分配的空间。2、主要函数设计在主程序中定义字符串char s=”abdabc
28、desffffd”。定义一个cstring类对象test,用s以初始化test,完成对该类的测试。三、源程序清单#include#includeclass cstringprivate:char*str;char (*p)2;int size;public:cstring(char*s)str=new charstrlen(s)+1;strcpy(str,s);size=0;p=0;void count();void show();cstring()if(str) delete str;void cstring:count()p=new charstrlen(str)2;int i,j,k;f
29、or(i=0,j=0;istrlen(str);i+)/每行第0列依次给予字符串中的一个字符,第1列设置每个字符出现的次数为初始值1;pij=stri;pij+1=1;char*part1=new charstrlen(str)+1;/定义临时的字符数组,用于依次存放不同的字符int*part2=new intstrlen(str)+1;for(i=0;istrlen(str);i+)part1i=0;for(i=0;istrlen(str);i+)part2i=0;for(i=0;istrlen(str);i+)/abdabcdesffffd /abcfor(j=i;jstrlen(str)
30、;j+)int count;for(k=0,count=0;ksize;k+)if(part1k=pi0)count+;/如果临时数组中的字符与原数组中相同,则count自增为1;if(count=1) break;/代表原字符串中的字符已与临时数组中的字符相重复,则跳出j控制的内循环;else /否则,将未重复的字符存入临时数组1part1size=pi0;size+;for(k=0;ksize;k+)for(i=0;istrlen(str);i+)if(part1k=pi0)/实现对不同字符个数的计数,将记的数存放在临时数组2中。part2k+;delete p;p=new charsiz
31、e2;/根据size的实际大小,重新分配p所指空间,并借组临时数组把不同字符及其出现次数重新放回p数组。for(i=0;isize;i+)pi0=part1i;pi1=part2i;delete part1;delete part2;void cstring:show()cout原字符串为:strendl;cout不同的字符数:sizeendl;cout字符串中的每个字符为:endl;for(int i=0;isize;i+)coutpi0 次数(int)pi1endl;void main()char s=abdabcdesffffd;cstring test(s);test.count();
32、test.show();四、实践小结可建立临时数组,帮助判断。五、运行结果任务十一、实践任务10定义一个字符串类cstring,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能。二、详细设计1、类的描述与定义(1)私有数据成员l char *str; 原始字符串。l char *str1; 目标关键字。l char *str2; 替换关键字。l int flag; 标记替换是否完成替换。 (2)公有成员函数l cstring (char *s,char s1 ,char *s2) :用给定的参数s、s1和s2相对应的初始化数据成员str、str1和st
33、r2。flag设置缺省0。l void replace () :判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。若替换成功了标记flag为1,若替换不成功则标记flag为0。l void show( ) :若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。l cstring() :释放动态分配的空间。2、主要函数设计在主程序中定义字符串char s=”i am student, you are student too, we are all student.”作为原始字符串,定义char s1=” student”作为目
34、标关键字,定义char s2=”teacher”作为替换关键字。定义一个cstring类对象test,用s,s1和s2初始化test,完成对该类的测试。三、源程序清单#include#includeclass cstringprivate:char*str;/原始字符串char*str1;/目标字符串char*str2;/替换关键字int flag;public:cstring(char*s,char s1,char*s2)str=new charstrlen(s)+strlen(s2)+strlen(s1)+1;str1=new charstrlen(s1)+1;str2=new chars
35、trlen(s2)+1;strcpy(str,s);strcpy(str1,s1);strcpy(str2,s2);flag=0;void replace();void show();cstring()if(str) delete str;if(str1) delete str1;if(str2) delete str2;void cstring:replace()int i=0;/i记录原始字符串str中第i位开始出现与目标关键字重合;int k=0,count=0;while(stri)while(stri!=str10&stri) i+;if(istrlen(str)/当第i位没有超出原
36、始字符串str的范围时,判断目标字符串是否出/现于原始字符串;if(strncmp(str+i,str1,strlen(str1)=0)k=1;/利用strncmp(,)函数判断目标字符串是否出现于原始字符串,出现则k=1;if(k)/若目标字符串出现,则进行替换;char*turn=new charstrlen(str)+strlen(str1)+strlen(str2)+1;/临时数组指针,用于存放替换的字符串;strncpy(turn,str,i);turni=0;strcat(turn,str2);strcat(turn,str+i+strlen(str1);strcpy(str,tu
37、rn);delete turn;i=i+strlen(str2);k=0;count+;if(count) flag=1;void cstring:show()if(flag) cout目标关键字:str1n替换关键字:str2n替换后的原始字符串:strendl;else cout原始字符串:strendl;void main()char s=i am student,you are student too,we are all student.;char s1=student;char s2=teacher;cstring test(s,s1,s2);test.replace();test
38、.show();四、实践小结利用临时字符数组,进行字符替代。五、运行结果任务十一一、实践任务11建立一个string,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。例如将字符串“abcde” 交叉插入字符串“abcde”的结果为“aabbccddee”或“aabbccddee”。二、详细设计1、类的描述与定义(1)私有数据成员l char str180 :存放被插入的字符串。l char str240 :存放待插入的字符串。(2)公有成员函数l string (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。l void process()
39、:将str2中的字符串插入到str1中。l void print():输出插入后的字符串。2、主要函数设计在主程序中定义string类的对象test对该类进行测试。三、源程序清单#include#includeclass stringprivate:char str180;/存放被插入的字符串;char str240;/存放待插入的字符串;public:string(char*s1,char*s2)strcpy(str1,s1);strcpy(str2,s2);void process();void print();void string:process()int i,j;int n=strl
40、en(str1);if(strlen(str2)strlen(str1)/当待插入的字符串abcdefg比被插入的字符串abcde长或相等时,逻辑算法:abcde-a b c d e-空格处依次插入abcdefg-aabbccddeefg;for(i=n-1;i0;i-)str1i+i=str1i;/被插入的字符串由最后一位开始各位向后移动i位;for(i=1,j=0;i2*n;i+=2,j+)str1i=str2j;/在空出的位置处依次插入字符串;i-;for(;ja b c d e fg-空格处插入abcde-aabbccddeefg;for(i=n;istrlen(str2)-1;i-)
41、str1i+strlen(str2)=str1i;/比待插入的字符串长的部分均向后移strlen(str2)位;for(i=strlen(str2)-1;i0;i-)str1i+i=str1i;/之前的部分均向后移i位;for(i=1,j=0;i2*strlen(str2);i+=2,j+)str1i=str2j;/将待插入的字符串插入空格处,完成插入;void string:print()/输出插入后的字符串cout插入后的字符串为:str1endl;void main()/测试string test(abcde,abcde);cess();test.print();四、实践
42、小结发现字符插入的规律,再依次放入相应字符位置。五、运行结果任务十二一、实践任务12建立一个string,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“abcde” 交叉插入字符串“abcdefg”的结果为“aabbccddeefg”或“aabbccddeefg”。二、详细设计1、类的描述与定义(1)私有数据成员l char str160 :存放被插入的字符串。l char str240 :存放待插入的字符串。l char str3100 :存放插入后的字符串。(2)公有成员函数l string (char *s1, char *s2 ):构造函数,用s1和s2初始
43、化str1和str2。l void process():将str2中的字符串插入到str1中,存放到str3中。l void print():输出插入后的字符串。2、主要函数设计在主程序中定义string类的对象test对该类进行测试。三、源程序清单#include#includeclass stringprivate:char str160;char str240;char str3100;public:string(char*s1,char*s2)strcpy(str1,s1);strcpy(str2,s2);void process();void print();void string:process()int i,j;int n=strlen(str1);if(strlen(str2)strlen(str1)/当待插入的字符串abcdefg比被插入的字符串abcde长或相等时,逻辑算法:abcde-a b c d e-空格处依次插入abcdefg-aabbccddeefg;for(i=n-1;i0;i-)str1i+i=str1i;/被插入的字符串由最后一位开始各位向后移动i位;for(i=1,j=0;i2*n;i+=2,j+)str1i=str2j;/在空出的位置处依次插
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年文化交流翻译兼职合作协议3篇
- 二零二五年度进口家具代理销售合同3篇
- 婚内孩子归属协议书(2篇)
- 二零二五年度工程垫资服务合同模板范本
- 二零二五年度航空物流运输合同智能化升级范本3篇
- 二零二五年度物业管理项目委托管理合同3篇
- 【小升初语文阅读专题训练】考点07 概括文章 (或文段) 内容-统编版2025年小升初语文阅读专题训练(含答案)
- 二零二五版企业计划员安全生产责任制与培训协议书3篇
- 二零二五年度绿色环保型二手商铺租赁管理协议2篇
- 二零二五年度常州智能化消防系统设计与施工合同2篇
- 人工智能算法模型定制开发合同
- 申请行政复议的申请书范文模板
- 【MOOC期末】《形势与政策》(北京科技大学)期末慕课答案
- 2024年医疗健康知识科普视频制作合同3篇
- 2024年古董古玩买卖协议6篇
- QC/T 1209-2024汽车噪声与振动(NVH)术语和定义
- 安全风险隐患举报奖励制度
- 江苏省苏州市2023-2024学年高三上学期期末考试 数学 含答案
- 教学成果奖培育工作方案
- 药品省区经理管理培训
- DB32T 1589-2013 苏式日光温室(钢骨架)通 用技术要求
评论
0/150
提交评论