3、(本每小题10分)用递归函数完成以下运算 sum(n)=1+2+3+…+n 函数的原型如下: int sum (int n) 该函数完成1+2+3+…n的运算,并返回运算结果,其中n>0 提示:你可以使用递归表达式:sun(n)=n+sum(n-1) 三、(本小题共30分) valarray是C+的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类 型的数组,如 valarray<int>是一个整型的数组类。该类的使用和一般的数组非常类似,可以通 过[]运算符来访问数组中的和每个元素。 C++的标准模板库中还有一个模板函数abs0,其函数原型为 template<class t>
3、(本每小题10分)用递归函数完成以下运算: sum(n)=1+2+3+…+n 函数的原型如下: int sum(int n); 该函数完成 1+2+3+…n 的运算,并返回运算结果,其中 n>0 提示:你可以使用递归表达式:sun(n)=n+sum(n-1) int sum(int n) { 三、(本小题共30分) v a larray 是 C++的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类 型的数组,如 valarray<int>是一个整型的数组类。该类的使用和一般的数组非常类似,可以通 过' [ ]运算符来访问数组中的和每个元素。 C ++的标准模板库中还有一个模板函数 abs(),其函数原型为: template<class T>
valarray<T>abs(const valarray<T>&x) 该函数的作用是将作为参数的数组的每个元素的值取绝对值,并返回得到的新的数组。如原 来的数组为: 将这个数组作为参数传递给函数abs后,函数返回的数组就变成: 要求:阅读下列程序,回答后面的问题 /*米****水**农**********水*农*********************水/ #include iostream. h> #include <valarray. h> /该头文件中定义了模板类 valarray和模板函数abs() #define ARrAY size 1o typedef valarray <int>INTVaLarRAY void main() INTVALARRAY val array(ARRAY SiZe) //定义一长度为 ARRAY SIZE的数组对象 //赋初始值 for(int i =0; i<ARRAY SIZE: i++) val_ array [i]=-1: cout < Size of val array="<<val_array, size o<<"\n cout<<" the values of val array before calling abs(: \ for(i=0: i<ARRAY SIZE; i++) cout<<val array[i]<< cout<<\n INTVALARRAY abs array=abs (val array
valarray<T>abs(const valarray<T>& x); 该函数的作用是将作为参数的数组 的每个元素的值取绝对值,并返回得到的新的数组。如原 来的数组为: 4 -1 -3 0 -34 将这个数组作为参数传递给函数 abs 后,函数返回的数组就变成: 4 1 3 34 要求:阅读下列程序,回答后面的问题。 /*********************************************************************/ #include <iostream.h> #include <valarray.h> //该头文件中定义了模板类 valarray 和模板函数 abs( ) #define ARRAY_SIZE 10 typedef valarray<int>INTVALARRAY; void main( ) { INTVALARRAY val_array(ARRAY_SIZE); //定义一长度为 ARRAY_SIZE 的数组对象 //赋初始值 for(int i =0;i<ARRAY_SIZE;i++) val_array[i]=-1; cout <<"Size of val_array="<<val_array,size()<<"\n"; cout<<"The values of val_array before calling abs():\n"; for(i=0;i<ARRAY_SIZE;i++) cout<<val_array[i]<<" "; cout<<"\n"; INTVALARRAY abs_array=abs(val_array);
cout<< The result of val array after calling abs(: \n for (i=0; i<ARRAY SIZE: i++) cout<abs array li]<< cout<< \n 问题1:(本小题5分)写出程序的输出结果 答:程序的输出为 问题2:(每答对一个,得2分,共10分) 关于程序中的语句: INTVALARRAY val array (ARRAY Size) 下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错” 题号 对/错 (A)该语句定义了一个对象 val array,这个对象是类 valarray<int>的实例 (B)该语句说明了一个函数原型,函数的名字为 val array,参数为 ARRAY SIZE,函数的返回 值类型为 INTVALARRAY (C)模板类 valarray一定有一个只带一个参数的构造函数 (D)模板类 valarray一定有一个只带两个参数的构造函数
cout<<"The result of val_array after calling abs():\n"; for (i=0;i<ARRAY_SIZE;i++) cout<<abs_array[i]<<" "; cout<<"\n"; } 问题1:(本小题5分)写出程序的输出结果 答:程序的输出为: _____________________________________________________________________________ _____________________________________________________________________________ _____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ _____________________________________________________________________________ 问题2:(每答对一个,得2分,共10分) 关于程序中的语句: INTVALARRAY val_array(ARRAY_SIZE); 下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错” 题号 A B C D E 对/错 (A)该语句定义了一个对象 val_array,这个对象是类 valarray<int>的实例 (B)该语句说明了一个函数原型,函数的名字为 val_array,参数为 ARRAY_SIZE,函数的返回 值类型为 INTVALARRAY (C)模板类 valarray 一定有一个只带一个参数的构造函数 (D)模板类 valarray 一定有一个只带两个参数的构造函数
(E) ARRAY SIZE将作为参数传递给 val array的构造函数,初始化val_aray对象 问题3:(本小题共12分)下面是模板函数absO的实现。这个实现中有错误,指出错误并写 出正确的实现。注意:函数头是正确的,不要改变,所有的错误出现在函数体中, template<class t> valarray <T>abs(const valarray<T>& x) for (int i=0; i<x, size; i++)if(x[i]<o)x[i]*=-1 return x 这个函数实现中有以下 (1) (2) (3) 正确的函数实现应为 template<class t valarray<T>abs (const valarray<T>& x)
(E)ARRAY_SIZE 将作为参数传递给 val_array 的构造函数,初始化 val_array 对象 问题3:(本小题共12分)下面是模板函数 abs()的实现。这个实现中有错误,指出错误并写 出正确的实现。注意:函数头是正确的,不要改变,所有的错误出现在函数体中。 template<class T> valarray<T>abs(const valarray<T>& x) { for (int i=0;i<x,size();i++) if(x[i]<0)x[i] * =-1; return x; } 这个函数实现中有以下错误: (1)_____________________________ ________________________________ (2)_____________________________ ________________________________ (3)_____________________________ ________________________________ 正确的函数实现应为: template<class T> valarray<T>abs(const valarray<T>& x) {