面向对象程序设计C++山师习题答案_第1页
面向对象程序设计C++山师习题答案_第2页
面向对象程序设计C++山师习题答案_第3页
面向对象程序设计C++山师习题答案_第4页
面向对象程序设计C++山师习题答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章习题答案、选择填空1、A2、 D 3、 B4、 D5、 D6、 C 7 、 C 8、 D 9、 C10、 A11、B12 、 C 13、 A 14、 D15、 C、判断下列描述的正确性,对者划错者划X。1、22、23、X4>V5、26 、27、X8、X 9、X10 、X11、x12.V 13、21415、X16 、217 、X18 、X19、220、2三、分析下列程序的输出结果。1、运行该程序输出如下结果。5811142、运行该程序输出如下结果。253、该程序输出如下结果。10+2+1=1320+2+2=2430+2+3=3540+2+4=464、运行该程序的输出结果如下所示。 6

2、,115、运行该程序输出如下结果。5!+4!+3!+2!+1!=1536、运行该程序输出如下结果。6,6,67、运行该程序输出如下结果。 sum 1=13sum 2=18sum 3=238、运行该程序输出如下结果。7209、运行该程序输出如下结果: a=5,b=8a=8,b=510、运行该程序输出结果如下所示。1011、运行该程序输出结果如下所示。 ff(double):88.18ff(int):9712、运行该程序输出结果如下所示。1121231234四、按下列要求编程,并上机验证。1、 分析:该程序有 3个函数:ma in (),sum()和average。主函数 mai n()中包含有如

3、下操 作:输入 15个浮点数放在一个数组中, 使用循环语句从键盘上输入值, 接着分别调用 sum() 函数求15个浮点数之和,调用average()函数求15个浮点数的平均值,最后将15个浮点数的和值与平均值输出显示。程序如下:#include <iostream.h>double s, sum(double b,int n),average(int n);void main( )double a15;cout<< ”Input 15 doubles:”;for(int i=0;i<15;i+)cin>>ai;s=sum(a,15);double av

4、e=average(15);cout<< ” SUM=” <s<<' , 'A<V<E”RAGE= ”<<ave<<endl;double sum(double b,int n)double sum=0;for(int i=0;i<15;i+)sum+=bi;return sum;double average(int n)return s/n;2、 分析:先将10个int型数从键盘上输入,并放在一个int型数组中。接着,在数组中将重复的数组元素去掉。 其方法是在比较中发现有重复的就用数组中最末元素替换,同时

5、更新数组元素个数。最后,将数组中的元素使用排序函数sort()进行排序,并输出显示最后排好序的数组元素。排序函数sort()是按照冒泡”排序的算法进行编程的。 程序的内容如下所示。#include <iostream.h>void main()int a10,n=10;void sort(int b ,int n);cout<< ” Input 10integer;:”for(int i=0;i<n;i+)cin>>ai;for(i=0;i<n;i+)for(int j=i+1;j<n;j+)if(ai=aj)aj=a- -n;j-;sor

6、t(a,n);for(i=0;i<n;i+)cout<<ai << ”;cout<< ”n”;void sort(int b ,int n)for(int i=1;i<n;i+)for(int j=0;j<n-i;j+)if(bj<bj+1)int t=bj;bj=bj+1;bj+1=t;3、分析:该程序将包含一个主函数和两个被调函数:一个是计算某一年是否是闰年的 函数 leap(), 另一个是计算日期的函数 sum_day()。主函数中,先从键盘上输入某天的年、月、日,存放在相应的变量year, month 和 day中。接着,调用

7、 sum_day() 函数,计算出这一天是该年的第几天,计算时按非闰年计算,即 2 月份 28 天。然后,再判断该年是否是闰年,并且该月是否是大于 2 月。如果是闰年,且 月份又大于 2 月,则计算的天数加 1。最后将其结果输出显示。计算闰年的函数 leap() 是按照闰年的定义,使用逻辑表达式返回。闰年时返回1,否则返回 0。指定的每月的总天数的数组进行相加计算,这时 2 月份按 28天计算,将每月天数存放 在一个数组中,使该数组的下标与月份数相同。例如, 5 月 4 日,计算天数时如下所示。 days_month1+days_month2+days_month3+days_month4+4

8、; 并将这个表式值返回。程序内容如下所示。#include <iostream.h>int sum_day(int,int),leap(int);void main()int year,month,day;cout<<" 请输入一个日期 (yy mm dd):"cin>>year>>month>>day;int days=sum_day(month,day); if(leap(year)&&month>2)days+;cout<<"是这一年的第"<<

