收藏 分销(赏)

面向对象程序设计C山师习题答案资料.doc

上传人:精**** 文档编号:3853722 上传时间:2024-07-22 格式:DOC 页数:26 大小:44KB
下载 相关 举报
面向对象程序设计C山师习题答案资料.doc_第1页
第1页 / 共26页
面向对象程序设计C山师习题答案资料.doc_第2页
第2页 / 共26页
面向对象程序设计C山师习题答案资料.doc_第3页
第3页 / 共26页
面向对象程序设计C山师习题答案资料.doc_第4页
第4页 / 共26页
面向对象程序设计C山师习题答案资料.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、第五章习题答案一、 选择填空 1、 A 2、 D 3、 B 4、 D 5、 D 6、 C 7、 C 8、 D 9、 C 10、 A 11、 B 12、 C 13、 A 14、 D 15、 C二、 判断下列描述的正确性, 对者划, 错者划。 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 三、 分析下列程序的输出结果。1、 运行该程序输出如下结果。5811142、 运行该程序输出如下结果。253、 该程序输出如下结果。10+2+1=1320+2+2=2430+2+3=3540+2+4=464、 运行该程

2、序的输出结果如下所示。6, 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个函数: main(),sum()

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

4、”s,”AVERAGE=”aveendl;double sum(double b,int n)double sum=0;for(int i=0;i15;i+)sum+=bi;return sum;double average(int n)return s/n; 2、 分析: 先将10个int型数从键盘上输入, 并放在一个int型数组中。接着, 在数组中将重复的数组元素去掉。其方法是在比较中发现有重复的就用数组中最末元素替换, 同时更新数组元素个数。最后, 将数组中的元素使用排序函数sort()进行排序, 并输出显示最后排好序的数组元素。排序函数sort()是按照”冒泡”排序的算法进行编程的。程

5、序的内容如下所示。#include void main()int a10,n=10;void sort(int b ,int n);cout”Input 10integer:”;for(int i=0;iai;for(i=0;in;i+)for(int j=i+1;jn;j+)if(ai=aj)aj=a- -n;j-;sort(a,n);for(i=0;in;i+)coutai”;cout”n”;void sort(int b ,int n)for(int i=1;in;i+) for(int j=0;jn-i;j+)if(bjbj+1)int t=bj;bj=bj+1;bj+1=t;3、 分

6、析: 该程序将包含一个主函数和两个被调函数: 一个是计算某一年是否是闰年的函数leap(),另一个是计算日期的函数sum_day()。主函数中, 先从键盘上输入某天的年、 月、 日, 存放在相应的变量year, month和day中。接着, 调用sum_day()函数, 计算出这一天是该年的第几天, 计算时按非闰年计算, 即2月份28天。然后, 再判断该年是否是闰年, 而且该月是否是大于2月。如果是闰年, 且月份又大于2月, 则计算的天数加1。最后将其结果输出显示。计算闰年的函数 leap()是按照闰年的定义, 使用逻辑表示式返回。闰年时返回1, 否则返回0。指定的每月的总天数的数组进行相加计

7、算, 这时2月份按28天计算, 将每月天数存放在一个数组中, 使该数组的下标与月份数相同。例如, 5月4日, 计算天数时如下所示。days_month1+days_month2+days_month3+days_month4+4;并将这个表式值返回。程序内容如下所示。#include int sum_day(int,int),leap(int);void main()int year,month,day;coutyearmonthday;int days=sum_day(month,day);if(leap(year)&month2)days+;cout是这一年的第days天n;int sum

8、_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;imonth;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 dd) :1998 4 7是这一年的第97天。4、 #include #include void fu

9、n(char);void main( )char s80;couts;cout”反序前:”sendl;fun(s);cout”反序后:”sendl;void fun(char ss)int n=strlen(ss);for(int i=0;in/2;i+)char c=ssi;ssi=ssn-1-i;ssn-1-i=c;该程序输出如下信息。请输入一个字符串: abcdefgh输出结果如下所示。反序前: abcdefgh反序后: hgfedcba5、 分析: 由于十六制数的表示中, 除了有数字09, 还有6个字母a,b,c,d,e,f.因此输入十六进制数时, 应采用char型, 将它存放在一个字

10、符数组中。然后, 调用一个转换函数htoi(), 将输入的字符型数组中的十六进制数转换为十进制的。在转换函数中, 应考虑到下述3类不同字符的转换方法: ( 1) 数字字符0至9; ( 2) 小写字母a至f; ( 3) 大写字母A至F。程序内容如下所示。#include int htoi(char);void main( ) int htoi(chars ); cout”输入一个十六进制数:”;char s120=” ”;cin.read(s1,20);coutendl;int n=htoi(s1);cout”该数转换为十进制数”n=0&si=a&si=A&si=F) n=n*16+si-A+1

