西安石油大学《面向对象程序设计》功能与改错.docx
《西安石油大学《面向对象程序设计》功能与改错.docx》由会员分享,可在线阅读,更多相关《西安石油大学《面向对象程序设计》功能与改错.docx(19页珍藏版)》请在冰豆网上搜索。
西安石油大学面向对象程序设计功能与改错西安石油大学面向对象程序设计功能与改错面向对象程序设计期末综合练习五(功能与改错)指出程序或函数的功能1.#includevoidmain()inti,s=0;for(i=2;i=30;i+=2)s+=i*i;couts=sendl;2.#include#include#includevoidmain()inti=10,a;while(i0)a=rand()%100+10;intj,k=int(sqrt(a)+1e-5);/sqrt(x)为求x的平方根函数for(j=2;jk)couta;i-;3.voidtrans(intx)chara10;inti=0,rem;dorem=x%16;x=x/16;if(rem0)coutai;coutendl;4.#includedoublef1(intn)doublesign=1,s=1;for(inti=2;ia;coutf1(a)endl;5.doublef1(doublea,doubleb,charop)switch(op)case+:
returna+b;case-:
returna-b;case*:
returna*b;case/:
if(b=0)coutdividedby0!
endl;exit
(1);elsereturna/b;default:
coutoperatorerror!
endl;exit
(1);6.#include#includevoidmain()intx,y;cinx;y=int(sqrt(x);/sqrt(x)为求x的算术平方根for(inti=1;i=y;i+)if(x%i=0)cout”x=”i*x/iendl;7.#includevoidmain()inti,p=1,s=0;intN;coutN;for(i=1;i=N;i+)p*=i;s+=p;coutsendl;8.#include#include#includeconstN=10;intff(intx,inty)intz;coutx+yz;if(x+y=z)return1;elsereturn0;voidmain()inta,b,c=0;srand(time(0);/初始化随机数序列for(inti=0;iN;i+)a=rand()%20+1;/rand()函数产生0-32767之间的一个随机数b=rand()%20+1;c+=ff(a,b);cout得分:
c*10endl;9.ints1(intn)intx;if(n=1)x=1;elsex=s1(n-1)+n*n;returnx;10.voidfun5(char*a,constchar*b)while(*b)*a+=*b+;*a=0;11.templateboolfun8(Ta,intn,Tkey)for(inti=0;in;i+)if(ai=key)returntrue;returnfalse;12.voidf2(doublea,intn)inti;doublesum=0;for(i=0;in;i+)sum+=ai;sum/=n;for(i=0;i=sum)coutai;coutendl;13.voidf4(charaMN)intc1,c2,c3;c1=c2=c3=0;for(inti=0;iM;i+)if(strlen(ai)=5&strlen(ai)15)c2+;elsec3+;coutc1c2c3endl;14.voidfun3(intaN,intm,int&row,int&col)intx=a00;row=col=0;for(inti=0;im;i+)for(intj=0;jx)x=aij;row=i;col=j;15.intfun6(intm,intn,intb=2)if(mb&nstr2i)return1;elsereturn-1;if(str1i=str2i)return0;elseif(str1istr2i)return1;elsereturn-1;18.IntNode*FindMax(IntNode*f)if(!
f)returnNULL;IntNode*p=f;f=f-next;while(f)if(f-datap-data)p=f;f=f-next;returnp;假定IntNode的类型定义为:
structIntNodeintdata;/结点值域IntNode*next;/结点指针域;19.intCount(IntNode*f)if(!
f)return0;intc=0;while(f)c+;f=f-next;returnc;假定IntNode的类型定义为:
structIntNodeintdata;/结点值域IntNode*next;/结点指针域;20.voidOutput(IntNode*f)if(!
f)return;while(f)coutdatanext;coutendl;假定IntNode的类型定义为:
structIntNodeintdata;/结点值域IntNode*next;/结点指针域;21.voidInput(IntNode*&f)intn;coutn;while(n0);if(n=0)f=NULL;return;f=newIntNode;IntNode*p=f;cout”从键盘输入”nnext=newIntNode;cinp-data;p-next=NULL;p=f;f=f-next;deletep;假定IntNode的类型定义为:
structIntNodeintdata;/结点值域IntNode*next;/结点指针域;22.intf(constchar*s)inti=0;while(*s+)i+;returni;23.char*f(char*s)intn=strlen(s);char*r=newcharn+1;for(inti=0;i=a&sidata=x;/3行p-next=NULL;/4行if(list=NULL)returnp;/5行NODE*p1=list;/6行while(p1-next!
=NULL)p1=p1-next;/7行p1=p;/8行returnlist;错误行的行号为_和_。
分别改正为_和_。
2.在下面的定义中,NODE是链表结点的结构,addToList则是一函数,其功能是:
将一个值为x的新结点添加到以plist为表头指针的链表的首部(即第一个结点的前面)并返回表头指针。
函数中有两处错误,指出错误所在行的行号并提出改正意见。
structNODEintdata;NODE*next;NODE*adndToList(NODE*plist,intx)/1行NODE*p;/2行*p=newNODE;/3行p-data=x;/4行p-next=NULL;/5行plist=p;/6行returnp;/7行错误行的行号为_和_。
分别改正为_和_。
3.假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。
#includeclassFranction/定义分数类intnume;/定义分子intdeno;/定义分母public:
/把*this化简为最简分数,具体定义在另外文件中实现voidFranSimp();/返回两个分数*this和x之和,具体定义在另外文件中实现FranctionFranAdd(constFranction&x);/置分数的分子和分母分别0和1voidInitFranction()nume=0;deno=1;/置分数的分子和分母分别n和dvoidInitFranction(intn,intd)nume=n;deno=d;/输出一个分数voidFranOutput()coutnume/denoendl;voidmain()/1行/2行Franctiona,b,c;/3行a.InitFranction(6,15);/4行b.InitFranction
(1);/5行c.InitFranction();/6行c=FranAdd(a,b);/7行coutc.nume/c.denoendl;/8行/9行错误行的行号为_、_和_。
分别改正为_、_和_。
4.假定要求下面程序的输出结果为“23/20”,其主函数中存在着三条语句错误,请指出错误语句行的行号并改正。
#includeclassFranction/定义分数类intnume;/定义分子intdeno;/定义分母public:
/把*this化简为最简分数,具体定义在另外文件中实现voidFranSimp();/返回两个分数*this和x之和,具体定义在另外文件中实现FranctionFranAdd(constFranction&x);/置分数的分子和分母分别0和1voidInitFranction()nume=0;deno=1;/置分数的分子和分母分别n和dvoidInitFranction(intn,intd)nume=n;deno=d;/输出一个分数voidFranOutput()coutnume/denoInitFranction(6,15);/5行b.InitFranction(3,4);/6行Franctionc;/7行c.InitFranction();/8行c=a.FranAdd(b);/9行coutc.FranOutput()endl;/10行/11行错误行的行号为_、_和_。
分别改正为_、_和_。
5.下面是一个类的定义,存在着3处语法错误,请指出错误行的行号并改正。
classCE/1行private:
/2行inta,b;/3行intgetmin()return(ab?
a:
b);/4行public/5行intc;/6行voidSetValue(intx1,intx2,intx3)/7行a=x1;b=x2;c=x3;/8行;/9行intGetMin();/10行;/11行intGetMin()/12行intd=getmin();/13行return(dc?
d:
c);/14行/16行错误行的行号为_、_和_。
分别改正为_、_和_。
6.下面程序段第4-10行中存在着三条语句的语法错误,请指出错误语句的行号并改正。
classA/1行inta,b;/2行constintc;/3行public/4行A():
c(0);a(0);b(0)/5行A(intaa,intbb)c(aa+bb);a=aa;b=bb;/6行;/7行Aa,b(1,2);/8行A*x=&a,&y=b;/9行A*z=newA,w10;/10行错误行的行号为_、_和_。
分别改正为_、_和_。
Public:
A():
c(0),a(0),b(0)A(intaa,intbb):
c(aa+bb)a=aa;b=bb;7.下面程序段第4-9行中存在着三条语句错误,请指出错误语句的行号并说明原因。
classA/1行inta,b;/2行constintc;/3行public:
/4行A()a=b=c=0;/5行A(intaa,intbb):
c(aa+bb)a=aa;b=bb;/6行;/7行Aa,b(1,2,3);/8行Ax(2,3),y(4);/9行错误行的行号为_、_和_。
错误原因分别为_、_和_。
8.下面程序段第10-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。
classA/1行inta;/2行public:
/3行A(intaa=0):
a(aa)/4行;/5行classB/6行inta,b;/7行constintc;/8行Ad;/9行public:
/10行B():
c(0)a=b=0;/11行B(intaa,intbb):
d(aa+bb)/12行a=aa;b=bb;c=aa-bb;/13行/14行/15行Ba,b(1,2);/16行Bx=a,y(b),z(1,2,3),;/17行错误行的行号为_、_和_。
错误原因分别为_、_和_。
9.假定要求下面程序输出结果为“d=800,f=60”,在第4-23行中存在着三条语句错误,请指出错误语句的行号并改正。
#includeclassA/1行inta10;intn;/2行public:
/3行A(intaa,intnn):
n(nn)/4行for(inti=0;in;i+)aai=ai;/5行/6行intGet(inti)returnai;/7行intSumA(intn);/8行;/9行intA:
SumA(intn)/10行ints=0;/11行for(intj=0;jn;j+)s+=aj;/12行returns;/13行/14行voidmain()/15行inta=2,5,8,10,15,20;/16行Ax(a,6);/17行intd=1;/18行for(inti=0;i4;i+)d*=x.ai;/19行intf=SumA(6);/20行coutd=d,;/21行coutf=fendl;/22行/23行错误行的行号为_、_和_。
51920分别改正为_、_和_。
10.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中有两处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。
classfractintden;/分子intnum;/分母public:
fract(intd=0,intn=1):
den(d),num(n)/1行friendfract&operator+=(fract,fract&);/2行voidshow()coutden/next=p;2.35p=newNODE;p-next=plist;3.578b.InitFranction(1,3);c=a.FranAdd(b);c.FranOutput()4.6910b-InitFranction(3,4);c=a-FranAdd(*b);c.FranOutput()5.5912public:
intCE:
GetMin()6.456Public:
A():
c(0),a(0),b(0)A(intaa,intbb):
c(aa+bb)a=aa;b=bb;7.589在函数体给常量c赋值定义b多一个参数定义y少一个参数8.131517在函数体给常量c赋值缺少分号定义z多一个参数9.51920ai=aai;d*=x.Get(i);intf=x.SumA(6);10.25friendfract&operator+=(fract&,fract);fract&operator+=(fract&f1,fractf2);