C语言课后习题答案第八章解析.docx

上传人:b****4 文档编号:5403460 上传时间:2022-12-16 格式:DOCX 页数:14 大小:48.58KB
下载 相关 举报
C语言课后习题答案第八章解析.docx_第1页
第1页 / 共14页
C语言课后习题答案第八章解析.docx_第2页
第2页 / 共14页
C语言课后习题答案第八章解析.docx_第3页
第3页 / 共14页
C语言课后习题答案第八章解析.docx_第4页
第4页 / 共14页
C语言课后习题答案第八章解析.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言课后习题答案第八章解析.docx

《C语言课后习题答案第八章解析.docx》由会员分享,可在线阅读,更多相关《C语言课后习题答案第八章解析.docx(14页珍藏版)》请在冰豆网上搜索。

C语言课后习题答案第八章解析.docx

C语言课后习题答案第八章解析

作业八:

函数程序设计答案

(一)选择题(30分)

1.以下正确的函数定义形式是 A__。

A)doublefun(intx,inty)

B)doublefun(intx;inty)

C)doublefun(intx,inty);

D)doublefun(intx,y);

2.以下正确的函数形式是 D__。

A)doublefun(intx,inty)

{z=x+y;returnz;}

B)fun(intx,y)

{intz;returnz;}

C)fun(x,y)

{intx,y;doublez;z=x+y;returnz;}

D)doublefun(intx,inty)

{doublez;z=x+y;returnz;}(重要)

3.以下正确的说法是 A__。

在C语言中A)实参和与其对应的形参各占用独立的存储单元

B)实参和与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用存储单元

D)形参是虚拟的,不占用存储单元

4.若调用一个函数,且此函数中没有return语句,则正确的说法是 D__。

该函数A)没有返回值

B)返回若干个系统默认值

C)能返回一个用户所希望的函数值

D)返回一个不确定的值(重要)

5.以下不正确的说法是 B__。

C语言规定A)实参可以是常量、变量或表达式

B)形参可以是常量、变量或表达式

C)实参可以为任意类型

D)形参应与其对应的实参类型一致

6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 B__。

A)地址传递

B)单向值传递

C)由实参传给形参,再由形参传回给实参

D)由用户指定传递方式

7.以下程序有语法性错误,有关错误原因的正确说法是 C__。

main()

{

intG=5,k;

voidPrt_char();

……

k=Prt_char(G);

……

}

A)语句voidprt_char();有错,它是函数调用语句,不能用void说明

B)变量名不能使用大写字母

C)函数说明和函数调用语句之间有矛盾

D)函数名不能使用下划线

8.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B__。

A)float型

B)int型

C)long型

D)double型

9.C语言规定,函数返回值的类型是由 D__。

A)return语句中的表达式类型所决定

B)调用该函数时的主调函数类型所决定

C)调用该函数时系统临时决定

D)在定义该函数时所指定的函数类型所决定

10.下面函数调用语句含有实参的个数为 B__。

func((exp1,exp2),(exp3,exp4,exp5));

A)1B)2C)4D)5(重要)

11.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。

#include

#include

main()

{

floatx,y,z,sum;

scanf(“%f%f%f”,&x,&y,&z);

sum=f(【1】__B__)+f(【2】__C__);

printf(“sum=%f\n”,sum);

}

floatf(floata,floatb)

{

floatvalue;

value=a/b;

return(value);

}

【1】A)x-y,x+yB)x+y,x-yC)z+y,z-yD)z-y,z+y

【2】A)x-y,x+yB)x+y,x-yC)z+y,z-yD)z-y,z+y

12.以下正确的描述是 B__。

在C语言程序中A)函数的定义可以嵌套,但函数的调用不可以嵌套

B)函数的定义不可以嵌套,但函数的调用可以嵌套

C)函数的定义和函数的调用均不可以嵌套

D)函数的定义和函数的调用均可以嵌套

