问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个源程序文件proj2.cpp。其中定义了模板函数insert(T dataset[],int&size,Titem)和主函数main。模板函数insen用来将一个数据inem插入到一个已排好序(升序)的数据集dataset中,其中类型T可以为int、double、char等数据类型,size为当前数据集中元素的个数,当插入操作完成后,size值将更新。模板函数insert的部分实现代码已在文件proj2.epp中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这个模板函数补充完整,以实现其功能。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。 // proji.cpp #include <iostream> using namespace std; //请在该部分插入insert函数模板的实现 template <typename T> void insert(T setdata[], int &size, Titem) { for (int i = 0; i < size; i++) //**********found********** if (______) { //TODO: 添加代码,判断查找元素的插入位置 for (int j = i; j < size; j++) //**********found********** ______; //TODO: 添加一条语句,将插入位置后的所有元素往后移动一个位置 //提示:移动元素应从最后一个元素开始移动 setdata[i] = item; //插入该元素 size ++; return; } //********** found********** ______; //TODO: 添加一条语句,将元素加到最后一个位置上 size ++; return; } int main () { int idata[10] = {22, 35, 56, 128 },iitem, isize = 4, dsize = 4, i; double ddata[10] = {25.1, 33.5, 48.9, 75.3], ditem; cout << "Please input one integer number for inserting:"; cin >> iitem; insert(idata, isize, iitem); for (i = 0; i< isize; i++) cout << idata[i] << "; cout << endl; cout << "Please input one doublenumber for inserting:"; cin >> ditem; insert(ddata, dsize, ditem); for (i = 0; i < dsize; i++) cout << ddata[i] << "; cout << endl; return 0; }
【正确答案】(1)item<setdata[i] (2)setdata[size+i-j]=setdata[size+i-j-1] (3)setdata[size]=item
【答案解析】[考点] 本题考查模板函数insert,其中涉及for循环、数组和排序。 [解析] (1)主要考查考生对if语句的掌握,题目要求判断查找元素的插入位置。因为要插入的序列是升序排列的,当item<setdata[i]时,即为要插入的位置。 (2)主要考查考生对for循环的掌握,因为要在第i个位置外插入元素,所以将插入位置后的所有元素往后移动一个位置,移动时应从最后一个位置开始,因此使用语句setdata[size+i-j]=setdata[size+i-j-1];。 (3)主要考查考生对成员函数的掌握,题目要求将元素加到最后一个位置上。size表示数组的长度,因为数组下标是从0开始的,所以最后一个位置为size,即setdata[size]=item;。