收藏 分销(赏)

二级C--题库含答案.doc

上传人:仙人****88 文档编号:8991426 上传时间:2025-03-10 格式:DOC 页数:95 大小:294.05KB 下载积分:10 金币
下载 相关 举报
二级C--题库含答案.doc_第1页
第1页 / 共95页
二级C--题库含答案.doc_第2页
第2页 / 共95页


点击查看更多>>
资源描述
计算机等级考试二级C++模拟试题 上机部分 1   一、改错题   使用VC6打开考生文件夹下的工程kt6_1,此工程包含一个源程序文件kt6_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:   Constructor2   Constructor1   i=0   i=10   Destructor   源程序文件kt6_1.cpp清单如下:   #include   classCSample   {   inti;   public:   CSample(){cout<<"Constructor1"<   CSample(intval){cout<<"Constructor2"<   ~CSample(){cout<<"Destructor"<   voiddisp();   };   /**********found**********/   voiddisp()   {cout<<"i="<   voidmain()   {   CSample*a,b(10);   /**********found**********/   a->disp();   /**********found**********/   b->disp();   }   【参考答案】   (1)将void disp()   改为:void CSample::disp()   (2)将a->disp();   改为:a=new CSample; a->disp();   (3)将b->disp();   改为:b.disp();   【试题解析】   (1)主要考查类成员函数定义格式的熟练掌握,对于类体外函数的实现,应该使用作用域符"::",按照返回值类型 类名::函数名(参数列表)的形式进行说明;   (2)主要考查对动态存储分配的掌握,根据前面的定义,a是一个指针类型的变量,指向一个对象,但是并没有被初始化,此时a中的数据无任何意义,应该使用动态存储分配new生成一个新的对象,并将返回的指针赋值给a;   (3)主要考查对象指针与对象在调用成员函数时格式的不同,b是一个对象变量,使用b调用成员函数应该用"."运算符。   二、简单应用题   编写函数fun(),它的功能是利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。   xn+1=cos(xn)   迭代步骤如下:   (1)取x1初值为0.0。   (2)x0=x1,把x1的值赋给x0。   (3)x1=cos(x0),求出一个新的x1。   (4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2)。   (5)所求x1就是方程cos(x)-x=0的一个实根,做为函数值返回。   程序输出结果Root=0.739085。   注意:部分源程序已存在文件kt6_2.cpp中。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   文件kt6_2的内容如下:   #include   #include   #include   floatfun()   {   }   voidmain()   {cout<<"Root="<   【参考答案】   float fun()   {   float x1=0.0,x0;   do   { x0=x1;   x1=cos(x0);}   while(fabs(x0-x1)>=1e-6);   return x1;   }   【试题解析】   解答本题的关键之处在于看清题中所给的“迭代步骤”,同时要理解xn+1=cosxn通式的含义,要考虑到x1的初值为0.0。   三、综合应用题   使用VC6打开考生文件夹下的工程kt6_3,此工程包含一个源程序文件kt6_3.cpp,其中定义了用于表示考生的类Student,请按要求完成下列操作,将程序补充完整。   (1)定义私有数据成员code、english分别用于表示考生的编号、英语成绩、它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。   (2)完成成员函数voidStudent::inputinformation()的定义,该函数用于用户输入一个考生对象的信息,输入格式如下所示:   输入编号:   英语成绩:   计算机成绩:   请在注释“//**2**”之后添加适当的语句。   (3)利用已实现的类Student的成员函数,完成函数voidfirstname(Student*A[],intnum)的定义,该函数根据考生信息A[],输出num个考生中总分最高者的编号及其相应的总分,在此不考虑总分相同的情况。请在注释“//**3**”之后添加适当的语句。   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。   源程序文件kt6_3.cpp清单如下:   #include   classStudent   {//**1**   intcomputer;   inttotal;   public:   voidgetinformation();   voidcomputesum();   intgetcode();   intgettotalscore();   ~Student();};   voidStudent::getinformation()   {//**2**   cout<<"英语成绩:";   cin>>english;   cout<<"计算机成绩:";   cin>>computer;}   voidStudent::computesum()   {total=english+computer;   cout<<"编号"<   intStudent::getcode()   {returncode;}   intStudent::gettotalscore()   {returntotal;}   voidfirstname(Student*A[],intnum)   {   //**3**   tempsum=(*A[0]).gettotalscore();   for(inti=1;i   {   if(((*A[i]).gettotalscore())>tempsum)   {tempcode=(*A[i]).getcode();   tempsum=(*A[i]).gettotalscore();}   }   cout<<"总分最高者--"<   }   voidmain()   {Student*A[3];   inti,n=3;   for(i=0;i   {A[i]=newStudent;   A[i]->getinformation();}   for(i=0;i   {A[i]->computesum();}   firstname(A,3);}   【参考答案】   (1)int code;   int english;   (2)cout<<"输入编号:";   cin>>code;   (3)int tempcode,tempsum;   tempcode=(*A[0]).getcode();   【试题解析】   本题是对C++程序设计的综合考查,其设计类的成员及成员函数的定义与调用,数据的输入输出,for循环语句,if条件判断语句等多个知识点,其中(3)中为指针数组的使用,指针数组是一组指针,每一个成员都按照指针的操作规则,但是整个访问规则仍然使用数组下标方式,如A[0]指的是第一个指针,而* A[0]是取出第一个指针指向的内容。 2   一、改错题   使用VC6打开考生文件夹下的工程kt7_1,此工程包含一个源程序文件kt7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:   Constructor1   Constructor1   Constructor1   Destructor   Constructor2   Destructor   x=0   x=5   Destructor   Destructor   源程序文件kt21_1.cpp清单如下:   #include   classB   {intx;   public:   B(){x=0;cout<<"Constructor1"<<ENDL;}< p>   B(inti){x=i;cout<<"Constructor2"<<ENDL;}< p>   ~B(){cout<<"Destructor"<<ENDL;}< p>   /**********found**********/   ~B(inti){cout<<I<<"BEDESTRUCTOR"<<ENDL;}< p>   voidprint(){cout<<"x="<<X<<ENDL;}};< p>   voidmain()   {B*ptr;   ptr=newB[2];   /**********found**********/   ptr[0]=B(0);   ptr[1]=B(5);   /**********found**********/   for(inti=0;i<2;)   ptr[i].print();   delete[]ptr;}   【参考答案】   (1)将~B(int i){cout<<I<<" p be Destructor?<<endl;}删除<>   (2)将ptr[0]=B(0);改为:ptr[0]=B();   (3)将for (int i=0;i<2;)改为:for(int i=0;i<2;i++)   B(inti){x=i;cout<<"Constructor2"<<ENDL;}< p>   ~B(){cout<<"Destructor"<<ENDL;}< p>   /**********found**********/   ~B(inti){cout<<I<<"BEDESTRUCTOR"<<ENDL;}< p>   voidprint(){cout<<"x="<<X<<ENDL;}};< p>   voidmain()   {B*ptr;   ptr=newB[2];   /**********found**********/   ptr[0]=B(0);   ptr[1]=B(5);   /**********found**********/   for(inti=0;i<2;)   ptr[i].print();   delete[]ptr;}   【参考答案】   (1)将~B(int i){cout<<I<<" p be Destructor?<<endl;}删除<>   (2)将ptr[0]=B(0);改为:ptr[0]=B();   (3)将for (int i=0;i<2;)改为:for(int i=0;i<2;i++)   【试题解析】   本题主要考查对文件相关操作的熟练程度。首先定义文件流类的变量,然后使用该对象的open方法打开一个文件,接着使用while循环和getch方法每次读入一个字符并统计字符个数,最后使用close方法关闭文件,返回i值。   二、简单应用题   编写一个函数intcharnum(charfn[10]),该函数以只读方式打开文件fn,,通过统计,返回文件中字符的个数,请使用while循环实现计数功能。   注意:部分源程序已存在文件kt7_2.cpp中。   请勿修改主函数main和其他函数中的任何内容,仅在函数charnum的花括号中填写若干语句。   文件kt7_2.cpp的内容如下:   #include   #include   #include   intcharnum(charfn[10]);   voidmain()   {intnum;   num=charnum("abc.txt");   cout<<"num="<<NUM<<ENDL;}< p>   intcharnum(charfn[10])   {   }   【参考答案】   int charnum(char fn[10])   {fstream file;   file.open(fn,ios::in);   if(!file)   {cout<<"abc.txt can't open"<<ENDL;< p>   abort();}   char ch;   int i=0;   while(!file.eof())   {file.get(ch);   i++;}   file.close();   return i-1;}   【试题解析】   本题主要考查对文件相关操作的熟练程度。首先定义文件流类的变量,然后使用该对象的open方法打开一个文件,接着使用while循环和getch方法每次读入一个字符并统计字符个数,最后使用close方法关闭文件,返回i值。   三、综合应用题   使用VC6打开考生文件夹下的工程kt7_3,此工程包含一个源程序文件kt7_3.cpp,其中含有一个类Circle的定义,但该类的定义并不完整。请按要求完成下列操作,将类Circle的定义补充完整。   (1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释“//**1**”之后添加适当的语句。   (2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序   Circlec;   c.SetRadius(5);   c.Print();   将输出:Thecirclehasradiusof5!   请在注释“//**2**”之后添加适当的语句。   (3)完成友元函数voidCompareR(Circle*c1,Circle*c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if-else结构完成。请在注释“//**3**”之后添加适当的语句。   输出结果如下:   Thecirclehasradusof5!   Thecirclehasradiusof10!   c1<C2< p>   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。   源程序文件kt7_3.cpp清单如下:   #include   classCircle{   public:   Circle():radius(5){}   //**1**   voidSetRadius(intr){radius=r;}   intGetRadius(){returnradius;}   //**2**   friendvoidCompareR(Circle*c1,Circle*c2);   private:   intradius;};   voidCompareR(Circle*c1,Circle*c2)   {//**3**   cout<<"c1>c2"<<ENDL;< p>   else   if((c1->GetRadius())==(c2->GetRadius()))   cout<<"c1=c2"<<ENDL;< p>   else   if((c1->GetRadius())<(c2->GetRadius()))   cout<<"c1<C2"<<ENDL;}< p>   voidmain()   {Circlec1;   c1.SetRadius(5);   c1.Print();   Circlec2(10);   c2.Print();   CompareR(&c1,&c2);}   【参考答案】   (1)Circle(int rad):radius(rad){}   (2)void Print(){cout<<"The circle has radius of "<<RADIUS<<"!\N";}< p>   (3)if ((c1->GetRadius())>(c2->GetRadius()))   【试题解析】   本题考查成员函数的定义与实现,友元函数,if分支语句等知识点。友元函数的类体外的定义与一般函数一样,其中if-else的使用,else总是与其最近的那个if配对使用的,书写时最好使用缩进格式,将配对的if-else对齐,以免出错。 3   一、改错题   使用VC6打开考生文件夹下的工程kt8_1,此工程包含一个源程序文件kt8_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:   f1functionofderive   f2functionofbase   f4functionofbase   源程序文件kt8_1.cpp清单如下:   #include   classbase   { public:   /**********found**********/   voidf1(){cout<<"f1functionofbase"<<ENDL;}< p>   virtualvoidf2(){cout<<"f2functionofbase"<<ENDL;}< p>   virtualvoidf3(){cout<<"f3functionofbase"<<ENDL;}< p>   voidf4(){cout<<"f4functionofbase"<<>   /**********found**********/   classderive::publicbase   { voidf1(){cout<<"f1functionofderive"<<ENDL;}< p>   voidf2(intx){cout<<"f2functionofderive"<<ENDL;}< p>   voidf4(){cout<<"f4functionofderive"<<>   voidmain()   { base*p;   deriveobj2;   /**********found**********/   p=obj2;   p->f1();   p->f2();   p->f4(); }   【参考答案】   (1)将void f1(){ cout<<"f1 function of base"<<ENDL;}< p>   改为:virtual void f1(){ cout<<"f1 function of base"<<ENDL;}< p>   (2)将class derive::public base   改为:class derive:public base   (3)将p=obj2;   改为:p=&obj2;   【试题解析】   (1)主要考查对虚函数的深刻理解,虚函数是动态联编的基础,也是实现多态性的重要方法,它可以根据不同的情况动态的选择执行哪一个函数。在派生类中实现虚函数应该满足与基类的同名函数完全相同,并且使用关键字virtual修饰,本题中由输出结果中的f1 function of derive可知,必须将基类base的成员函数f1()定义为虚函数;   (2)主要考查对派生类定义格式的掌握,应该使用“:”后面是继承列表,而“::”是作用域符;   (3)主要考查类对象的定义与使用,p是一个指针类型的变量,给它的赋值应该是一个地址,即使用取地址操作符&。   二、简单应用题   已知考生的记录由学号和学习成绩构成,N名考生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最低的考生记录,通过形参返回主函数(规定只有一个最低分)。已给予出函数的首部,请完成该函数。   注意:部分源程序已存在文件kt8_2.cpp中。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   文件kt8_2.cpp的内容如下:   #include   #include   #include   #defineN10   typedefstructss   {charnum[10];   ints;   }STU;   voidfun(STUa[],STU*s)   {   }   voidmain()   {STU   a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;   fun(a,&m);   cout<<"*****Theoriginaldate*****"<<ENDL;< p>   cout<<"Thelowest:"<<M.NUM<<M.S<<ENDL;}< p>   【参考答案】   fun(STU a[],STU *s)   {int i, min;   min=a[0].s;   for(i=0;i<N;I++)< p>   if(a[i].s<MIN)< p>   {min=a[i].s;   *s=a[i];}}   【试题解析】   解题思路为:先假设第一个考生的成绩最优,通过循环找到最低成绩,并将最低成绩的考生记录传给指针s,带回主函数。   三、综合应用题   使用VC6打开考生文件夹下的工程kt8_3,此工程包含一个源程序文件kt8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。   (1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。请在注释“//**1**”之后添加适当的语句;   (2)完成类Table的成员函数print()的定义,该函数以"x*y=z"的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现,在注释“//**2**”之后添加适当的语句;   (3)完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕,请在注释“//**3**”之后添加适当的语句;   (4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“//**4**”之后添加适当的语句。   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。   源程序文件kt8_3.cpp清单如下:   #include   #include   classTable   {//**1**   intz;   public:   voidprint(intx,inty,intz);};   voidTable::print(intx,inty,intz)   {//**2**}   classTable9:publicTable   {public:   voidprint();};   voidTable9::print()   {//**3**   intx,y,z;   for(i=1;i<10;i++)   {for(j=1;j<I+1;J++)< p>   {x=i;   y=j;   z=i*j;   Table::print(y,x,z);}   printf("\n");}}   main()   {//**4**   return0;}   【参考答案】   (1)int x;   int y;   (2)printf( "%d*%d=%d ",x,y,z);   if(z<10) printf(" ");   (3)int i,j;   (4)Table9 t_9;   t_9.print();   【试题解析】   主要考查将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力。 4   一、改错题   使用VC6打开考生文件夹下的工程kt9_1,此工程包含一个源程序文件kt9_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:   4,5   20   源程序文件清单如下:   #include<iostream.h>   classA   { protected:     intn,m;     public:     voidset(inta,intb){m=a;n=b;}     voidshow(){cout<<m<<","<<n<<endl;}     /**********found**********/ }   classB:publicA   { ints;     public:     voidset(){s=m*n;}     voidshows(){cout<<s<<endl;} };   voidmain()   {     Bb;     /**********found**********/     b.set();     b.show();     b.set();       /**********found**********/     b.show();   }   【参考答案】   (1)在“}”后添加分号   (2)将b.set();改为:b.A::set(4,5);   (3)将b.show();改为:b.shows();   【试题解析】   (1)主要考查对类定义格式的掌握,类的结尾应该使用";";   (2)主要考查对基类与派生类函数调用关系的掌握,根据所要求的输出结果,应该调用的函数为类A的set,而不是类B自身的set函数,应该避免调用的二义性;   (3)主要考查对继承与派生的理解,由所要求输出结果可知正确:b.shows()。   二、简单应用题   请编写一个函数intCalcDigital(char*str),该函数可返回字符串str中数字字符(即“0”-“9”这10个数字)的个数,如字符串"olympic2008"中数字字符的个数为4。请用if条件判断语句与for循环语句来实现该函数。   注意:部分源程序已存在文件中。   请勿修改主函数main和其他函数中的任何内容,仅在函数find的花括号中填写若干语句。   文件kt9_2.cpp的内容如下:   #include<iostream.h>   #include<string.h>   intCalcDigital(char*str);   voidmain()   { char*str;     str=newchar[255];     cout<<"输入字符串:";     cin>>str;     intnum=CalcDigital(str);     cout<<str<<":"<<num<<endl; }   intCalcDigital(char*str)   {   }   【参考答案】   int CalcDigital(char *str)   { if(str==NULL) return 0;     int num_of_digital=0;     int len=strlen(str);       for(int i=0;i<len;i++)     if(str[i]<='9' && str[i]>='0')     num_of_digital++;     return num_of_digital; }   【试题解析】   本题考查对于if条件判断语句与for循环语句的熟练使用程度。注意判断条件(判断是否是数字是直接比较ASCII码)的使用。   3.综合应用题   使用VC6打开考生文件夹下的工程kt9_3,此工程包含一个源程序文件kt9_3.cpp,其中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。   (1)定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。请在注释“//**1**”之后添加适当的语句。   (2)定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。请在注释“//**2**”之后添加适当的语句;   (3)完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。请在注释“//**3**”之后添加适当的语句。   (4)完成Money类成员函数floatMoney::TotalMoney(floatfencelen,floatconarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。请在注释“//**4**”之后添加适当的语句。   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。   源程序文件kt9_3.cpp清单如下:   #include<iostream.h>   //**1**   classCircle   { private:     floatradius;     public:     //**2**       floatCircumference(){return2*PI*radius;}     floatArea(){returnPI*radius*radius;} };   classMoney   { private:     floatFencePrice;     floatConcretePrice;     public:     Money(floatf,floatc);     floatTotalMoney(floatfencelen,floatconarea); };   Money::Money(floatf,floatc)   { //**3** }   floatMoney::TotalMoney(floatfencelen,floatconarea)   { //**4** }   voidmain()   { floatradius,fence,concrete;     cout.setf(ios::fixed);     cout.setf(ios::showpoint);     cout.precision(2);     cout<<"Entertheradiusofthepool:";     cin>>radius;     cout<<"EntertheFencePrice:";     cin>>fence;     cout<<"EntertheConcretePrice:";     cin>>concrete;     CirclePool(radius);     CirclePoolRim(radius+WIDTH);     Moneymon(fence,concrete);     floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-Pool.Area()));     cout<<"ThetotalmoneyisRMB"<<totalmoney<<endl; }   【参考答案】   (1)const float PI = 3.14159f;        const float WIDTH =3.00f;   (2)Circle(float r):radius(r){};   (3)FencePrice=f;        ConcretePrice=c;   (4)return FencePrice*fencelen+ConcretePrice*conarea;   【试题解析】   本题考查对符号常量的定义及类的定义与实现等方面的内容,其中常类型的定义应使用const关键字。 5   一、改错题   使用VC6打开考生文件夹下的工程kt10_1,此工程包含一个源程序文件kt10_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:   classBase   classD1   classD2   classD3   finBase   源程序文件kt10_1.cpp清单如下:   #include<iostream.h>   classBase   { public:     Base(){cout<<"classBase"<<endl;}     voidf(){cout<<"finBase"<<endl;} };   classD1:virtualpublicBase   { public:     D1(){cout<<"classD1"<<endl;}     voidf(){cout<<"finD1"<<endl;} };   /**********found**********/   classD2:publicBase   { public:     D2(){cout<<"classD2"<<endl;} };   /**********found**********/   classD3::publicD1,publicD2   { public:     D3(){cout<<"classD3"<<endl;} };   voidmain()   { D3d;     /**********found**********/     d.f(); }   【参考答案】   (1)将class D2:public Base        改为:class D2:virtual public Base   (2)将class D3::public D1,public D2        改为:class D3:public D1,public D2   (3)将d.f();改为:d.Base::f();   【试题解析】   (1)主要考查对虚基类的理解,虚基类可以解决二义性的问题,其定义方式是在继承列表中使用virtual关键字,使用虚基类可以避免程序运行中对基类函数调用的不惟一;   (2)主要考查对类的定义方法的掌握,“::”为作用域符,此
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服