C期末考试试题及答案9.docx
- 文档编号:11328910
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:32
- 大小:39.35KB
C期末考试试题及答案9.docx
《C期末考试试题及答案9.docx》由会员分享,可在线阅读,更多相关《C期末考试试题及答案9.docx(32页珍藏版)》请在冰豆网上搜索。
C期末考试试题及答案9
2002年春季软件学院C++期末考试试卷及答案
考试时间:
120分钟
1.(10)分
现有两种实体:
“矩形”(Rectangle)和“旗杆”(Flagpole)。
其中,“矩形”的属性为长度与宽度,“旗杆”的属性为高度(指地面以上)和深度(指地面以下),且均为整数。
若有:
structRectangle{intlength,width。
}。
structFlagpole{intheight,depth。
}。
intrectangleArea(intx,inty){return(x>=0&&y>=0)?
x*y:
0。
}
//计算矩形的面积
intflagpoleLength(intx,inty){return(x>=0&&y>=0)?
x+y:
0。
}
//计算旗杆的高度
voidf()
{
structRectanglerect。
structFlagpoleflgp。
rect.length=20。
rect.width=5。
flgp.height=20。
flgp.depth=5。
intarea=rectangleArea(rect.length,rect.width)。
intlength=flagpoleLength(flgp.height,flgp.depth)。
}
试续写函数f,以各举一例说明,对函数rectangleArea和flagpoleLength的调用都可能出现语法上合法,但结果与函数的语义不一致的情况,并指出其原因。
答案:
续写的二句如下:
area=rectangleArea(flgp.height,flgp.depth)。
length=flagpoleLength(rect.length,rect.width)。
原因:
在函数调用时,只需实参和形参类型相容即可,而不管语义如何?
如上例二句语法上是合法的,但结果与函数的语义不一致。
若欲使该情况不发生,必须将数据及其上的操作绑定在一起,这必须用类来定义。
2.(15分)
阅读下面的程序,写出main的输出。
#include"stdio.h"
intf(inti,constint*j,int&k)
{if(i%3==0)
if(*j>=6)k*=i。
k+=i。
k-=i。
return*j+k。
}
intmain()
{
inti,j=1,k=2,m。
for(i=0。
i<10。
i++,j*=2){
真的不掉线吗?
?
、?
?
?
?
?
?
?
?
?
?
?
?
m=f(i,&j,k)。
printf("i=%2d,j=%2d,k=%2d,m=%2d.\n",i,j,k,m)。
}
return0。
}
答案:
i=0,j=1,k=2,m=3.
i=1,j=2,k=2,m=4.
i=2,j=4,k=2,m=6.
i=3,j=8,k=6,m=14.
i=4,j=16,k=6,m=22.
i=5,j=32,k=6,m=38.
i=6,j=64,k=36,m=100.
i=7,j=128,k=36,m=164.
i=8,j=256,k=36,m=292.
i=9,j=512,k=324,m=836.
3.(15分)
根据main程序的输出结果,定义并实现max函数。
intmain()
{
cout<<“max=”< //max=67.3 cout<<“max=”< //max=102 cout<<“max=”< //max=z cout<<“max=”< //max=bd cout<<“max=”< //max=82.3 cout<<“max=”< //max=87.4 cout<<“max=”< //max=zs cout<<“max=”< //max=62 return0。 } (假定所有的赋值、比较运算符都已定义) 答案: template Tmax(Tx,Ty) {returnx>=y? x: y。 } template Tmax(Tx,Ty,Tz) {Ttemp。 temp=max(x,y)。 returntemp>=z? temp: z。 } floatmax(intx,floaty) {returnx>=y? x: y。 } 4.(20分) 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 定义堆栈类模板Stack,栈的大小由使用者确定。 要求该类模板对外提供如下二种基本操作: (1)push (2)pop (假定赋值操作已定义) 答案: #include template Ts[size]。 intiCurrentElem。 public: Stack()。 boolpush(Tx)。 Tpop()。 voidprint(){for(inti=0。 i i++)cout< } }。 template Stack : Stack(){ for(inti=0。 i i++)s[i]=0。 iCurrentElem=-1。 } template boolStack : push(Tx){ if(iCurrentElem==(size-1)){cout<<"It'sfull."< returnfalse。 } else{s[++iCurrentElem]=x。 returntrue。 } } template TStack : pop(){ Ttemp。 if(iCurrentElem==-1){cout<<"It'sempty."< return-1。 } else{temp=s[iCurrentElem]。 s[iCurrentElem]=0。 iCurrentElem--。 returntemp。 } } voidmain() { floatt。 Stack s1.push(10)。 s1.push(20)。 s1.push(30)。 s1.push(40)。 s1.print()。 t=s1.pop()。 s1.print()。 cout< } 5.(2真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 5分) 用C++语言定义MyString(包括成员函数的实现代码),使之能符合下面程序及在注释中描述的运行结果的要求: main() { MyStrings1="0123456789",s2(5),s3,s4(s1)。 s1.display()。 //此时显示出: <0123456789> s2.display()。 //此时显示出(<>之间是五个空格): <> s3.display()。 //此时显示出: <> s4.display()。 //此时显示出: <0123456789> s3=s1。 s3.display()。 //此时显示出: <0123456789> s3=3+s3。 s3.display()。 //此时显示出: <0123456789999> s2=s1[2]。 s2.display()。 //此时显示出: <23456789> s1.display()。 //此时显示出: <0123456789> s3=s2++。 s2.display()。 //此时显示出: <3456789> s3.display()。 //此时显示出: <23456789> } 答案: #include #include #include classMyString{ charcpBody[81]。 public: MyString(constchar*p=NULL)。 MyString(inti)。 MyString(MyString&s)。 MyString&operator=(constMyString&s) {strncpy(cpBody,s.cpBody,80)。 return*this。 } MyString&operator[](inti)。 MyString&operator++(inti) {staticMyStrings。 s=*this。 *this=(cpBody[0]=='\0')? *this: (*this)[1]。 returns。 } voiddisplay(){printf("<%s>\n",cpBody)。 } friendMyString&operator+(inti,MyString&s)。 }。 MyString: : MyString(constchar*p) { if(p==NULL) cpBody[0]='\0'。 else strncpy(cpBody,p,80)。 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? } MyString: : MyString(inti) {intj。 for(j=0。 j j++) cpBody[j]=''。 cpBody[j]='\0'。 } MyString: : MyString(MyString&s) {*this=s。 /*或者改用如下语句: intlength。 length=strlen(s.cpBody)。 for(inti=0。 i i++)cpBody[i]=s.cpBody[i]。 */ } MyString&MyString: : operator[](inti) {staticMyStrings。 intj。 s=*this。 for(j=i。 cpBody[j]! ='\0'。 j++) s.cpBody[j-i]=s.cpBody[j]。 s.cpBody[j-i]='\0'。 returns。 } MyString&operator+(intN,MyString&s) {staticMyStringst。 inti,length。 length=strlen(s.cpBody)。 for(i=0。 i i++)s.cpBody[length+i]=s.cpBody[length-1]。 s.cpBody[length+i]='\0'。 st=s。 returnst。 } 6.(15分) 某公司有二类职员Employee和Manager,Manager亦属于Employee。 每个Employee对象所具有的基本信息为: 姓名、年令、工作年限、部门号,Manager对象除具有上述基本信息外,还有级别(level)信息。 公司中的二类职员都具有二种基本操作: 1).printOn()//输出个人信息 2).retire()//判断是否到了退休年令,是,则从公司中除名。 公司规定: //Employee类的退休年令为55岁,Manager类的退休年令为60岁。 要求: 1).定义并实现类Employee和Manager。 2).分别输出公司中二类职员的人数(注意: Manager亦属于Employee)。 答案: #include #include 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? classEmployee{ charname[21]。 intworkYear。 intdepartmentNum。 protected: staticintENumber。 intage。 public: Employee(char*s,intage1,intworkYear1,intdepN) {if(strlen(s)<=20&&*s! ='\0')strcpy(name,s)。 if(age1>=18&&workYear1>=0&&depN>0) {age=age1。 workYear=workYear1。 departmentNum=depN。 Employee: : ENumber++。 } } virtualvoidprintOn() {cout< } virtualvoidretire(Employee&e) {if(e.age>=55){deletethis。 Employee: : ENumber--。 } elsereturn。 } staticvoidcountE(){cout< : ENumber< } }。 intEmployee: : ENumber=0。 classManager: publicEmployee { intlevel。 staticintMNumber。 public: Manager(char*s,intage1,intworkYear1,intdepN,intlev) : Employee(s,age1,workYear1,depN),level(lev) {Manager: : MNumber++。 } voidprintOn(){Employee: : printOn()。 cout< } voidretire(Manager&m) {if(m.age>=60){deletethis。 Manager: : MNumber--。 Employee: : ENumber--。 } elsereturn。 } staticvoidcountM(){cout< : MNumber< } }。 intManager: : MNumber=0。 voidmain() {Employeee1("LiYanni",40,21,1),e2("LiQingsan",30,6,1)。 Managerm1("ChenPing",50,30,2,1),m2("XiuXuezhou",57,35,2,2)。 e2.printOn()。 m1.printOn()。 Employee: : countE()。 Manager: : countM()。 return。 }真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 《可能性》教案设计 教案内容: 人教版课程标准实验教科书《数学》五年级上册P99-100,可能性。 教案目标: 1、初步体验事件发生的等可能性以及游戏规则的公平性,会用分数表示事件发生的可能性; 2、通过丰富的游戏活动和对生活中几种常见游戏(或现象)剖析与解释,使学生初步体会数学与生活的紧密联系。 教案重点: 体验事件发生的等可能性以及游戏规则的公平性,会用分数表示事件发生的可能性。 教案难点: 能按要求设计公平的游戏方案。 教、学具准备: CAI课件。 硬币;实验记录表。 骰子;六个面上分别写上数字1-6的长方体等。 教案过程: 一、情境导入 师: 同学们,你们看过足球比赛吗? 还记得足球比赛开始前用什么方法决定哪个队先开球吗? 请同学们看屏幕。 课件演示: 如下图情境(教科书第99页的情境图)。 师: 请观察图片,你们能不能说一说他们是用什么方法决定哪个队先开球的? 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 师: 同学们说得对,他们是用抛硬币的方法决定由哪个队先开球的,那么你们认为用这种抛硬币的方法决定哪个队开球公平吗? 应变预设: 可能有的学生认为是公平的,有的学生认为不公平,重要的是教师要引导学生说一说理由。 [评析: 由足球比赛开球前的情境引出游戏公平性的问题,学生感到自然、熟悉,探究兴趣浓厚。 ] 二、探究新知 1、动手实验,获取数据。 师: 刚才有人认为硬币掉下来时正面朝上和反面朝上的机会相等,觉得抛硬币的方法很公平,也有人认为这样不公平,那到底这种方法公不公平呢? 下面就来做一个实验,由大家亲自动手抛一抛硬币,看这种方法到底公不公平,好吗? 师: 在开始实验之前,同学们要弄清楚实验要求哦,请看屏幕。 课件出示实验要求: 1、抛硬币40次,抛硬币时用力均匀,高度适中;2、以小组为单位分别统计相关数据,填入实验报告单(如下表);3、小组成员分工协作,看哪个小组合作最好,完成得最快! 出现的情况 正面朝上 反面朝上 总次数 出现次数 师: 弄清楚实验要求了吗? 老师想问大家,第2条中的相关数据是指什么? 你们打算如何得到这些数据? 师: 很好,我们要得到正面朝上的次数和反面朝上的次数,老师建议你们最好用画“正”字的方法来统计,那就动手开始实验吧! 应变预设: 在学生做实验的过程中,可能出现有的小组抛硬币的方法没有掌握好或统计方法不科学等情况,教师巡视时适时给予提醒或帮助。 师: 大家做完实验了吗? 请各个小组汇报实验结果。 课件出示统计表(如下表),根据学生的汇报教师填入数据。 小组 正面朝上 反面朝上 总次数 1 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 2 3 4 5 … 合计 2、分析数据,初步体验。 师: 请你们认真观察实验数据,发现正面朝上的次数和反面朝上的次数相等吗? 师: 对,既有相等的也有不相等的,但正面朝上的次数和反面朝上的次数接近吗? 师: 想一想,如果把我们全部小组的实验数据加起来,那么正面朝上的次数和反面朝上的次数还接近吗? 教师把所有小组的正面朝上次数、反面朝上的次数、总次数分别求和。 师: 通过分析,我们发现正面朝上的次数和反面朝上的次数仍然是非常接近的。 3、阅读材料,加深体会。 师: 如果我们继续抛下去,会是怎样的结果呢? 历史上有很多数学家就做过抛硬币的实验。 请看屏幕。 课件出示几位数学家的实验结果(如下表)。 数学家 总次数 正面朝上 反面朝上 德·摩根 4092 2048 2044 蒲丰 4040 2048 1992 费勒 10000 4979 5021 皮尔逊 24000 12018 11988 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 罗曼列夫斯基 80640 39699 40941 让学生观察数据,发现正面朝上次数和反面朝上次数很接近。 4、分数表示,科学验证。 师: 我们做过了实验,观察了数学家实验数据,发现正面朝上和反面朝上的次数很接近,说明正面朝上和反面朝上的可能性是……? 师: 对,它们的可能性相同的,你们能用一个分数表示它们相同吗? 师: 通过做实验,你们认为抛硬币决定谁先开球公平吗? 为什么? [评析: 让学生在抛硬币的实验活动中体验、理解、感悟事件发生的等可能性和游戏的公平性,并通过对实验结果的观察分析、对实验过程的反思及数学家实验数据验证,使学生不仅体会到感受到事件发生的不确定性而且感受到事件发生的等可能性。 ] 三、应用拓展 1、师: 刚才的学习,你们表现得很棒,学得很认真,现在老师要考考你们,会不会用学到的新知识解决问题,有信心接受挑战吗? 师: 好,请看第一题,正方体的各面分别写着1、2、3、4、5、6.掷出每个数的可能性都是……? (出示教科书练习二十第1题) 师: 这么多同学举手想回答这个问题,老师也不知道该叫谁回答了。 这样吧,我把全班分成三组,分别叫红组、黄组、蓝组,设计一个转盘,转盘上的指针停在哪种颜色上相应颜色的组就获得答题资格,答对就奖一面红旗,看哪个组的组红旗多就算赢,好吗? 课件出示方案一(如下图): 转盘上红色占一半,蓝色、黄色各占。 方案一 师: 你们觉得这个转盘设计得公平吗? 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 师: 既然大家都认为这个转盘不公平,那怎样设计转盘才公平呢? 师: 就按照你们的修改意见,改成三种颜色各占的转盘。 课件出示方案二(如下图)。 方案二 师: 设计好转盘后,我们就开始转动转盘决定哪个组来回答第一题,好吗? 转动转盘,决定哪个组回答。 2、师: 恭喜你们获得了第一面红旗。 我们看下一题,指针停在这四种颜色区域的可能性各是多少? (课本练习二十第2题的第1题) 先让学生独立思考,把答案写在练习纸上,再在小组中交流。 转动转盘,决定谁回答。 3、师: 看来难不倒你们,继续看下一题,如果转动指针100次,估计大约会有多少次指针停在红色区域呢? (课本练习二十第2题的第2题) 先让学生独立思考,把答案写在练习纸上,再在小组中交流。 转动转盘决定哪个组回答。 4、师: 请看下一题,6个同学玩“老鹰捉小鸡”的游戏,小强在一块长方体橡皮的各面分别写上1、2、3、4、5、6,每人选一个数,然后任意掷出橡皮,朝上的数是几,选这个数的人就来当“老鹰”。 你认为小强设计的方案公平吗? (课本练习二十第3题) 先让学生独立思考,再在小组中交流。 转动转盘决定哪个组回答。 真的不掉线吗? ? 、? ? ? ? ? ? ? ? ? ? ? ? 应变预设: 相信大多数学生会觉得小强设计的方案不公平,但用数学语言来表述方案不公平对学生可能有点难度,而且比较抽象,出现这种情况时,及时让学生在小组中做做抛长方体的实验,亲身感受、感悟一下方案的不公平性。 5、师: 今天的智力大比拼到此结束。 看看哪个组获胜? 师: 如果我们的智力大比拼继续下去,一定是这个组获胜吗? 师: 为什么不一定呢? 你能用今天学到的知识来说一说吗? [评析: 引入有效的竞争机制,让学生在公平、公正的游戏中进行巩固、应用、拓展性练习,体验游戏的公平性,再次让学生充分体验事件发生的等可能性。 让学生深刻感悟到: 要使游戏公平,游戏
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末考试试题及答案9 期末考试 试题 答案