9、days<<"天n"int sum_day(int month,int day) static int days_month13=0,31,28,31,30,31,30,31,31,30,31,30,31; for(int i=1;i<month;i+)day+=days_monthi;return day;int leap(int year)int leap=year%4=0&&year%100!=0|year%400=0;return leap;当输入为 1998年 4月 7日时,输出信息如下所示。 请输入一个日期( yyyy mm d

10、d ) :1998 4 7是这一年的第 97 天。4、#include <iostream.h>#include <string.h>void fun(char);void main( )char s80;cout<< ”请输入一个字符串 : ”;cin>>s;cout<< ”反序前 : ” <s<<endl;fun(s);cout<< ”反序后 : ” <s<<endl;void fun(char ss)int n=strlen(ss);for(int i=0;i<n/2;i+)

11、char c=ssi;ssi=ssn-1-i;ssn-1-i=c;该程序输出如下信息。请输入一个字符串: abcdefgh 输出结果如下所示。反序前: abcdefgh反序后: hgfedcba5、分析:由于十六制数的表示中,除了有数字09,还有 6 个字母 a,b,c,d,e,f. 因此输入十六进制数时, 应采用 char 型,将它存放在一个字符数组中。 然后,调用一个转换函数 htoi() , 将输入的字符型数组中的十六进制数转换为十进制的。 在转换函数中, 应考虑到下述 3 类不 同字符的转换方法:( 1)数字字符 0至'9;'(2) 小写字母至;(3) 大写字母 A至

12、F。程序内容如下所示。#include <iostream.h>int htoi(char);void main( )int htoi(chars );cout<< ”输入一个十六进制数 : ”;char s120= ” ”;cin.read(s1,20);cout<<endl;int n=htoi(s1);cout<< ”该数转换为十进制数 ” <n<<<endl;int htoi(char s )int n=0;for(int i=0;si!=0 'i+)if(si>= '0'&&

13、amp;si<= '9')n=n*16+si- 0'if(si>= 'a'&&si<= 'f ')n=n*16+si- a'+10;if(si>= 'A '&&si<= 'F ')n=n*16+si- A '+10;return n;6、#include <iostream.h>char *fun1(int);int fun2( );char s10;void mai n()int nu mber;cout<&l

14、t;输入一个5位的整型数;”;cin»nu mber;cout<< 整型数加空格后为:” <un 1(number)<<endl;cout<<加空格后字符串长度为:” <<n2()<<endl;char *fun 1(i nt n)int a5;a4=n%10;a3=n/10%10;a2=n/100%10;a1=n/1000%10;a0=n/10000;for(i nt i=0,j=0;i<5;i+,j+=2)sj=char(ai+ ' 0');sj+1='sj-1= 0'retu

15、rn s;int fun 2()int n=0,i=0;while(si+)n+;return n;运行该程序显示如下信息:输入一个5位的整型数:87654输出结果如下所示:整型数加空格后为:8 7 6 5 4加空格后字符串长度为:97、分析:首先定义一个char型数组name5 10用来存放5个学生的姓名,再定义一个int型数组score5 4来存放5个学生的4门功课成绩,再定义一个数组 al5用来存放用 来存放每个学生的总成绩。该程序将有4个函数组成。(1)主函数main(),包括所有定义的数组,并赋初值。先调用求每个学生4门功课的总分的函数all_scor(),通过for循环将每个学生功

16、课总分显示在屏幕上,同时存放在数 组al5中。再调用求每个学生4门功课平均成绩的函数 aver_scor通过for街环将每个学生功课的平均成绩输出显示在屏幕上。最后,用计算5个学生中总分最高的函数high_scor (),通过返回最高分,并通过传址调用获得最高分学生下标序号,用来输出该学生的姓名。(2) 算学生的总分函数all_scor( ),该函数有一个参数,它是一族数组,返回值为 int 型 变量,即返回该学生 4 门功课的总分。(3) 算学生平均分函数aver_scor(),该函数有一个数组参数,返回值为double型量。该函数调用了 all_scor 函数。(4) 求出最高总分及该总分

17、对应的下标值函数high_scor() 。该函数有两个参数:一个是数组,另一个是int*型指针。该函数返回值为int型量。程序内容如下所示。#include <iostream.h>int all_scor(int a),high_scor(int a,int *i);double aver_scor(int sc);void main( )char name 10=“Ma”, ”Wang”,”Li ”, ”Huang”, ”Kang”;int score4=89,86,75,90,91,82,75,80,78,93,85,80,90,79,95,85,68,75,81,83;in

