计算机二级5156.docx
- 文档编号:23560573
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:47
- 大小:33.64KB
计算机二级5156.docx
《计算机二级5156.docx》由会员分享,可在线阅读,更多相关《计算机二级5156.docx(47页珍藏版)》请在冰豆网上搜索。
计算机二级5156
第51套
一.改错题
更正后程序的输出应该是:
1.41421
#include
#include
usingnamespacestd;
classPoint{
doublex,y;
public:
//ERROR**********found**********
voidPoint(doublem=0.0,doublen=0.0):
x(m),y(n){}
doubledistanceTo(constPoint&p);
};
//ERROR**********found**********
doubledistanceTo(constPoint&p){//返回两点之间的距离
doubledx=x-p.x;
doubledy=y-p.y;
returnsqrt(dx*dx+dy*dy);
}
intmain(){
Pointf1(0,0),f2(1,1);
//ERROR**********found**********
cout< return0; } 【参考答案】 (1)Point(doublem=0.0,doublen=0.0): x(m),y(n){} (2)doublePoint: : distanceTo(constPoint&p) (3)cout< 【考点分析】 本题考查Point类,其中涉及构造函数,成员函数。 【解题思路】 (1)考查构造函数,构造函数前不加void或其它任何类型名,直接使用Point(doublem=0.0,doublen=0.0)即可。 (2)主要考查考生对成员函数的掌握,类的成员函数在类外定义时要加上类名和作用域符。 (3)主要考查考生对成员函数的掌握,求线段的距离直接调用函数distanceTo即可。 二.简单应用 此工程包含一个程序文件main.cpp,其中有表示具有开、关两种状态的设备的类Switchable、表示“灯”的类Lamp和表示“按钮”的类Button等三个类的定义,还有主函数main的定义。 在主函数中定义了一个“灯”对象和一个用于控制“灯”的“按钮”对象。 程序展示,每当按一次按钮,灯和按钮的状态同时被改变。 程序输出结果: 灯的状态: 关 按钮的状态: 关 灯的状态: 开 按钮的状态: 开 #include usingnamespacestd; classSwitchable{//具有开、关两种状态的设备 boolis_on;//为ture表示“开”,为false表示“关” public: Switchable(): is_on(false){} voidswitchOn(){is_on=true;}//置为“开”状态 voidswitchOff(){is_on=false;}//置为“关”状态 //**********found********** boolisOn(){_______________}//返回设备状态 //**********found********** virtualconstchar*getDeviceName()_______;//返回设备名称的纯虚函数 }; classLamp: publicSwitchable{ public: //返回设备名称,用于覆盖基类中的纯虚函数 constchar*getDeviceName(){return"Lamp";} }; classButton{//按钮 Switchable*device;//按钮控制的设备 public: //**********found********** Button(Switchable&dev): ____________{}//用参数变量的地址初始化device boolisOn(){returndevice->isOn();}//按钮状态 voidpush(){//按一下按钮改变状态 //**********found********** if(isOn())_________________; elsedevice->switchOn(); } }; intmain(){ Lamplamp; Buttonbutton(lamp); cout<<"灯的状态: "<<(lamp.isOn()? "开": "关")< cout<<"按钮的状态: "<<(button.isOn()? "开": "关")< button.push();//按一下按钮 cout<<"灯的状态: "<<(lamp.isOn()? "开": "关")< cout<<"按钮的状态: "<<(button.isOn()? "开": "关")< return0; } 【参考答案】 (1)returnis_on; (2)=0 (3)device(&dev) (4)device->switchOff() 【考点分析】 本题考查Switchable类及其派生类Lamp类,其中涉及构造函数,成员函数,bool函数,纯虚函数。 【解题思路】 (1)主要考查考生对bool函数的掌握情况,根据成员定义: boolis_on;//为ture表示"开",为false表示"关",可知应该返回is_on。 (2)主要考查考生对纯虚函数定义的掌握,纯虚函数末尾要加=0。 (3)主要考查考生对构造函数的掌握,使用成员列表初始化。 (4)主要考查考生对指针的掌握情况,由于device为指针类型,因此调用成员函数时要使用标识符'->'。 三.Proj3中声明了一个表示“名称-值对照表”的类NameValueList。 请补充完整NameValueList.cpp中的getIndex函数的定义。 程序输出: 空货物表的总价: 0 添加办公桌/12.00后: 6144 添加书柜/6.00后: 6144 添加椅子/35.00后: 26724 NameValueList.h #ifndefLIST #defineLIST #defineMAX_NAMES100//表中可容纳名称的最大数量 #defineMAX_NAME_LENGTH20//名称的最大长度 #include #include usingnamespacestd; classNameValueList{//“名称-值”对照表 charnames[MAX_NAMES][MAX_NAME_LENGTH+1];//存放名称字符串的数组 doublevalues[MAX_NAMES];//存放对应值得数组 intcounter;//表中“名称-值”对的个数 public: NameValueList(): counter(0){} voidadd(constchar*name,doublevalue);//添加一个“名称-值”对 intgetIndex(constchar*name)const;//返回指定名称在表中的索引号(下标) //指定名称不存在时返回一个负数 constchar*getName(intindex)const{//返回表中指定索引号的名称 returnnames[index]; } doublegetValue(intindex)const{//返回表中指定索引号的值 returnvalues[index]; } intgetCounter()const{returncounter;}//返回表中“名称-值”对的个数 }; //依据价目表prices,计算货物表goods中所有货物的总价 doubletotalPrice(NameValueListprices,NameValueListgoods); voidwriteToFile(constchar*path); #endif NameValueList.cpp #include"NameValueList.h" voidNameValueList: : add(constchar*name,doublevalue){ if(counter>=MAX_NAMES)return; values[counter]=value; //复制名称字符串,如果超长,多余的部分被截去。 strncpy(names[counter++],name,MAX_NAME_LENGTH); } //返回指定名称在表中的索引号(下标),若指定名称不存在,返回一个负数 //注意利用strcmp函数比较两个字符串是否相等 intNameValueList: : getIndex(constchar*name)const{ //********333******** //********666******** } main.cpp #include"NameValueList.h" //prices是价目表(货物名称-单价对照表),goods是货物表(货物名称-数量对照表) doubletotalPrice(NameValueListprices,NameValueListgoods){ doubletotal=0.0;//用于累计货物价格的临时变量 //逐项累计货物表中每一项货物的价格,如该货物在价目表中不存在,跳过不处理 for(inti=0;i intindex=prices.getIndex(goods.getName(i)); if(index>=0)total+=prices.getValue(index)*goods.getValue(i); } returntotal; } intmain(){ NameValueListprice_table;//价目表,其中的“值”表示货物单价 price_table.add("办公桌",512.00); price_table.add("床",1089.00); price_table.add("餐桌",345.00); price_table.add("沙发",4005.00); price_table.add("椅子",588.00); NameValueListgoods_table;//货物表,其中的“值”表示货物数量 cout<<"空货物表的总价: "< goods_table.add("办公桌",12.00); cout<<"添加办公桌/12.00后: "< goods_table.add("书柜",6.00); cout<<"添加书柜/6.00后: "< goods_table.add("椅子",35.00); cout<<"添加椅子/35.00后: "< writeToFile(""); return0; } 【参考答案】 charthe_name[MAX_NAME_LENGTH]; strncpy(the_name,name,MAX_NAME_LENGTH); for(inti=0;i if(strcmp(the_name,names[i])==0)returni; return-1; 【考点分析】 本题考查的是NameValueList类,其中涉及数组、构造函数、成员函数以及const函数。 【解题思路】 主要考查考生对字符串处理的掌握,成员函数getIndex的功能是返回指定名称在表中的索引号(下标),若指定名称不存在,返回一个负数。 使用for循环遍历字符串数组,使用条件语句对数组元素进行比较操作,并返回需要的索引号,否则返回-1。 第52套 一.改错 改正后程序输出: title: 全国计算机等级考试二级教程—C++语言程序设计 price: ¥38.6 #include usingnamespacestd; classBook{ public: Book(){}; ~Book(){ if(title) //ERROR**********found********** deletetitle[]; }; voidprint(){ cout<<"title: \t"< cout<<"price: \t¥"< } voidSetPrice(doubleprice){this->price=price;} voidSetTitle(char*title){ //ERROR**********found********** this->title=newchar[strlen(title)]; strcpy(this->title,title); } floatGetPrice(){returnprice;} char*GetTitle(){returntitle;} private: doubleprice; char*title; }; intmain(){ Bookbook1; //设置价格和书名 //ERROR**********found********** book1.GetPrice()=38.6; book1.SetTitle("全国计算机等级考试二级教程——C++语言程序设计"); book1.print(); return0; } 【参考答案】 (1)delete[]title; (2)this->title=newchar[strlen(title)+1]; (3)book1.SetPrice(38.6); 【考点分析】 本题考查Book类,其中涉及析构函数,this指针,strcpy函数,成员函数及其调用。 【解题思路】 (1)主要考查考生对析构函数及对delete语句的掌握情况,使用delete释放指针,其格式为: delete[]指针;。 (2)主要考查考生对动态分配的掌握,由下一条语句: strcpy(this->title,title);可知,程序要将字符串title复制给this->title,因此要给this->title分配空间,空间大小应该为title的长度加1。 (3)主要考查考生对成员函数的掌握,由题目要求: 设置价格和书名,可知应调用成员函数SetPrice而不是GetPrice。 由book类中的函数声明: voidSetPrice(doubleprice)可知调用格式应为book1.SetPrice(价格); 二、简单应用 本程序设计了一个Drivers类,TaxiDriver继承Drivers类。 输出结果: 张三19890526GreemTraver #include usingnamespacestd; classDrivers{ public: Drivers(char*name,intlicenceDate){ this->name=newchar[strlen(name)+1]; //**********found********** _______________________ this->licenceDate=licenceDate; } ~Drivers(){ if(name) delete[]name; } //**********found********** _______________________GetName(){returnname;} intGetLicenceDate(){returnlicenceDate;} private: char*name; intlicenceDate; }; classTaxiDrivers: publicDrivers{ public: TaxiDrivers(char*name,intlicenceDate,char*company): //**********found********** _______________________(name,licenceDate){ this->company=newchar[strlen(company)+1]; strcpy(this->company,company); } ~TaxiDrivers(){ if(company) //**********found********** ______________ } char*GetCompany(){returncompany;} private: char*company; }; intmain(){ TaxiDriversd("张三",19890526,"GreenTravel"); cout< return0; } 【参考答案】 (1)delete[]title; (2)this->title=newchar[strlen(title)+1]; (3)book1.SetPrice(38.6); 【考点分析】 本题考查Book类,其中涉及析构函数,this指针,strcpy函数,成员函数及其调用。 【解题思路】 (1)主要考查考生对析构函数及对delete语句的掌握情况,使用delete释放指针,其格式为: delete[]指针;。 (2)主要考查考生对动态分配的掌握,由下一条语句: strcpy(this->title,title);可知,程序要将字符串title复制给this->title,因此要给this->title分配空间,空间大小应该为title的长度加1。 (3)主要考查考生对成员函数的掌握,由题目要求: 设置价格和书名,可知应调用成员函数SetPrice而不是GetPrice。 由book类中的函数声明: voidSetPrice(doubleprice)可知调用格式应为book1.SetPrice(价格); 三、综合应用 工程proj3中声明了一个微型字符串类MiniString。 MiniString的成员函数append(char*p,intn)的功能是将字符串char*p的前n个字符添加到现有的微型字符串后面。 请编写成员函数append。 在main函数中给出了一组测试数据,程序输出: Initialstrings: MiniString: IamlearningC++ char*: andJava Appendchar*intoMiniString: IamlearingC++andJa 下面是程序 MiniString.h #include #include usingnamespacestd; classMiniString { public: MiniString(constchar*s) { str=newchar[strlen(s)+1]; strcpy(str,s); } ~MiniString(){delete[]str;} MiniString&append(char*p,intn);//将char*数组p的前n个字符添加到现有字符串 char*getStr()const{returnstr;} friendostream&operator<<(ostream&o,MiniString&s)//输出字符串str { intlen=strlen(s.str); for(inti=0;i cout< returno; } private: char*str; }; voidwriteToFile(constchar*); main.cpp #include"MiniString.h" MiniString&MiniString: : append(char*p,intn) { MiniStringtemp(str); delete[]str; //********333******** //********666******** return*this; } intmain() { MiniStringmStr("IamlearningC++"); chariStr[]="andJava"; cout<<"Initialstrings: \n"; cout<<"MiniString: "< cout<<"char*: "< cout<<"Appendchar*intoMiniString: \n"; mStr.append(iStr,7); cout< writeToFile(""); return0; } 【参考答案】 intsize=strlen(temp.str); str=newchar[size+n+1]; strcpy(str,temp.str); for(inti=0;i str[i+size]=p[i]; str[size+n]='\0'; 【考点分析】 本题考查的是MiniString类,其中涉及构造函数,友元函数,成员函数,析构函数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 5156