三、阅读程序题
1.阅读下面程序,给出程序的运行结果。
1)
#include<iostream>
using namespace std;
void Fun(int x,int *py,int& z){
x++; (*py)--; z*=2;
cout<<"x="<<x<<","<<"*py="<<*py<<","<<"z="<<z<<endl;
}
void main(void){
int a=1,b=2,c=3;
Fun(a,&b,c);
cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<endl;
}
2)
#include<iostream>
using namespace std;
void P(int w){
if (w==0) return;
P(w-1);
cout<<w;
P(w-1);
}
void main(void){ P(3); }
3)
#include<iostream>
using namespace std;
void print(int,int,int (*p_fun)(int,int));
int add(int,int);
int substract(int,int);
void main(void){
int a=10,b=-20,Choice;
int(*p)(int,int);
cout<<"Enter your choice:";
cin>>Choice;
switch(Choice){
case 1: p=add; break;
default: p=substract;
}
print(a,b,p);
}
int add(int x,int y){ return x+y; }
int substract(int x,int y){ return x-y; }
void print(int i,int j,int (*p_fun)(int,int)){
cout<<"The result is "<<p_fun(i,j)<<endl;
}
程序运行时:
Enter your Choice:1
2.阅读下面程序,回答相关问题。
1)
#include <iostream>
using namespace std;
struct Student{
int num;
char name[20];
char sex;
int age;
};
void main(void){
Student* Fun(Student *,int);
Student stu[]={ {11,"lilin",'M',18},{3,"sunny",'M',24},
{2,"zhao",'M',20}, {4,"Liu yanhong",'F',30} };
int size=sizeof(stu)/sizeof(Student);
Student *p=Fun(stu,size);
cout<<p->num<<'\t'<<p->name<<'\t'<<p->age<<endl;
}
Student* Fun(Student *s, int n){ //问题a和b
int index=0,i;
for(i=1;i<n;i++)
if(s[i].num>s[index].num) index=i;
return s+index;
}
- 给出函数Fun()的功能;
- 若将函数Student* Fun(Student *s, int n)的返回值类型改为Student& ,要完成相同的功能,给出源程序中其它需要修改的语句并作相应的修改。
2)
#include<iostream>
using namespace std;
class Student{
char* name;
int age;
float score;
public:
Student(char* n,int a,float s):age(a),score(s){
cout<<"constructing..."<<n<<endl;
name=new char[strlen(n)+1];
strcpy(name,n);
}
~Student(){
cout<<"destructing..."<<name<<endl;;
delete[] name;
}
};
void main(void){
Student s("Liu",18,86.5);
Student *p_st1=new Student("Chen",18,86.5);
delete p_st1; //问题b)
}
a) 给出程序的运行结果;
b) 若去掉语句delete p_st1;,程序运行结果会不同吗?
3)
#include<iostream>
using namespace std;
class Point{
private:
char *name;
float X,Y;
public:
Point(char* s,float a,float b){
X=a;Y=b;
name=new char[strlen(s)+1];
strcpy(name,s);
cout<<"Initializing Point: "<<name
<<", X="<<X<<" ,Y="<<Y<<endl;
}
Point(Point &p);
float GetX(){ return X; }
float GetY(){ return Y; }
void Show(){ cout<<"name:"<<name<<", X="<<X<<",Y="<<Y<<endl; }
~Point(){
cout<<"deleting Point: "<<name<<", "<<X<<","<<Y<<endl;
delete []name;
}
};
class Line{
Point p1,p2;
public:
Line(char* p1name,float x1,float y1,char* p2name,float x2,
float y2):p1(p1name,x1,y1),p2(p2name,x2,y2){
cout<<"Line constructor."<<endl;
}
~Line(){
cout<<"Line destructor."<<endl;
}
};
Point::Point(Point &p){ //问题b
name=new char[strlen(p.name)+1];
strcpy(name,p.name);
X=p.X;
Y=p.Y;
cout<<"Coping Point: "<<p.name<<","<<X<<","<<Y<<endl;
}
void fun(Point p){ p.Show(); }
void main(void){
Point A("objA",12,24);
fun(A);
Line L1("p1",1,2,"p2",3,4);
}
a)(6分)给出程序的运行结果;
b)(3分)给出拷贝构造函数Point(Point &p)的功能。是否可以去掉该函数?
4)(8分)
#include<iostream>
using namespace std;
class Base{
public:
int Bvalue;
Base(int v){
Bvalue=v;
cout<<"Base construtor."<<endl;
}
int getBvalue(){ return Bvalue; };
};
class D1: public Base{
public:
int D1value;
D1(int v,int b):Base(v){
D1value=b;
cout<<"D1 construtor."<<endl;
}
int getD1value(){return D1value;}
};
class D: public D1{
public:
int Dvalue;
int getDvalue(){ return Dvalue; }
D(int v1,int v2,int a):D1(v1,v2){
Dvalue=a;
cout<<"D construtor."<<endl;
}
};
void main(void){
D obj(1,2,3);
cout<<obj.getDvalue()<<endl;
cout<<obj.getBvalue()<<endl; //问题b)
cout<<obj.getD1value()<<endl;
}
a) 给出程序的运行结果;
b) 能否将表达式obj.getBvalue()改为obj.Bvalue?
答案