1、C++程序设计试题(上)样卷(卷面50分) (考试用时90分钟) 一、选择题(每题1分,共5分) 1.对于面向对象的程序设计(OOP)和过程性(SP)的程序设计,那些说法是正确的 。 A.面向对象的程序设计和过程性程序设计是两个独立的程序设计范型。 B.面向对象的程序设计和过程性程序设计不是两个独立的程序设计范型,前者包含后者。将两者分开并列是不妥的。 C.面向对象是编程的总体框架,而过程性是编写解决具体问题的程序段的工具。 D.面向对象只是一种语法现象,而过程性程序设计才是编程的工具。 2.下面有关函数调用的说法哪一个是错误的
2、 。 A.实参与形参的数目要求必须是相同的。 B.实参与形参的对应关系取决于位置而不是名字。 C.实参与对应的形参应类型匹配,即实参的类型可以转化为形参类型。 D.C++有两种调用方式:传值与引用。 3.C++中表示字符A的正确方法是 。 A.’\65’ B.”A” C.65 D.’A’ 4.有关函数重载的要求哪一个是正确的 。 A.必须保证参数类型和返回值类型均不同。 B.必须保证返回值类型不同。 C.必须保证参数的数量不同。 D.必须保证参数类型或数量不同。 5.下列有关
3、枚举类型的说明哪些是错误的? A.枚举常量(或称枚举成员)是以标识符形式表示的整型量。 B.默认状态下,这个整数就是所列举元素的序号,序号从0开始。 C.类型定义时可以为部分或全部枚举常量指定整数值,其余的枚举常量仍按默认方式取值。 D.各枚举常量的值可以重复,但各枚举常量标识符必须不同。 二、简答题(每题1分,共5分) 1.什么是逻辑表达式的求值优化?举例说明。 2.下面4个类定义中,是否有错?如有错请说明错在哪里。 (1) class Square{ private: int upper_left_x, upp
4、er_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{ p
5、ublic: 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); }; 三、阅读程序段(每题4分,共16分) 1.以下是运输公司对所运货物计费的程序。 设每公里每吨的基本运费为p,货物重量为w,总运输里程在某段中的里程为Δs,折扣为d,则该段运费为:p*w*Δs*(1
6、d)。总费用为各段费用之和,采用不加break的switch语句。
int main(){
int c,s,s1;
double p,w,d,f;
cout<<"输入运输单价p,重量w和里程s:"<
7、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<<"运输单价:"<
8、输公司是怎样分段的?并给出各段的折扣率。,设输入运输单价、重量和里程为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;
9、 // local and automatic ans=i*3; total+=ans; cout<<"Sum of 1*3 to "< 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)-(
10、n-1)*P(n-2,x))/n; } int main(){ cout<<"P(4,1.5)="<
11、1.5分,共24分)
1.猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。
int main() {
int day,x1,x2;
day=9;
x2=1;
while(day>0){
(1) ; // 某天的桃子数x1是前一天桃子数x2加1后的2倍
(2) ;
(3) ;
}
cout<<"total="< 12、rn 0;
}
2.用递归法求从1到n的平方和:
f(1)=1 (n=1)
f(n)=f(n-1)+n*n (n>1)
#include 13、法求平方和函数
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< 14、7) ; //第n年时,3岁及以上母牛数
(8) ; //第n年时,2岁母牛数
(9) ; //第n年时,1岁母牛数
(10) ; //第n年时,新生牛数
}
cout <<"第n年总共有"<< (11) <<"头母牛。"< 15、ect{
int length,witdth;
public:
CRect(int l,int w){
length=l;
width=w;
}
friend int operator>=( CRect& r1, CRect& r2){
return (12) >= (13) ; //比较面积
}
void operator+=( CRect& r){
(14) ; //求长
(15) ; //求宽
}
friend operator+( CRect& 16、r1, CRect& r2){
return CRect( (16) ); //利用构造函数
}
}
答案:
一、选择题(每题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)构造函数 17、无函数返回类型说明。
(2)定义类时成员数据不分配内存,不可加存储类型说明。
(3)析构函数是无参函数。
(4) 定义类时成员数据不分配内存,不可赋初值。
三、阅读程序段(每题4分,共16分)
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 18、 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
四、填空,完善程序(每空1.5分,共24分)
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) r1.length*r1.width (13) r1.length*r1.width
(14) length+=r.length (15) width+=r.width
(16) r1.length+r2.length, r1.width+r2.width
6






