实验05 函数结构程序设计.docx

上传人:b****5 文档编号:3118008 上传时间:2022-11-17 格式:DOCX 页数:20 大小:851.73KB
下载 相关 举报
实验05 函数结构程序设计.docx_第1页
第1页 / 共20页
实验05 函数结构程序设计.docx_第2页
第2页 / 共20页
实验05 函数结构程序设计.docx_第3页
第3页 / 共20页
实验05 函数结构程序设计.docx_第4页
第4页 / 共20页
实验05 函数结构程序设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验05 函数结构程序设计.docx

《实验05 函数结构程序设计.docx》由会员分享,可在线阅读,更多相关《实验05 函数结构程序设计.docx(20页珍藏版)》请在冰豆网上搜索。

实验05 函数结构程序设计.docx

实验05函数结构程序设计

实验05函数结构程序设计

班级:

A

学号:

C语言

姓名:

A

第1题

第2题

第3题

第4题

第5题

总成绩

第6题

第7题

第8题

第9题

第10题

选做题

一.【实验目的】

1、熟练掌握函数的定义、声明和调用。

2、熟练掌握使用函数编写程序。

3、掌握函数的实参、形参和返回值的概念及使用。

二.【实验内容】

1、【程序示例】程序功能:

输入一个正整数n,计算s=1+1/2!

+....+1/n!

的前n项的和(保留4位小数),要求:

定义并调用函数fact(n)计算n的阶乘。

【打开“第1题”文件夹中名为proj5_1.c文件,阅读完善程序并保存】:

【解题思路】:

A.本题要求采用主函数调用子函数的程序结构。

主函数使用单重循环结构,每次调用子函数返回第i项的分母i!

并计算第i项,然后累加第i项。

子函数使用单重循环结构,计算i!

并返回计算结果。

由于循环次数已知,一般选用for语句。

B.函数设计:

●子函数fact:

计算n!

并返回计算结果。

✧函数返回值类型:

double型。

✧函数参数:

一个int型参数,代表要计算阶乘的某个整数。

✧函数体:

计算n!

n!

=1*2*3*…*n,它是一个连乘式,使用单重循环来实现。

计算式为product=product*i,product初值为1,i从1变化到n。

用类for语句表示如下:

product=1;

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

●主函数main():

计算多项式s=1+1/2!

+1/3!

+…+1/n!

的前n项和,使用单重循环实现。

计算式为sum=sum+item,sum初值设为0,item从1/1!

变化到第1/n!

在求累加和的循环结构中,每次完成计算item(即1/i!

,i!

需调用fact函数)、累加item两项操作。

用类for语句表示如下:

sum=0;

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

item=1/fact(i);/*调用fact函数计算i!

*/

sum=sum+item;

}

【完善的程序段】:

【调试、运行程序】:

运行结果:

输入一个正整数:

5

1+1/2!

+…+1/5!

=1.7167

【源程序代码截屏】:

【运行结果截屏】:

2、【程序模仿】程序功能:

输入一个正整数n和一个实数x(x范围在区间[-6.28,+6.28]之间),计算

的前n项的和(保留4位小数),要求:

定义并调用函数fact(n)计算n的阶乘,定义并调用函数power(x,n)计算xn。

【打开“第2”题文件夹中名为proj5_2.c文件,在指定位置添加语句,完善程序并保存】:

【解题提示】:

认真阅读并理解第1题的解题思路和程序清单,思考以下几个问题,寻找本题的解题方法。

A.循环语句选择问题?

选择for、while还是do-while。

B.比较幂函数与阶乘函数的连乘变量初值、连乘式有何不同?

【测试数据】

(1)输入:

50输出:

1.0000

(2)输入:

51.57输出:

0.0008

【源程序代码截屏】:

【运行结果截屏】:

3、【程序示例】程序功能:

输入两个正整数m和n,求m和n的最大公约数。

要求:

定义并调用函数gys(m,n)求m和n的最大公约数。

【打开“第3”题文件夹中名为proj5_3.c文件,阅读完善程序并保存】:

【解题思路】:

A.本题要求采用主函数调用子函数的程序结构。

主函数调用子函数返回m和n的最大公约数。

子函数计算m和n的最大公约数并返回计算结果。

B.函数设计:

●子函数gys:

求m和n的最大公约数并返回计算结果。

✧函数返回值类型:

int型。

✧函数参数:

两个int型参数,代表两个求最大公约数的整数。

✧函数体:

计算并返回m和n的最大公约数。

算法思想:

设置变量j代表m和n的最大公约数,其初值等于m和n中较小数,然后循环检查m和n是否能同时整除j,若不能,则将j递减1,继续检查,直到m和n能同时整除j为止,此时j就是最大公约数。

由于循环次数未知,选用while或do-while语句。

用类while语句表示如下:

