面向对象程序设计C++山师第五章习题答案Word下载.docx

上传人:b****6 文档编号:17257537 上传时间:2022-11-29 格式:DOCX 页数:17 大小:20.21KB
下载 相关 举报
面向对象程序设计C++山师第五章习题答案Word下载.docx_第1页
第1页 / 共17页
面向对象程序设计C++山师第五章习题答案Word下载.docx_第2页
第2页 / 共17页
面向对象程序设计C++山师第五章习题答案Word下载.docx_第3页
第3页 / 共17页
面向对象程序设计C++山师第五章习题答案Word下载.docx_第4页
第4页 / 共17页
面向对象程序设计C++山师第五章习题答案Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

面向对象程序设计C++山师第五章习题答案Word下载.docx

《面向对象程序设计C++山师第五章习题答案Word下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++山师第五章习题答案Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

面向对象程序设计C++山师第五章习题答案Word下载.docx

a=8,b=5

10、运行该程序输出结果如下所示。

10

11、运行该程序输出结果如下所示。

ff(double):

88.18

ff(int):

97

12、运行该程序输出结果如下所示。

1

12

123

1234

四、按下列要求编程,并上机验证。

1、分析:

该程序有3个函数:

main(),sum()和average()。

主函数main()中包含有如下操作:

输入15个浮点数放在一个数组中,使用循环语句从键盘上输入值,接着分别调用sum()函数求15个浮点数之和,调用average()函数求15个浮点数的平均值,最后将15个浮点数的和值与平均值输出显示。

程序如下:

#include<

iostream.h>

doubles,sum(doubleb[],intn),average(intn);

voidmain()

{

doublea[15];

cout<

<

”Input15doubles:

”;

for(inti=0;

i<

15;

i++)

cin>

>

a[i];

s=sum(a,15);

doubleave=average(15);

”SUM=”<

s<

’,’<

”AVERAGE=”<

ave<

endl;

}

doublesum(doubleb[],intn)

doublesum=0;

sum+=b[i];

returnsum;

doubleaverage(intn)

returns/n;

2、分析:

先将10个int型数从键盘上输入,并放在一个int型数组中。

接着,在数组中将重复的数组元素去掉。

其方法是在比较中发现有重复的就用数组中最末元素替换,同时更新数组元素个数。

最后,将数组中的元素使用排序函数sort()进行排序,并输出显示最后排好序的数组元素。

排序函数sort()是按照“冒泡”排序的算法进行编程的。

程序的内容如下所示。

voidmain()

inta[10],n=10;

voidsort(intb[],intn);

”Input10integer:

n;

