版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(操作题)模拟试卷15(共9套)(共29题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共2题,每题1.0分,共2分。)1、请使用VC6或使用【答题】菜单打开考生文件夹pmj1下的工程pmjl,此工程中含有一个源程序文件pmj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Thisobjectisno.1注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#includeusingnamespacestd;classNyClass{public:NyClass():count(0){cout<<”Thisobjectis”;)//ERROR********found********voidInc()const{tout<<”no.”<<++count<标准答案:(1)voidInc()(2)intcount;(3)obj一>Inc();知识点解析:(1)考查考生对const的掌握,在Inc函数的函数体{cout<<“no.”<<++count<”,而不能使用“.”。2、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程proj1,该工程中含有一个源程序文件proj1.epp。其中位于每个注释“//ERROR****found****”之后的一行语句有错误。请改正这些错误,使程序的输出结果为:12345678910注意:只能修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intlen){array=newint[len];arraySize=len;for(inti=0;i<arraySize;i++)array[i]=i+1;}一MyClass(){//ERROR**********found**********deletearray[i];)voidPrint()const{for(inti=0;i<arraySize;i++)//ERROR**********found*********cin<<array[i]<<”;Cout<<endl;}private:int*array;intarraySize;);intmain(){//ERROR**********found**********MyClassobj;obj.Print();return0;}标准答案:delete[]array;COUt<知识点解析:(1)语法错误,使用delete语句删除一个指针时,直接把指针变量的名称放在delete[]后面即可。(2)考查考生对输入、输出语句的运用。使用cout进行数据输出操作,一般格式为:COUt<>var;。其中,vat代表一个变量,“>>”称为提取运算符,该语句的含义是,将用户输入的数据保存到var中。(3)考查语句的初始化,我们来看MyClass类的构造函数:MyClass(lntlen){array=newint[len];//给数组动态分配空间,大小为lenarraysize=len;//赋值for(inti=0;i二、简单应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹pmj2下的工程pmj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Nome(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeusingnamespacestd;enumcategory{ENPTY,ELEPHANT,NOUSE);char*output[]={”ENPTY”,”ELEPHANT”,”NOUSE”};ClasSNammal{public:Nammal(char*str){//**********found**********name=new_____strcpy(name,str);}virtualchar*WhoAmI()=0;virtual—Nammal(){delete[]name;}voidPrint(){tout<Print();deletepm;pm=newMouse(”Micky”);pm->Print();deletepm;return0;}标准答案:(1)char[strlen(str)+1];(2)Mammal(str)(3)returnoutput[MOUSE];(4)Elephant知识点解析:(1)主要考查分配空间,程序要给name分配空间,由下一条语句中strcpy(name,str)可知程序要把字符串str复制给name,因此要分配的空间大小为strlen(str)+1。(2)主要考查考生对构造函数的掌握,因为Elephant类是Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。(3)主要考查考生对枚举类型的掌握,先看程序:enumcategory{EMPTY,ELEPHANT,MOUSE}。再参考Elephant类中的WhoAmI函数:char*WhoAmI(){returnoutput[ELEPHANT];}。可知这里要填写的返回语句为:returnoutput[MOUSE];。(4)主要考查考生对派生类的掌握,题目要求输出:ELEPHANTMOUSE可知,要先调用Elephant类的WhoAmI函数,因此给指针pm分配Elephant类空间。三、综合应用题(本题共1题,每题1.0分,共1分。)4、使用VC6打开考生文件夹proj3下的工程proj3,其中声明了MyString类,它是一个用于表示字符串的类。成员函数reverse将字符串反转,例如“abcde”反转后就成了“edcba”。请补充完整函数reverse。在main函数中给出了一个测试数据,此情况下程序的输出应该是:ThisisastringgnirtsasisihT注意:只需在函数reverse的//**********333**********和//**********666**********之间填入若干语句,不要改动程序中的其他内容。//MyString.h#includeusingnamespacestd;char*dup(constchar*);classMyString{char*str;public:MyString(constchar*s=””):str(dup(S)){}MyString(constMyString&m):str(dup(m.str)){}一MyString()fdelete[]str;)voidreverse();voidshow(ostream&os=cout)const{OS<#include”MyString.h”voidwriteToFile(constchar*path){charfull[50];strcpy(full,path);strcat(full,”out.dat”);ofstreamoutfile(full);if(outfile.fail()){cerr<<”打开输出文件失败!”;return;)MyStringm1=”Thisisanotherstring”;MyStringm2(”字符串反转演示”);outfile<标准答案:VOidMyString::reverse(){inti,j;charch;intlen=strlen(str);for(i=0,j=len一1;i知识点解析:程序定义了MyString类,它包含一个成员:str字符指针;默认构造函数和复制构造函数通过dup()函数,动态分配地址p’将参数拷贝到p指向的内存空间,再使用p初始化str;show()成员函数将str指向的字符串输出;reverse()成员函数将str指向的字符串反转;重载的<<运算符函数调用形参m对象的show()函数输出str指向的字符串。main()函数首先构造一个MyString类对象m1,构造过程中传入字符串“Thisisastring”,所以m1对象中的str指向一个动态分配的内存空间,该段内存存放拷贝的字符串“Thisisastring”,输出m1后;再调用m1.reverse()函数,将str指向的字符串进行反转,再输出m1,题意要求我们完成reverse()成员函数的定义,完成反转字符串的功能。由题意,我们仅有的信息就是str指向一个字符串,它是char宰类型,需要对str指向的字符串进行反转,需要获得字符串的长度,然后将首尾字符进行交换,直到交换到中间字符串为止,所以我们定义两个变量i、j,表示元素下标,分别从首(i=0)和尾(长度一1)向中间遍历该字符串,每次遍历,首先判断i是否小于j,若i小于j则将i和j下标对应的字符进行交换,交换完成后i自增1,j自减1,直到i不小于j为止。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:i=5i=10i=15i=20注意:错误的语句在∥********error********的下面,修改该语句即可。#includeclassCMyClass{public:templatevoidfunc(Tx,TY){∥********error********Ti=0;if(x>=i){i=i+x;}else{i=i+y;}cout<<“i=”<标准答案:(1)staticTi=0;(2)t.func((char)68,(char)1);(3)t.func((int)i,1);知识点解析:程序当中定义了类CMyClass,含有一个成员函数模板func(Tx,Ty),在函数内定义一个变量i,如果参数x大于i,则i和X的和赋值给i,否则i和y的和赋值给i。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(char*des,char*str)的功能是去掉字符串str中相同的字母,并将处理后的结果存到des所指的字符串中。例如:输入:Thisisgreat!输出:Thisgrea!注意:不能修改程序的其他部分,只能补充fun()函数。#include#defineMAXLEN1024voidConvert(char*des,char*str){}voidmain(){charsour[MAXLEN];chardest[MAXLEN];cout<<“Pleaseinputastring:”<标准答案:inti,j;boolToAdd;des[0]=0;for(i=0;str[i]!=NULL;i++){ToAdd=true;for(j=0;des[j]!=NULL;j++){if(str[i]==des[j]){ToAdd=false;//des数纽中已存在该元素,将标志位设置为假,说明不用再添加break;//des数组中已存在该元素,跳出循环}}if(ToAdd)//des数组中不存在,添加进来{deS[j]=Str[i];des[j+1]=0;}}知识点解析:convert(char*des,char*str)函数的功能是去掉字符串str中相同的字母,并将处理后的结果存到des所指的字符串中。原来的字符串存放在str指向的数组中,新字符串存放在des指向的数组中,因此可逐个读取str指向的数组里面的字符,把不同的字符放入des指向的数组中,即每次读str指向的数组一个字符,就在des指向的数组里面查找是不是已经有该字符了,如果已经有了则不添加进来,反之则把该字符加入到des指向的数组中。(1)由审题分析可知,需要两重循环,外层循环不断读取str中的元素,内循环在des数组中查找读到的str中的字符,如果找到了des数组中已存在该元素不需要添加,如果没找到则添加到des数组中。(2)在外循环体内,先设置bool型的标志变量ToAdd为真,假设str[i]不存在在des数组中,然后再内循环中,用str[i]和des[j]比较,如果相同说明已经存在了,将ToAdd设置为假.des[j]后面的元素不需要再比较了,跳出内循环。(3)通过判断ToAdd可知,str[i]是否存在des数组中,如果ToAdd为真,则说明des数组中不存在str[i],将str[i]添加到des数组中。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。学校教务处要为任课老师开发一个学生管理系统,需求如下:(1)学生的信息是要受到严密保护和限制的,包括姓名、五个英文字符的学号,以及精确到小数点后一位的一科成绩,只有任课老师可以修改,如果学生升学了,比如由本科升到研究生,原来的信息,还有效,而只需添加研究生的必要信息,不过现在不必马上实现,但应当有所考虑。(2)学生的所仃信息可以查看,但也只有学生自己才有这个权利。(3)学生的信息可以从文件中读取来构造信息库,需要把信息输出到屏幕以便核实,但这需耍任课老师来完成。(4)老师能提供所教学生的完整信息列表,同时可按成绩高低排序。(5)为了便于学校评定奖学金,需要单独查找成绩最高的同学(一般不采用把成绩单令部排列后来选取,可能这比较耗费时间,岁然要求不太合理.但要按用户的需求操作,同时需要指出的是,如果成绩最高者有数名,需要—一列出)。(6)由于学校的机器比较老,内存严重不足,每个老师带的学生数不一样,但也不会超过50人。以上功能的程序框架已经形成,考生需要按照需求来逐个实现。(1)请在注释∥********1********之后添加适当的语句,以便实现功能需求(1)。(2)请在注释∥********2********处添加适当的语句,成绩单排序功能。(3)请在注释∥********3********处实现查找成绩最高学生名单。无需修改main()主函数,当得到下面的结粜,该系统可能被采用。输入的学生信息:姓名学号成绩周华000178.5李强000298刘星000389贺兰000478周红000576.5赵邦000685高俊000798排序后的学生信息:姓名学号成绩李强000298高俊000798刘星000389赵邦000685周华000l78.5贺兰000478周红000576.5查询成绩最高的学生信息:高俊000798李强000298注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#include#include#defineNMAX50classTeacher;classStudent{public:student(char*name=“未知”,char*number=“00000”,doublemark=0.0){intlen=strlen(name);mname=newchar[len+1];strcpy(mname,name);strcpy(mnumber,number);mmark=mark;}Student(){delete[]mname;}voidDisplayMsg(){cout<>name;in>>number;in>>mark;m—count++;mpStu[i]=newStudent(name,number,mark);cout<m—mark>m_pStu[index]->m—mark)index=j;}∥********2********if(){Student*ps=mpStu[i];m_pStu[i]=m_pStu[index];m.pStu[index]=ps;}}}voidTeacher::Display(){cout<<“姓名\t”<<“学号\t”<<“成绩\t”<DisplayMsg();}}intTeacher::BestScore(Student*pS[])intindex=0;intcount=1;∥********3********for(intj=1;jm—mark>mpStu[index]一>mmark){count=1;index=j;pS[count++]=mpStu[index];}elseif(m_pstu[j]>m—mark=m_pStu[index]一>m_mark){index=j;pS[count++]=mpStu[index];}}returncount;}voidmain(){TeacherTeacher;Student*pStudent[NMAX];cout<<“输入的学生信息:”<9isplayMsg();}}标准答案:(1)添加语句:friendClasSTeacher;(2)将“if()”补充完整为:if(index!:j)(3)添加语句:pS[0]=mpStu[0];知识点解析:类Student含有三个成员变量:姓名、五个英文字符的学号和精确到小数点后一位的一科成绩,类Teacher含有Student对象数组的指针Student*m_pStu[NMAX]、m_average和m—count三个成员变量,类Teacher有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误。本题的功能是:从键盘输入字符串S,然后输出字符串S中的字符个数。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includeintmain(){//********error********cout<<"pleaseinputastring:"<标准答案:(1)std::cout<<"pleaseinputastring:"<知识点解析:(1)第1个标识下实现在屏幕上输出“pleaseinputastring:”提示语句。在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明tout是在命名空间std中定义的流对象,即第1个标识下的“std::cout<<"pleaseinputastring:"<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(cha*des,char*str)实现的功能是:(1)如果字符串最后面有空格,则全部删除;(2)转换后的数据放到des,并且指针作为返回值返回。注意:不能修改程序的其他部分,只能补充convert()函数。#include#include#defimeMAXLEN1024char*convert(char*des,char*str){}Voidmain(){chardest[MAXLEN];char*string="abcdef":cout<<string<<"<--"<<endl;cout<标准答案:intlength=0;inti;for(length=0;str[length]!=NULL;length++);//求数组长度length--;//下标从0~len-1,下标减l表示最后一个字符的下标值for(i=length;i>=0;i--){if(str[i]!=’’)//判断结尾是否有空格,从后往前判断直到不是不是空格了跳出循环break;}for(length=0;length<=i;length++){des[length]=str[length];//从前面开始,逐个将str中的字符拷贝到des数组中,不含最后面的空格}des[length]=NULL;//最后一字符为NULLreturndes;知识点解析:(1)利用循环将字符串str的长度求出,然后从字符串的尾部开始检索,用循环从字符串的最后一个字符往前面逐个检查,如果该字符不是空格则退出循环,这个时候就找到了最后一个非空格字符所在的下标位置,然后从下标0开始到该位置,逐个将str里面字符拷贝到des中。(2)程序当中使用了3次循环:计算长度、寻找最后一个非空格字符和拷贝三个过程。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了类baseA、priA1和priA2,其中priA1类由baseA类公有派生,priA2类由priA1类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。程序输出结果如下:1051057(1)定义类baseA的构造函数,该构造函数有一个整型的参数m,在构造函数中请将m赋值给数据成员a。请在注释“//********1********”之后添加适当的语句。(2)定义类priA1的构造函数,该构造函数有两个整型的参数m和n,在构造函数中请将m赋值给数据成员b,将n作为基类baseA构造函数的参数值传入。请在注释“//********2********”之后添加适当的语句。(3)定义类priA2的构造函数,该构造函数有三个整型的参数m,n和k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类研A1构造函数的参数m和n。请在注释“//********3********”之后添加适当的语句。(4)完成类priA2的成员函数Show的定义,该函数调用基类成员函数,输出基类私有成员a和b及类priA2自身的数据成员C的值,上述三个值在输出时以空格隔开。请在注释“//********4********”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeClassbaseA{inta;public://********1********intgeta(){returna;)};classpriAl:publicbaseA{intb;public://********2********intgetb(){returnb;)};classpriA2:publicpriAl{intc;public://********3********Voidshow(){//********4********}};Voidmain(){priA2a(7,5,10);cout<标准答案:(1)添加语句:baseA(intm){a=m;)(2)添加语句:priA1(intm,intn):baseA(n){b=m;)(3)添加语句:priA2(intm,intn,intk):priA1(n,k){c=m;)(4)添加语句:cout<知识点解析:(1)根据题目1要示,构造函数函数名和类名一致,显然baseA构造函数名为baseA(),在baseA0qb通过参数in完成对成员变量a的赋值,因此构造函数名为baseA(intm),在函数内部对成员a赋值,故第1个标识下应添加“baseA(intm){a=m;}”。(2)根据题目2要示,构造函数形式为priA1(intm,intn),m赋值给priA1类成员b,将n作为基类baseA构造函数的参数值传入,故第2个标识下应添加“priA1(intm,intn):baseA(n){b=m;}”。(3)根据题目3要示,函数形式为priA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类priA1构造函数的参数m和n,因此第3个标识下应添加“priA2(intm,intn,intk):priAl(n,k){c=m;}”。(4)根据题目4要示,priA2类公有派生于priA1,而研A1公有派生于baseA,因此在priA2类中可以调用基类的geta()和getb()来获得基类私有成员a和b,再输出priA2的私有成员C即满足要求,因此第4个标识下应添加“cout<国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、8、10,逆置后,从头至尾结点数据域依次为10、8、6、4、2。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;/*********found*********/【1】*fun(NODE*h){NODE*p,*q,*r;p=h;if(p==NULL)returnNULL;q=p一>next;p一>next=NULL;while(q){/*********found*********/r=q一>【2】;q一>next=P;p=q;/*********found*********/q=【3】;}returnp;}NODE*creatlist(inta[])(NODE*h,*p,*q;inti;h=NULL;for(i=0;idata=a[i];q一>nexL=NULL;if(h==NULL)h=p=q;else{p->next=q;p=q;)}returnh;}voidoutlist(NODE*h){NODE*p;p=h;if(p==NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("一>%d",p一>data);p=p一>next;}while(P!=NULL);printf("一>End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10);head=treatlist(a);printf("\nTheoriginallist:\n");outlist(head);head=fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)NODE(2)next(3)r知识点解析:填空1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE*h)的返回值为p,而p的数据类型为NODE,因此本空应该填写NODE。填空2:从此空的形式p一>可知本空应该填写next。填空3:本题要求将不带头结点的单向链表逆置,为了使q的指针向后移,此空应该填写r。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN10inta[M][M]={0};/*********found*********/voidfun(intiia,intm){intj,k;for(j=0;j标准答案:(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);知识点解析:(1)在函数体fun中可知,a是一个二维整型数组变量,设置实参时,用**a表示是错误的,所以应改为voidfun(inta[][M],intm)。(2)根据输出的结果可知,应改为a[j][k]:(k+1)*(j+1);。三、综合应用题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#includefloatfun(intm,intn){}main()/*主函数*/{voidNONO();printf("P=%f\n",fun(12,8));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fP,*wf;inti,m,n;floats;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d,%d",&m,&n);s=fun(m,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:longjc(intm){longs=1;inti;for(i=1;i<=m;i++)s=s*ireturns;}floatfun(intm,intn){floatp;p=1.0*jc(m)/jc(n)/jc(m—n);returnp;}知识点解析:本题考查算术运算的算法,先建立一个jc函数来计算m的阶乘,函数中使用一个for循环来计算m的阶乘,并将计算结果作为函数的返回值。在fun函数中调用jc函数,来计算三个阶乘的除法。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:20,1515,20注意:错误的语句在//********error********的下面,修改该语句即可。#inClude//********error********voidExchangel(intm,intn){intt=m;m=n;n=t;}//********error********voidExchange2(intm,intn){intt=。m;*m=*n;*n=t;}Voidmain(){intb=20;inta=15:Exchangel(a,b);cout<标准答案:(1)VoidExchangel(int&m,int&n)(2)voidExchange2(int*m,int*n)(3)Exchange2(&a,&b);知识点解析:(1)由程序的运行结果可知,分别调用Exchangel()~Exchange20后,a和b的值两次发生交换,因此Exchangel0~数和Exchange2()~数均为实现交换的函数。参数传递方式有多种,将变量名作为实参和形参、传递变量的指针和传送引用方式,将变量名作为实参和形参方式,这种传递是单向的,在函数执行过程中形参的值发生变化不会传回实参,而指针和引用方式在函数执行过程中形参会影响实参。显然这里不是采用变量名作为实参和形参的单向传递方式,而是采用的传地址或传引用的方式,在Exchangel()体内没有出现指针运算符“*”,因此可知Exchangel()函数是采用的传引用的方式,因此第1个标识下应改为“voidExchangel(int&m,int&n)”。(2)由1分析可知,Exchange2()函数内有指针运算符“*”,可知其是采用的传指针的方式作为参数传递,因此第2个标识下应改为“voidExchange2(int*m,int*n)”。(3)Exchange2()参数为int型数据指针,因此调用Exchange20时应传入指针而不是变量名,故第3个标识下应改为“Exchange2(&a,&b);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请实现函数fun(doublebt[],intlen)的如下功能:(1)b[]是一个数组,长度为len;(2)b[0]=0,b[1]=1:(3)b[i+2]=b[i]+b[i+1];注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#includevoidfun(doubleb[],intlen){}voidmain(){doubleb[128];fun(b,128);for(inti=0;i<128;i++){std::cout<标准答案:if(len>0)//最小值位置b[0]=0;//赋值第一个元素if(len>1)b[1]=l;//赋值第二个元素for(inti=2;i知识点解析:(1)判断数组长度,如果存在第一个元素,那么将第一个元素赋值为0,即b[0]=0;。(2)然后再判断数组长度,如果存在第二个元素,那么将第二个元素赋值为1,即b[1]=1;。(3)最后从第三个元素到数组最后一个元素,赋值b[i]=b[i-1]+b[i-2];。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要求完成下列操作,将类CRect的定义补充完成。(1)定义私有数据成员leftPoint、topPoint、rightPoint、bottomPoint,分别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CRect的定义,指定缺省实参为0,都是double型的数据。请在注释//********2********之后添加适当的语句。(3)定义函数体为空的析构函数。请在注释//********3********之后添加适当的语句。(4)在main()函数中定义CRect类的实例rect2,并把rect1的值赋给rect2。请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeClassCRect{private://********1********public://********2********//********3********voidSetPoints(double,double,double,double);VoidSetLeftPoint(doublem){leftPoint=m;)voldSetRightPoint(doublem){rightPoint=m;)voidSetTopPoint(doublem){topPoint=m;}VoidSetBottomPoint(doublem){bottomPoint=m;)voidDisplay();};CRect::CRect(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::SetPoints(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::Display(){cout<<"1eft-toppointis("<标准答案:(1)添加语句:doubleleftPoint,topPoint,rightPoint,bottomPoint;(2)添加语句:CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);(3)添加语句:~CRect(){};(4)添加语句:CRectrect2(rect1);知识点解析:(1)第1个标识下完成私有数据成员leftPoint、topPoint、rightPoint、bottomPoint的定义,均为double型的变量,故第1个标识下应添加“doublelefiPoint,topPoint,rightPoint,bottomPoint;”。(2)构造函数完成成员变量的初始化,类CRect的默认构造函数并初始化double型私有数据成员lefiPoint、topPoint、rightPoint、bottomPoint为0,故第2个标识下应添加“CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。(3)析构函数名和类名一致,并在前面加“~”以和构造函数区别,该析构函数体为空,故第3个标识下应添加“~CRect(){};”,虽然该函数体为空,但是“{}”必须保留。(4)主函数中类CRect的对象rect2是通过复制构造函数将rect1的值赋值给它实现初始化的,而rect1的初始化直接调用自定义构造函数,第4个标识下应添加“CRectrect2(rect1);”。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有Salary(“工资”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为:应发合计:3500应扣合计:67.5实发工资:3432.5注意:只修改每个“//ERROR****found****下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classSalary{public:Salary(constchar*id,doublethe_base,doublethe_bonus,doublethe_tax)//ERROR*******found*******:the_base(base),the_bonus(bonus),the_tax(tax){Staff_id=newchar[strlen(id)+1];strcpy(staff_id,id);}//*******found*******~Salary(){delete*staff_id;}doublegetGrosSPay()const{returnbase+bonus;}//返回应发项合计doublegetNetPay()const{returngetGrossPay()-tax;}//返回实发工资额private:char*staffid;//职工号doublebase;//基本i焱doublebonus;//奖金doubletax;//代扣个人所得税};intmain(){Salarypay("888888",3000.0,500.0,67.50);cout<<"应发合计:"<<pay.getGrossPay()<<"";cout<<"应扣合计:"<<pay.getGrossPay()-pay.getNetPay()<<"";//ERROR*******found*******cout<<"实发工资:"<<pay::getNetPay()<<endl;return0;}标准答案:(1):base(the_base),bonus(the_bonus),tax(the_tax)(2)~Salary(){delete[]staff_id;}(3)cout<<"实发工资:"<<pay.get,NetPay()<<endl:知识点解析:(1)主要考查考生对构造函数的掌握情况,构造函数的成员初始列表要把形参放在括号内。(2)主要考查考生对析构函数的掌握情况,析构函数使用delete释放指针,delete后要跟标识符“[]”。(3)主要考查考生对成员函数调用的掌握情况,调用类的成员函数使用标识符“.”,而不是作用域符“::”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类Set和用于测试该类的主函数main。类Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为100。为该类实现一个构造函数Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数InSet(charc),用于测试一个字符c是否在一个集合中,若在,则返回true;否则返回false。构造函数Set和成员函数InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。提示:在实现构造函数时,可以调用InSet函数来判断一个字符是否已经在集合中。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>usingnamespacestd;constintNAXNUN=100;classSet:{private:inthum;//元素个数charsetdata[NAXNUN];//字符数组,用于存储集合元素public:Set(char*s);//构造函数,用字符串s构造一个集合对象boolInSet(charc);//判断一个字符c是否在集合中,若在,返回true,否则返回falsevoidPrint()const;//输出集合中所有元素};Set::Set(char*s){num=0;while(*s){//*******found*******if(_______)//TODO:添加代码,测试元素在集合中不存在//*******found*******_______;//TODO:添加一条语句,加入元素至集合中s++;}}boolSet::InSet(charc){for(inti=0;i<num;i++)//*******found*******if(_______)//TODO:添加代码,测试元素c是否与集合中某元素相同//*******found*******_______;//TODO:添加一条语句,进行相应处理returnfalse;}voidSet::Print()const{cout<<"Setelements:"<<endl;for(inti=0;i<num;i++)cout<<setdata[i]<<’’;cout<<endl;}intmain(){chars[MAXNUM];cin.getline(s,MAXNUM-1);//从标准输入中读入一行Setsetobj(s);//构造对象setobjsetobj.Print();//显示对象setobj中内容return0;}标准答案:(1)!InSet(*s)(2)setdata[num++]=*s(3)c==setdata[i](4)returntrue知识点解析:(1)主要考查考生对成员函数的掌握,题目要求:添加代码,测试元素在集合中不存在,由类的定义可知函数boolInSet(charc)可以测试字符c是否在集合中,因此这里直接调用函数boolInSet(charc)即可。(2)题目要求:添加一条语句,加入元素至集合中,集合用数组setdata表示,直接把元素添加到数组中即可。(3)主要考查考生对if语句的掌握,题目要求:测试元素c是否与集合中某元素相同。前一条语句是个for循环,利用下标i遍历整个集合,通过if语句中的判断条件判断c是否在集合中,用“==”判断。(4)主要考查考生对成员函数的掌握,先看函数的注释:判断一个字符c是否在集合中,若在,返回true,否则返回false。if语句成立时,说明字符c存在于集合中,因此应该返回true。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:Zhang20Tsinghua。注意:只能在函数address_change的“//*******333*******”和“//*******666*******”之间填入若干语句,不要改动程序中的其他内容。程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//proj3.h#include<iostream>#include<string>usingnamespacestd;classPerson{charname[20];intage;char*address;public:Person(){age=0;address=0;}VOidnamechange(char*name);//名字修改函数voidage_change(int_age);//年龄修改函数voidaddress_change(char*add);//地址修改函数voidinfo_display();//人员信息显示~Person();//析构函数];voidwriteToFile(constchar*path);proj3.cpp#include<iostream>#include<string>#include"proj3.h"usingnamespacestd;voidPerson::name_change(char*_name){strcpy(name,_name);}voidPerson::age_change(int_age){age=_age;}voidPerson::address_change(char*_add){if(address!=NULL)delete[]address;//*******333*******//*******666*******}voidPerson::info_display(){cout<<name<<’\t’<<age<<’\t’;if(address!=NULL)cout<<addreSS<<endl;cout<<endl;}Person::~Person(){if(address!=NULL)delete[]address;}voidmain(){Personp1;p1.name_change("Zhang");p1.age_change(20);p1.address_change("TsinghuaUniversity");p1.address_change("Tsinghua");p1.info_display();writeToFile("");}标准答案:address=newchar[strlen(_add)+1];//给类成员变量动态分配空间strcpy(address,_add);//把字符串_add复制给address知识点解析:函数address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为add字符串。类的私有成员address是字符指针,因此首先要给address分配空间,通过new语句来实现:address=newchar[strlen(_add)+1];。接下来就是要复制字符串,使用系统函数strcpy,其用法为strcpy(参数1,参数2),将参数2的内容复制到参数1中。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将自然数1一10及其平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#includeintfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,"w"))==NULLlreturn0;for(i=1;i<=10;i++)/*********found*********/fprintf(【1】,"%d%f\n",i,sqrt((double)i));printf("\nSucceed!!\n");/*********found*********/【2】;printf("\nThedatainfile:\n");/*********found*********/if((fp=fopen(【3】,"r"))==NULL)return0;fscanf(fp,"%d%f",&n,&x);while(!feof(fp)){printf("%d%f\n",n,x);fscanf(flp,"%d%f",&n,&x);)fclose(fp);return1;}main(){charfname[]="myfile3.txt”;fun(fname);}标准答案:(1)fp(2)fclose(fp)(3)fname知识点解析:填空1:fprinff函数的形式是:fprintf(文件指针,格式字符串,输出表列);,所以填入文件指针fp。填空2:文件一旦使用完毕,应使用关闭函数fclose将文件关闭,以避免发生文件数据丢失等错误。填空3:fopen函数用来打开一个文件,其一般形式为:文件指针名=fopen(文件名,使用文件方式);因此应填入文件名fname。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数作为函数值返回,平均分存放在形参avet所指的存储单元中。例如,输入8名学生的成绩:80.5、60、72、90.5、98、51.5、88、64则低于平均分的学生人数为4(平均分为75.5625)。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODII.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include#defineN20intfun(float*s,intn,float*aver){float:ave,t=0.0;intcount=0,k,i;for(k=0;k标准答案:(1)t+=s[k];(2){*aver=ave;知识点解析:根据题目要求,可利用循环语句累计n个学生的总分,求得平均成绩后,再利用循环语句和条件选择语句进行后面的操作。若小于平均值,则将该值存放于aver存储单元中。t=s[k]是循环叠加错误,*aver=&ave为语法指向的错误。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1、3、5、15。注意:部分源程序在文件PROGl.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#includevoidfun(intx,2ntpp[],int*n){}voidmain(){FILE*wf;intx,aa[1000],n,i;system("CLS");printf("\nPleaseenteranintegernumber:\n");scanf("%d",&x);fun(x,aa,&n);for(i=0;i标准答案:voidfun(intx,intpp[],int*n){inti,j=0;for(i=1;i<=x;i=i+2)/*i的初始值为0,步长为2,确保i为奇数*/if(x%i==0)/*将能整除x的数存入数组pp中*/PP[j++]=i;*n=j;/*传回满足条件的数的个数*/}知识点解析:本题考查:偶数的判定方法;整除的实现。本题题干信息是:能整除x且不是偶数的所有整数。循环语句中变量i从1开始且每次增2,所以i始终是奇数。整除的方法,已经讲过多次,这里就不再赘述了。对于本题目要求的不是偶数的判定方法,即该数对2求余不为0。除本题描述的方法外,还可以通过for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:2123注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。#includeUSingnamespacestd;classABC{public://ERROR**********found**********ABC(){a=0;b=0;c=0;}ABC(intaa,intbb,int:CC);voidSetab(){++a,++b;)intSum(){returna+b+C;)private:inta,b;constintC;},ABC::ABC(intaa,intbb,intcc):c(CC){a=aa;b=bb;)intmain(){ABCX(1,2,3),y(4,5,6);ABCZ,*w=&Z;w一>Setab();//ERROR**********found**********ints1=X.Sum()+y一>Sum();cout;<标准答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=s1+w一>Sum():知识点解析:(1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:constintc;可知,c为常变量,因此构造函数必须使用成员列表初始化来给c赋初始值。(2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“一>”。(3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABCz,*w=&z;可知,w是ABC类的指针,指向z,因此w调用ABC类的成员函数时要使用标识符“一>”,而不是“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proi2下的工程proj2,其中定义了Employee类和Manager类。Employee用于表示某公司的雇员,其属性包括姓名(nfllIle)和工作部分(dept)。Nanager是Employee的公有派生类,用于表示雇员中的经理。除了姓名和工作部分之外,Nanager的属性还包括级别(level)。Employee类的成员函数print用于输出雇员的信息;Nanager类的成员函数print负责输出经理的信息。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:Name:SallySmithDept:SalesLeve1:2注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include#includeusingnamespacestd;classEmployee{public:Employee(stringname,stringdept)://**********found**********{}virtualvoidprint()const;stringdept()const//返回部门名称{//**********found**********}virtual—Employee(){)private:stringname_;stringdept_;};classManager:publicEmployee{public:Manager(stringname,stringdept,intlevel)://**********found**********{}virtualvoidprint()const;private:intlevel;};voidEmployee::print()const{cout<<”Name:”<print();deleteemp;return0;}标准答案:(1)name_(name),dept_(dept)(2)returndept_;(3)Employee(name,dept),level_(1evel)(4)Employee::print();知识点解析:(1)主要考查考生对构造函数的掌握,这里使用成员列表初始化法对私有成员初始化。(2)主要考查考生对成员函数的掌握,题目要求返回部门名称,因此这里是一条返回语句。函数要求返回的类型为string,因此直接返回dept_即可。(3)主要考查考生对构造函数的掌握,因为Manager类是Employee类的派生类,因此它的构造函数要先对基类初始化,应使用成员列表初始化。(4)主要考查考生对虚函数的掌握,因为Manager类是Employee类的派生类,因此它的print函数可以先调用基类的print函数,再输出自身要输出的数据,故为Employee::print();。三、综合应用题(本题共2题,每题1.0分,共2分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。屏幕上输出的正确结果应该是:Hello!Happynewyear!要求:补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。不得修改程序的其他部分。注意:程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//proj3.h#include#includeusingnamespacestd;classMiniString{public:friendostream&operator<<(OStream&output,constMiniString&s)//重载流插入运算符{output<>(is-tream&input,MiniString&S)//重载流提取运算符{chartemp[100];//用于输入的临时数细temp[0]=’\0’;//初始为空字符串input>>setw(100)>>temp;intinLen=strlen(temp);//输入字符串长度if(inLen!=0){S.length=inLen;//赋长度if(S.sPtr!=0)delete[]s.sPtr;//避免内存泄漏S.sPtr=newchar[s.length+1];strcpy(S.sPtr,temp);//如果S不是空指针,则复制内容}elseS.sPtr[0]=’\0’;//如果S是空指针,则为空字符串returninput;}voidmodString(constchar*string2)//更改字符串内容{if(string2!=0)//如果string2不是空指针,则复制内容{if(strlen(string2)!=length){length=strlen(string2);delete[]sPtr;sPtr=newchar[1ength+1];//分配内存}strcpy(sPtr,string2);}e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学主题班会说课稿礼仪养成2025年
- 初中家风传承主题班会说课稿2025
- 医学26年:妊娠高血压管理要点 心内科查房
- 上海工程技术大学《安全人机工程学》2025-2026学年第一学期期末试卷(A卷)
- 初中2025年说课稿:诗词与戏剧说课稿
- 上海工商职业技术学院《安全生产管理》2025-2026学年第一学期期末试卷(B卷)
- 上海工商职业技术学院《Android 系统及开发》2025-2026学年第一学期期末试卷(A卷)
- 胃肠疾病的营养支持治疗
- 第11课 希腊先哲的精神觉醒说课稿2025学年高中历史岳麓版2007必修Ⅲ-岳麓版2007
- 上饶卫生健康职业学院《安全人机工程学》2025-2026学年第一学期期末试卷(A卷)
- (三模)济南市2026届高三5月针对性训练语文试卷(含答案)
- 2026年上海市金山区中考数学二模试卷(含解析)
- 2026年山东省夏季高考《数学》函数与导数专项练习及答案解析(全国I卷)
- 2026年军校考试真题语文及答案
- 2026云南中烟再造烟叶有限责任公司招聘8人笔试历年常考点试题专练附带答案详解
- 2026中国跨境数据流动监管框架与企业合规成本测算分析
- 2025年中国特种设备检测研究院招聘面试专项练习含答案
- 2025年公安机关人民警察高级执法资格考试真题及答案解析
- 湖南马栏山集团有限公司2026年春季校园招聘5人笔试参考题库及答案解析
- 2026西藏昌都市康电清洁能源投资发展集团有限公司招聘11人笔试参考题库及答案解析
- 毽球协会工作制度范本
评论
0/150
提交评论