(考试用时90分钟)
一、选择题(每题1分,共5分)
1.对于面向对象的程序设计(OOP)和过程性(SP)的程序设计,那些说法是正确的 。
A.面向对象的程序设计和过程性程序设计是两个的程序设计范型。
B.面向对象的程序设计和过程性程序设计不是两个的程序设计范型,前者包含后者。将两者分开并列是不妥的。
C.面向对象是编程的总体框架,而过程性是编写解决具体问题的程序段的工具。
D.面向对象只是一种语法现象,而过程性程序设计才是编程的工具。
2.下面有关函数调用的说法哪一个是错误的 。
A.实参与形参的数目要求必须是相同的。
B.实参与形参的对应关系取决于位置而不是名字。
C.实参与对应的形参应类型匹配,即实参的类型可以转化为形参类型。
D.C++有两种调用方式:传值与引用。
3.C++中表示字符A的正确方法是 。
A.’\65’ B.”A” C.65 D.’A’
4.有关函数重载的要求哪一个是正确的 。
A.必须保证参数类型和返回值类型均不同。
B.必须保证返回值类型不同。
C.必须保证参数的数量不同。
D.必须保证参数类型或数量不同。
5.下列有关枚举类型的说明哪些是错误的?
A.枚举常量(或称枚举成员)是以标识符形式表示的整型量。
B.默认状态下,这个整数就是所列举元素的序号,序号从0开始。
C.类型定义时可以为部分或全部枚举常量指定整数值,其余的枚举常量仍按默认方式取值。
D.各枚举常量的值可以重复,但各枚举常量标识符必须不同。
二、简答题(每题1分,共5分)
1.什么是逻辑表达式的求值优化?举例说明。
2.下面4个类定义中,是否有错?如有错请说明错在哪里。
(1) class Square{
private:
int upper_left_x, upper_left_y;
int side_length;
public:
void Square(int x=0,int y=0,int len=2);
~Square();
int draw();
};
(2) class Circle{
private:
register int atom_x,atom_y;
auto int radius;
public:
Circle(int x=0,int y=0,int radius=3);
~ Circle();
int darw();
};
(3) class Figure{
public:
Figure();
~ Figure(bool have_drawn);
};
(4) class Line{
private:
int start_x=0,start_y=0;
int end_x=0,end_y=0;
public:
int draw();
int is_on_line(int x,int y);
};
三、阅读程序段(每题5分,共20分)
1.以下是运输公司对所运货物计费的程序。
设每公里每吨的基本运费为p,货物重量为w,总运输里程在某段中的里程为Δs,折扣为d,则该段运费为:p*w*Δs*(1-d)。总费用为各段费用之和,采用不加break的switch语句。
int main(){
int c,s;
double p,w,d,f;
cout<<"输入运输单价p,重量w和里程s:"< f=0; c=s/250; switch(c){ default:d=0.15;f+=p*w*(s-3000)*(1-d);s=3000; case 8: case 9: case 10: case 11: d=0.1;f+=p*w*(s-2000)*(1-d);s=2000; case 4: case 5: case 6: case 7: d=0.08;f+=p*w*(s-1000)*(1-d);s=1000; case 2: case 3: d=0.05;f+=p*w*(s-500)*(1-d);s=500; case 1: d=0.02;f+=p*w*(s-250)*(1-d);s=250; case 0: d=0;f+=p*w*s*(1-d); } cout<<"运输单价:"< cout<<"折扣后运费:"< } 运输公司是怎样分段的?并给出各段的折扣率。,设输入运输单价、重量和里程为0.5 40 4300,输出结果是什么? 2.下面的程序演示静态局部变量的应用。请写出程序运行的输出结果。 void tripe_it(int); void main(){ int i; for (i=1;i<=4;i++) tripe_it(i); return; } void tripe_it(int i){ static int total = 0; // local and static int ans; // local and automatic ans=i*3; total+=ans; cout<<"Sum of 1*3 to "< return; } 3.写出以下程序中递归函数求解的数学式。 #include using namespace std; double P(int n,double x){ if(n==0) return 1; if(n==1) return x; return ((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n; } int main(){ cout<<"P(4,1.5)="< return 0; } 4.给出输出的结果。 void swap(int &,int &); int main(){ int i=3,j=5; swap(i,j); cout<<"i="< return 0; } void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp; } 四、填空,完善程序(每空2分,共30分) 1.猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 int main() { int day,x1,x2; day=9; x2=1; while(day>0){ (1) ; // 某天的桃子数x1是前一天桃子数x2加1后的2倍 (2) ; (3) ; } cout<<"total="< } 2.用递归法求从1到n的平方和: f(1)=1 (n=1) f(n)=f(n-1)+n*n (n>1) #include using namespace std; int f(int); int main(){ int n,s; cout<<"input the number n:"; cin>>n; s= (4) ; cout<<"The result is "< } int f(int n){ //递归法求平方和函数 if ( (5) ) return 1; else return ( (6) ); } 3.若一头小母牛从出生第四个年头开始每年生一头母牛,按此规律,第n年时总共会有多少头母牛。采用递推算法。 void main(){ int n,i; long a=0, b=0, c=0, d=1,temp; //a是3岁及以上母牛数,b是2岁,c是1岁,d是0岁 cout <<"请输入年数n: "; cin >>n; cout< (8) ; //第n年时,2岁母牛数 (9) ; //第n年时,1岁母牛数 (10) ; //第n年时,新生牛数 } cout <<"第n年总共有"<< (11) <<"头母牛。"< 4.将100元换成用10元、5元和1元的组合,共有多少种组合方法。采用穷举法。考虑10元最多10张,5元最多20张,余下是1元。 int main(){ int i,j,k,count=0; for(i=0; (12) ;i++)//i是10元张数,j是5元张数,k是1元张数 for(j=0; (13) ;j++){ k= (14) ; if( (15) ){ cout< count++; } } cout< } 答案: 一、选择题(每题1分,共5分): 1.B.C. 2.A. 3.D. 4.D. 5.C. 二、简答题(每题1分,共5分) 1.在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。例如,假定a=2, b=0, c=3,逻辑表达式 a||b++||c-- 因a为非0整数,表达式的值立即可以确定为true,后面的运算b++和c--不再进行,最后b仍为0,c仍为3。 2. (1)构造函数无函数返回类型说明。 (2)定义类时成员数据不分配内存,不可加存储类型说明。 (3)析构函数是无参函数。 (4) 定义类时成员数据不分配内存,不可赋初值。 三、阅读程序段(每题5分,共20分) 1.分段与运费打折情况如下: s<250 不打折扣 250<=s<500 2%折扣 500<=s<1000 5%折扣 1000<=s<2000 8%折扣 2000<=s<3000 10%折扣 3000<=s 15%折扣 输出结果: 运输单价:0.5 重量:40 里程:4300 折扣后运费:77900 2.Sum of 1*3 to 1*3 is 3 Sum of 1*3 to 2*3 is 9 Sum of 1*3 to 3*3 is 18 Sum of 1*3 to 4*3 is 30 3.勒让德多项式: 4.i=5 j=3 四、填空,完善程序(每空2分,共30分) 1.(1) x1=(x2+1)*2 (2) x2=x1 (3) day— 2.(4) f(n) (5) n==1 (6) n*n+f(n-1) 3.(7) a+=b (8) b=c (9) c=d (10) d=a (11) a+b+c+d 4.(12) i<=10 (13) j<=20 (14) 100-10*i-5*j (15) k>=0 C++程序设计试题(下)样卷(卷面60分) (考试用时100分钟) 一、选择题(每题1分,共5分) 1.设计一个自定义类时,需要在屏幕上显示或向文件写入类对象的数据,最佳选择方法是 。 A.为屏幕显示和文件写入各自设计一个成员函数。 B.为屏幕显示和文件写入统一设计一个成员函数。 C.重载插入运算符(<<)。 D.重载提取运算符(>>)。 2.关于异常处理,那些说法是错误的 。 A.在C++程序中,由throw表达式抛出异常,而该表达式应直接或间接地被包含在try块中。 B.当抛出异常后,寻找匹配的catch子句有固定的过程:逆着程序函数的调用链返回,称为栈展开(Stack Unwinding)。 C.当某条语句抛出异常时,跟在其后的语句将被跳过,但析构函数仍然执行,所以应该在析构函数中释放资源。 D.catch子句实际是一个特殊的函数。 3.下列关于动态资源分配的说法中错误的是 。 A.动态分配的资源不仅包括内存,还包括文件。 B.动态内存分配的优点在于可以随时给数组分配所需的内存而不会失败。 C.动态分配的资源通常要求在析构函数中释放。 D.对含有动态分配的数据成员的类对象应该采用深复制。 4.下列有关模板的描述那些是错误的 。 A.模板把数据类型作为一个设计参数,称为参数化程序设计。 B.模板参数除模板类型参数外,还有非类型参数。 C.类模板与模板类是同一概念。 D.使用时,模板参数与函数参数相同,是按位置而不是名称对应的。 5.关于多态,下面那些说法是正确的 。 A.多态分静态的(编译时)和动态的(运行时)。 B.运行时的多态与类的层次结构有关。 C.在基类定义了虚函数后,在派生类中重新定义时可以不加关键字virtual。 D.仅使用虚函数并不能实现运行时的多态性,还必须采用指针或引用来调用才能真正实现运行时的多态性。 二、填空题(每空0.5分,共5分) 1.运算符重载时,其函数名由 (1) 构成。成员函数重载双目运算符时,左操作数是 (2) ,右操作数是 (3) 。 2.C/C++中的数组用的是一个 (4) 的定义,即数组的基本定义是 (5) 构成的数组,三维数组的元素是 (6) 。 3.单链表的结点包含两个域: (7) 和 (8) 。使用链表的最大的优点是 (9) ,即使是动态数组也做不到这一点。 4.纯虚函数定义时在函数参数表后加=0,它表明程序员对函数体不定义,其本质是将指向函数体的指针定为 (10) 。 三、阅读程序段(第一题4分,其余每题5分,共14分) 1.写出下面的程序输出的数据,这是什么图形? int main(){ int a[10][11]={0,1},i,j; for(i=1;i<10;i++) for(j=1;j<=i+1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++){ return 0;