C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx

上传人:b****1 文档编号:14008313 上传时间:2023-06-20 格式:DOCX 页数:15 大小:19.72KB
下载 相关 举报
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第1页
第1页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第2页
第2页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第3页
第3页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第4页
第4页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第5页
第5页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第6页
第6页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第7页
第7页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第8页
第8页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第9页
第9页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第10页
第10页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第11页
第11页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第12页
第12页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第13页
第13页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第14页
第14页 / 共15页
C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx

《C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx(15页珍藏版)》请在冰点文库上搜索。

C语言程序设计第3版何钦铭 颜 晖 第5章函数.docx

C语言程序设计第3版何钦铭颜晖第5章函数

第5章函数

【练习5-1】使用函数求1到n之和:

输入一个正整数n,输出1~n之和。

要求自定义和调用函数sum(n)求1~n之和。

若要计算m~n(m

试编写相应程序。

解答:

#include

intsum(intn);

intmain(void)

{

intn;

intsum;

printf("Entern:

")

scanf("%d",&n);

printf("sum=%d\n",sum(n));

return0;

}

intsum(intn)

{

intresult,i;

result=0;

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

result=result+i;

returnresult;

}

若要计算m~n(m

scanf("%d%d",&m,&n);

printf("sum=%d\n",sum(m,n));

同时在函数定义时需设置2个形参:

intsum(intm,intn)

{

intresult,i;

result=0;

for(i=m;i<=n;i++)

result=result+i;

returnresult;

}

【练习5-2】使用函数找最大值:

输入2个数,输出其中较大的数。

要求定义和调用函数max(a,b)找出并返回a、b中较大的数。

试编写相应程序。

解答:

#include

doublemax(doublea,doubleb);

intmain(void)

{

inta,b;

printf(“Inputaandb:

”);

scanf("%lf%lf",&a,&b);

printf("max=%lf\n",max(a,b));

return0;

}

doublemax(doublea,doubleb)

{

if(a>b)

returna;

else

returnb;

}

【练习5-3】数字金字塔:

输入一个正整数n,输出n行数字金字塔。

试编写相应程序。

解答:

#include

intmain(void)

{

intn,i,j;

printf(“Entern:

”);

scanf("%d",&n);

for(i=1;i<=n;i++){

for(j=1;j<=n-i;j++)

printf("");

for(j=1;j<=i;j++)

printf("%d",i);

putchar('\n');

}

return0;

}

【练习5-4】思考:

若把例5-9中静态变量f定义成普通局部变量,还能实现计算n!

吗?

请上机检验。

若把f换成全局变量又会如何?

解答:

若把例5-9中静态变量f定义成普通局部变量,无法实现计算n!

,因为函数返回后f单元被系统回收,不再保存原有数据。

若把f换成全局变量,则能实现计算n!

,因为f的作用范围和生命周期一直存在。

习题5

一、选择题

1.在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为D。

A.voidB.doubleC.charD.int

2.下列程序的输出结果是D。

fun(inta,intb,intc)

{c=a*b;}

intmain(void)

{intc;

fun(2,3,c);

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

return0;

}

A.0B.1C.6D.无法确定

3.建立自定义函数的目的之一是B(优先)、C。

A.提高程序的执行效率B.提高程序的可读性

C.减少程序的篇幅D.减少程序文件所占内存

4.以下正确的函数定义形式是A。

A.doublefun(intx,inty)B.doublefun(intx;inty)

C.doublefun(intx,inty);D.doublefun(intx,y)

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

A.实参可以是常量、变量或表达式

C.形参可以是常量、变量或表达式

B.实参可以是任何类型

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

6.以下正确的说法是D。

A.实参与其对应的形参共同占用一个存储单元

B.实参与其对应的形参各占用独立的存储单元

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

D.形参是虚拟的,不占用内存单元

二、填空题

1.下列程序的输出结果为2357。

#include

intfun3(intm);

intmain(void)

{intn;

for(n=1;n<10;n++)

if(fun3(n)==1)printf("%d",n);

return0;

}

intfun3(intm)

{inti;

if(m==2||m==3)return1;

if(m<2||m%2==0)return0;

for(i=3;i

if(m%i==0)return0;

return1;

}

2.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列,请根据题意,将程序补充完整。

#include

intfun1(intm);

intmain(void)

{intn;

scanf("%d",&n);

while(n>0){

if(fun1(n))

printf("%d中各位数字按从小到大排列\n",n);

scanf("%d",&n);

}

}

intfun1(intm)

{intk;

k=m%10;

while(m)

if(m/10%10>k)

return0;

else{m=m/10;k=m%10;}

return1;

}

3.下列函数输出一行字符:

先输出kb个空格,再输出n个指定字符(由实参指定)。

请根据题意,将程序补充完整。

#include

voidprint(intkb,intn,charzf)

{inti;

for(i=1;i<=kb;i++)

printf(“”);

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

printf(“%c”,zf);

}

三、程序设计题

1.使用函数计算分段函数的值:

输入x,计算并输出下列分段函数f(x)的值。

要求定义和调用函数sign(x)实现该分段函数。

试编写相应程序。

1x>0

f(x)=0x=0

-1x<0

解答:

#include

intmain(void)

{

intsign(intx);

intx,y;

scanf("%d",&x);

y=sign(x);

printf("sign(%d)=%d\n",x,y);

return0;

}

intsign(intx)

{

inty;

if(x>0)y=1;

elseif(x==0)y=0;

elsey=-1;

returny;

}

2.使用函数求奇数和:

输入一批正整数(以零或负数为结束标志),求其中的奇数和。

要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。

试编写相应程序。

解答:

#include

inteven(intn);

intmain(void)

{

intn,sum;

scanf("%d",&n);

sum=0;

while(n>0){

if(even(n)==0)sum=sum+n;

scanf("%d",&n);

}

printf("Thesumoftheoddnumbersis%d.\n",sum);

return0;

}

inteven(intn)

{

inty;

if(n%2==0)y=1;

elsey=0;

returny;

}

3.使用函数计算两点间的距离:

给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位小数)。

要求定义和调用函数dist(x1,y1,x2,y2)计算两点之间的距离。

试编写相应程序。

解答:

#include

#include

doubledist(doublex1,doubley1,doublex2,doubley2);

intmain(void)

{

doublex1,y1,x2,y2;

printf("Enterx1andy1:

");

scanf("%lf%lf",&x1,&y1);

printf("Enterx2andy2:

");

scanf("%lf%lf",&x2,&y2);

printf("Distance=%.2lf",dist(x1,y1,x2,y2));

return0;

}

doubledist(doublex1,doubley1,doublex2,doubley2)

{

doubledistance;

distance=sqrt(pow(fabs(x2-x1),2)+pow(fabs(y2-y1),2));

returndistance;

}

4.利用函数计算素数个数并求和:

输入两个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。

要求定义并调用函数prime(m)判断m是否为素数。

试编写相应程序。

解答:

#include

#include

intprime(intm);

intmain(void)

{

intm,n,sum,count;

printf("Inputm:

");

scanf("%d",&m);

printf("Inputn:

");

scanf("%d",&n);

sum=0;

count=0;

for(;m<=n;m++){

if(prime(m)==1){

sum=sum+m;

count++;

}

}

printf("%d和%d之间素数的个数:

%d\n",m,n,count);

printf("%d和%d之间素数的和:

%d\n",m,n,sum);

return0;

}

intprime(intm)

{

inti;

for(i=2;i<=sqrt(m);i++)

if(m%i==0)return0;

if(i>h&&m!

=1)return1;

}

5.使用函数统计指定数字的个数:

读入一个整数,统计并输出该数中“2”的个数。

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。

例如,countdigit(12292,2)的返回值是3。

试编写相应程序。

解答:

#include

intcountdigit(intnumber,intdigit);

intmain(void)

{

intnumber,digit;

printf("Enteraninteger:

");

scanf("%d",&number);

printf("Numberofdigit");

scanf("%d",&digit);

printf(":

%d",countdigit(number,digit));

return0;

}

intcountdigit(intnumber,intdigit)

{

inta,count;

if(number<0)number=-number;

while(number>0){

a=number;

if(number%10==digit)

count++;

number=number/10;

}

returncount;

}

6.使用函数输出水仙花树:

输入两个正整数m和n(1<=m,n<=1000),输出m~n之间所有满足各位数字的立方和等于它本身的数。

要求定义并调用函数is(number),判断number的各位数字之立方和是否等于它本身。

试编写相应程序。

解答:

#include

intis(intnumber);

intmain(void)

{

inti,m,n;

printf("Inputmandn:

");

scanf("%d%d",&m,&n);

printf("result:

\n");

for(i=m;i<=n;i++)

if(is(i)!

=0)

printf("%d\n",i);

return0;

}

intis(intnumber)

{

intdigit,sum,temp;

temp=number;

sum=0;

while(temp!

=0){

digit=temp%10;

temp=temp/10;

sum=sum+digit*digit*digit;

}

returnsum==number;

}

7.使用函数求余弦函数的近似值:

输入精度e,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。

要求定义和调用函数funcos(e,x)求余弦函数的近似值。

试编写相应程序。

cosx=x0/0!

-x²/2!

+x4/4!

-x6/6!

+…

解答:

#include

#include

doublefuncos(doublee,doublex);

intmain(void)

{

doublee,sum,x;

printf("Inputeandx:

");

scanf("%lf%lf",&e,&x);

sum=funcos(e,x);

printf("cos%lf=%lf\n",x,sum);

return0;

}

doublefuncos(doublee,doublex)

{

intflag,i;

doubleitem,sum,tmp,power;

flag=1;

power=1;

tmp=1;

i=0;

item=1;

sum=0;

while(fabs(item)>=e){

item=flag*power/tmp;

sum=sum+item;

power=power*x*x;

tmp=tmp*(i+1)*(i+2);

flag=-flag;

i=i+2;

}

returnsum;

}

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2