同济c课本习题参考答案Word文档格式.docx

上传人:b****5 文档编号:21372059 上传时间:2023-01-30 格式:DOCX 页数:53 大小:28.29KB
下载 相关 举报
同济c课本习题参考答案Word文档格式.docx_第1页
第1页 / 共53页
同济c课本习题参考答案Word文档格式.docx_第2页
第2页 / 共53页
同济c课本习题参考答案Word文档格式.docx_第3页
第3页 / 共53页
同济c课本习题参考答案Word文档格式.docx_第4页
第4页 / 共53页
同济c课本习题参考答案Word文档格式.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

同济c课本习题参考答案Word文档格式.docx

《同济c课本习题参考答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《同济c课本习题参考答案Word文档格式.docx(53页珍藏版)》请在冰豆网上搜索。

同济c课本习题参考答案Word文档格式.docx

cube(x);

cout<

(4).#include"

voidcube()

{cube();

}

(3).#include"

intcube(intx)

return(x);

voidmain()

intx=cube(5);

}

A.1B.2C.3D.4

7.设函数m()的说明形式为voidm(int,int*);

利用函数m()对数5和整数j作函数m()定义的计算,正确的调用形式为_____C_____。

A.m(&

5,&

j)B.m(5,j)C.m(5,&

j)D.m(&

5,j)

8.设函数的说明为:

voidfun(inta[],intm);

,若有定义:

inta[10],n,x;

则下面调用该函数正确的是____A_____。

A.fun(a,n);

B.x=fun(a,n);

C.fun(a[10],10);

D.x=fun(a[],n);

9.下面函数说明正确的是____C_____。

A.voidf1(inta=3,intb,intc);

B.voidf2inta,intb=3,intc);

C.voidf3(inta,intb,intc=3);

D.voidf4(inta,intb,int3);

10.有两个函数分别为:

intf(int);

和intf(int,int=100);

,则下面说法正确的是_____B_____。

A.不能在同一个程序中定义

B.可以在同一个程序中定义,但不可以重载

C.可以在同一个程序中定义并可重载

D.以上说法均错误

11.以下几种函数模板的定义正确的是____A_____。

B.template<

classT1,T2>

voidfun1(T1a,T1b,T2c)

{……}

A.template<

classT>

Tfun1(Ta,intb)

D.template<

classT1,classT2>

T2fun1(T1a,T1b)

{……}

C.template<

voidfun1(inta,intb)

{Ti;

……}

12.下面程序的输出结果是____B_____。

#include"

intm=10;

voidf(intm,int&

n)

{m=m+2;

n=n+2;

}

