应用题
请使用VC6或使用【答题】菜单打开proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。sort成员函数的功能是将当前数据表中的元素升序排列。请编写这个sort函数。程序的正确输出应为:
排序前:7,1,3,11,6,9,12,10,8,4,5,2
排序后:1,2,3,4,5,6,7,8,9,10,11,12
要求:
补充编制的内容写在“// ********333********”与“// ********666********”两行之间。不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序调用。
//DataList.h
#include <iostream>
using namespace std;
class DataList{ //数据表类
int len;
double * d;
public:
DataList(int len, double data[] = NULL);
~DataList() {delete[]d;}
int length() const {return len;} //数据表长度(即数据元素的个数)
double getElement (int i) const {return d[i];}
void sort(); //数据表排序
void show() const; //显示数据表
};
void writeToFile (char *, const DataList&);
//main.cpp
#include 'DataList.h'
DataList::DataList (int len, double data[]):len(len) {
d = new double[len];
for(int i = 0; i < len; i++)
d[i] = (data == NULL? 0.0:data[i]);
}
void DataList::sort() { //数据表排序
// ********333********
// ********666********
}
void DataList::show() const { //显示数据表
for (int i = 0; i < len - 1; i++) cout << d[i] << ',';
cout << d[len - 1] << endl;
}
int main() {
double s[] = {7,1,3,11,6,9,12,10,8,4,5,2};
DataList list(12,s);
cout << '排序前:';
list.show();
list.sort();
cout << endl << '排序后:';
list.show();
writeToFile(' ', list);
return 0;
}
【正确答案】for(int i = 0; i < len; ++i) //从头遍历数组d for(int j = i; j < len; ++j) //从i+1处遍历数组d if(d[i] > d[j]) //d[i]和[j]比较人,如果大于,就d[j]和d[j]值交换 { int temp = d[i]; //把临时整型变量temp赋值为d[i] d[i] = d[j]; //把d[j]赋值给d[i] d[j] = temp; //把temp赋值给d[j] } 答案考生文件夹
【答案解析】[考点] 主要考查的是DataList类,其中涉及动态数组、构造函数、析构函数、const函数和排序算法。Sort函数是一个排序函数,对于排序可以使用的方法很多,考生只需要使用自己最擅长的方法即可,题目并没有指定考生使用哪种方法。 本题使用最简单的冒泡排序算法,首先明确要排序的动态数组d,其长度为len,在此可以使用两个下标i和j相比较,当d[i]>d[j]时,数组内的值利用中间变量temp进行交换。