《2022年面向对象程序设计C山师第五章习题答案.docx》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计C山师第五章习题答案.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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、运行该程序输出如下结果;5 8 11 14 2、运行该程序输出如下结果;25 3、该程序输出如下结果;10+2+1=13 20+2+2=24 30+2+3=
2、35 40+2+4=46 4、运行该程序的输出结果如下所示;6,11 5、运行该程序输出如下结果;5!+4!+3!+2!+1!=153 6、运行该程序输出如下结果;6,6,6 7、运行该程序输出如下结果;sum 1=13 sum 2=18 sum 3=23 8、运行该程序输出如下结果;720 9、运行该程序输出如下结果:a=5,b=8 a=8,b=5 10、运行该程序输出结果如下所示;10 11、运行该程序输出结果如下所示;ffdouble:88.18 ffint:97 12、运行该程序输出结果如下所示;1 12 1 / 12 名师归纳总结 - - - - - - -第 1 页,共 12 页精
3、选学习资料 - - - - - - - - - 123 1234 四、按以下要求编程,并上机验证;1、分析:该程序有 3 个函数: main,sum和 average;主函数 main 中包含有如下 操作:输入 15 个浮点数放在一个数组中,使用循环语句从键盘上输入值,接着分别调用sum函数求 15 个浮点数之和,调用 average函数求 15 个浮点数的平均值,最终将 15 个 浮点数的和值与平均值输出显示;程序如下:#include double s, sumdouble b,int n,averageint n ;void main double a15 ;cout ”Input 15
4、 doubles:;”forint i=0 ;iai ;s=suma,15;double ave=average15;cout ”SUM=” s, AVERAGE= ”aveendl; double sumdouble b,int n double sum=0 ;forint i=0 ;i15 ;i+ sum+=bi ;return sum; double averageint n return s/n; 2、分析:先将10 个 int 型数从键盘上输入,并放在一个int 型数组中;接着,在数组中将重复的数组元素去掉;其方法是在比较中发觉有重复的就用数组中最末元素替换,同时更新数组元素个数;最
5、终,将数组中的元素使用排序函数 后排好序的数组元素;排序函数 sort是根据 “ 冒泡 ”排序的算法进行编程的;程序的内容如下所示;#include void main int a10,n=10 ;void sortint b ,int n;”cout ”Input 10integer: forint i=0 ;iai ;fori=0 ;in; i+ forint j=i+1 ; jn;j+ ifai=aj aj=a- -n ;j-; sorta,n;fori=0 ;in;i+ coutai ” ”;cout ”n”; void sortint b ,int n forint i=1 ;in
6、;i+ forint j=0 ;jn-i ;j+ ifbjbj+1 int t=bj ;bj=bj+1;bj+1=t ; 3、分析:该程序将包含一个主函数和两个被调函数:一个是运算某一年是否是闰年的 函数 leap,另一个是运算日期的函数 sum_day;主函数中,先从键盘上输入某天的年、月、日,存放在相应的变量 year,month 和 day 中;接着,调用 sum_day函数,运算出这一天是该年的第几天,运算时按非闰年运算,即2 月份 28 天;然后,再判定该年是否是闰年,并且该月是否是大于月份又大于2 月,就运算的天数加1;最终将其结果输出显示;2 月;假如是闰年,且运算闰年的函数le
7、ap是根据闰年的定义,使用规律表达式返回;闰年时返回1,否就返回 0;指定的每月的总天数的数组进行相加运算,这时 在一个数组中,使该数组的下标与月份数相同;例如,2 月份按 28 天运算,将每月天数存放 5 月 4 日,运算天数时如下所示;days_month1+days_month2+days_month3+days_month4+4;并将这个表式值返回;程序内容如下所示;#include int sum_dayint,int,leapint ;void main int year,month,day ;coutyearmonthday ;int days=sum_daymonth,day
8、;ifleapyear&month2 days+;cout 是这一年的第 days 天n; int sum_dayint month,int day static int days_month13=0,31,28,31,30,31,30,31,31,30,31,30,31;forint i=1 ;imonth ; i+ day+=days_monthi ;return day; int leapint year int leap=year%4=0&year%100.=0|year%400=0;return leap; 当输入为 1998 年 4 月 7 日时,输出信息如下所示;请输入一个日期(
9、yyyy mm dd ):1998 4 7 是这一年的第 97 天;4、#include #include void funchar;void main char s80 ;couts ;sendl;cout ”反序前 : ” funs ;cout ”反序后 : ” sendl; void funchar ss int n=strlenss ;forint i=0 ;in/2 ;i+ char c=ssi ;ssi=ssn-1-i ;ssn-1-i=c ; 4 / 12 名师归纳总结 - - - - - - -第 4 页,共 12 页精选学习资料 - - - - - - - - - 该程序输出
10、如下信息;请输入一个字符串:abcdefgh 输出结果如下所示;反序前: abcdefgh 反序后: hgfedcba 5、分析:由于十六制数的表示中,除了有数字 09,仍有 6 个字母 a,b,c,d,e,f.因此输 入十六进制数时,应采纳 char 型,将它存放在一个字符数组中;然后,调用一个转换函数htoi ,将输入的字符型数组中的十六进制数转换为十进制的;在转换函数中,应考虑到下 述 3 类不同字符的转换方法:(1)数字字符 0至 9;(2)小写字母 a至f ;(3)大写字母 A至F;程序内容如下所示;#include int htoichar ;void main int htoic
11、hars ;cout ”输入一个十六进制数 : ”;”char s120= cin.reads1,20;coutendl ;int n=htois1 ;cout ”该数转换为十进制数”n= 0 &si= a &si= A &si= F n=n*16+si- A +10; return n ; 6、#include char *fun1int;int fun2 ;char s10;5 / 12 名师归纳总结 - - - - - - -第 5 页,共 12 页精选学习资料 - - - - - - - - - void main int number ;coutnumber ;fun1numbere
12、ndl ;cout ”整型数加空格后为 : ”cout ”加空格后字符串长度为 : ” fun2endl ; char *fun1int n int a5 ;a4=n%10 ;a3=n/10%10 ;a2=n/100%10 ;a1=n/1000%10 ;a0=n/10000 ;forint i=0,j=0 ;i5 ;i+,j+=2 sj=charai+;0sj+1=; sj- 1= 0 ;return s; int fun2 int n=0,i=0 ; whilesi+ n+; return n; 运行该程序显示如下信息:输入一个 5 位的整型数: 87654 输出结果如下所示:整型数加空格后
13、为:8 7 6 5 4 加空格后字符串长度为:9 7、分析:第一定义一个 char 型数组 name5 10 用来存放 5 个同学的姓名,再定义一 个 int 型数组 score5 4 来存放 5 个同学的 4 门功课成果,再定义一个数组 al5 用来存放用 来存放每个同学的总成果;该程序将有 4 个函数组成;main(),包括全部定义的数组,并赋初值;先调用求每个同学 4 门功(1)主函数课的总分的函数 all_scor(),通过 for 循环将每个同学功课总分显示在屏幕上,同时存放 在数组 al5 中;再调用求每个同学4 门功课平均成果的函数aver_scor 通过 for 街环将每个同学
14、功课的平均成果输出显示在屏幕上;6 / 12 名师归纳总结 - - - - - - -第 6 页,共 12 页精选学习资料 - - - - - - - - - 最终,用运算5 个同学中总分最高的函数high_scor(),通过返回最高分,并通过传址调用获得最高分同学下标序号,用来输出该同学的姓名;(2)算同学的总分函数 all_scor ,该函数有一个参数,它是一族数组,返回值为 int型变量,即返回该同学 4 门功课的总分;(3)算同学平均分函数 aver_scor,该函数有一个数组参数,返回值为 double 型量;该函数调用了 all_scor 函数;(4)求出最高总分及该总分对应的下标
15、值函数high_scor ;该函数有两个参数:一个是数组,另一个是int* 型指针;该函数返回值为int 型量;程序内容如下所示;#include int all_scorint a,high_scorint a,int *i;double aver_scorint 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 a15 ;cout ”每个同学功课的总分 : ”;fo
16、rint i=0 ;i5 ;i+ couta1i=all_scorscore i”;”cout ” 每个同学功课的平均成果: ”;fori=0 ;i5; i+ cout aver_scorscorei ;int n=0,high ;high=high_scora1,&n ;cout ”n 同学姓名 : ” namen” t 最高分 ” highendl; double aver_scorint sc return doubleall_scorsc/4 ; int all_scorint a int s=0 ;forint j=0 ;j4 ;j+ s+=aj ;return s; int hig
17、h_scorint a,int *i forint j=1 ;j5 ;j+ ifa01);然后,调用转换函数8、分析:第一从键盘上输入一个n 位整数转换成字符串,其长度为n;转换函数 convert定义为递归函数;递归条件如下所示;ifa=n/10.=0 converta;其中,是一个待处理的为整数,是一个型变量;当是1 位整数时,体将不被执行;当为2位整数时,执行体,这时为1 位整数;依次类推;程序内容如下所示;#include void main int num ;void convertint ;coutnum ;cout ”输出的字符串是 : ”;convertnum ;cout n
18、; void convertint n int a;ifa=n/10.=0 converta ;char c=n%10+;0coutc ; 执行该程序显示如下信息;输入一个整数:1357 输出的字符串是:1357 9、double distanceint xl,int yl,int x2,int y2 double s;s=sprtx1-x2* (x1-x2 ) +y1-y2*y1-y2 ;return s;8 / 12 名师归纳总结 - - - - - - -第 8 页,共 12 页精选学习资料 - - - - - - - - - double distancedouble xl,doubl
19、e yl,double y2 double s;s=sprtx1-x2*x1-x2+y1-y2*y1-y2;return s; 这里,前一个distance()函数是用来运算两个int 型数的点间距离,而后一个distance()函数是用来运算两个 示;double 型数的点间距离;运算两个点间距离公式如下所s=sqrtx1-x2*x1-x2+y1-y2*y1-y2 程序内容如下所示;#include #include void main double distanceint ,int,int,int,distancedouble, double, double, double;int x1=
20、5,y1=8,x2=12,y2=15 ;double xd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6 ;cout ”两个 int 型数的点间距离 : ”;double disi=distancex1,y1,x2,y2 ;coutdisiendl ;cout ”两个 double 型数的点间距离 : ”;double disd=distancexd1,yd1,xd2,yd2 ;coutdisdendl ; double distanceint a1,int b1,int a2,int b2 double s=sqrta1-a2*a1-a2+b1-b2*b1-b2;return s
21、; double distancedouble a1, double b1,double a2, doubleb2 return sqrta1-a2*a1-a2+b1-b2*b1-b2; 10、该程序中三次使用字符串处理函数 符串;程序内容如下所示;#include #include strcat将 4 个已知的字符串连接成一个新的字char s 5=“abcd ”, ”efgh ”, ”;ijkl”, ”mnop” void main strcats0,s1 ;9 / 12 名师归纳总结 - - - - - - -第 9 页,共 12 页精选学习资料 - - - - - - - - - st
22、rcats0,s2 ;strcats0,s3 ;couts0endl ; 11、分析:该程序将分3 个函数来完成此功能;一个主函数用输出显示n=1,2,3时,上述表达式的值;主函数的调用函数立方的函数 power ;程序内容如下所示;#include int funint n=2 ;int powerint ,int void main coutfun1endl ; coutfun2endl ; coutfun3endl ; int funint n int sum=0; forint i=1 ;i=10 ;i+ sum+=poweri,n ; return sum; int powerint
23、 n1,int n2 int p=1 ; forint i=1 ;i=6),将它表示为i 与 j 之和; n=i+j ;当 i 和 j 都为素数时就为所求;程序内容如下所示;#include int primeint ;void main int primeint ;int n ;10 / 12 名师归纳总结 - - - - - - -第 10 页,共 12 页精选学习资料 - - - - - - - - - coutn ;int i,j ;cout ”两个素数之和的全部可能 n ” ;fori=2 ;in; i+ j=n-i ;ifprimei&primej cout ”N=”i+jendl
24、 ; int primeint n int j=2 ;whilen%j.=0 j+;ifn=j return 1 ;else return 0 ; 运行该程序输出以下信息;输入一个大于等于 6 的偶数: 126 输出结果如下所示;两个素数之和的全部可能:N=13+133 N=17+109 N=19+107 N=23+103 N=29+97 N=37+89 N=43+83 N=47+79 N=53+73 N=59+6 13、#include char_countchar *s,char letter int count=0 ;while*s if*s+=letter count+;return
25、count ; 11 / 12 名师归纳总结 - - - - - - -第 11 页,共 12 页精选学习资料 - - - - - - - - - void main char str100,c ;coutstr ;coutc ;coutthe count is:char_countstr,c 次”endl;“ 14、#include int pattern_indexchar substr,char str int i,j,k ; fori=0 ;stri ;i+ ;j+,k+ forj=i,k=0 ;strj=substrk|substrk=. if.substrk+1 returni ; return0; void main char *substring,*string ; int same; substring=.gram ; string=this program return index of substring; same=pattern_indexsubstring ,string ; if same cout 子串起始位置:sameendl ; else cout 匹配不胜利 endl ; 12 / 12 名师归纳总结 - - - - - - -第 12 页,共 12 页
限制150内