{

intn=5;

f(m,n);

"

m="

m<

n="

n<

endl;

A.m=10n=5B.m=10n=7C.m=12n=7D.m=12n=5

二、阅读程序,写出运行结果

1.yes3not4

2.4

3.12

2516921

4.21234

5.m=5n=3

6.911

三、程序填空

1.该程序功能:

对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。

math.h"

floatf(intx)

floaty;

y=x*x-5*x+sin(x);

______returny_______;

intx;

floatmax;

____max=f

(1)___;

for(x=2;

x<

=10;

x++)

___if(f(x)>

max)max=f(x)__;

max<

 

2.函数backmove()是把字符指针x所指的字符串平移m个字符,即将最后m个字符移到串首。

如“abcdefghij”,平移3个字符,成“hijabcdefg”。

stdio.h"

string.h"

voidbackmove(char*x,intm)

inti,j,n;

charw;

n=strlen(x);

for(j=0;

j<

m;

j++)

{w=_____*(x+n-1)_____;

for(i=0;

i<

n-1;

i++)*(x+n-1-i)=_____*(x+n-2-i)_____;

____*x____=w;

chars[20];

gets(s);

______backmove(s,3)______;

//假设平移3个字符

puts(s);

3.函数index()为查找字符串sub是否是字符串st的子串。

若是,返回sub在st中首次出现的下标,否则返回-1。

字符串sub和st非空。

如sub:

"

cd"

,st:

abcdefcd"

,返回2。

chars1[80],s2[80];

______intindex(char[],char[]);

______;

gets(s1);

gets(s2);

if(_______index(s1,s2)________)

子串在字符串中首次出现的下标:

index(s1,s2);

else

找不到"

;

intindex(charst[],charsub[])

inti,j,k;

st[i]!

='

\0'

i++)

{

for(j=i,k=0;

sub[k]!

='

&

st[j]==sub[k];

____k++,j++_____);

if(sub[k]=='

)_____return(i)______;

return0;

4.函数root为用二分法求方程f(x)=0在[x1,x2]的实根,精度为eps。

二分法求根的基本思想为f(x)在区间[a,b]上连续,f(a)与f(b)异号,区间中点c=(a+b)/2的f(c)符号和f(a)符号确定c代替a或b,使根所在区间每次减半,直到|a-b|<

eps或|f(c)|<

eps,c即为所求的根,其中eps为精度。

下面程序为求方程x3-5x2+16x-80=0在[1,7]区间的实根,精度取10-6。

doubleroot(doublex1,doublex2,doubleeps=1e-6)

_______doublef(doublex);

_______;

doublex,y,y1;

y1=f(x1);

do{

x=0.5*(x1+x2);

y=f(x);

if(y1*y>

0.0)_____x1=x_____;

elseif(y1*y<

0.0)_____x2=x_____;

}while(fabs(y)>

=eps___&

___fabs(x2-x1)>

=eps);

doublef(doublex)

{returnx*x*x-5*x*x+16*x-80;

{cout<

_____root(1,7)_____<

5.随机生成10个1~100之间的数放在一维数组中,求其平均值及最大的元素值。

stdlib.h"

constintN=10;

voidfun(float*p,float*p1,float*p2)

floatsum,max1;

_______max1=*p________;

for(inti=1;

N;

i++)

{

if(max1<

*p)max1=*p;

sum=sum+*p;

p++;

_______*p1=max1_________;

_______*p2=sum/N_________;

floata[10],aver,max,x;

for(inti=0;

10;

i++)

{

x=rand()%100+1;

a[i]=x;

for(i=0;

i++)cout<

a[i]<

_______fun(a,max,aver)______;

平均值:

aver<

最大值:

6.函数convert的功能是将一个十进制整数转换为二到十六进制的字符串。

voidconvert(intm,inth,charch[])

charb[17]="

0123456789ABCDEF"

intc[10],i=0,k=0;

do

c[___i++__]=m%h;

while(____(m=m/h)!

=0_____);

for(--i;

i>

=0;

--i)

{ch[k++]=b[___c[i]___];

______ch[k]='

_______;

charch[10];

intm,h;

cin>

>

m>

h;

convert(m,h,ch);

ch<

四、编写程序

1.编写函数,功能为将字符串s中的字符c1用字符c2替换,并加以调用。

函数形式为:

voidmatch(chars[],charc1,charc2);

#include<

iostream.h>

voidreplace(chars[],charc1,charc2)

{char*p=s;

while(*p!

if(*p==c1)

*p=c2;

{chars[80],c1,c2;

cin>

s;

c1>

c2;

replace(s,c1,c2);

s<

2.编写函数,功能为求圆的周长和面积。

函数分别定义为如下形式:

doublearea(doubler,double*girth,doublepi=3.14159);

voidfun(doubler,double&

girth,double&

area,doublepi=3.14159);

分别编二个程序实现,半径从键盘输入。

方法一、

doublearea(doubler,double*girth,doublepi=3.14159)

*girth=2*pi*r;

return(pi*r*r);

{doubler,len,s;

r;

s=area(r,&

len);

len="

len<

s="

方法二

voidfun(doubler,double&

girth,double&

area,doublepi=3.14159)

girth=2*pi*r;

area=pi*r*r;

fun(r,len,s);

3.编写函数,功能是求二维数组中最大元素所在的行号和列号,再编写主函数调用之。

#defineSIZE13

#defineSIZE24

floatmax_value(floatx[][4],int&

ii,int&

jj)

floatmax=x[0][0];

for(inti=0;

SIZE1;

for(intj=0;

SIZE2;

if(x[i][j]>

max)

{max=x[i][j];

ii=i;

jj=j;

return(max);

inti,j,t1,t2;

floata[SIZE1][SIZE2];

enterthearray:

\n"

for(i=0;

{for(j=0;

{a[i][j]=rand()%101;

a[i][j]<

maxvalueis"

<

max_value(a,t1,t2);

line="

t1<

row="

t2<

4.编写函数,将两个字符串s和t的前n个字符拼接成新的字符串,结果存放在s中。

如果s或t中字符串的长度不足n,按实际长度处理。

例如,如果有"

ABCDEFGH"

和"

abcdefghijk"

n为3,则新的字符串为”ABCabc”,并加以调用。

voidmystrcat(chars[],chart[],intn);

string.h>

voidmystrcat(chars[],chart[],intn)

intl1=strlen(s),l2=strlen(t);

intk1=l1>

n?

n:

l1,k2=l2>

l2;

k2;

s[k1++]=t[i];

s[k1]='

chars[30],t[30];

intn;

s>

t;

n;

mystrcat(s,t,n);

5.编写函数,其功能是逐字符比较两个字符串s1和s2,并将s1中第一个与s2不相同字符的地址返回给主函数。

再编写主函数调用该函数,并在主函数中输出s1从这个位置开始的子串。

char*dif(chars1[],chars2[]);

char*dif(chars1[],chars2[])

inti=0;

while(s1[i]==s2[i]&

s1[i]!

i++;

if(s1[i]!

return(&

s1[i]);

elsereturnNULL;

char*p;

if((p=dif(s,t))!

=NULL)

p<

cout<

s包含于t中\n"

6.用递归方法求正整数m,n的最大公约数。

intgcd(intm,intn)

intr=m%n;

if(r!

=0)

returngcd(n,r);

return(n);

intm,n;

gcd(m,n)<

7.编写四个同名函数max,分别求两个整数、三个整数,两个双精度数、三个双精度数的最大值。

intmax(inta,intb)

return(a>

b?

a:

b);

intmax(inta,intb,intc)

intt=max(a,b);

return(max(t,c));

doublemax(doublea,doubleb)

doublemax(doublea,doubleb,doublec)

doublet=max(a,b);

{doublex,y,z;

inta,b,c;

a>

b>

c;

x>

y>

z;

max(a,b)<

endl<

max(a,b,c)<

max(x,y)<

max(x,y,z)<

第四章习题

一、

1.C2.A3.C4.D5.C6.B7.A8.B

二、

1.67890543212.43.14

三、

1.

(1){0,1}(3)x[i]=x[i-1]+x[i-2](4)setw(5)<

x[i]

2.

(1)rand()%101

(2)j<

a[i]/2(3)"

A("

)="

3.

(1)b[m]=0

(2)n<

m+4(3)b[m]=b[m]/4

4.(该题目需要加上头文件#include"

(1)gets(s1)

(2)gets(s2)(3)*s1==*s2(4)r=0

5.

(1)j=k=l=0

(2)j<

M&

k<

N(3)c[l]=a[j](4)c[l++]=b[k++](5)k<

N(6)j<

M

四、

1.

(1)

{inta[4][4],b[4][4],c[4][4],i,j;

4;

a[i][j]=rand()%41+30;

b[i][j]=rand()%35+101;

矩阵A的内容如下:

{for(j=0;

'

'

矩阵B的内容如下:

b[i][j]<

c[i][j]=a[i][j]+b[i][j];

矩阵C的内容如下:

c[i][j]<

(2)

{inta[4][4],b[4][4],c[4][4],i,j,max,imax,jmax;

i+

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

当前位置:首页 > 自然科学 > 物理

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

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