1、面向对象程序设计试卷 A 答案及评分标准本试卷共 10 个题,分别按以下标准评分,最后根据整个答题的情况,从程序设计风格的角度给予 0-5 分的附加分。1、编写程序,将从键盘读入的所有大小写字母写入名为 a.txt 的文件中(遇 EOF 结束) 。(本题总分 10 分,fopen 函数使用妥当 4 分,读入过程正确 4 分,关闭文件 2 分。程序结构完整,有不妥之处,酌情扣分。 )#include main ( )FILE *fptr;fptr = fopen(“a.txt“,“w“);if (fptr=NULL)return 0;char a;a=getchar( );while(a!=EO
2、F )if(a=a void setWidth(int w);void setLength(int l); private:int Length;int Width;int Rectangle:getArea()return Length*Width;void Rectangle:setLength(int l)Length=l;void Rectangle:setWidth(int w)Width=w;main()int len,wid;Rectangle r1;coutlen;coutwid;r1.setLength(len);r1.setWidth(wid);cout#include s
3、truct Node int item;struct Node *next;class IStack public:IStack();IStack();void push(int item);int pop();int getItemNum();private:Node *head;int size;IStack:IStack()head = NULL;size = 0;IStack:IStack()Node *temp = head;while (temp != NULL) temp = head-next; delete head;head = temp;void IStack:push(
4、int item)Node *temp = new Node;temp-item = item;temp-next = head;head = temp;size+;int IStack:pop()if (size = 0) coutnext;int i = temp-item;delete temp;return i;int IStack:getItemNum() return size;main() IStack istack;istack .push(6);istack .push(7);istack .push(8);cout#include class Rationalpublic:
5、Rational(int num1=1,int num2=1);Rational operator*(Rational r1);void showNomal();private:int up;int down;int Minmultiple(int a,int b); /最小公倍数int Maxdivisor(int a,int b);/最大公约数;Rational:Rational(int num1,int num2)up=num1;down=(num2=0)?1:num2;int i;i=Maxdivisor(up,down);up=up/i;down=down/i;int Rationa
6、l:Maxdivisor(int a,int b)int temp;int remainder;if(aclass Time friend ostream public:Time(int h=0, int m=0, int s=0);private:int hour, minute, second;Time:Time(int h, int m, int s)hour=h;minute=m;second=s;ostream input t.hour a t.minute b t.second ;return input;int main()Time t;cout t;/调用自己定义的运算符重载函
7、数 operator(cin,t)cout #include class Circle:public Shapepublic:Circle(double xn,double yn,double rn) x=xn;y=yn;r=rn;double area()return 3.14*r*r;void show()coutint n=0;class shapevirtual double area() const=0; 虚函数friend addarea(shape ;int main()Circle a(1.0,1.0,1.0);Triagle b(1.0,1.0,1.0);Rectangle
8、c(1.0,1.0,1.0);shape * a1;shape * b1;shape * c1;a1=b1=c1=addarea(a1);addarea(b1);addarea(c1);couttemplate void change(Tname a,int n)Tnamen b=new namen+1;for(int i=0;in;i+)bi=an-i-1;a=b;delete b;int main()int a10;for(int i=0;i10;i+)ai=i;float b20;for(float n=0.0,n20;n+)bn=n;change(a,10);change(b,20);
9、for(int i=0;i10;i+)coutai“t“;for(i=0;i20;i+)coutbi“t“;return 0;10、编写一个用于英语单词学习的系统,按照如下步骤进行:(1) 编写类 Eword,类 Eword 的对象表示一个英文单词以及它的含义、应用示例;(2) 为类 Eword 添加显示对象信息的成员函数;(3) 为类 Eword 添加保存对象到文件以及从文件恢复对象的成员函数;(4) 编写类 WordList,以链表或数组的方式管理类 Eword 的多个对象;(5) 为类 WordList 添加查询一个单词的成员函数;(6) 为类 WordList 添加插入一个单词(类 E
10、word 的对象)的成员函数;(7) 为类 WordList 添加逐个显示英语单词的成员函数;(8) 编写程序利用上述两个类借助文件管理自己要学习的英语单词;(9) 对程序进行进一步的优化,如为已经记住的单词添加标记,下次不再显示等,使系统更加实用。(本题总分 10 分,第 1 小题至第 7 小题各一分,第 8 题 2 分,第 9 题 1 分。程序结构完整,有不妥之处,酌情扣分。 )class Eworld public Eword(char *a,char *hanyi,char *shili)word=new charstrlen(a)+1;strcpy(word,a);h=new cha
11、rstrlen(hanyi+1);strcpy(h,hanyi);s=new charstrlen(shiyi+1);strcpy(s,shili);void show() /显示单词及含义,示例coutwordendl;couthendl;coutsendl;void showwold() /显示单词coutwordendl;void save(ifstream void recovery(ofstream private:char *word;char *h;char *s;int flag;class WordListpublic:int add(Eword *a) /添加单词if(n=
12、nCount)return 0;else list+n=a;return 1;int find(char *a) /查找单词for(int i=0;in;i+)if(strcmp(Listi.word,a)=0)return i;return -1;void Lshow() /显示所有单词for(int i=0;in;i+)listi.showword();void Lshow2() /显示未记住的单词for(int i=0;in;i+)if(listi.flag!=1)listi.show();privateint nCount;int n;Eword list;WordList(int a) /初始化容量 nCount,已记录单词数 n; nCount=a;n=0;list=new Eworda;SetFlag(int n)flag=n;测试方法:先声明一个 WordList 对象,初始化容量,再添入单词,用 Setflag 标记单词或重新标记。