问答题
请使用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;。