for(i=0;

for(intj=i+1;

j<

j++)

if(a[i]==a[j])

a[j]=a[--n];

j--;

sort(a,n);

a[i]<

””;

”\n”;

voidsort(intb[],intn)

for(inti=1;

for(intj=0;

n-i;

if(b[j]<

b[j+1])

intt=b[j];

b[j]=b[j+1];

b[j+1]=t;

3、分析:

该程序将包含一个主函数和两个被调函数:

一个是计算某一年是否是闰年的函数leap(),另一个是计算日期的函数sum_day()。

主函数中,先从键盘上输入某天的年、月、日,存放在相应的变量year,month和day中。

接着,调用sum_day()函数,计算出这一天是该年的第几天,计算时按非闰年计算,即2月份28天。

然后,再判断该年是否是闰年,并且该月是否是大于2月。

如果是闰年,且月份又大于2月,则计算的天数加1。

最后将其结果输出显示。

计算闰年的函数leap()是按照闰年的定义,使用逻辑表达式返回。

闰年时返回1,否则返回0。

指定的每月的总天数的数组进行相加计算,这时2月份按28天计算,将每月天数存放在一个数组中,使该数组的下标与月份数相同。

例如,5月4日,计算天数时如下所示。

     days_month[1]+days_month[2]+days_month[3]+days_month[4]+4;

并将这个表式值返回。

程序内容如下所示。

intsum_day(int,int),leap(int);

intyear,month,day;

"

请输入一个日期(yymmdd):

;

year>

month>

day;

intdays=sum_day(month,day);

if(leap(year)&

&

2)

days++;

是这一年的第"

days<

天\n"

intsum_day(intmonth,intday)

{staticintdays_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

month;

day+=days_month[i];

returnday;

intleap(intyear)

intleap=year%4==0&

year%100!

=0||year%400==0;

returnleap;

当输入为1998年4月7日时,输出信息如下所示。

请输入一个日期(yyyymmdd):

199847

是这一年的第97天。

4、

string.h>

voidfun(char[]);

chars[80];

”请输入一个字符串:

s;

”反序前:

”<

fun(s);

”反序后:

voidfun(charss[])

intn=strlen(ss);

n/2;

charc=ss[i];

ss[i]=ss[n-1-i];

ss[n-1-i]=c;

该程序输出如下信息。

请输入一个字符串:

abcdefgh

输出结果如下所示。

反序前:

反序后:

hgfedcba

5、分析:

由于十六制数的表示中,除了有数字0~9,还有6个字母a,b,c,d,e,f.因此输入十六进制数时,应采用char型,将它存放在一个字符数组中。

然后,调用一个转换函数htoi(),将输入的字符型数组中的十六进制数转换为十进制的。

在转换函数中,应考虑到下述3类不同字符的转换方法:

(1)数字字符‘0’至‘9’;

(2)小写字母‘a’至‘f’;

(3)大写字母‘A’至‘F’。

inthtoi(char);

{

inthtoi(chars[]);

”输入一个十六进制数:

chars1[20]=””;

cin.read(s1,20);

intn=htoi(s1);

”该数转换为十进制数”<

n<

inthtoi(chars[])

intn=0;

s[i]!

=’\0’;

if(s[i]>

=’0’&

s[i]<

=’9’)

n=n*16+s[i]-‘0’;

=’a’&

=’f’)

n=n*16+s[i]-‘a’+10;

=’A’&

=’F’)

n=n*16+s[i]-‘A’+10;

returnn;

}

6、

char*fun1(int);

intfun2();

chars[10];

intnumber;

”输入一个5位的整型数;

number;

”整型数加空格后为:

fun1(number)<

”加空格后字符串长度为:

fun2()<

char*fun1(intn)

inta[5];

a[4]=n%10;

a[3]=n/10%10;

a[2]=n/100%10;

a[1]=n/1000%10;

a[0]=n/10000;

for(inti=0,j=0;

5;

i++,j+=2)

s[j]=char(a[i]+’0’);

s[j+1]=’’;

s[j-1]=’\0’;

returns;

intfun2()

intn=0,i=0;

while(s[i++])

n++;

returnn;

运行该程序显示如下信息:

输入一个5位的整型数:

87654

输出结果如下所示:

整型数加空格后为:

87654

加空格后字符串长度为:

9

7、分析:

首先定义一个char型数组name[5][10]用来存放5个学生的姓名,再定义一个int型数组score[5][4]来存放5个学生的4门功课成绩,再定义一个数组al[5]用来存放用来存放每个学生的总成绩。

该程序将有4个函数组成。

  

(1)主函数main(),包括所有定义的数组,并赋初值。

先调用求每个学生4门功课的总分的函数all_scor(),通过for循环将每个学生功课总分显示在屏幕上,同时存放在数组al[5]中。

  再调用求每个学生4门功课平均成绩的函数aver_scor通过for街环将每个学生功课的平均成绩输出显示在屏幕上。

  最后,用计算5个学生中总分最高的函数high_scor(),通过返回最高分,并通过传址调用获得最高分学生下标序号,用来输出该学生的姓名。

  

(2)算学生的总分函数all_scor(),该函数有一个参数,它是一族数组,返回值为int型变量,即返回该学生4门功课的总分。

  (3)算学生平均分函数aver_scor(),该函数有一个数组参数,返回值为double型量。

该函数调用了all_scor函数。

  (4)求出最高总分及该总分对应的下标值函数high_scor()。

该函数有两个参数:

一个是数组,另一个是int*型指针。

该函数返回值为int型量。

  程序内容如下所示。

intall_scor(inta[]),high_scor(inta[],int*i);

doubleaver_scor(intsc[]);

charname[][10]={“Ma”,”Wang”,”Li”,”Huang”,”Kang”};

intscore[][4]={{89,86,75,90},{91,82,75,80},{78,93,85,80},{90,79,95,85},{68,75,81,83}};

inta1[5];

”每个学生功课的总分:

(a1[i]=all_scor(score[i]))<

””;

”每个学生功课的平均成绩:

'

'

aver_scor(score[i]);

intn=0,high;

high=high_scor(a1,&

n);

”\n学生姓名:

name[n]<

”\t最高分”<

high<

doubleaver_scor(intsc[])

return(double)all_scor(sc)/4;

intall_scor(inta[])

ints=0;

for(intj=0;

4;

s+=a[j];

inthigh_scor(inta[],int*i)

for(intj=1;

if(a[0]<

a[j])

a[0]=a[j];

*i=j;

returna[0];

执行该程序后,输出结果如下所示。

每个学生功的总分:

340 328 336 349 307

每个学生功的平均成绩:

85 82 84 87.25 76.75

学生姓名:

Huang 最高分:

349

8、分析:

首先从键盘上输入一个n位整数(n>

1)。

然后,调用转换函数convert()将n位整数转换成字符串,其长度为n。

转换函数convert()定义为递归函数。

递归条件如下所示。

if((a=n/10)!

=0)

convert(a);

其中,是一个待处理的为整数,是一个型变量。

当是1位整数时,体将不被执行。

当为2位整数时,执行体,这时为1位整数。

依次类推。

intnum;

voidconvert(int);

”输出一个整数:

num;

”输出的字符串是:

convert(num);

’\n’;

voidconvert(intn)

inta;

charc=n%10+’0’;

c;

执行该程序显示如下信息。

输入一个整数:

1357

输出的字符串是:

9、

doubledistance(intxl,intyl,intx2,inty2)

doubles;

s=sprt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);

doubledistance(doublexl,doubleyl,doubley2)

s=sprt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);

这里,前一个distance()函数是用来计算两个int型数的点间距离,而后一个distance()函数是用来计算两个double型数的点间距离。

计算两个点间距离公式如下所示。

s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

math.h>

doubledistance(int,int,int,int),distance(double,double,double,double);

intx1=5,y1=8,x2=12,y2=15;

doublexd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6;

”两个int型数的点间距离:

doubledisi=distance(x1,y1,x2,y2);

disi<

”两个double型数的点间距离:

doubledisd=distance(xd1,yd1,xd2,yd2);

disd<

doubledistance(inta1,intb1,inta2,intb2)

doubles=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));

