问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj3下的工程prog3,其中声明了ValArray类,该类在内部维护一个动态分配的int型数组v。ValArray类的成员函数cycle用于对数组元素进行向左循环移动。调用一次cycle后,数组的第二个元素至最后一个元素都将向左移动一个位置,而最左端的元素将循环移动到最右端位置上。例如,若ValArray表示的数组为{1,2,3,4,5},则第一次调用cycle后,数组变为{2,3,4,5,1},第二次调用cycle后,数组变为{3,4,5,1,2},依次类推。请编写成员函数cycle。在main函数中给出了一组测试数据,此情况下程序的输出应该是: v={1,2,3,4,5} v={2,3,4,5,1} v={3,4,5,1,2} v={4,5,1,2,3} v={5,1,2,3,4} 要求: 补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。 //ValArray.h #include <iostream> using namespace std; class ValArray { int* v; int size; public: ValArray const int* p, int n): size (n) { v = new int[size]; for (int i = 0; i<size; i++) v[i] = p[i]; } ~ValArray() { delete [] v; } void cycle (); void print(ostream& out) const { out << '{'; for (int i = 0; i <size-1; i++) out << v[i] << ","; out << v[size-1] << '}'; } }; void writeToFile (const char * ); //main. cpp #include "ValArray. h" void ValArray::cycle () { //将数组v中的size个整数依次移动到它的前一个单元,其中第一个整数移到原来最后元素所在单元。 //******** 333******** //******** 666******** } int main ( ) { const int a[] = {1, 2, 3, 4, 5 }; ValArray v(a, 5); for (int i = 0; i < 5; i++) { cout << "v = "; v.print (cout); cout << endl; v.cycle(); } writeToFile (""); return 0; }
【正确答案】for(int i=0; i<size-1; i++) //从0到size~2遍历整数组v,把前位与后位值相互交换 { int temp=v[i]; //把v[i]赋值给temp v[i]=v[i+1]; //把v[i+1]赋值给v[i] v[i+1]=temp; //temp赋值给v[i+1] }
【答案解析】[考点] 本题考查ValArray类,其中涉及动态数组、构造函数、析构函数、const函数和成员函数。 [解析] 程序要将数组v中的size个整数依次移动到它的前一个单元,其中第一个整数移到原来最后元素所在的单元。for循环语句用于遍历整个数组,每循环一次便将当前元素与后一个元素互换,因此循环变量的取值范围是0~size-2,最后一个元素无须遍历。