if(m

while(m%j!

=0||n%j!

=0)j--;

●主函数main():

输入m和n,调用函数gys(m,n)求最大公约数,最后输出结果。

用类for语句表示如下:

【调试、运行程序】:

运行结果:

输入两个正整数m和n:

1824

18与24的最大公约数是6

【源程序代码截屏】:

【运行结果截屏】:

4、【程序模仿】程序功能:

输入两个正整数m和n,求m和n的最小公倍数。

要求:

定义并调用函数gbs(m,n)求m和n的最小公倍数。

【打开“第4”题文件夹中名为proj5_4.c文件,阅读完善程序并保存】:

【解题提示】:

认真阅读并理解第3题的解题思路和程序清单,思考以下几个问题,寻找本题的解题方法。

A.子函数gby的设计:

设置变量j代表m和n的最小公倍数,其初值等于m和n中较大数,然后循环检查j是否能同时整除m和n,若不能,则将j递加m与n的较大数,继续检查,直到j能同时整除m和n为止,此时j就是最小公倍数。

B.子函数循环语句选择问题?

选择for、while还是do-while。

【源程序代码截屏】:

【运行结果截屏】:

5、【程序示例】程序功能:

输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

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

【打开“第5题”文件夹中名为proj5_5.c文件,阅读完善程序并保存】:

【解题思路】:

A.本题要求采用主函数调用子函数的程序结构。

主函数调用子函数返回判定结果。

子函数判定整数n是否素数并返回判定结果。

B.从输出结果程序段if语句中的条件“flag==1”可知,flag是标志变量,1代表素数,0代表非素数。

C.函数设计:

●子函数prime:

判定整数n是否素数并返回判定结果。

✧函数返回值类型:

int型。

✧函数参数:

一个int型参数,代表要判定是否素数的整数。

✧函数体:

判定整数n是否素数并返回判定结果。

算法步骤如下:

a)设置变量flag的初值,若n是1,则将flag初值置0,表示n不是素数,否则,将flag初值置1。

b)循环检查n能否被[2,n/2]间的整数整除,若都不能整除,则n是素数,否则n非素数,将flag置0并退出循环。

由于循环次数已知,选用for语句。

用类for语句表示如下:

if(n==1)flag=0;elseflag=1;

for(i=2;i<=n/2;i++)

if(n%i==0){flag=0;break;}

c)返回flag。

●主函数main():

输入n,调用子函数prime(n)返回判定结果,最后根据返回值输出结果。

【完善的程序段】:

/*请在两条星线之间填入相应的代码,声明prime函数*/

/************************************************/

intprime(intn);

/************************************************/

/*请在两条星线之间填入相应的代码,调用函数prime判定n是否是素数*/

/****************************************************************/

flag=prime(n);

/****************************************************************/

/*请在两条星线之间填入相应的代码,判定n是否是素数*/

/*****************************************************/

if(n==1)flag=0;elseflag=1;

for(i=2;i<=n/2;i++)

if(n%i==0){flag=0;break;}

/*****************************************************/

【调试、运行程序】:

运行结果:

输入一个正整数:

6NO

输入一个正整数:

29YES

【源程序代码截屏】:

【运行结果截屏】:

6、【程序模仿】程序功能:

输入两个正整数m和n(1<=m<=n<=500),统计并输出m到n之间的素数个数以及这些素数和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

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

【打开“第6题”文件夹中名为proj5_6.c文件,阅读完善程序并保存】:

【解题提示】:

认真阅读并理解第5题的解题思路和程序清单,思考以下几个问题,寻找本题的解题方法。

A.子函数prime的设计:

算法提示请参考第5题,与第5题有何不同?

B.主函数设计:

如何实现求计数与累加?

flag、count、sum几个变量的含义。

【源程序代码截屏】:

【运行结果截屏】:

7、【程序示例】程序功能:

输入一个长整数m和一个数字d,统计并输出m中包含数字d的个数。

要求定义并调用函数countdigit(m,d),统计整数m中包含数字d的个数。

例如:

调用函数countdigit(10090,0),返回10090中数字0的个数,返回值是3。

【打开“第7题”文件夹中名为proj5_7.c文件,阅读完善程序并保存】:

【解题思路】:

A.本题要求采用主函数调用子函数的程序结构。

主函数调用子函数返回结果。

子函数统计长整型m中包含数字d的个数。

B.从主函数输出结果程序段可知,in是长整数,d是某数字,count是in中包括d的个数。

C.函数设计:

●子函数countdigit:

统计长整数m中包含数字d的个数。

✧函数返回值类型:

int型。

✧函数参数:

两个参数,一个long型,一个int型。

✧函数体:

统计长整数m中包含数字d的个数。

算法步骤如下:

c)设置计数变量count初始值为0。

d)假定长整数m,循环分离出m的末位数,若末位数等于数字d,则计数变量count加1,再去掉m的末位数,直到m等于0为止。

由于循环次数未知,选用while或do-while语句。

用类while语句表示如下:

count=0;/*计数器变量初始化*/

while(m!

=0){/*当m!

=0时,执行循环*/

gw=m%10;/*取m的末位数*/

if(gw==d)count++;/*计数*/

m=m/10;/*去掉m的末位数*/

}

c)返回count。

●主函数main():

输入长整数in和数字d,调用子函数countdigit(in,d)函数返回结果,最后根据返回值输出结果。

【调试、运行程序】:

运行结果:

输入一个长整数m和一个数字d:

101034011

10103401中包含数字1的个数3

【源程序代码截屏】:

【运行结果截屏】:

8、【程序模仿】程序功能:

输入两个正整数m和n(1<=m<=n<=1000),输出m到n间所有满足各位数字的立

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

当前位置:首页 > PPT模板 > 节日庆典

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

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