程序设计陵况迎辉课后_第1页
程序设计陵况迎辉课后_第2页
程序设计陵况迎辉课后_第3页
程序设计陵况迎辉课后_第4页
程序设计陵况迎辉课后_第5页
已阅读5页,还剩196页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++基础知识习题C++基础知识习判断下列标识符的sinbook5arry_nameExample2.1$1class_cppa3x*ymy答:合法的:sinbook_namemainclass_cpp的:5arryExample2.1$1x*ymy假定有下列变量intfloatcharx+(int)y%ax=z*b++,b=b*x,b++ch4=ch3-ch2+ch1int(y/z)+(int)y/(int)z!(a>b)&&c&&(x*=y)&&b++ch3||(b+=a*c)||c++z=(a<<2)/(b>>1)答:x+(int)y%a表达式值为:4.5,运算后x、y、a的值不变,仍分别为2.58.2、3x=z*b++,b=b*x,b++表达式值为:42,运算后x为7.0,b为43。提示:逗号表达式,依次运算,表达式的值是最后一次运算的值。后++是变量先参加运算然后变量自身加1,所以第1步x等于1.4*5,即7.0,然后b增为6;第2步b赋值为42;第3步,表达式的值是上一步后b的值42,但随后b的值自增1,成为43ch4=ch3-ch2+ch1式值为:’\\’,字符外斜杠。运算后ch1、ch2、ch3值不提示:字符型的变量实质是范围很小的整型量int(y/z)+(int)y/(int)z表达式值为:13。y和z自身的值不变提示:int(y/z)是完成实数除法后,商强制转化为整型,(int)y/(int)z先转换,完成的是整除。!(a>b)&&c&&(x*=y)&&b++表达式值为:0。运算后x仍为2.5,b仍为提示:只要出现一个false右边的不再做,因为c为0,即false运算不再做。ch3||(b+=a*c)||c++达式值为:1。运算后b为5,c为0,均不变。z=(a<<2)/(b>>1)表达式值为:6。运算后a与b的值不变仍为3和5。 判断下列哪些是常量,哪些是变""constintn=10;intm=5;'a'charch='a'intarray[5]={1,2,3,4,5};chars[]="o";答:""文字常量constintn=10;intm=5;变量'a字常量C++基础知识习题charch='a'intarray[5]={1,2,3,4,5chars[]="o";变将下列算式或叙述用C++表达式描述(x+y)/((x-位于原点为圆心,a,b为半径的圆环中的点坐标并且字符ch不为'\0'20答pi/2+sqrt(asin(x)*asin(x)+c*c)int下面程序段的功能是备选答案中 ,当n=10,x=10打印结果(2)。;do{

y x

y

x)

y

)x)

n

2

2

2nn第二章基本控制结构程序设计习 第一个循环使x为:

;y成为1x2 2

;第一个循环使y成为

x) 2考虑整除x2

连除4次以后为零,所以 请看如下程序段else elseif(num==3) elsecout<<”Delta”;当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3)。解答:检查条件语句与字符串输出概念 执行下面程序段后,m和k的值分别 int++){if(m>=10)}m-}解答:注意continue语初 第1次循环 第2次循 第3次循 第4次循 第5次循 第6次循 第7次循 结束,k++二.编程与编程求一元二次方程ax2+bx+c=0的根。包括以下判断和结果:若输a=0,给出提第二章基本控制结构程序设计习 若Δ>0,输出两个不等实根;若Δ=0,输出两个相等实根;若Δ<0,输出两个复根解:本题以一个绝对值极小的数作为实数0#include<iostream.h>#include<math.h>#include<stdlib.h>voidmain(){doublea,b,c;doubledelta,x1,x2;constdoublezero=1e-9;定义一个很小的常intcout<<"输入三个系数a(a!=0bc:"<<endl;if(fabs(a)<zero){cout<<"二次项系数为0,方程根是-c/b";exit(0);}<<endl;delta=b*b-4*a*c;cout<<"方程有两个相同实根cout<<"x1=x2="<<-}else));x1=-b/(2*a);if(sign){cout<<"方程有两个不同实根:";}else{//delta<0cout<<"方程无实根!有两个不同复数根:";}}}设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分为470∼79分为3分,60∼69分为2分,60分以下为分。解:10分一档用10进行整除获得,转换用开PAGE4第二章基本控制结构PAGE4第二章基本控制结构程序设计习#include<iostream.h>voidmain(){intmark,result;mark是百分制成绩,result是5分制if(mark<0)cout<<"缺}(mark/10){case9:case10:case8:result=4;cout<<"输出五分制绩:"<<result<<endl;case7:result=3;cout<<"输出五分制绩:"<<result<<endl;case6:result=2;cout<<"输出五分制绩:"<<result<<endl;break;case5:case4:case3:case2:case1:case0:result=1;cout<<"输出五分制成绩:"<<result<<endl;cout<<"输入错误}}编程打印如下图形**** * * * ******解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务#include<iostream.h>voidmain(){intfor(i=1;i<=4;i++)cout<<"";cout<<"*";} **}编程输出下列图形,中间一行英文字母由输入得到ABCCCDD DDDDCCCCCBBB解:分上三角和下三角两部分分别处理左边的空格#includecharin;inti,j;if((in>=97)&&(in<=122))in-=32;//小写改大intline=in-fori=0;i<=line;i++){//上cout<<''<<char(i+'A');}fori=line;i>0;i--){//下三角(少一行)cout<<"cout<<''<<char(i-1+'A');PAGE6第二章基本控制结构PAGE6第二章基本控制结构程序设计习}}输入n,求递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的#include<iostream.h>#include<stdlib.h>voidmain(){intdoubleresult=0;result是结果{cout<<"输入错误}for(int{jch*=i;//jch是i的阶乘,注意n!=n*(n-1)!这样可少一层循}}几个桃子。解:采用递推法。从最后一天逆推到第一天,9次循环。#include<iostream.h>constintvoidinti,x=1;//最后一天只有一个cout<<"开始共有桃子"<<x<<"个。}从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中的个数。将这组整数放在整型数组中边输入一边求和及统计正数和负数的个数数由和除以整数数量取得。#include<fstream.h>#include<iostream.h>voidmain(){intstem[256],sum=0,pnum=0,nnum=0,i=0;cout<<"while(stem[i]!=0){];//求和if(stem[i]>0)pnum++;//正数数量else}if(!i)cout<<"0个数elsecout<<"平均值="<<(double)sum/(pnum+nnum)<<endl;//平均值习惯不用整数cout<<"正数个数="<<pnum<<endl;cout<<"负数个数}}编程找出1∼500之中满足除以3余2,除以5余3,除以7余2的整数。#include<iostream.h>voidmain(){inti;}编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例如6=1+2+3,就是一个完全数。解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所因子的和,并判断是否等于该数#include<iostream.h>voidmain(){inti,a,sum_yz;sum_yz是a的因子+){sum_yz=0;if(a%i==0)sum_yz+=i;if(a==sum_yz)}第二章基本控制结构程序设计习 }将100元换成用10元、5元和1元的组合,共有多少种组合方法。解:采用穷举法。考虑10元最多10张,520张,余下是1#include<iostream.h>voidmain(){for(inti=0,j,k,count=0;i<=10;i++)//i是10元张数,j是5元张数,k是元张 }}}利用反正切展开计算π的近似值,要求误差10- 如下3arctg(x)≈x

