第1页南京理工大学课程考试试卷(学生考试用)课程名称:VC++程序设计学分:4大纲编号06000702试卷编号:2010B考试方式:闭卷满分分值:100考试时间:120分钟组卷日期:2010年6月20日组卷教师(签字):严悍审定人(签字):学生班级:学生学号:学生姓名:说明:1.所有试题做在答卷纸上2.考试完毕后连考卷一起交上一、选择题(选择一个最合适的答案。每题2分,共40分)1、下面哪一个可以作为合法标识符?AdefaultBregisterCexternDVoid2、执行下面语句,输出结果是______。inta=13,b=9,c;c=a/b+0.8;coutcendl;A1.8B1C2.24444D23、执行下面语句,输出结果是______。charc1=5;c1^=3;cout(int)c1endl;A1B3C5D64、执行下面语句,输出结果是______。inta=5,b=6,c=7,d=8,m=2,n=2;(m=ab)||(n=cd);coutn;A3B2C1D05、下面for循环次数是________。for(inti=1;i=5;sum++)sum+=i;A.0B.4C.5D.无数次6、执行下面语句,输出结果是______。intx=3;do{cout(x-=2);}while(!(--x));A1B30C1–2D死循环第2页7、执行下面语句,输出结果是______。intx=1,i=1;for(;x50;i++){if(x=10)break;if(x%2!=0){x+=3;continue;}x-=-1;}coutx''iendl;A127B116C126D1178、执行下面程序,输出结果是______。#includeiostream.hintc_multiple(inta,intb){for(inti=(ab?a:b);i=a*b;i++)if(i%a==0&&i%b==0)returni;returna*b;}voidmain(){coutc_multiple(6,8)\n;}A2B8C24D489、执行下面程序,输出结果是______。#includeiostream.hintf(intInt){if(Int==1)return1;return(Int+f(Int-1));};voidmain(){coutf(9)'\n';A1B37C45D4610、执行下面程序,输出结果是______。#includeiostream.h#defineP5#defineR2+Pvoidmain(){floata1=P*R*R;couta1endl;}输出结果为:A75B245C49D2511、下面哪一个数组说明语句是正确的?Achars4[2][3]={xyz,abc};Bchars1[]=xyz;Cchars3[][]={'x','y','z'};Dchars2[3]=xyz;第3页12、执行下面语句,输出结果是______。intb[3][3]={0,1,2,0,1,2,0,1,2},t=1;for(inti=0;i3;i++)for(intj=i;j=i;j++)t+=b[i][i]+b[j][j];couttendl;A7B9C4D613、下面哪一条语句不正确:enumGender{female,male};//AstructPerson{charname[20];Gendersex;//BPersonfather;//C};Personmembers[30];//D14、设有以下枚举说明语句:enumweekday{Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun=0}week;下面那一条赋值语句是错误的?Aweek=weekday(1);Bweek=1;Cweek=Mon;Dweek=(weekday)1;15、尝试执行下面语句,输出结果是______。inta=2,*pa=&a;intb=3,*pb=&b;*pa*=*pa**pb;coutaendl;A2B6C12D语法错16、尝试执行下面语句,输出结果是______。inta[]={1,2,3,4,5,6,7,8};int*p=a+4;intb=3+++*p++;coutbendl;A8B9C10D语法错17、下面哪一个表达式不能访问二维数组b的第i行第j列元素?Ab[i][j]B*(*(b+i)+j)C*(b[i]+j)D*(b+i)[j]18、对于缺省构造函数,下面哪一种说法是错误的?A只有当类中没有显式定义任何构造函数时,编译器才自动生成一个公有的缺省构造函数。B无参构造函数一定是缺省构造函数。C缺省构造函数一定是无参构造函数。D一个类中最多只能有一个缺省构造函数。19、假设对象a和b都是类A的对象,下面哪一条语句不会执行类A的拷贝构造函数?Ab=a;Bvoidf(Ax);f(a);CAb=a;Dreturna;第4页20、下面哪一行语句有错?classA{inti;protected:voidsetI(inta=2){i=a;}public:intgetI(){returni;}};classB:publicA{public:voidf(){setI(3);//AcoutgetI()endl;//B}};voidmain(){Bb;b.setI(4);//Ccoutb.getI()endl;//Db.f();}第5页二、读程序,写出输出结果(18分)1、(3分)#includeiostream.hstructA{intx,y;staticintdx;};intA::dx=3;voidmain(){coutA::dxendl;Aa1={1,2},a2={3,4};couta2.dxendl;a1.dx=2;couta2.dxendl;coutA::dxendl;}2、(3分)#includeiostream.hvoidswap1(int&x,int&y){intt=x;x=y;y=t;}voidswap2(intx,inty){intt=x;x=y;y=t;}voidmain(void){inta=3,b=4;couta=a;b=bendl;swap1(a,b);couta=a;b=bendl;swap2(a,b);couta=a;b=bendl;}3、(6分)#includeiostream.h#includestring.hstructCharnum{charch;intnum;};intf(constchara[],Charnumcn[]){intk=0;for(inti=0;istrlen(a);i++){for(intj=0;jk;j++)结构的静态成员3322引用做形参a=3;b=4a=4;b=3a=4;b=3第6页if(a[i]==cn[j].ch)break;if(j==k){cn[k].ch=a[i];cn[k++].num=1;}elsecn[j].num++;}returnk;}voidsort(Charnumcn[],intcount){for(inti=0;icount-1;i++)for(intj=i+1;jcount;j++){if(cn[i].numcn[j].num){Charnumtemp=cn[i];cn[i]=cn[j];cn[j]=temp;}}}voidtest(){char*str=acabab;Charnumcn[100];intc=f(str,cn);for(inti=0;ic;i++)coutcn[i].ch:cn[i].numendl;sort(cn,c);for(i=0;ic;i++)coutcn[i].ch:cn[i].numendl;}4、(6分)#includeiostream.hclassData{intx;public:Data(intx=0){this-x=x;coutDatacons.x=xendl;}~Data(){coutDatades.x=xendl;}};classBase{Datad;关于成员、继承、构造过程Datacons.x=2Basecons.Datacons.x=0Derivedcons.Deriveddes.Datades.x=0Basedes.Datades.x=2计算字符出现次数、降序排序a:3c:1b:2a:3b:2c:1第7页public:Base(intx=1):d(x+1){coutBasecons.endl;}~Base(){coutBasedes.endl;}};classDerived:publicBase{Datad;public:Derived(intx=2){coutDerivedcons.endl;}~Derived(){coutDeriveddes.endl;}};voidmain(void){Derivedobj(5);}三、填程序,在空格位置填入合适的代码(每空3分,共12分)对于一个int链表结构structNode{intdata;node*Next;};下面函数从键盘输入一列整数,按输入次序创建一条链表,并返回该链表的头指针。Node*create(){Node*p1,*p2,*head=NULL;inta;cout请输入数据,以-1结束:;cina;while(a!=-1){_______________p1-data=a;p1-next=NULL;if(_____________)head=p1;else______________p2=p1;cina;}_______________}p1=newNode;head==0p2-next=p1;returnhead;第8页四、写程序,根据要求编写程序(30分)1、如果一个正整数是其因子之和,则该数称为完数。例如6的所有因子为1,2,3,而6=1+2+3,因此6是一个完数。编程找出1000之内的所有完数。共14分按要求实现下面函数:1、intgetFactors(inta,intf[])计算整数a的所有不重复因子,从1开始,各因子放入到数组f中,返回因子个数。(4分)2、intgetSum(inta[],intnum)返回数组a中的num个元素之和。(3分)3、voidprintArray(inta[],intnum)打印输出数组a中的num个元素。(3分)4、main函数8分找出1000之内所有完数,并按下面格式输出:6factorsare123要求调用前面定义的函数。(4分)2、Course(课程)与SpecialtyCourse(专业课程)类。共16分已有一个Date类表示日期,不需要编程实现。classDate{intyear,month,day;public:Date(inty,intm,intd);voidprint();//打印年-月-日};建立一个Course类表示大学课程,一门课程作为一个对象。classCourse{charname[40];//课程名称intcredit;//学分数DatesetDate;//开设日期public:Course(char*name,intcredit,intsYear,intsMonth,intsday);voidsetName(constchar*cname);constchar*getName();virtualvoidshow();...};2.1实现构造函数Course::Course(char*name,intcredit,intsYear,intsMonth,intsday);形参分别为名称、学分数、