18、t a15;cout<< ”每个学生功课的总分 : ”;for(int i=0;i<5;i+)cout<<(a1i=all_scor(score i)<<” ”;cout<< ”每个学生功课的平均成绩 : ”;for(i=0;i<5;i+)cout<<' '<<aver_scor(scorei);int n=0,high;high=high_scor(a1,&n);cout<< ”n 学生姓名 : ” <n<amen<<”t 最高分” <<

19、high<<endl;double aver_scor(int sc)return (double)all_scor(sc)/4;int all_scor(int a)int s=0;for(int j=0;j<4;j+)s+=aj;return s;int high_scor(int a,int *i)for(int j=1;j<5;j+)if(a0<aj)a0=aj;*i=j;return a0; 执行该程序后,输出结果如下所示。每个学生功的总分: 340 328 336 349 307 每个学生功的平均成绩: 85 82 84 87.25 76.75学生姓名

20、: Huang 最高分: 3498、分析:首先从键盘上输入一个n位整数(n>1 )。然后,调用转换函数convert()将n位整数转换成字符串,其长度为 n。转换函数convert()定义为递归函数。递归条件如下所示。if(a=n/10)!=0)convert(a);其中,是一个待处理的为整数,是一个型变量。当是 1 位整数时,体将不被执行。当为 2 位整数时,执行体,这时为 1 位整数。依次类推。程序内容如下所示。#include <iostream.h>void main()int num;void convert(int);cout<< ”输出一个整数 :

21、”;cin>>num;cout<< ”输出的字符串是 : ”;convert(num);cout<< 'void convert(int n)int a;if(a=n/10)!=0)convert(a);char c=n%10+ '0'cout<<c;执行该程序显示如下信息。输入一个整数: 1357输出的字符串是: 13579、double distance(int xl,int yl,int x2,int y2)double s;s=sprt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);return s

22、;double distance(double xl,double yl,double y2)double s;s=sprt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);return s;这里,前一个distanee()函数是用来计算两个int型数的点间距离,而后一个distanee()函数是用来计算两个 double 型数的点间距离。计算两个点间距离公式如下所示。s=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)程序内容如下所示。#inelude <iostream.h>#inelude <math.h>void main(

23、)double distanee(int ,int,int,int),distanee(double, double, double, double);int x1=5,y1=8,x2=12,y2=15;double xd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6;eout<< ”两个 int 型数的点间距离 : ”;double disi=distanee(x1,y1,x2,y2);eout<<disi<<endl;eout<< ”两个 double 型数的点间距离 : ”;double disd=distanee(xd1,yd

24、1,xd2,yd2);eout<<disd<<endl;double distanee(int a1,int b1,int a2,int b2 )double s=sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);return s;double distanee(double a1, double b1,double a2, double b2)return sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);10、该程序中三次使用字符串处理函数streat()将4个已知的字符串连接成一个新的字符串。程序内容如下所示。#inel

25、ude <iostream.h>#inelude <string.h>ehar s 5= “abed”, ”efgh ”,”ijkl ”, ”mnop”;void main( )streat(s0,s1);streat(s0,s2);strcat(s0,s3); cout<<s0<<endl;11、分析:该程序将分 3 个函数来完成此功能。一个主函数用输出显示n=1,2,3 时,上述表达式的值。主函数的调用函数 fun() 用来求得各项之和,该函数又调用另一个求立方 的函数 power() 。程序内容如下所示。#include <iostr

26、eam.h>int fun(int n=2);int power(int ,int)void main()cout<<fun(1)<<endl;cout<<fun(2)<<endl;cout<<fun(3)<<endl;int fun(int n)int sum=0;for(int i=1;i<=10;i+)sum+=power(i,n);return sum;int power(int n1,int n2)int p=1;for(int i=1;i<=n1;i+)p*=n2;return p; 运行该程

27、序输出如下结果:1020468857212、分析:从键盘上入一个偶数n (>=6),将它表示为i与j之和。n=i+j ;当i和j都为素数时则为所求。程序内容如下所示。#include <iostream.h>int prime(int);void main( )int prime(int);int n;cout<< ”输出一个大于等于 6 的偶数: ”;cin>>n;int i,j;cout<< ”两个素数之和的全部可能 n ”; for(i=2;i<n;i+)j=n-i;if(prime(i)&&prime(j) cout<< ”N=” <<i<<' +'j<<endl;int prime(int n)int j=2; while(n%j!=0) j+;if(n=j) return 1;else return 0; 运行该程序输出下列信息。 输入一个大于等于 6 的偶数:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论