C++程序设计 上机试题
考试时间:180分钟
(注:以下所有题目均要求上机实现)
第一题 ( 20分)
声明数组如下,按要求编写程序, 以f1.cpp作为文件名,存放到D盘:
double a[]={1.1,5.2,7.3,4.4}, b[4];
要求使用泛型算法 完成:
1.将数组a内容反转,并正向 输出数组 a的内容.
2.将数组a的内容拷贝到数组b, 并逆向输出数组b的内容.
3.将数组b按降幂排序,并输出数组b的内容.
4.在数组a中查4.4的位置,并输出.
#include <iostream>
#include <algorithm>
#include<iterator>
#include <functional>
using namespace std;
void main()
{
double a[]={1.1,5.2,7.3,4.4},b[4];
reverse(a,a+4);
copy(a,a+4,ostream_iterator<double>(cout," "));
cout<<endl;
reverse_copy(a,a+4,ostream_iterator<double>(cout," "));
cout<<endl<<endl;
copy(a,a+4,b);
copy(b,b+4,ostream_iterator<double>(cout," "));
cout<<endl;
reverse_copy(a,a+4,b);
copy(b,b+4,ostream_iterator<double>(cout," "));
cout<<endl<<endl;
sort(a,a+4);
copy(a,a+4,ostream_iterator<double>(cout," "));
cout<<endl;
sort(a,a+4,greater<double>());
copy(a,a+4,ostream_iterator<double>(cout," "));
cout<<endl<<endl;
double *x=find(a,a+4,4.4);
if (x==a+4)
cout<<"no value 4.4";
else
cout<<"have value is "<<*x;
cout<<endl;
}
第二题(20分)
定义队列类模板queue(先进先出),队列的大小由使用者确定。要求该类模板对外提供如下二种基本操作:(1)insert(入队列)(2)front(出队列),用数组来实现
#include < iostream >
using namespace std;
template < class T, int size >
printf怎么加endl class queue {
T x [ size ] ;
int current, front, rear;
public :
queue ( ) { current = 0 ; front = 0 ; rear = 0 ;}
. . . .insert(. . . .);
. . . .front(. . . .);
};
template<class T>
bool Queue::insert ( Queue &Q, T a ) //入队列
{
if (front ==0&&rear== current -1)
return false;
int i;
i=rear+1;
Q.x[i] = a;
return true;
}
//--------------出队
template<class T>
bool Queue::front( Queue &Q)
{
if (current==0) // 检测队列是否为空
return false;
int i;
for ( i = 0; i < current; i++ )
{
Q.x[i]= Q.x[i+1] ;
}
return true;
}
第三题(20分)
设计一个Bank类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。Bank类包括私有数据成员top(当前账指针),date(日期),money(金额),rest(余额)和sum(累计余额)。有三个成员函数bankin()(处理存入账),bankout()处理取出账)和disp()(输出明细账)请完成函数的实现。
本题部分程序如下:
#include<iostream>
#include<string>
#define Max 100
class Bank
{
int top;
char date[Max][10];//日期
int money[Max];//金额
int rest[Max];//余额
static int sum;//累计余额
public:
Bank(){top=0;}
void bankin(char d[ ],int m){…}
void bankout(char d[ ],int m){…}
void disp(){…};
} ;
#include<iostream>
#include<stdio.h >
#include<string>
#define Max 100
#include<string>
#define Max 100
Using namespace std;
class Bank
{
int top;
char date[Max][10]; // 日期
int money[Max]; // 金额
int rest[Max]; // 余额
static int sum; // 累计余额
public:
Bank(){top=0;}
void bankin(char d[],int m)
{
strcpy(date[top],d);
money[top]=m;
sum=sum+m;
rest[top]=sum;
top++;
}
void bankout(char d[],int m)
{
strcpy(date[top],d);
static int sum; // 累计余额
public:
Bank(){top=0;}
void bankin(char d[],int m)
{
strcpy(date[top],d);
money[top]=m;
sum=sum+m;
rest[top]=sum;
top++;
}
void bankout(char d[],int m)
{
strcpy(date[top],d);
money[top]=-m;
sum=sum-m;
rest[top]=sum;
top++;
}
void disp();
};
int Bank::sum=0;
void Bank::disp()
{
int i;
printf(" 日期存入 取出余额\n");
for(i=0;i<top;i++)
{
sum=sum-m;
rest[top]=sum;
top++;
}
void disp();
};
int Bank::sum=0;
void Bank::disp()
{
int i;
printf(" 日期存入 取出余额\n");
for(i=0;i<top;i++)
{
printf("%8s",date[i]);
if(money[i]<0)
printf(" %6d",-money[i]);
else
printf("%6d ",money[i]);
printf("%6d\n",rest[i]);
}
}
void main()
{
Bank obj;
obj.bankin("2013.05.14",1000);
obj.bankin("2013.05.12",2000);
if(money[i]<0)
printf(" %6d",-money[i]);
else
printf("%6d ",money[i]);
printf("%6d\n",rest[i]);
}
}
void main()
{
Bank obj;
obj.bankin("2013.05.14",1000);
obj.bankin("2013.05.12",2000);
obj.bankout("2013.03.02",500);
obj.bankout("2013.04.20",800);
obj.disp();
}
obj.bankout("2013.04.20",800);
obj.disp();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论