doubledistance(doublea1,doubleb1,doublea2,doubleb2)

returnsqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));

10、该程序中三次使用字符串处理函数strcat()将4个已知的字符串连接成一个新的字符串。

chars[][5]={“abcd”,”efgh”,”ijkl”,”mnop”};

strcat(s[0],s[1]);

strcat(s[0],s[2]);

strcat(s[0],s[3]);

s[0]<

11、分析:

该程序将分3个函数来完成此功能。

一个主函数用输出显示n=1,2,3时,上述表达式的值。

主函数的调用函数fun()用来求得各项之和,该函数又调用另一个求立方的函数power()。

intfun(intn=2);

intpower(int,int)

cout<

fun

(1)<

fun

(2)<

fun(3)<

intfun(intn)

intsum=0;

for(inti=1;

=10;

sum+=power(i,n);

returnsum;

intpower(intn1,intn2)

intp=1;

=n1;

p*=n2;

returnp;

运行该程序输出如下结果:

2046

88572

12、分析:

从键盘上入一个偶数n(>

=6),将它表示为i与j之和。

n=i+j;

当i和j都为素数时则为所求。

intprime(int);

intn;

”输出一个大于等于6的偶数:

inti,j;

”两个素数之和的全部可能\n”;

for(i=2;

j=n-i;

if(prime(i)&

prime(j))

”N=”<

’+’<

intprime(intn)

intj=2;

while(n%j!

j++;

if(n==j)

return1;

else

return0;

运行该程序输出下列信息。

输入一个大于等于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、

char_count(char*s,charletter)

intcount=0;

while(*s)

if(*s++==letter)count++;

return(count);

charstr[100],c;

inputastring:

cin>

str;

"

inputaletter:

thecountis:

char_count(str,c)<

“次”<

14、

intpattern_index(charsubstr[],charstr[])

inti,j,k;

for(i=0;

str[i];

for(j=i,k=0;

(str[j]==substr[k])||(substr[k]=='

?

);

j++,k++)

if(!

substr[k+1])

return(i);

return(0);

char*substring,*string;

intsame;

substring="

gram"

string="

thisprogramreturnindexofsubstring"

same=pattern_index(substring,string);

if(same)

子串起始位置:

same<

else

匹配不成功"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1