C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx

上传人:b****8 文档编号:22580970 上传时间:2023-02-04 格式:DOCX 页数:18 大小:67.30KB
下载 相关 举报
C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx_第1页
第1页 / 共18页
C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx_第2页
第2页 / 共18页
C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx_第3页
第3页 / 共18页
C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx_第4页
第4页 / 共18页
C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx

《C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

C语言程序设计第3版何钦铭 颜 晖 第10章函数与程序结构Word文档下载推荐.docx

y%100!

=0)||y%400==0)

4CIRFER(r):

计算半径为r的圆周长。

#definePI

#defineCIRFER(r)2*PI*(r)

【练习10-3】分别用函数和带参宏实现从3个数中找出最大数,请比较两者在形式上和使用上的区别。

(1)函数实现

intmax(intx,inty,intz)

{

intt;

if(x>

=y)

=z)t=x;

elset=z;

else

if(y>

=z)t=y;

returnt;

}

(2)宏实现

#defineMAX(x,y,z)x>

=y(x>

=zx:

z):

(y>

=zy:

z)两者在定义形式上完全不同。

使用上函数是在执行时,从主调函数转到函数max(),然后再返回到主调函数,函数体始终存在;

而宏是在编译预处理时,用条件表达式去替换

MAX(intx,inty,intz),等程序执行时,执行的是条件表达式,而不再存在MAX(intx,inty,intz)的式子。

习题10

一、选择题

1.要调用数学函数时,在#include命令行中应包含C。

A.””B.””C.””D.””

2.对于以下递归函数f,调用f(4),其返回值为A。

intf(intn)