13.以下正确的说法是 A__。

如果在一个函数中的复合语句中定义了一个变量,则该变量

A)只在该复合语句中有效

B)在该函数中有效

C)在本程序范围内均有效

D)为非法变量

14.凡是函数中未指定存储类型的局部变量,其隐含的存储类别为 A__。

A)自动(auto)B)静态(static)

C)外部(extern)D)寄存器(register)

15.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是 D__。

A)externB)registerC)autoD)static

(二)填空题(50分)

1.若输入的值是-125,以下程序的运行结果是 -5*5*5__。

#include

main()

{

intn;

scanf(“%d”,&n);

printf(“%d=”,n);

if(n<0)printf(“-”);

n=fabs(n);

fun(n);

}

fun(intn)

{

intk,r;

for(k=2;k<=sqrt(n);k++)

{

r=n%k;

while(r==0)

{

printf(“%d”,k);

n=n/k;

if(n>1)printf(“*”);

r=n%k;

}

}

if(n!

=1)printf(“%d\n”,n);

}

2.以下程序的运行结果是 i=7;j=6;x=7

i=2;j=7;x=5。

main()

{

inti=2,x=5,j=7;

fun(j,6);

printf(“i=%d;j=%d;x=%d\n”,i,j,x);

}

fun(inti,intj)

{

intx=7;

printf(“i=%d;j=%d;x=%d\n”,i,j,x);

}

3.以下程序的运行结果是 111__。

main()

{

increment();

increment();

increment();

}

increment()

{

intx=0;

x+=1;

printf(“%d”,x);

}

4.以下程序的运行结果是 maxis2_。

#include

main()

{

inta=1,b=2,c;

c=max(a,b);

printf(“maxis%d\n”,c);

}

max(intx,inty)

{

intz;

z=(x>y)?

x:

y;

return(z);

}

5.以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显示出“ThisisYES.”与“ThisisNO.”。

请填空。

#include

voidYesNo(charch)

{

switch(ch)

{

case‘y’:

case‘Y’:

printf(“\nThisisYES.\n”);_break_;

case‘n’:

case‘N’:

printf(“\nThisisNo.\n”);_break_;

}

}

main()

{

charch;

printf(“\nEnterachar‘y’,‘Y’or‘n’,‘N’:

”);

ch=getchar();

printf(“ch:

%c”,ch);

YesNo(ch);

}

6.以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。

请选择填空。

sub(intk,intn)

{

inta1,a2;

a2=【1】__C__;

a1=k-【2】__A__;

if((k%3==0&&a2==5)||(k%3==0&&a1==5))

{

printf(“%d”,k);

n++;

returnn;

}

elsereturn-1;

}

main()

{

intn=0,k,m;

for(k=10;k<=99;k++)

{

m=sub(k,n);

if(m!

=-1)n=m;

}

printf(“\nn=%d”,n);

}

【1】A)k*10B)k%10C)k/10D)k*10%10

【2】A)a2*10B)a2C)a2/10D)a2%10

7.以下程序的功能是用二分法求方程

的根,并要求绝对误差不超过0.001。

请填空。

#include

floatf(floatx)

{

return(2*x*x*x-4*x*x+3*x-6);

}

main()

{

floatm=-100,n=90,r;

r=(m+n)/2;

while(f(r)*f(n)!

=0)

{

if(f(m)*f(r)>0)m=r;

elsen=r;

if(fabs(f(r))<=0.001)break;

r=(m+n)/2;

}

printf(“Theisfangchengjieis%6.3f\n”,r);

}

8.以下程序的功能是计算下面函数的值。

请填空。

#include

#include

floatf(float,float,float);

main()

{

floatx,y,z,sum;

printf(“\ninputx,y,z:

\n”);

scanf(“%f%f%f”,&x,&y,&z);

sum=f(x,x-y,x-z)+f(y,y-z,y-x)+f(z,z-x,z-y);

printf(“sum=%f\n”,sum);

}