11、0;return n; 6、 #include char *fun1(int);int fun2( );char s10;void main( )int number;coutnumber;cout”整型数加空格后为:”fun1(number)endl;cout”加空格后字符串长度为:”fun2()endl;char *fun1(int n)int a5;a4=n%10;a3=n/10%10;a2=n/100%10;a1=n/1000%10;a0=n/10000;for(int i=0,j=0;i5;i+,j+=2)sj=char(ai+0);sj+1= ;sj-1=0;return s;in

12、t fun2() 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( ) , 经

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

14、数。( 4) 求出最高总分及该总分对应的下标值函数high_scor()。该函数有两个参数: 一个是数组, 另一个是int*型指针。该函数返回值为int型量。程序内容如下所示。#include 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;int a1

15、5;cout”每个学生功课的总分:”;for(int i=0;i5;i+)cout(a1i=all_scor(scorei)” ”;cout” 每个学生功课的平均成绩:”;for(i=0;i5;i+)cout aver_scor(scorei);int n=0,high;high=high_scor(a1,&n);cout”n学生姓名:”namen”t最高分” highendl;double aver_scor(int sc)return (double)all_scor(sc)/4;int all_scor(int a)int s=0;for(int j=0;j4;j+)s+=aj;retu

16、rn s;int high_scor(int a,int *i)for(int j=1;j5;j+)if(a01) 。然后, 调用转换函数convert()将n位整数转换成字符串, 其长度为n。转换函数convert()定义为递归函数。递归条件如下所示。if(a=n/10)!=0)convert(a);其中, 是一个待处理的为整数, 是一个型变量。当是1位整数时, 体将不被执行。当为2位整数时, 执行体, 这时为1位整数。依次类推。程序内容如下所示。#include void main()int num;void convert(int);coutnum;cout”输出的字符串是:”;conv

17、ert(num);cout n;void convert(int n) int a;if(a=n/10)!=0)convert(a);char c=n%10+0;coutc;执行该程序显示如下信息。输入一个整数: 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;double distance(double xl,double yl,double y2) double s;s=sprt(x1-x2)*(

18、x1-x2)+(y1-y2)*(y1-y2);return s; 这里, 前一个distance( ) 函数是用来计算两个 int型数的点间距离, 而后一个distance( ) 函数是用来计算两个double型数的点间距离。计算两个点间距离公式如下所示。s=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)程序内容如下所示。#include #include void main( )double distance(int ,int,int,int),distance(double, double, double, double);int x1=5,y1=8,x2=12,y

19、2=15;double xd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6;cout”两个int型数的点间距离:”;double disi=distance(x1,y1,x2,y2);coutdisiendl;cout”两个 double型数的点间距离:”;double disd=distance(xd1,yd1,xd2,yd2);coutdisdendl;double distance(int a1,int b1,int a2,int b2 )double s=sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);return s;double distance

20、(double a1, double b1,double a2, double b2)return sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);10、 该程序中三次使用字符串处理函数strcat()将4个已知的字符串连接成一个新的字符串。程序内容如下所示。#include #include char s 5=”abcd”,”efgh”,”ijkl”,”mnop”;void main( )strcat(s0,s1);strcat(s0,s2);strcat(s0,s3);couts0endl;11、 分析: 该程序将分3个函数来完成此功能。一个主函数用输出显示n=1,

21、 2, 3时, 上述表示式的值。主函数的调用函数fun()用来求得各项之和, 该函数又调用另一个求立方的函数power()。程序内容如下所示。#include int fun(int n=2);int power(int ,int)void main() coutfun(1)endl; coutfun(2)endl; coutfun(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=6)

22、, 将它表示为i与j之和。n=i+j; 当i和j都为素数时则为所求。程序内容如下所示。#include int prime(int);void main( )int prime(int);int n;coutn;int i,j;cout”两个素数之和的全部可能n ”;for(i=2;in;i+)j=n-i;if(prime(i)&prime(j)cout”N=”i+jendl;int prime(int n)int j=2;while(n%j!=0)j+;if(n=j)return 1;elsereturn 0;运行该程序输出下列信息。 输入一个大于等于6的偶数: 126输出结果如下所示。两个

23、素数之和的所有可能: N=13+133N=17+109N=19+107N=23+103N=29+97N=37+89N=43+83N=47+79N=53+73N=59+613、 #include char_count(char *s,char letter)int count=0;while(*s)if(*s+=letter)count+;return (count); void main()char str100,c;coutstr;coutc;coutthe count is:char_count(str,c) ”次”endl;14、 #include int pattern_index(c

24、har substr,char str) int i,j,k; for(i=0;stri;i+)for(j=i,k=0;(strj=substrk)|(substrk=?);j+,k+) if(!substrk+1) return(i); return(0);void main() char *substring,*string; int same; substring=?gram; string=this program return index of substring; same=pattern_index(substring ,string); if (same) cout子串起始位置: sameendl; else cout匹配不成功endl;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服