问答题 请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程包含一个源程序文件proj3.epp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象myA~ay中,然后对整数序列按非递减排序,最后由函数writeToFile选择序列中的部分数据输出到文件out.dat中。文件in.dat中的整数个数不大于300个。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中。输出函数writeToFile已经给出并且调用。//proj 3.cpp#include<iostream>#include<fstream>#include<cstring>using namespace std;class intArray{private: int*array;//整数序列首地址 int length;//序列中的整数个数public: //构造函数,从文件中读取数据用于初始化新对象。参数是文件名 intArray(char*filename); void sort();//对整数序列按非递减排序 一intArray(); void writeToFi le(char*fi lename); ); intArray::intArray(char*filename) { ifstream myFile(filename); int len=300; array=new int[1en]; length=0; while(myFile>>array[1ength++]); length一一; myFile.close(); } void intArray::sort(){ //**********333********** //**********666********** } intArray::intArray() { delete[]array; } void intArray::writeToFile(char。 filename) { int step=0; ofstream outFile(filename); for(int i=0;i<length;i=i+step){outFile<<array[i]<<endl;step++;}outFile.close();}void main(){ intArray myArray(”in.dat”); myArray.sort(); myArray.writeToFile(”out.dat”);}
【正确答案】正确答案:for(int i=0;i<length; ++i) //遍历整个数组 for(int j =i;j <length; ++j) //从i++遍历整数组 if(array[i] >array[j]) //如果 arrag[i]>array[j],把array[i]与ar— ray[i]进行对换 { int temp; //定义一个临时变 量temp temp=array[i];//把array [i]值放到变量temp array[i]=array[j];//把 array[j]值赋给array[i] array[j] =terap; //把变量temp存放在值array[j]中 } for(int a:0;a<length; ++a) //遍历数组,把数组中的所有元素打印到控制台上 cout<<array[a]<<””;
【答案解析】解析:本题主要考查intArray类,其中涉及构造函数、排序函数和析构函数。常用的排序算法有冒泡排序、选择排序、插入排序、堆排序等。 【解题思路】题目要求对整数序列按非递减排序,要排序就必须要有比较,因此定义两个下标i和j,按题目非递减排序要求,当array[i]比array[j]大时就交换其值,利用中间变量temp来实现。 【解题宝典】排序算法有多种,其基本思想是相同的,即先遍历,后比较,再交换。不同之处在于它们遍历数列的顺序不同。考生可选择一至两种算法重点理解。