floatf(floata,floatb,floatc)

{

floatvalue;

value=sin(a)/(sin(b)*sin(c));

return(value);

}

9.以下程序的运行结果是输出如下图形。

请填空。

*

***

*****

*******

*****

***

*

#include

voida(inti)

{

intj,k;

for(j=0;j<=5-i;j++)printf(“”);

for(k=0;k<2*i-1;k++)printf(“*”);

printf(“\n”);

}

main()

{

inti;

for(i=0;i<3;i++)a(i);

for(i=3;i>=0;i--)a(i);

}

}

10.以下程序的功能是用递归方法计算五位学生的年龄,请填空。

递归公式如下:

#include

age(intn)

{

intc;

if(n==1)c=10;

elsec=age(n-1)+2;

return(c);

}

main()

{

intn=5;

printf(“age:

%d\n”,age(5));}

(三)编程题(20分)

1.用函数编程打印以下图案。

(1)

(2)(3)

 

Voidf1(intn)

{

inti;

for(i=1;i<=n;i++)printf(““);

}

Voidf2(intn)

{

inti;

for(i=1;i<=n;i++)printf(“*“);

}

(1)main()

(2)main()(3)main()

{{{

inti;inti;inti;

f(i=1;i<=4;i++)f(i=1;i<=4;i++)f(i=1;i<=4;i++)

{{{

f1(4-i);f2(2*i-1);f1(4-i);

f2(6);printf(“\n”);f2(2*i-1);

printf(“\n”);}printf(“\n”);

}}

getch();getch();getch();

}}}

2.以下函数p的功能是用递归方法计算x的n阶勒让德多项式的值。

已有调用语句p(n,x);请编写p函数。

递归公式如下:

floatp(intn,intx)

{}

floatp(intn,intx)

{

if(n==0)return1;

elseif(n==1)returnx;

else((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;

}

3.以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。

已有初始值x0=3.1415/4,要求绝对误差不超过0.001,函数f用计算迭代公式中

的值,请编写f函数。

牛顿迭代公式是:

即:

#include

#include

#definePI3.1415

floatf(floatx0)

{}

main()

{

intt=0,k=100,n=0;

floatx0=PI/4,x1;

while(n

{

x1=f(x0);

if(fabs(x0-x1)<0.001){t=1;break;}

else{x0=x1;n=n+1;}

}

if(t==1)printf(“\nFangchenggengis%10.5f”,x1);

elseprintf(“\nSorry,notfound!

”);

}

floatf(floatx0)

{

returnx0-(cos(x0)-x0)/(sin(x0)-1);

}

4.以下程序的功能是应用弦截法求方程

的根,其中f函数可根据

指定的x的值求出方程的值;函数xpoint可根据x1和x2求出f(x1)和f(x2)的连线与x

轴的交点;函数root用来求区间(x1,x2)的实根,请编写root函数。

#include

floatroot(floatx1,floatx2)

{}

floatf(floatx)

{…}

floatxpoint(floatx1,floatx2)/*略*/

{…}

main()

{

floatx1,x2,f1,f2,x;

do{

printf(“inputx1,x2:

\n”);

scanf(“%f%f”,&x1,&x2);

printf(“x1=%5.2f,x2=%5.2f\n”,x1,x2);

f1=f(x1);

f2=f(x2);

}while(f1*f2>=0);

x=root(x1,x2);

printf(“Arootofequationis%8.4f”,x);

}

#include

floatroot(floatx1,floatx2)

{

floatx;

do

{

x=x2-f(x2)*(x2-x1)/(f(x2)-f(x1));

if(f(x)*f(x2)>0)x1=x;

elsex2=x;

}while(fabs(f(x))>1e-6);

returnx;

}

floatf(floatx)

{

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

}

 

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

当前位置:首页 > 解决方案 > 学习计划

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

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