2010年 浙工大考研计算机专业课试题C++
个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。
一,读程序写结果 5*9=45分
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-1
#include "stdafx.h"
#include
using namespace std;
class Sample
{
inti;
doubled;
public:
voidsetdata(int n){i=n;}
voidsetdata(double x){d=x;}
voiddisp(){ cout<
};
void main()
{
Samples;
s.setdata(10);
s.setdata(15.6);
s.disp();
}
结果:
10
15.6
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-2
#include "stdafx.h"
#include
using namespace std;
int i=0;
int x=0;
class Sample
{
public:
Sample(){}
Sample(inta ){x=a;}
Sample(Sample&a){i++;}
voiddisp(){cout<<++i;}
};
void fun(Sample &s1,Sample &s2)
{
s1.disp();s2.disp();
return;
}
Sample fun(Sample s)
{
s.disp();
returns;
}
void main()
{
Samples1(2),s2=s1;
fun(s1,s2);
s1.disp();
s2.disp();
}
结果;
2345
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-3
#include "stdafx.h"
#include
using namespace std;
class CMyExcept
{
voidwriteout()
{
cout<<"XXX\n";
}
};
class CExcept0 : public CMyExcept
{ public:
voidwriteout()
{
cout<<"AAA\n";
}
};
class CExcept1 : public CExcept0
{ public:
voidwriteout()
{
cout<<"BBB\n";
}
};
class CExcept2 : public CExcept1
{ public:
voidwriteout()
{
cout<<"CCC\n";
}
};
void main()
{
charch;
try{
cin>>ch;
switch(ch){
case'0':throwCExcept0();
case'1':throwCExcept1();
case'2':throwCExcept2();
}
}
catch(CExcept0)
{
cout<<'A'< CExcept0 a; a.writeout(); } catch(CExcept1) { cout<<'B'< CExcept1b; b.writeout(); } catch(CExcept2) { cout<<'C'< CExcept2 c; c.writeout(); } } 结果: 2 A AAA // kaoshi.cpp : 定义控制台应用程序的入口点。 //2010-1-4 #include "stdafx.h" #include using namespace std; void func(); int n=1; void main() { staticint a; intb=-10; printf("a=%d,b=%d,n=%d",a,b,n); b+=4; func(); printf("a=%d,b=%d,n=%d",a,b,n); n+=10; func(); } void func() { staticint a=2; intb=5; a+=2; b+=5; n+=12; printf("a=%d,b=%d,n=%d\n",a,b,n); } 结果: a=0,b=-10,n=1a=4,b=10,n=13 a=0,b=-6,n=13a=6,b=10,n=35 // kaoshi.cpp : 定义控制台应用程序的入口点。 //2010-1-5 #include "stdafx.h" #include using namespace std; class Sample { public: Sample(){cout<<(x=2);}; Sample(inti,int j){cout<<(x=i+j);}; ~Sample(){cout<<++x;}; private: intx; }; void main() { Sample*p1=new Sample[3]; delete[]p1; } 结果: 222333 二,修改程序的错误 5*6=30分 // kaoshi.cpp : Defines the entry point forthe console application. //2010-2-1 #include void main() { intx=5,y=6; int*p=&x; //const int *p=&x; *p=y; cout<<*p< } 结果: 6 // kaoshi.cpp : Defines the entry point forthe console application. //2010-2-2 #include int main() { floatx,max,min;int i; for(i=1;i<=3;i++) { scanf("%f",&x); } if(i=1) {max=x;min=x;} if(x>max) max=x; if(x printf("%f,%f\n",max,min); return0; } 修改: for(i=1;i<=3;i++) { scanf("%f",&x); if(i==1) {max=x;min=x;} if(x>max) max=x; if(x } // kaoshi.cpp : Defines the entry point forthe console application. //2010-2-3 #include class f { private: intx,y; //int x=0,y=0; public: voidf1(int a,int b){x=a;y=b;} voidget(){cout< }; void main() { fa; a.f1(1,3); a.get(); } 结果 13 // kaoshi.cpp : Defines the entry point forthe console application. //2010-2-4 #include class f { public: //private: doublex,y; public: voidf1(double a,double b){x=a,y=b;} doublemax(){return(x>y)?x:y;} }; void main() { fa; a.f1(1.5,3.8); cout< } 结果 1.53.83.8 // kaoshi.cpp : Defines the entry point forthe console application. //2010-2-5 #include #include #define n 3 //null void print_a(int c[n]) { inti=0; //注释掉不要此句 for(inti=0;i { printf("c[%d]=%d\n",i,c[i]); //printf("c[%d]=%d\n",i,c); } } int main() { inta[3]={1,2,3}; print_a(a);//print_a(a[3]); } 结果: c[0]=1 c[1]=2 c[2]=3 三,编程题: 75分 1 30分 建立两个磁盘文件f1.dat和f2.dat,试编程序实现以下工作: a)从键盘键入20个不同的整数,奇数放入f1.dat,偶数放入f2.dat; b)分别读入f1.dat和f2.dat中的奇数,对这20个整数按递增方式排序后,依次写入f1.dat中,实现f1.dat中的数据的更新。 #include #include using namespace std; void save_to_file( )// save_to_file函数从键盘读入一行字符,并将其中的字母存入磁盘文件 { ofstreamoutfile1("f1.dat"); //定义输出文件流对象outfile,以输出方式打开磁盘文件f1.dat ofstreamoutfile2("f2.dat"); //定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat if(!outfile1) { cerr<<"openf1.dat error!"< exit(1); } if(!outfile2) { cerr<<"openf2.dat error!"< exit(1); } charc[80]; cout<<"请任意输入一些数字:"; cin.getline(c,80); //从键盘读入一行字符 cout<<"您刚才输入的数字是:"; for(inti=0;c[i]!=0;i++) //对字符逐个处理,直到遇′/0′为止 if(c[i]>=49&& c[i]<=58) //如果是数字字符 { if(c[i]%2==0) { outfile2.put(c[i]); //将偶数存入磁盘文件f2.dat cout< } else { outfile1.put(c[i]); //将奇数存入磁盘文件f2.dat cout< } } //同时送显示器显示 cout< outfile1.close(); //关闭f1.dat outfile2.close(); //关闭f2.dat } void get_from_file()//从f1.dat,f2.dat读入所有数字,按递增排序后,再存入f1.dat . { charch,m=0,c[80]; ifstreaminfile_f1("f1.dat",ios::in); ifstreaminfile_f2("f2.dat",ios::in); //定义输入文件流infile,以输入方式打开磁盘文件f1.dat,f2.dat ofstreamoutfile_f3; outfile_f3.open("f3.dat",ios::app);//定义输出文件流outfile,以追加输出方式打开磁盘文件f3.dat ifstreaminfile_f3("f3.dat",ios::in); if(!infile_f1) { cerr<<"openf1.dat error!"< exit(1); } if(!infile_f2) { cerr<<"openf2.dat error!"< exit(1); } if(!infile_f3) { cerr<<"openf3.dat error!"< exit(1); } if(!outfile_f3) { cerr<<"openf3.dat error!"< exit(1); } cout<<"奇数:"; while(infile_f1.get(ch)) //当读取字符成功时执行下面的复合语句 { outfile_f3.put(ch); //将奇数存入磁盘文件f3.dat cout< } cout< infile_f1.close(); //关闭磁盘文件f1.dat cout<<"偶数:"; while(infile_f2.get(ch)) //当读取字符成功时执行下面的复合语句 { outfile_f3.put(ch); //将偶数存入磁盘文件f3.dat cout< } cout< infile_f2.close(); //关闭磁盘文件f2.dat outfile_f3.close(); //关闭磁盘文件f3.dat while(infile_f3.get(ch))//当读取字符成功时执行下面的复合语句 { c[m]=ch; m++; } infile_f3.close(); //关闭磁盘文件f3.dat ofstreamoutfile_f1("f1.dat"); if(!outfile_f1) { cerr<<"openf1.dat error!"< exit(1); } inti,j,d; for(i=0;i { for(j= i + 1;j if(c[i]>c[j]) { d=c[i];c[i]=c[j];c[j]=d; } } cout<<"将数组递增排序后:"< for(i=0;i { cout< outfile_f1.put(c[i]); //将排序数存入磁盘文件f1.dat } cout< outfile_f1.close();//关闭磁盘文件f1.dat } int main( ) { save_to_file(); //调用save_to_file( ),从键盘读入一行数字并将其中的奇数放入磁盘文件f1.dat,偶数存入磁盘文件f2.dat get_from_file(); //调用get_from_file(),从f1.dat,f2.dat读入所有数字,按递增排序后,再存入f1.dat . return0; } 2 45分 声明和实现一个时间类time24: a)实现获得和设置由时,分组成的24小时制时间的方法; b)编写程序实现“+”运算,即实现time24对象与整型分钟数相加的运算,要求该运算返回一个time24对象; c)实现time24类的等价运算符重载,即比较两个time24对象是否相等; d)实现输入和输出重载。 要求该类具有构造函数,并适当使用友元函数和运算符重载方法。 #include class time24 { public: time24() :_hour(0), _min(0) { } time24(inthour, int min) :_hour(0), _min(0) { set(hour, min); } ~time24() { } voidset(int hour, int min) { _hour = hour; _min = min; } voidadd_min(int min) { int dh = (_min + min) / 60; _hour = (_hour + dh) % 24; _min = (_min + min) % 60; } inthour() const { return _hour; } intmin() const { return _min; } private: int _hour; int _min; friend bool operator==(time24 const&, time24 const&); }; time24&operator+(time24& t, int min) { t.add_min(min); return t; } time24&operator+(int min, time24& t) { return operator+(t, min); } booloperator==(time24 const& lhs, time24 const& rhs) { return lhs._hour == rhs._hour && lhs._min == rhs._min; } std::ostream&operator<<(std::ostream& os, time24 const& t) { os << t.hour() << ":" << t.min(); return os; } std::istream&operator>>(std::istream& is, time24& t) { char c; int h, m; is >> h >> c >> m; t.set( h, m ); return is; } int main() { time24 a, b; //使用重载的>>输入时间,格式为: 小时:分钟 std::cout << "请输入时间a(格式:23:59): "; std::cin >> a; std::cout << "请输入时间b(格式:23:59): "; std::cin >> b; //使用重载<<输出a,b两个时间值 std::cout << "您输入的时间 a 是: " << a < std::cout << "您输入的时间 b 是: " << b < if( a == b ) std::cout << "时间 a 等于 时间 b " << std::endl; else std::cout << "时间 a 不等于 时间 b " << std::endl; //输入一个整形值,用于测试对时间的加运算符 int addMin; std::cout << std::endl <<"请输入一个分钟数:"; std::cin >> addMin; a = a + addMin; b = b + addMin; std::cout << "时间a: " << " +" << addMin << " 分钟 = " << a << std::endl; std::cout << "时间b: " << " +" << addMin << " 分钟 = " << b << std::endl; return 0; } undoner ( )- !