2010年 浙工大考研计算机专业课试题C++
个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。
一,读程序写结果 5*9=45分
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-1
#include "stdafx.h"
#include <iostream>
using namespace std;
class Sample
{
inti;
doubled;
public:
voidsetdata(int n){i=n;}
voidsetdata(double x){d=x;}
voiddisp(){ cout<<i<<endl;cout<<d;cout<<endl;}
};
void main()
{
Samples;
s.setdata(10);
s.setdata(15.6);
s.disp();
}
结果:
10
15.6
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-2
#include "stdafx.h"
#include <iostream>
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 <iostream>
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'<<endl;
CExcept0 a;
a.writeout();
}
catch(CExcept1)
{
cout<<'B'<<endl;
CExcept1b;
b.writeout();
}
catch(CExcept2)
{
cout<<'C'<<endl;
CExcept2 c;
c.writeout();
}
}
结果:
2
A
AAA
// kaoshi.cpp : 定义控制台应用程序的入口点。
//2010-1-4
#include "stdafx.h"
#include <iostream>
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 <iostream>
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 <iostream.h>
void main()
{
intx=5,y=6;
int*p=&x; //const int *p=&x;
*p=y;
cout<<*p<<endl;
}
结果:
6
// kaoshi.cpp : Defines the entry point forthe console application.
//2010-2-2
#include <stdio.h>
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<min) min=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<min) min=x;
}
// kaoshi.cpp : Defines the entry point forthe console application.
//2010-2-3
#include <iostream.h>
class f
{
private:
intx,y; //int x=0,y=0;
public:
voidf1(int a,int b){x=a;y=b;}
voidget(){cout<<x<<y<<endl;}
};
void main()
{
fa;
a.f1(1,3);
a.get();
}
结果
13
// kaoshi.cpp : Defines the entry point forthe console application.
//2010-2-4
#include <iostream.h>
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<<a.x<<a.y<<a.max()<<endl;
}
结果
1.53.83.8
// kaoshi.cpp : Defines the entry point forthe console application.
//2010-2-5
#include <iostream.h>
#include <stdio.h> //null
#define n 3 //null
void print_a(int c[n])
{
inti=0; //注释掉不要此句
for(inti=0;i<n;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 <fstream>
#include <iostream>
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!"<<endl;
exit(1);
}
if(!outfile2)
{
cerr<<"openf2.dat error!"<<endl;
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<<c[i];
}
else
{
outfile1.put(c[i]); //将奇数存入磁盘文件f2.dat
cout<<c[i];
}
} //同时送显示器显示
cout<<endl;
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!"<<endl;
exit(1);
}
if(!infile_f2)
{
cerr<<"openf2.dat error!"<<endl;
exit(1);
}
if(!infile_f3)
{
cerr<<"openf3.dat error!"<<endl;
exit(1);
}
if(!outfile_f3)
{
cerr<<"openf3.dat error!"<<endl;
exit(1);
}
cout<<"奇数:";
while(infile_f1.get(ch)) //当读取字符成功时执行下面的复合语句
{
outfile_f3.put(ch); //将奇数存入磁盘文件f3.dat
cout<<ch; //同时在显示器输出
}
cout<<endl;
infile_f1.close(); //关闭磁盘文件f1.dat
cout<<"偶数:";
while(infile_f2.get(ch)) //当读取字符成功时执行下面的复合语句
{
outfile_f3.put(ch); //将偶数存入磁盘文件f3.dat
cout<<ch; //同时在显示器输出
}
cout<<endl;
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!"<<endl;
exit(1);
}
inti,j,d;
for(i=0;i<m;i++)
{
for(j= i + 1;j<m;j++)
if(c[i]>c[j])
{
d=c[i];c[i]=c[j];c[j]=d;
}
}
cout<<"将数组递增排序后:"<<endl;
for(i=0;i<m;i++)
{
cout<<c[i];
outfile_f1.put(c[i]); //将排序数存入磁盘文件f1.dat
}
cout<<endl;
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 <iostream>
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::endl;
std::cout << "您输入的时间 b 是: " << b <<std::endl; //使用operator==判断输入的两个时间是否相等
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