同济c课本习题参考答案.docx

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

同济c课本习题参考答案.docx

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

同济c课本习题参考答案.docx

同济c课本习题参考答案

习题5

一、选择题

1.下列叙述错误的是____A_____。

A.主函数中定义的变量在整个程序中都是有效的

B.复合语句中定义的变量只在该复合语句中有效

C.其它函数中定义的变量在主函数中不能使用

D.形式参数是局部变量

2.若函数的形参为一维数组,则下列说法中错误的是____B、才_____。

A.形参数组可以不指定大小

B.函数调用时对应的实参只能是数组名

C.函数调用时,系统会为形参数组分配存储单元

D.函数中对形参的修改将会影响对应的实参值

3.若函数的类型和return语句中的表达式的类型不一致,则____D_____。

A.编译时出错

B.运行时出现不确定结果

C.不会出错,且返回值的类型以return语句中表达式的类型为准

D.不会出错,且返回值的类型以函数类型为准

4.下面的函数定义正确的是_____D____。

A.floatf(floatx;floaty)B.floatf(floatx,y)

{returnx*y;}{returnx*y;}

C.floatf(x,y)D.floatf(intx,inty)

{intx,y;returnx*y;}{returnx*y;}

5.下面函数头的定义格式正确的是____C_____。

A.voidsort(inta[n],intn)B.voidsort(inta[][],intn)

C.voidsort(inta[],intn)D.voidsort(inta[],n)

(2).#include"iostream.h"

voidcube(int&x)

{x=x*x*x;}

voidmain()

{

intx=5;cube(x);

cout<

}

6.下面4个程序中输出结果是125的有____C_____。

(1).#include"iostream.h"

voidcube(intx)

{x=x*x*x;}

voidmain()

{

intx=5;cube(x);

cout<

(4).#include"iostream.h"

intx=5;

voidcube()

{x=x*x*x;}

voidmain()

{cube();cout<

}

(3).#include"iostream.h"

intcube(intx)

{x=x*x*x;return(x);}

voidmain()

{

intx=cube(5);

cout<

}

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

voidfun1(T1a,T1b,T2c)

{……}

A.template

Tfun1(Ta,intb)

{……}

D.template

T2fun1(T1a,T1b)

{……}

C.template

voidfun1(inta,intb)

{Ti;……}

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

#include"iostream.h"

intm=10;

voidf(intm,int&n)

{m=m+2;n=n+2;}

voidmain()

{

intn=5;

f(m,n);

cout<<"m="<

}

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)的最大值。

#include"iostream.h"

#include"math.h"

floatf(intx)

{

floaty;

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

______returny_______;

}

voidmain()

{

intx;floatmax;

____max=f

(1)___;

for(x=2;x<=10;x++)

___if(f(x)>max)max=f(x)__;

cout<

}

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

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

#include"stdio.h"

#include"string.h"

voidbackmove(char*x,intm)