{if(n)returnf(n-1)+n;

elsereturnn;

A.10B.4C.0D.以上均不是

3.执行下列程序:

#defineMA(x,y)(x*y)

i=5;

i=MA(i,i+1)–7;

后变量i的值应为B。

A.30B.19C.23D.1

4.宏定义“#defineDIV(a,b)a/b”,经DIV(x+5,y-5)引用,替换展开后是A。

A.x+5/y-5B.(x+5/y–5)

C.(x+5)/(y-5)D.(x+5)/(y-5);

5.定义带参数的宏“#defineJH(a,b,t)t=a;

a=b;

b=t”,对两个参数a、b的值进行交换,下

列表述中哪个是正确的C。

A.不定义参数a和b将导致编译错误B.不定义参数a、b、t将导致编译错误

C.不定义参数t将导致运行错误D.不需要定义参数a、b、t类型

6.执行下面程序,正确的输出是A。

intx=5,y=7;

voidswap()

{intz;

z=x;

x=y;

y=z;

intmain(void)

intx=3,y=8;

swap();

printf("

%d,%d\n"

x,y);

return0;

A.3,8B.8,3C.5,7D.7,5

7.下面说法中正确的是A。

A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度

B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度

C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题

D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出

二、填空题

语言的编译预处理功能主要包括_条件编译_、_宏定义_和_文件包含_。

2.执行完下列语句段后,i的值为5。

inti;

intf(intx)

return((x>

0)f(x-1)+f(x-2):

1);

i=f(3);

3.下列程序段A与B功能等价,请填写程序段B中相应语句。

程序段A:

intf(intn)

{if(n<

=1)

returnn;

returnf(n-1)+f(n-2);

程序B:

intf(intn)

{_intt,t0,t1;

_

t0=0;

t1=1;

t=n;

while(_n>

1_){

t=_t0+t1_;

t0=t1;

t1=t;

n--;

}

return_t;

5.下面程序用于计算f(k,n)=1k+2k+…+nk,其中power(m,n)求mn。

请填写程序中相应语句。

#include<

>

intpower(intm,intn)

{inti;

intp=1;

for(i=1;

i<

=n;

i++)

p=p*m;

returnp;

intf(intk,intn){

inti;

ints=0;

s=s+power(i,k);

returns;

intmain(void)

{intk,n;

scanf(“%d%d”,&

k,&

n);

printf(“f(%d,%d)=%ld”,k,n,f(k,n));

return0;

5.下列递归程序的输出结果为g=4,g=3,k=6。

#include<

intfib(intg)

{switch(g){

case0:

return0;

case1:

case2:

return2;

printf("

g=%d,"

g);

returnfib(g-1)+fib(g-2);

{

intk;

k=fib(4);

k=%ld\n"

k);

6.下列语句的运算结果为_7,-13____。

#defineF(x)x-2

#defineD(x)x*F(x)

printf("

%d,%d"

D(3),D(D(3)));

三、程序设计题

1.判断满足条件的三位数:

编写一个函数,利用参数传入一个3位数n,找出101~n间所有满足下列两个条件的数:

它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。

#include<

intfun(intn);

intn;

Inputn:

"

);

scanf("

%d"

&

n);

total=%d\n"

fun(n));

intfun(intn)

inti,d=0;

for(i=101;

i<

=n;

i++)

if(((int)sqrt(i)*(int)sqrt(i))==i){

if(i/100==(i/10)%10||i/100==i%10||(i/10)%10==i%10)

d++;

returnd;

2.递归求阶乘和:

输入一个整数n(n>

0且n<

=10),求1!

+2!

+3!

+……n!

定义并调用函数fact(n)计算n!

,函数类型是double。

doublefact(intn);

"

1~%d的阶乘和:

%.0lf"

n,fact(n));

doublefact(intn)

inti;

doubleresult=1;

if(n==1)

result=1;

else{

for(i=1;

result=result*i;

result=result+fact(n-1);

returnresult;

3.递归实现计算xⁿ:

输入实数x和正整数n,用递归函数计算xⁿ的值。

doublepower(doublex,intn);

doublex;

Inputx:

%lf"

x);

%lf的%d次方=%lf"

x,n,power(x,n));

doublepower(doublex,intn)

doubleresult;

result=x;

result=x*power(x,(n-1));

4.递归求式子和:

输入实数x和正整数n,用递归的方法对下列计算式子编写一个函数。

f(x,n)=x-x²

+x³

-x4+…+(-1)n-1xⁿ(n>0)

doublef(doublex,intn);

f(%lf,%d)=%lf\n"

x,n,f(x,n));

doublef(doublex,intn)

if(n==1)

returnx;

returnpow(-1,n-1)*pow(x,n)+f(x,n-1);

5.递归计算函数ack(m,n):

输入m和n。

编写递归函数计算Ackermenn函数的值:

n+1m=0

ack(m,n)=ack(m-1,1)n=0&

m>

0

ack(m-1,ack(m,n-1))m>

0&

n>

试编写相应程序。

intAck(intm,intn);

intm,n;

intresult;

%d%d"

&

m,&

result=Ack(m,n);

Ackerman(%d,%d)=%d\n"

m,n,result);

intAck(intm,intn)

if(m==0)returnn+1;

elseif(n==0&

0)

returnAck(m-1,1);

elseif(m>

returnAck(m-1,Ack(m,n-1));

6.递归实现求Fabonacci数列:

用递归方法编写求斐波那契数列的函数,函数类型为整型,并写出相应主函数。

斐波那契数列的定义如下。

f(n)=f(n-2)+f(n-1)(n>1)其中f(0)=0,f

(1)=1。

longfib(intn);

Entern:

fib(%d)=%ld\n"

n,fib(n));

longfib(intn)

longres;

if(n==0)res=0;

elseif(n==1)

res=1;

res=fib(n-2)+fib(n-1);

returnres;

7.递归实现十进制转换二进制:

输入一个正整数n,将其转换为二进制输出。

要求定义并调用函数dectobini(n),它的功能是输出n的二进制。

intdectobini(intn);

Inputn(十进制整数):

输出二进制:

dectobini(n));

intdectobini(intn)

if(n==0)

result=0;

result=dectobini(n/2)*10+n%2;

8.递归实现顺序输出整数:

输入一个正整数n,编写递归函数实现对其进行按位顺序输出的递归函数。

intinorder(intn);

按位顺序输出:

%d\n"

inorder(n));

intinorder(intn)

if(n<

10)returnn;

return(inorder(n/10)*10+n%10);

9.输入n(n<

10)个整数,统计其中素数的个数。

要求程序有两个文件组成,一个文件中编写main函数,另一个文件中编写素数判断的函数。

使用文件包含的方式实现。

10.三角形面积为:

area=

s=(a+b+c)/2

其中a、b、c分别是三角形的3条边。

请分别定义计算s和area的宏。

再使用函数实现,比较两者在形式上和使用上的区别。

(1)使用宏实现

#defineS(a,b,c)((a)+(b)+(c))/2

#defineAREA(s,a,b,c)sqrt((s)*((s)-(a))*((s)-(b))*((s)-(c)))

doublea,b,c,s;

inputa,b,c:

scanf("

%lf%lf%lf"

a,&

b,&

c);

s=S(a,b,c);

s=%lf,area=%lf\n"

s,AREA(s,a,b,c));

(2)使用函数实现

doublef1(doublea,doubleb,doublec)

return(a+b+c)/2;

doublef2(doubles,doublea,doubleb,doublec)

returnsqrt(s*(s-a)*(s-b)*(s-c));

s=f1(a,b,c);

s,f2(s,a,b,c));

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

当前位置:首页 > 外语学习 > 英语考试

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

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