xx +x 令x=1,可计算出π/4的近似值解:采用递推法。初看每一项的递推通式不易写出,但每一项全看作奇数项,而偶数项全零,则很容易写出:第1项为x,第3项为第1项乘以x的平方除以项序号3乘以-1,其余类推。同时和的误差constdoublee=1e-6;voiddoublex,a,sum;inti=3;"<<endl;cin>>x;;do{}第二章基本控制结构程序设计习 用迭代法求方程x2+10cosx=0的根,误差限为10-5。迭 如下 x −10( sin −10sin解:迭代法也是用循环语句实现,数学constdoublee=1e-5;voidfloatx0,x1;intn=0;"<<endl;cin>>x1;x1=(x0*x0-10*(x0*sin(x0)+cos(x0)))/(2*x0-}while((fabs(x1-x0)>e)&&(n<=1e5));cout<<"超出迭代1e5次elsecout<<"方程x*x+10*cos(x)=0的一个根为:"<<x1<<endl;} 。规定A不和J比赛,M不和D及E比赛。列出所有可能的比赛 这是一个组合问题穷举法5个位置设甲队5名队员位置不变乙队改员位置进行配对1个位置可在5个队员中任选一个的位置必须扣除已选过的队员。并扣除不能配对的情况,即得所有可能的比。charintfor(j=0;j<5;j++){//0号if(j==0)continue;//A不与J比赛,即st1[0]不st2[0]比for(k=0;k<5;k++){//1号if(k==j)continue;if(l==j||l==k)continue;for(m=0;m<5;m++){//3号第二章基本控制结构程序设计习 if(m==3)continue;//M不与D比赛,即st1[3]不与st2[3]比赛if(n==3)continue;//M不与E比赛,即st1[4]不与比if(n==j||n==k||n==l||n==m)}}}}}}为1、2、3、4。人直接键入候选人代号,1∼4之外的整数视为弃权票,-1为终止志。打印各位候选人的得票以及当选者(得票数超过选票总数一半)解:用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句voidmain(){enumcandidate{feipiao,zhang,wang,li,zhao}cand;intvote[5]={0},i,k=0,n;if(n>=1&&n<=4)vote[n]++;elsevote[0]++;}for(i=0;i<5;i++){c;switch(cand){casefeipiao:casezhang:cout<<setw(10)<<"zhang"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout当选elsecout<<endl;casewang:cout<<setw(10)<<"wang"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout<<"当选"<<endl;第二章基本控制结构第二章基本控制结构程序设计习elsecout<<endl;and];if(vote[cand]>k/2cout<<"当选"<<endl;elsecout<<endl;casezhao:cout<<setw(10)<<"zhao"<<'\t'<<vote[cand];if(vote[cand]>k/2)cout<<"当选"<<endl;elsecout<<endl;}}}改造【例3.11将运行结果(Fibonacii数列的前20项)解:采用3步法。首先建立或打开一个输出文件,并与磁盘文件联系ofstreamofile("myfile3_16.txt再按一定格式存入数据:ofile<<setw(15)<<fib0<<setw(15)<<fib1;等然后关闭文件:ofile.close();如要读出数据,则用输入文件ifstreamifile("myfile3_16.txt");再输出最后关闭文件:file.close();constintm=20;voidmain(){intfib0=0,fib1=1,fib2,i,j,k,l;charch,a[256];ofstreamofile("myfile3_16.txt");fib1;for(intn=3;n<=m;n++){if(n%5==0) //控制每行5个数fib0=fib1;ofile.closecout<<"是否要将文件输出?Y或N"<<endl;cin>>ch;ifstreamifile("myfile3_16.txt");ifile>>i>>j>>k>>l;//由文件读if(ifile.eof()!=0)break;//屏幕显}}}改造【例3.16将运行结果(100以内素数)存入文件。解:采用4步法。首先定义一个输出文件:ofstreamofile;ofile.open("myfile3_17.txt");按一定格式把数据存入文件。最后关闭文件。效果与3步法相同。读文件同样可用3步法或4步法。h>constintn=100;voidinta[n],i,j;for(i=0;i<n;i //用数组保存整数100 //1不是素数,置if(a[i]==0)continue; for(j=i+1;j<n;j++)if(a[j]%a[i]==0)a[j]=0是a[i]倍数的元素}t");intcount=0; if(a[i]!=0){ofile<<se ofile<<endl;//每行10个数ofile.closecout<<"是否if(ch=='y'||ch=='Y'){ifile.owhile(ifile.get(b[i])){//不可用>>,它不能读白字符第二章基本控制结构程序设计习 if(b[i]=='\n')break;}l;count=0;显示 cout<<endl;//每行10个数if(ifile.eof()!=0)break;//这里与例3.20不同,最后一个数据后面可能没有回车,直接为文件束}}}改造【例3.10文本由文本文件输入解:文本文件读入要用成员函数:ifile.get(),而不可用插入运算符<<,否则会丢失空白字符。voidmain(){charch; ep3_18.cpp"<<endl;do{ //遇换行符行+1if(ch!=''&&ch!='\t'&&ch!='\n'&&ch!=EOF读到间隔if(!isword)nword++; 数+1nch++; }else //读到间隔 //读到文本结束符为ifile.close();cout<<"数"<<nword<<endl;cout<<"字}\第三章数习题第三章函数习

第二章基本控制结构程序设计习 一.基本概念与基础知识自填空被定义为形参的是在函数中起(1)用的变量,形参只能用(2)示。实参的作用是(3),实参可以用(4)、(5)、(6)表示。自变变量将实际参数的值传递给具有值的变常表达局部域包括(1)(2)(3)用局部变量的意义在(4)块函数函数原型局部变量具有局部作用域使得程序在不同块中可以使用同名变静态局部变量在(1)区,在(2)时候建立,生存期为(3),如定义时未显式初始化,则其初值为(4)。全局数据编全局生存全局部变量在(1)区,在(2)时候建立,生存期为(3),如定义时未显式初始化,则其初值为(4)。栈在函数或块开始执行函数或块的执行随机编译预处理的作用是(1)预处理指令的标志是(2)多文件系统中,程序由(3)来管理,用户自定义头文件中通常定义一些(4)。译并生成目标代码#工程文数习题用户构造的数据类型(如枚举类型)数等具有一定通用性或常用的量设有函数说明如下intf(intx,inty){returnx%y+1;假定a=10,b=4,c=5,下列语句的执行结果分别是(1)(2)(1)cout<<f(a,b)+f(a,c);(2)答案:4411035abcf(a,b)f(a,c)main()f(a,b)f(a,c)410xy510xyreturnx%y+1;returnx%y+1;答案下列程序的输出结果分别为(1)(2)usingnamespacestd;inta,b;voidf(int数习题staticinti=a注意静态局部变量intm,n;m=i+j;i++;j++;n=i*j;a++;}intmain(){a=1;b=2;f(b);f(a);return0;}i=2j=3m=3n=6对应蓝色)i=3j=3m=4n=9对应绿色)a=3b=2usingnamespacestd;floatsqr(floata){returna*a;}floatp(floatx,intn){if(n==0)return1;elseif(n%2!=0)returnx*sqr(p(x,n/2));elsereturnsqr(p(x,n/2));}intmain(){return0;}数习题图解递归,共五层,返回值是回归时产in-process:x=2n=13in-process:x=2n=6in-process:x=2n=3in-process:x=2n=1in-process:x=2n=0简答不同?答:实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配(兼容),当有缺省参数时可以不同。求?答:内联函数的调用机制与一般函数不同,编译器在编译过程中遇到iline该函数建立一段代码,而后在每次调用时直接将该段代码嵌入到调用函数中,从而将函数调用方式变为顺序执行方式,这一过程称为内联函数的扩展或内联。内联函数的实质是牺牲空间来换取时间。因inlin指示符对编译器而言只是一个建议,编译器也可以选择忽略该建议,内联函数只适用于功能简单,代码短小而又被重复使用的函数。函数体中包含复杂结构控制语句,如wit、复杂i嵌套、while语句等,以及无法内联展开的递归函数,都不能定义为内联函数,即使定义,系统也将作为一般函数处理。全局变量和全局静态变量的区别在哪里?为什么提倡尽量使用局部变量?答:有ttic 第三章函数习题5各自在自己的作用域中可见,在其它地方不可见。所以提倡尽量使用局部变量数在调用时是怎样进行对应的?答:函数重载可以定义几个功能相似,而参数类型不同使用相同的函数名的函用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强。在定义重载函数时必须保证参数类型不同,仅仅返回值类型不同是不行的函数。匹配过程按如下步骤进行:如果有严格匹配的函数,就调用该函数参数内部转换后如果匹配,调用该函数通过用户定义的转换寻求匹配答:多文件结构通过工程进行管理,在工程中建立若干用户定义的头文件.和源程序文件.p。头文件中定义用户自定义的数据类型,所有的程序实现则放在不同的源程序文件中。编译时每个源程序文件单独编译,如果源程序文件中有编译预处理指令,则首先经过编译预处理生成临时文件存放在内存,之后对临时文件进行编译生成目标文件.ob,编译后临时文件撤销。所有的目标文件经连接器连接最终生成一个完整的可执行文件.x。进行合理的功能划分后,更容易设计、调试和;另外,通常把相关函数放在宏定义与常量定义从作用及效果上看是一样的,二者是否完全相同答:完全不同。不带参宏定义与on说明符定义常量从效果上看是一样的,但它们的机制不同。首先宏定义是在预处理阶段完成,而on现。其次宏定义只是一种简单的字符串替代,不会为字符串分配内存单元,替代过程也不作语法检查,即使指令中的常量字符串不符合常量要求,预处理的替代过程也照样按指令给出的格式进行。而on定义则是象定义一个变量一样定义一个常量标识符,系统要按照类型要求为该标识符分配内存单元,同时在将常量放入单元时进行类型检查,如果类型不匹配,类型相容的会进行系统的类型转换,不相容的则要提示错误。二.编程与综合练习设计函数,将小写英文字符变为对应的大写字符usingnamespacestd;charcapitalize(charch){if(ch>='a'&&ch<='z')returnch-'a'+'A';elsereturnch;}数习题6intmain(){inti=0;charcp[30];while(cp[i]!='\0')cout<<capitalize(cp[i++]);return}设计两个函数,分别求两个数的最大公约数和最小公倍数解:可用穷举法求最大公约数(从大到小找到的第1个公约数)和最小公倍数(小到大找到的第个公倍数)。usingnamespacestd;monDevisor(intn,intintif(n%i==0&&m%i==0)break;returni;}monMultiple(intn,intintif(i%n==0&&i%m==0)break;returni;}intmain(){inti,j;cout<<"最大公约数 return0;}设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如解:把整数转换为数串,放在一个整型数组中usingnamespacestd;digit(intnum,intk){int数习题7inti=0;if(k<=ireturns[k-1题目中位数的下标从1开始,而数组下标从0开始elsereturn0;}intmain(){return0;}设计函数fato(nm,,返回整数nm中包含因子的个数,如果没有该因子,则返回。解:必须先判断整数m能否被k整除usingnamespacestd;factors(intnum,intk){//缺省返回值为整型intcount=0;}return}intmain(){return0;}歌德巴赫猜想 :任何一个充分大的偶数都可以表示为两个素数之和。如:4=2+26=3+38=3+5……将4.5成。解:用pim所有组合中找两个数均为素数者。usingnamespacestd;boolprime(intm){if(m==1||m==0)returnfalse;第三章函数习题8if(m==2)returntrue;intfor(inti=2;i<=k;i++)//穷举法if(m%i==0)break;if(i>k)returntrue;elsereturnfalse;}intfor(intn=4;n<=50;n+=2){for(inti=2;i<=n/2;i++)if(prime(i)&&prime(n-i))cout<<n<<'='<<i<<'+'<<n-i<<endl;//列出所有可能组}return}设计函数打印直方图,直方图宽度为行,每列代表数据表示10%。||解:为简单将a%用a表示usingnamespacestd;voidPrintDiagram(intm){inti;for(intj=0;j<m;j++)cout<<'*';}}intmain(){return0;}定义递归函数实现下列Ackman 0m0,n))1,(,1(0n110m1),(nmAcmmAcm),Acm(m-数习题其中、为正整数。设计程序求A(2,1,m(3,2。解:递归函数实现非常简单,按写即可。#inlud<iotam>usingnamespaceAcm(intm,intn){if(m==0)returnn+1;if(n==0)returnAcm(m-1,1);returnAcm(m-1,Acm(m,n-1));}intmain(){return0;}用递归函数实现勒让德多项式 1n/))()1()()12((1n0n在主函数中求P4(1.5)解:把勒让德多项式的阶和自变量都作为参数usingnamespacestd;doubleP(intn,doublex){if(n==0)return1;if(n==1)returnx;return((2*n-1)*x*P(n-1,x)-(n-1)*P(n-}intmain(){return}定义内联函数实现求三个实数中的最大值含复杂结构控制语句,如wit、复杂嵌套、whil语句等,以及无法内联展开#inlud<iotam>usingnamespaceinlinemax(inta,intb,intc){if(a>b&&a>c)returna;if(b>a&&b>c)returnb;returnc;}数习题10intmain(){return0;}定义内联函数,判断一个字符是否为数字字解:数字字符ASCII码值是连在一起的,可用ch>='0'&&ch<='9'来判断usingnamespacestd;inlineboolIfDigitChar(charch){if(ch>='0'&&ch<='9')return1;elsereturn}intmain(){charch;if(IfDigitChar(ch))cout<<ch<<"isadigitchar"<<endl;elsecout<<ch<<"isnotadigitchar"<<endl;}return}个实数求余定义为实数四舍五入取整后相除的余数。解:实数四舍五入取整,正数是+0.5取整,负数是-0.5取整usingnamespacestd;mod(intn,intm){returnn%m;}round(doublex四舍五入函数if(x>=0)returnint(x+0.5);elsereturnint(x-}mod(doublex,doubley){returnround(x)%round(y);}intmain(){第三章函数习题11return0;}注意:mod(doublex,doubley)形参类型不可以写成float,因为在函数中建立一个头文件aa.,在其中定义两个面积函数aa为的圆的面积和边长为和的矩形面积。另外建立一个实现文件aa.p,在其中定义主函数。通过包含aa.,输入数据并输出圆和矩形的面积。解:两个面积函数area(),一个是单参数,一个是双参数//头文件doublearea(doubler){return3.14*r*r;}doublearea(doublea,doubleb){returna*b;}usingnamespacestd;intmain(){doublea,b,r;cout<<"inputradius:"<<endl;cout<<"inputsidelength:"<<endl;return0;}注意:例题源代码中,为了使文件命名方式一致,采用xp3_1.和xp3_14.pp来命名。下面递归函数执行结果是什么voidp1(intw){inti;for(i=0;i<w;i++)cout<<’\t’<<w;p1(w-}}调用p1(4)数习题按照打印语句:for(i=0;i<w;i++)cout<<’\t’<<w;可得输出为①4444第1次②333//第2次③22第3次1第4次voidp2(intw){inti;p2(w-for(i=0;i<w;i++)cout<<’\t’<<w;p2(w-}}调用p2(4)按照次序和打印语句,可得输出为:①②2③④⑤⑥⑦ ⑨数习⑩⑾⑿⒀⒁⒂voidp3(intw){inti;for(i=0;i<w;i++)cout<<’\t’<<w;}}调用p3(4)按照次序和打印语句,可得输出为:①444②33③2④⑤⑥2⑦voidp4(intw){inti;for(i=0;i<w;icout<<’\t’<<w;第三章函数习题14p4(w-for(i=0;i<w;i++)cout<<’\t’<<w;}}调用p4(4)按照次序和打印语句,可得输出为:①444②33③2④⑤⑥2⑦33⑧444第四章类与对象习 第四章类与对象习一.基本概念与基础知识自测填空5.1.1引入类定义的关键字 ,类的数据成员通常指定为 。指定为 的成员可以在类对象所在域中的任何位置它们。通常用类 (6)成员表示类的操作。公有的私有的公有的数函类的限定符包括(1) 、(2) 和(3) 函数来(读和写。这些函数统称。答案:public(公有的private(私有的protected(保护的公有的成员函类的接通常在逻辑上,同一类的每个对象都有(1)代码区,用以成员函数。而在物理上通常只有 (2)代码区。只有在(3)定义,并(4)的函数和加了关键字 (5)独立在类说明不包括循环等复杂C++中支持三种域:(1)、(2)、(3)。函数域被包括(4)中,全局域被包括在(5)中。using指示符以关键字using开头,后面是关键字(6)(7)这样表示以后在该名字空间。如不使用using指示符则在使用时要加::,称为运算符。局部域(local名字空间域(namespace类域(class名字空间名字空间第四章类与对象习 域通常用作函数的(1)和(2)。对数组只能(3)不能(4)。答案:参返回数组元4.1.6构造函数的4.1.6构造函数的任务是构造函数。类中可以 个构造函数,它们()区分。如果类说明中没有给出构造函数,则C++编译器会 函数时,系统会自动提供 。答初始化数据成函数返回类型说多不同的参数自动给出一个默认的构造函同一类对象的默认的的构造函,称为默认的按成员语义支持被依次 数。答案:一对象注销 左操作数是 关键字operator和该运对该函数的参面向过程的程序设计中程序模型描述为(1),面向对象程序设计的程序模型可描述为(2)。“程序=算法+数据结构。其数据与数据处理是分离的计将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对(Object通简答简单解释什么是面向对象程序设计的封装性对象是一个封装体该对象所具有的属性和操作对象作为独立的基本单实现了将数据和数据处理相结合的思想还体在可以限制对象中数据第四章类与对象习 据隐藏。一个定义完好的类一旦建立为一个整体单元使用户不需要知道这个类是如何工作的数据的可靠护类中的数据不被类以外的程序随意使用这两个优点十分有利于程序的调试和。C++编译器怎样对标识符进行解析?编译器对标识符的解析分两步,第一步查找在中用到的标识符特别是函数成员声明中用到的参数类型,为什么说类与对象的概念是客观世界的反映?答:客观世界的事物都具有某些属性和行为(或操作,具有相同属性和行为的事物可以归属于一类分类的方法可以提高认识事物的效率义的类则是通过抽象的方法将某一类事物共有的静态特(属性和动态特(行为概括出来并加以描述,而对象是类的具体实现,所以说类与对象的概念是客观世界的反映。什么叫类域?为什么说类域是抽象的?类域是类体所包括的范围个类定义都引入了一个独立的类域类域中说明的标识符仅在该类的类域中:作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为?为什么返回值为的函数可以作为左值?答 变量是其关联变量的别名二者在内存中占据同一个单元在一个以作为参数的函数中交换两个参数的值实际上就是交换两个实参的值如果函数的参数是,调用时需要取得实参的地址而实参如果已经是一个地址再进行将产生错误故对应实参不能为。:函数返回实际是指(返回了相应的关联变量所以返回值为际上是将关联变量作为左值参与运算什么是缺省的构造函数?缺省的构造函数最多可以有多少个?答:如果在缺省值的,C++编译器都认为是缺省的构造函数。缺省的构造函数只能有一个面?答:用类的一个对象去初始化该类的另一个对象时使用当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用当函数的返回值是类对象,函数执行结束返回调用者时使用写出含有对象成员的类的构造函数的格式,并做简单说明。答:C++中对含对象成员的类对象的构造函数有固定的格式:类名::构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2),……对象成第四章类与对象习 n(参数名表n依次为调用相应对象成员所属的构造函数时的实参表这些表中的参数通常来自冒号前的参数总表,但没有类型名。“=贝赋值类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的,所以它可以进行连续赋值。“再加对象成员名?答:友元函数不是类的成员函数,在函数体中对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。重载复数运算符+时,采用下面友元函数:friendComplexoperator+(Complex plex&c2);为什答使用类型变量作为运算符重载函数的参数身为左值的实数类型实参不能在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为friendComplexoperator+(constComplex&c1,constComplex类的静态数据成员与函数中的静态成员有何异同?类的静态成员为其所有对象共享对象静态成员只有一份存于公用内存中,为该类所C++中结构、联合与类三者间有何同答:在C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下的成员为公有的。联合(union)C++的导出数据类型,在语法与功能上类似于结构,二者的区别是结构变量的各成员同时被分配了各自独立的内存区而联合变量的各个成员的开始地址都相同,所以在任一时刻联合变量只能一个成员。对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间联系?面向对象程序的组织与面向过程有什么不同?为对象的操作主要用来响应外来消息并为其他对象提供服务对象的程序利用消息传递机制来建立各对象之间的有效联系协调各对象的运行个对象可以向其他对象发送消息以请求服务响应其他对象传来的消息从而服务于其他对象。面向过程的程序是模块化的,模块的组织具有分层结构特点,层与层之间调用关系面向对象程序是由一个个封装的对象组成对象是由紧密结合在一起的算法数据结构组成。对象之间是相互请求和相互协作的关系第四章类与对象习 简叙Windows下应用程序的运行方式答:Windows系统支持多个应用程序同时执行,在界面形式上,它支持多个窗口同时活动。它的运行机制是“消息传递和驱动(messagebasedandeventdivWindows系统使用驱动的编程模式。所谓的含义非常广泛。输入设备的动作,如敲打键盘、按鼠标等会产生一系列的(注意不是一个。操作系统所作的一举一动也被当作某种类型的,应用程序也会产生各种事件。用来标识发生的某件事情。Windows系统对于应用程序环境中发生的每一个都会以对应的某种消息的形式标识,并放入相应的Windows建立的消息队列中,然后由对应的应用程序或窗口函数去处理。窗口函数处理是分层的处理不了的送到后面后处理不了剩下的全由缺省的窗口函数处理。函数应该定义为私有的这是开发类时故意对外隐蔽起来的操作这些往往是最复杂最关键的部分。类中故意的隐藏也为以后的升级扩展留下了余地不变内部再变来的程序,就象MFC(微软基础类)升级后,由MFC底层类所编的程序完全不必修改,自动升级。二.编程与综合练习(Timedate,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试(包括用成员函数和用普通函数)解:本题要求仅是定义类的练习,并非实用的提供日期时间的程序。实用的日期时间见附录二的日期时间函数。#include<iostream>#include<iomanip>usingnamespaceenumenumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};classTimedate{YRyear;intdate;inthh;intm=0;ss=0;}Timedate(YRa,MTb,intc){第四章类与对象习 }voidgetdate(YR&,MT&,int&);//使用一次取得3个数voidgettime(int&,int&,intputdate(YR,MT,int);puttime(int,int,int);voidlist();voidTimedate::getdate(YR&y,MT&m,int&d){}voidTimedate::gettime(int&a,int&b,int&c){}voidTimedate::putdate(YRa,MTb,intc){}voidTimedate::puttime(inta,intb,intc){}voidTimedate::list(){//成员函数,直接私有的数据成cout<<"year/month/date };case;casek;casek;casek;case;第四章类与对象习 k;case;case;casek;case}cout<<'/'<<date<<endl;cout<<"hour:minite:second:";}intmain(intargc,char*argv[]){Timedatereturn}(Rectangle,标,矩形水平放置。操作为计算矩形周长与面积。测试包括用成员函数和普解:这里的矩形的4边分别与xy轴平行,为最简单的情况。注意参数有缺省值的函数的和定义格式。#include<iostream><cmath>usingnamespacestd;classRectangle{doubleleft,top;doubleright,bottom;Rectangle(doublel=0,doublet=0,doubler=0,double~Rectangle(){}; voidAssign(doublel,doublet,doubler,doubledoublegetLeftreturnleft 以下四个函数皆为内联成员函doublegetRight(){returndoublegetTop(){returntop;}doublegetBottom(){returnbottom;}voidShow();double第四章类与对象习 构造函数,带缺省参数,缺省值为全0,在中指Rectangle::Rectangle(doublel,doublet,doubler,doubleb){left=l;top=t;right=r;bottom=}voidRectangle::Assign(doublel,doubletdoublerdoubleb){//赋值left=l;top=t;right=r;bottom=}voidRectangle::Show(){//成员函数直接使用私有的数据cout<<"left-toppoint("<<left<<","<<top<<")"<<'\n';cout<<"right-bottompointis("<<right<<","<<bottom<<")"<<'\n';}doublereturnfabs((right-left)*(bottom-}doublereturn2*(fabs(right-left)+fabs(bottom-}}

main(){Rectanglerect;Rectanglerect1(0,0,200,200);cout<<"面积"<<rect.Area()<<'\t'<<"周长return(Circle,(radius入半径并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。解:通常所有数据成员都在构造函数中赋初值。拷贝构造函数以本类的参数usingnamespacestd;classCircle{doubler,Area,Circumference;Circle(double第四章类与对象习 Circle(CirclevoidSetR(doubleR);doubleGetR(){returnr;}doubleGetAreaCircle(){returndoubleGetCircumference(){returna){r=a; }Circle::Circle(Circle&cl){r=cl.r;Area=cl.Area;}R){r=R; }intCirclecout<<"圆半径:"<<cl3.GetR()<<'\t'<<"圆周长cl2.SetR(4cout<<"圆半径:"<<cl2.GetR()<<'\t'<<"圆周return0;}设计一个学校在册人员 数据成员包 (Name,(生日(Birthday)和 (HmeAddress数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。解:本题为构造函数等的调用,加了一些提示语句。usingnamespacestd;enumT class{charId //号,18位数第四章类与对象习 charName[20]; int 年 日写charHomeAddress[50];//家庭地(char}

,int,char void void //其他接口函 (char*id,char*name,T ,intbirthday,char*homeadd){

Pscout<<"拷贝构造 n); cout<<"析 }void::input(){charch;cout<<"请输入号,18位数字:"<<endl;cin.getline(Id,19);cout<<"请输入:"<<endl;cin.getline(Name,20cout<<"请输入性第四章类与对象习 =man;else=woman;cout<<"请输入生日,格式写作19860818:"<<endl;cin.get();//吸收回车符,否则地址输不进去cout<<"请输入地址:"<<endl;} Info(){inti;号 <<'\n'<<":"<<Name<<'\n'<<"if(==man)cout<<"男elseif(==woman)cout<<"女elsecout<<""<<'\n';cout<<"出生年月日:";cout<<i/10000<<"年}intPs1("320102811226161","朱海鹏 ,"市浦路1号 fo();return0;}对上面4道题中的类对象的数据,由 数、成员函数和普通函数使用上的不同。解 元函数在类中时权限仅以5.4题为例。#include<iostream><cmath>usingnamespacestd;classRectangle{doubleleft,top;doubleright,bottom;Rectangle(doublel=0,doublet=0,doubler=0,double~ //析构函数,在此函数体为第四章类与对象习 voidAssign(doublel,doublet,doubler,doubledoublegetLeftreturnleft 以下四个函数皆为内联成员函doublegetRight(){returndoublegetTop(){returntop;}doublegetBottom(){returnbottom;}voidShow();friendvoidshowprint(Rectangle);doubleArea();double 构造函数,带缺省参数,缺省值为全0,在中指Rectangle::Rectangle(doublel,doublet,doubler,doubleb){left=l;top=t;right=r;bottom=}voidRectangle::Assign(doublel,doubletdoublerdoubleb){//赋值left=l;top=t;right=r;bottom=}doublereturnfabs((right-left)*(top-}doublereturn2*(fabs(right-left)+fabs(top-}cout<<"left-toppointiscout<<"right-bottompointis}voidshowprint(Rectangle 函数,要加类名,但直接调用私有数据成cout<<"left-toppointiscout<<"right-bottompointis}voidprint(Rectanglert){//普通函数,要用接口函数间接调用私有数据成员cout<<"left-toppointis("<<rt.getLeft()<<","<<rt.getTop()<<")"<<'\n';cout<<"right-bottompointis}main(){Rectanglerect;第四章类与对象习 Rectanglerect1(0,200,200,0);cout<<"面积"<<rect.Area()<<'\t'<<"周长return} 试。解:注意后++,返回的是原值,但实部和虚部已各自增一,所以要先保里是使用成员函数m>usingnamespacestd;classcomplex{doublereal; doubleimag;//虚部complex(doubler=0.0,doublei=0.0);//构造函数voidprint(); 复数complexoperator +(complexc);//重载复数"+"complex -(complexc); "complexoperator *(complexc);//重载复数"*"complex /(complexc); "/"complexoperator+=(complexc); 载复数"+="complexoperator-=(complexc);//重载复数"-="complexoperator*=(complexc); "*="complexoperator/=(complexc);//重载complexoperator++(); "++"complexoperator++(int);//重载复数后缀plex(doubler,doublereal=r;imag=}complexcomplex::operator+(complexc){ 数"+"complextemp;returntemp;//返回局部变量,函数不可为,这时返回了局部变量地}第四章类与对象习 complexcomplex::operator-(complexc){ complextemp;c.imag;returntemp;}complexcomplex::operator*(complexc){ 数"*"complextemp;c.real;returntemp;}complexcomplex::operator/(complexc){ 复数"/"complextemp;doubled;mag)/d;temp.imag=(c.real*imag-real*c.imag)/d;returntemp;}complexcomplex::operatorcomplexc){//重载复数"+="complextemp;;mag;real=temp.real;returntemp;}complexcomplex::operatorcomplexc){//重载复数"-="complextemp;returntemp;}complexcomplex::operator*=(complexc){//重载复数"*="complextemp;c.real;real=temp.real;return}第四章类与对象习 complexcomplex::operatorcomplexc){//重载复数"/="complextemp;doubled;;ag;return}complexcomplex::operator //重载复数缀complexag;returntemp;}complexcomplex::operator //重载复数缀complex}voidcomplex::print(){ cout<<real;}intcomplexA(30,40),B(15,30),C,D; 复数对象cout<<"A为:";A.print();cout<<"C=A++后,C为:";C.print();cout<<"A为:";A.print();C.print();cout<<"A为:";C.print();A*=B;A.print();C=A/B;C.print();A/=B;cout<<"A/=B后,A为第四章类与对象习 cout<<"B为:";B.print();D=A+B+C;cout<<"D=A+B+C后,D为:";D.print();A+=B+=C;A.print();cout<<"B为:";D=A-B-D.print();A-=B+=C;cout<<"A-=B+=C后,A为:A.print();B.print();A=B;A.print();D=A*B*C;D.print();D=D/B/C;D.print();A*=B*=C;A.print();A/=B/=C/=C;A.print();return0;}解double //实doubleimag虚部complex(doubler=0.0,doublei=0.0);//构造函数voidprint(); friendcomplexoperator+(constcomplex&,constcomplex&)重载复数"+"friendcomplexoperator-(constcomplex&,constcomplex&);//重载复数"-"friendcomplexoperator*(constcomplex&,constcomplex&重载复数"*friendcomplexoperator/(constcomplex&,constcomplex&重载复数friendcomplex&operator+=(complex&,constcomplex //重复数"+="friendcomplex&operator-=(complex&,constcomplex friendcomplex&operator*=(complex&,constcomplex //重复数"*="friendcomplex&operator/=(complex&,constcomplex friendcomplexoperator++(complex //重载复数前缀friendcomplexoperator++(complex //重载复数后缀plex(doubler,double第四章类与对象习 }complexoperatorconstcomplex&c1,constcomplex 载复数complexreturntemp;//返回局部变量,函数不可为,这时返回了局部变量地}complexoperatorconstcomplex&c1,constcomplex&c2重载复数"-"complextemp;c2.imag;returntemp;}complexoperator*(constcomplex&c1,constcomplex&c2){//重载复数"*"complextemp;c2.real;returntemp;}complexoperatorconstcomplex&c1,constcomplex&c2){//重载复数"/"complextemp;doubled;mag)/d;temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;returntemp;}complex&operator+=(complex&c1,constcomplex&c2){ 复数"+="c1.real=c1.real+c2.real;returnc1;//返回由参数传递过来的变量,函数可为}complex&operator-=(complex&c1,constcomplex&c2){ 复数"-="c1.real=c1.real-c2.real;returnc1;}complex&operator*=(complex&c1,constcomplex&c2){ 复数"*="complextemp;c2.real;c1=temp;第四章类与对象习 return}complex&operator/=(complex&c1,constcomplex&c2){ 复数"/="complextemp;doubled;mag)/d;temp.imag=(c2.real*c1.imag-c1.real*c2.imag)/d;c1=temp;return}complexoperatorcomplex& //重载复数前缀returnc;}complexoperatorcomplex&c,int){//重载复数后缀"++"complextemp(c.real,c.imag);}voidcomplex::print(){ }intcomplexA(30,40),B(15,30),C,D; 复数对象cout<<"A为:";A.print();cout<<"C=A++后,C为:";C.print();cout<<"A为:";A.print();C.print();cout<<"A为:";cout<<"C=A*B后,C为C.print();A*=B;A.print();C=A/B;C.print();A/=B;第四章类与对象习 cout<<"A/=B后,A为A.print();cout<<"B为:";B.print();D=A+B+C;cout<<"D=A+B+C后,D为:";D.print();A+=B+=C;A.print();cout<<"B为:";D=A-B-D.print();A-=B+=C;cout<<"A-=B+=C后,A为:A.print();B.print();A=B;A.print();D=A*B*C;D.print();D=D/B/C;D.print();A*=B*=C;A.print();A/=B/=C/=C;A.print();return0;}分析下面程序的执行果int{charword[8];shorintksi[4];cout<<s-}解:参见下 解:参见下 第四章类与对象习 nusingnamespacestd;unioncharword[10];shortintintmain(){//数字转换为字符串s= 0x6f63;s- 0x7475;s- }通过定义类型转换函数实现的。它只能是类的成员函数,不能是函类名::operator转换后的数据类型()如:operatorfloat()是转换为浮点数的成员函数。使用时的格式为 或(float) 角、分,均为整型。类型转换函数将类强制转换为浮点数,以圆为9现。usingnamespaceclass //intIYuan;第四章类与对象习 IntRMB(inty=0,intj=0,intf=0);//构造函数voidprint(); operatorfloat();//浮点数类型转换函数IntRMB::IntRMB(inty,intj,intf){//构造函数}IntRMB::operatorfloat(){floattemp;temp=float(IYuan+(Jiao/10.0)+(Fen/100.0));returntemp;}voidcoutIYuan元Jiao角Fen分}intfloatcout***转换前<<endl; cout<<"***转换后***"<<endl;cout<<a<<"圆 cout<<"***转换后***"<<endl;cout<<a<<"圆 return0;}第五章数组与指针习 第五章与指针习题数组定义时有三个要素数组元素的(1)组元素的(2)按元素在数组中的位置进行,是通过(3)进行的,称为(4)或。为了使数组中数组的大小修改更为方便,总是将(6)用于数组长度。答案()类数下标运算下索常变C/C++中的数组用的是一个(1)的定义即数组的基本定义构成的数组,三维数组的元素是(3) ()以数组作为元二维数计算机内存是一维编址的,数组在内存中的(1),C/C++在内存中的排(2)(3)(4)。设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为(5)+。答案()必须要转化为一维方式按行方右越(5)a数组的首地对于数组,(1)的大小是确定的所“查数组边界只是查(2)的边界,而(3)的边界是在控制之中的,所以数组名作省。()较低最高维(第一维较低各最高指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。使用变量名来变量,是按来直接存取变称为(5)式;而借助指针变量取得另一变量的地址,该变量称为(6)方式。答案()地第五章数组与指针习 已经分配了内存的变量的按变量的地直间固定指向一个对象的(1)(2)定义时const放在(3)。(4)定义时const放在(6)。答案()指针常指针本身是常const放在类型说明之后,变量名之常量指不能通过该指针修改对const放在类型说明之数组名在表达式中被自动转换为指向(1)针常量,数组名是地址,但数组名中放的地址是(2)以数组名(3)这样数组名可以由来代替,C++这样做使用时十分方便,但丢失了数组的另一要,数组名是指向数组(6)针,而不是指向数组(7)的。编译器按数组定义的大小分配内存,但运行时对(8)不加检测,这会带答案()数组第一个元不可改变称指针常指数组元素的数元整对数组的边界不加检有一个三维数组给出指向三维数组第i行第j列第k页元素的指针的三种表达方式(1) 。再给出这些元素的三种表达方式 , ()z3d[][j]+k(4)z3d[i][j][k]或简答物理上,C++是怎样数组元素的?请对方法作简单介绍。答理上,C++语言的下标运算符[]是以指针作为操作数的,a[i]被编译系统解释*(a+i)表示为a所指(固定不可变)元素向后第i个元素。无论我们是以下标第五章数组与指针习 数组元素时,系统都是转换为指针方法实现。这样做对数组尤其方便什么是回溯算法回溯法是对枚举法的一种回溯法的基本思想通过对问题的分析找出解决问题的线索一个局部上找出满足问题条件的局部的解然后逐步由向整个问题的解的方向试探,若试探成功就得到问题的解,试探失败逐步向后退,改部解再向前试探。回溯法能避免枚举用数组名作为函数的参数时为C+只传递数组首地址,而对数组边界不加检查。,需要编写一个对数组通用的算法(即各维的大小未定,怎样才能把实参数组的信息全部传递到函数中去?答:最佳方法是用函数模板数组用模板类型参数传递,各维的大小作为参数以用一维数组加各,解释运算符“*”和“&”的作用,运算符“.”和“->”的作用。答:在“*取地址运算符,作用于内存中一个可寻址的数据(如:变量,对象和数组元素等等,操作的结果是获得该数据的地址。运算符“.”和“->”是成员运算符(MemberAccessOprator)。在对象或“数名或函数名就可以但是这些成员必须是公有的成只有公有成员才能在对象的外面对它进行当用指向对象和结构变量的指针其公有成员时则只要在指针变量名后加“->”(箭头操作符,再加公有成员名就可以了什么是this指针?简述它的作用。答当我们在对象的外部该对象的公有成员时必须指明是哪一个对象但是当我们用对象的成员函数来本对象的成员时在成员函数中只要给出成员名就可以实现对该对象成员的。但同一个类创建的多个对象共用同一份成员函数的拷贝。既然是同一份拷贝,那么成员函数又怎么知道是取哪一个对象的成员数据呢?其实每一个对象有一个隐藏的this它始终指向该对象并将该指针作为一个参数自动传递给该成员函数这就是说操作符总是要使用的,只不过在对象内是隐式的,即在对象内省略了this指针。指针变量与整型量的加减运算代表什么意义指针变量与整型量的加减表示移动指以指向当前目标前面或后面的若干个位置的目指针与整型量i的加减等于指针值(地址)与i*sizeof(目标类型)积的得出新的地址。设a为数组名,那么a++是否合法?为什么?答:。因为a是指针常量。指针作为函数的参数时它传递的是什么?实参要用什么?而使用时实第五章数组与指针习 么?何时只能用指针而不能用答:是地址,是指针所指向的变量或对象的内存首地址,在物理上讲我们传的指针的值,与传其它变量是没有差异函数获得的是另一个变量的地在逻辑上讲我们是把另一个的地址传过看作传地址实参要用变量或对象的地址而使用时实参要用变量或对象本身。实参为数组时,只能用指针而不能用,因为数组的不存在。指针作为函数的返回值时,应该注意什么?答:指针指向的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论