{

inti,j,n;charw;

n=strlen(x);

for(j=0;j

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

for(i=0;i

____*x____=w;

}

}

voidmain()

{

chars[20];

gets(s);

______backmove(s,3)______;//假设平移3个字符

puts(s);

}

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

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

字符串sub和st非空。

如sub:

"cd",st:

"abcdefcd",返回2。

#include"iostream.h"

#include"stdio.h"

voidmain()

{

chars1[80],s2[80];

______intindex(char[],char[]);______;

gets(s1);gets(s2);

if(_______index(s1,s2)________)

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

"<

else

cout<<"找不到";

}

intindex(charst[],charsub[])

{

inti,j,k;

for(i=0;st[i]!

='\0';i++)

{

for(j=i,k=0;sub[k]!

='\0'&&st[j]==sub[k];____k++,j++_____);

if(sub[k]=='\0')_____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|

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

#include"math.h"

#include"iostream.h"

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);

return(x);

}

doublef(doublex)

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

voidmain()

{cout<<_____root(1,7)_____<

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

#include"iostream.h"

#include"stdlib.h"

constintN=10;

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

{

floatsum,max1;

_______max1=*p________;

for(inti=1;i

{

if(max1<*p)max1=*p;

sum=sum+*p;

p++;

}

_______*p1=max1_________;

_______*p2=sum/N_________;

}

voidmain()

{

floata[10],aver,max,x;

for(inti=0;i<10;i++)

{

x=rand()%100+1;a[i]=x;

}

for(i=0;i<10;i++)cout<

_______fun(a,max,aver)______;

cout<<"平均值:

"<

"<

}

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

#include"iostream.h"

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]='\0'_______;

}

voidmain()

{

charch[10];intm,h;

cin>>m>>h;

convert(m,h,ch);

cout<

}

四、编写程序

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

函数形式为:

voidmatch(chars[],charc1,charc2);

#include

voidreplace(chars[],charc1,charc2)

{char*p=s;

while(*p!

='\0')

{

if(*p==c1)

*p=c2;

p++;

}

}

voidmain()

{chars[80],c1,c2;

cin>>s;

cin>>c1>>c2;

replace(s,c1,c2);

cout<

}

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

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

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

voidfun(doubler,double&girth,double&area,doublepi=3.14159);

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

方法一、

#include

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

{

*girth=2*pi*r;

return(pi*r*r);

}

voidmain()

{doubler,len,s;

cin>>r;

s=area(r,&len);

cout<<"len="<

}

方法二

#include

voidfun(doubler,double&girth,double&area,doublepi=3.14159)

{

girth=2*pi*r;

area=pi*r*r;

}

voidmain()

{doubler,len,s;

cin>>r;

fun(r,len,s);

cout<<"len="<

}

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

#defineSIZE13

#defineSIZE24

#include"iostream.h"

#include"stdlib.h"

floatmax_value(floatx[][4],int&ii,int&jj)

{

floatmax=x[0][0];

for(inti=0;i

for(intj=0;j

if(x[i][j]>max)

{max=x[i][j];ii=i;jj=j;}

return(max);

}

voidmain()

{

inti,j,t1,t2;floata[SIZE1][SIZE2];

cout<<"enterthearray:

\n";

for(i=0;i

{for(j=0;j

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

cout<

cout<

}

cout<<"maxvalueis"<

cout<<"line="<

}

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

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

例如,如果有"ABCDEFGH"和"abcdefghijk",n为3,则新的字符串为”ABCabc”,并加以调用。

函数形式为:

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

#include

#include

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

{

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

intk1=l1>n?

n:

l1,k2=l2>n?

n:

l2;

for(inti=0;i

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

s[k1]='\0';

}

voidmain()

{

chars[30],t[30];

intn;

cin>>s>>t;

cin>>n;

mystrcat(s,t,n);

cout<

}

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

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

函数形式为:

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

#include

#include"stdio.h"

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

{

inti=0;

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

='\0')

i++;

if(s1[i]!

='\0')

return(&s1[i]);

elsereturnNULL;

}

voidmain()

{

chars[30],t[30];

cin>>s>>t;

char*p;

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

=NULL)

cout<

else

cout<<"s包含于t中\n";

}

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

#include

intgcd(intm,intn)

{

intr=m%n;

if(r!

=0)

returngcd(n,r);

else

return(n);

}

voidmain()

{

intm,n;

cin>>m>>n;

cout<

}

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

#include

intmax(inta,intb)

{

return(a>b?

a:

b);

}

intmax(inta,intb,intc)

{

intt=max(a,b);

return(max(t,c));

}

doublemax(doublea,doubleb)

{

return(a>b?

a:

b);

}

doublemax(doublea,doubleb,doublec)

{

doublet=max(a,b);

return(max(t,c));

}

voidmain()

{doublex,y,z;

inta,b,c;

cin>>a>>b>>c;

cin>>x>>y>>z;

cout<

cout<

}

 

第四章习题

一、

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)<

2.

(1)rand()%101

(2)j

(1)gets(s1)

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

5.

(1)j=k=l=0

(2)j

四、

1.

(1)

#include"stdlib.h"

#include"iostream.h"

voidmain()

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

for(i=0;i<4;i++)

for(j=0;j<4;j++)

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

for(i=0;i<4;i++)

for(j=0;j<4;j++)

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

cout<<"矩阵A的内容如下:

\n";

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

cout<

cout<

}

cout<<"矩阵B的内容如下:

\n";

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

cout<

cout<

}

for(i=0;i<4;i++)

for(j=0;j<4;j++)

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

cout<<"矩阵C的内容如下:

\n";

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

cout<

cout<

}

}

 

(2)

#include"stdlib.h"

#include"iostream.h"

voidmain()

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

for(i=0;i<4;i++)

for(j=0;j<4;j++)

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

for(i=0;i<4;i++)

for(j=0;j<4;j++)

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

cout<<"矩阵A的内容如下:

\n";

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

cout<

cout<

}

cout<<"矩阵B的内容如下:

\n";

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

cout<

cout<

}

for(i=0;i<4;i+

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

当前位置:首页 > 表格模板 > 合同协议

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

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