答案:int i=32;,a>=A && a<=Z
[解析]大写字母变小写字母相差32,需要对i声明并初始化。大写字母变小写字母。要判断字 符是大写字母。
五、程序分析题(本大题共4小题,每小题5分,共20分)
1. 给出下面程序输出结果。
#include<> class a {public:
virtual void print()
{cout<< \};
class b:public a {};
class c:public b {public:
void print(){cout<<\};
void show(a *p) {(*p).print(); }
void main() {a a; b b; c c; show(&a); show(&b);
show(&c); }
答案:a prog... a prog... c prog...
[解析]考查多态性的。a类对象调用本身的虚函数,b类因为没有覆写print,所以仍然调用基 类的虚函数。而c类重新定义print虚函数,所以调用c类的print。
2. 给出下面程序输出结果。
#include <> #include <> #include <> bool fun(long n); void main()
{long a=10,b=30,l=0; if(a%2==0) a++; for(long m=a;m<=b;m+=2) if(fun(m)) {if(l++==0) cout <bool fun(long n) {int sqrtm=(int)sqrt(n); for(int i=2;i<=sqrtm;i++) if(n%i==0) return false; return true; }
答案:11 13 17 19 23 29
[解析]循环体用来判断n是否是质数的函数,在main函数判断10~30之间质数。
3. 给出下面程序输出结果。
#include <> class Test {int x,y; public:
Test(int i,int j=0) {x=i;y=j;}
int get(int i,int j) {return i+j;}
};
void main()
{Test t1(2),t2(4,6); int (Test::*p)(int,int=10); p=Test::get;
cout<<(t1.*p)(5)<cout<<(p1->*p)(7,20)<答案:15 27
[解析]指向类成员函数的指针的使用,*p指向Test类中有两个参数的函数的一个指针。 P=Test::get.这样p就和get发生了联系。(t1.*p)(5)等价于调用一个参数的get函数。
4. #include <>
#include <> #include <> class student {char name[8]; int deg; char level[7];
friend class process; 已定义一个Shape抽象类,在此基础上派生出矩形Rectangle和圆形Circle类,二者都有 GetPerim()函数计算对象的周长,并编写测试main()函数。 class Shape {public: Shape(){} ~Shape(){}
virtual float GetPerim()=0; }
答案:class Rectangle:public Shape {public:
Rectangle(float i,float j):L(i),W(j){} ~Rectangle(){}
float GetPerim(){return 2*(L+W);} private: float L,W; };
class Circle:public Shape {public:
Circle(float r):R(r){}
float GetPerim(){return *2*R;} private:
float R; };
void main() {Shape * sp; sp=new Circle(10);
cout<GetPerim ()<GetPerim()<