南昌大学C++实验5 函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌大学实验报告

学生姓名:学号:专业班级:

实验类型:□验证□综合□√设计□创新实验日期:实验成绩:一、实验名称

实验5 函数

二、实验目的

1.掌握函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法;

2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;

3.在编程过程中加深理解函数调用的程序设计思想。

二.实验内容

1.多模块的程序设计与调试的方法;

2.函数的定义和调用的方法;

3.用递归方法进行程序设计。

三.实验环境

PC微机

DOS操作系统或Windows 操作系统

Turbo C 程序集成环境

四.实验内容

1.编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num 是素数,返回该数;否则返回0值。

要求:(1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。输出格式为:num is prime或num is not prime。

(2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。

2.编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。

计算组合数的公式是:

c(m,n)=m!/(n!*(m-n)!)

要求:

(1)从主函数输入m 和n 的值。对m>n 、m

combinNum(m,n),在主函数内输出结果值。

(2)对m>n 、m

(3)修改程序,把两个函数分别放在两个程序文件中,作为两个文件进行编译、链接

和运行。

3.已知x

sh x sh shx sh y 32)1(++=,其中,sh 为双曲正弦函数,即2)(t

t e e t sh --=,编写一个程序,输入x 的值,求y 的值。

4.整数a,b 的最大公约数是指既能被a 整除又能被b 整除的最大整数。整数a,b 的最小

公倍数是指既是a 的倍数又是b 的倍数的最小整数。编写两个函数,一个函数gcd()的功能

是求两个整数的最大公约数,另一个函数mul()的功能是求两个整数的最小公倍数。

要求:

(1)两个整数在主函数中输入,并在主函数中输出求得的最大公约数和最小公倍数。

(2)首先将两个整数a 和b 作为实参传递给函数gcd (),求出的最大公约数后,由

函数gcd ()带值返回主函数,然后将最大公约数与两个整数a 、b 一起作为实参传递给函

数mul (),以此求出最小公倍数,再由函数mul ()带值返回主函数。

(3)提示:求最大公约数一般采用辗转相除法(Euclid 算法),方法如下:分别让变

量m 和n 存储两个数的值(这里是a 和b)。如果n 为0,那么停止操作,m 中的值就是最大

公约数(GCD ),否则计算m 除以n 的余数,把n 保存到m 中,并把余数保存到n 中。然后

重复上述过程,每次都先判断n 是否为0.

五、实验数据及处理结果

[习题1] 编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num

是素数,返回该数;否则返回0值。[问题分析或算法设计]

[数据需求]

[程序实现]

#include

using namespace std;

int primeNum(int num)

{

for(int i=2;i*i<=num;i++)//i 不需要遍历到num

{

if(!(num%i))//如果能整除则不为素数

return 0;

}

return num;

}

void main()

{

int i;

cout<<"请输入一个整数:";

cin>>i;

int a = primeNum(i);

if(a)

cout<

else

cout<

}

[程序测试]

[习题2] 编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。[问题分析或算法设计]

[数据需求]

[程序实现]

#include

using namespace std;

int combinNum(int m,int n)

{

int ans=1;

for(int i=m;i>=m-n+1;i--)//从m一直乘到m-n+1

ans*=i;

for(int i=n;i>1;i--)//除以n的阶乘

ans/=i;

return ans;

}

void main()

{

int m,n;

cout<<"请输入两个整数m,n:";

cin>>m>>n;

if(m

cout<<"m应该大于n!"<

else if(m>n)

cout<

else

cout<<1<

}

[程序测试]

相关文档
最新文档