东南大学08级C++(下)上机试卷A和答案解析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

东南大学08级C++(下)上机试卷A和答案解析(考试时间80分钟,卷面成绩100分)学号姓名机位号说明:首先在Z盘建立一个以自己的学号命名的文件夹,用于存放上交的*.CPP文件,考试结束前根据机房要求,将这个文件夹传送到网络服务器上,注意:提交时只保留文件夹中的CPP文件。一、改错题(50分)【要求】调试程序,修改其中的语法错误及少量逻辑错误。只能修改、不能增加或删除整条语句,但可增加少量说明语句和编译预处理指令。【注意】源程序以“学号f1.cpp”命名,存入自己学号文件夹。【题目】以下程序用于构造一个空的数组对象,通过调用插入函数建立按升序排列的数组,并输出数组内容。【含错误的源程序】#includeiostream#includeiomanipusingnamespacestd;classArray{int*p;intlast;//最后一个元素下标public:Array(int=20);//创建一定长度的空表,给定长度缺省值为20~Array();voidinsertOrder(int);//在升序表中插入一个元素,使之仍然升序voidprint();};voidArray::Array(intmax){//错误行last=-1;p=newint[];//初始化为给定长度//错误行}Array::~Array(){deletep[];}//错误行voidprint(){//错误行for(inti=0;i=last;i++)coutsetw(4)p[i];coutendl;}voidArray::insertOrder(){//将关键字插入到数组中某个位置//错误行if(last=-1){last++;p[last]=key;}//错误行inti=last;while(i=0&&keyp[i]){p[i+1]=p[i];//错误行i--;}p[i]=key;//错误行last++;}voidmain(){Arraya();//创建数组//错误行intt;for(inti=0;i10;i++){//读入10个数据创建一个升序数组cint;a.insertOrder(intt);//错误行}print();//输出数组//错误行}二、编程题(50分)【注意】源程序以“学号f2.cpp”命名,存入自己学号文件夹。【题目】以下程序定义了一个整型数组类Array,数组长度为30个元素。数组的初始化数据来源以及程序结束后数组的数据保存都指向工程文件夹下的文本文件”vdata.txt”。即,创建数组对象时,在构造函数中读该取文件获得数据(首次创建对象时文件是打不开的,数组就没有初始化值),当程序结束时,析构函数将数据写入上述文件。【说明】本程序的执行流程是,创建数组对象并初始化,向数组中添加一些数据。请按以上说明和要求将下面程序补充完整,并调试运行。#includeiostream#includefstreamusingnamespacestd;classArray;ostream&operator(ostream&os,Array&a);classArray{intv[30];intlast;//最后一个元素下标public:Array();//创建表,从文件中读取数据进行初始化~Array();//数据保存到文件中voidinsertAfter(int);//在当前表的最后添加一个元素friendostream&operator(ostream&,Array&);//用于直接输出数组对象};Array::Array(){//此处添加代码}Array::~Array(){//此处添加代码}voidArray::insertAfter(intt){last++;v[last]=t;}ostream&operator(ostream&os,Array&a){//此处添加代码}voidmain(){Arrayvector;//创建数组intt;coutvector;cout向数组添加3个数:;for(inti=0;i3;i++){//向数组中添加3个数据cint;vector.insertAfter(t);}cout当前数组内容:endl;coutvector;}【提醒】上传的学号文件夹中只需包含f1.cpp、f2.cpp及vdata.txt三个文件即可,其余文件上传前尽可删除。答案解析:一.改错题#includeiostream#includeiomanipusingnamespacestd;classArray{int*p;intlast;//最后一个元素下标public:Array(int=20);//创建一定长度的空表,给定长度缺省值为20~Array();voidinsertOrder(int);//在升序表中插入一个元素,使之仍然升序voidprint();};Array::Array(intmax){last=-1;p=newint[max];//初始化为给定长度}Array::~Array(){delete[]p;}voidArray::print(){//错误行for(inti=0;i=last;i++)coutsetw(4)p[i];coutendl;}voidArray::insertOrder(intkey){//将关键字插入到数组中某个位置if(last==-1){last++;p[last]=key;}else{inti=last;while(i=0&&keyp[i]){p[i+1]=p[i];//错误行i--;}p[i+1]=key;//错误行last++;}}voidmain(){Arraya;//创建数组intt;for(inti=0;i10;i++){//读入10个数据创建一个升序数cint;a.insertOrder(t);}a.print();//输出数组}二.编程题#includeiostream#includefstreamusingnamespacestd;classArray;ostream&operator(ostream&os,Array&a);classArray{intv[30];intlast;//最后一个元素下标public:Array();//创建表,从文件中读取数据进行初始化~Array();//数据保存到文件中voidinsertAfter(int);//在当前表的最后添加一个元素friendostream&operator(ostream&,Array&);//用于直接输出数组对象};Array::Array(){intvv[30];fstreamdatafile(d:\\vdata.txt,ios::in);if(!datafile==0){last=-1;for(inti=0;!datafile.eof();i++){datafilevv[i];v[i]=vv[i];last=last+1;}datafile.close();}}Array::~Array(){fstreamdatafile(d:\\vdata.txt,ios::out);for(inti=0;ilast;i++){datafilev[i]'\t';}datafile.close();}voidArray::insertAfter(intt){v[last]=t;last++;}ostream&operator(ostream&os,Array&a){for(inti=0;ia.last;i++)//此处添加代码{osa.v[i]'\t';}returnos;}voidmain(){Arrayvector;//创建数组intt;coutvector;cout向数组添加3个数:endl;for(inti=0;i3;i++){//向数组中添加3个数据cint;vector.insertAfter(t);}cout当前数组内容:endl;coutvector;}

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功