C++程序设计 实验三

实验三 函数

  • 实验目的

本实验主要培养、训练学生对函数的理解,要求:

  1. 掌握函数的定义、声明的方法;  
  2. 掌握函数的编写要求;
  3. 掌握函数的调用方法;
  4. 掌握函数参数的传递方法;
  5. 掌握变量的作用域;
  6. 掌握多文件编程方法。

  • 实验内容

1、输入自然数 m 和 n, 

(1)求他们的最大公约数(或称最大公因数)。

         要求输入、输出在主函数中进行,求公约数由函数实现。

(2)在函数中求最大公约数与最小公倍数。(提示:使用引用参数)

2、编写程序满足:声明一个函数,判断一个整数是否为素数,使用以下函数头:bool is_prime(int num),如果num是素数,函数返回true,否则返回false;

利用函数is_prime找出前200个素数,并按每行10个输出:

 2  3  5  7  11  13  19  23  29

3、编程实现摄氏温度到华氏温度的转换:

编写一个头文件,包含下面两个函数:

double celsius_to_fah(double cel) //摄氏温度到华氏温度

double fahrenheit_to_cels(double fah) //华氏温度到摄氏温度

实现头文件,并编写测试程序,调用函数显示如下结果:

Celsius Fahrenheit | Fahrenheit Celsius

40.0 10.0 | 120.0 48.89

…… …… | …… ……

31.0 87.8 | 30.0 -1.11

39.0 102.0 | 110.0 43.33

(测试程序为主模块,即main( )函数所在cpp文件,头文件mytemperature.h只有函数声明;函数定义写在另一cpp文件mytemperature.cpp)

4、猴子吃桃:猴子第一天摘若干桃子,当即吃了一半,还不过瘾,又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃一个,以后每天如此,到第10天,发现只剩最后一个桃子,问:第一天猴子共摘多少桃子(用递归实现)。

  • 实验过程

1、输入自然数 m 和 n, 

(1)求他们的最大公约数(或称最大公因数)。

       要求输入、输出在主函数中进行,求公约数由函数实现。

(2)在函数中求最大公约数与最小公倍数。(提示:使用引用参数)

(1)程序:

#include<iostream>

using namespace std;

int ys(int,int);

int main()

{

  int m,n;

  cin>>m>>n;

  cout<<”最大公约数为”<<ys(m,n)<<endl;

  return 0;

 }

 int ys(int x,int y)

 {

  int Y;

  for(int i=1;i<=x&&i<=y;i++)

  {

    if(x%i==0&&y%i==0)

    {

       Y=i;

    }

  }

  return Y;

 }

结果:

输入:

分别输入2,3;4,8,观察运行结果

  • 输入2,3时

  • 输出最大公约数1
  • 输入4,8时

  • 输出最大公约数4

(2)程序:

#include<iostream>

using namespace std;

void ys(int &x,int &y);

void bs(int &x,int &y);

int main()

{

  int m,n;

  cin>>m>>n;

  ys(m,n);

  bs(m,n);

  return 0;

}

void ys(int &x,int &y)

{

  int Y;

  for(int i=1;i<=x&&i<=y;i++)

  {

    if(x%i==0&&y%i==0)

    { Y=i;}
  }

   cout<<"最大公约数为"<<Y<<endl;
}

void bs(int &x,int &y)

{

  int B;

  for(int i=1;;i++)

  {

   if(i%x==0&&i%y==0)
   {  B=i; break; }

  }
cout<<"最小公倍数为"<<B<<endl;
}

结果:

输入:

分别输入4,8;5,13,观察运行结果

  • 输入4,8时

  • 输出最大公约数4,最小公倍数8
  • 输入5,13时

  • 输出最大公约数1,最小公倍数65

2、编写程序满足:声明一个函数,判断一个整数是否为素数,使用以下函数头:bool is_prime(int num),如果num是素数,函数返回true,否则返回false;

利用函数is_prime找出前200个素数,并按每行10个输出:

 2  3  5  7  11  13  19  23  29

程序 :

#include<iostream>

#include<iomanip>

using namespace std;

bool is_prime(int num);

int main()

{

  int n=0;

  for(int i=2;;i++)

  {

   if(is_prime(i))

   {

   cout<<setw(5)<<i<<" ";

      n++;

   if(n>0&&(n%10==0)) { cout<<endl;}

   }

    if(n==200)  { break;}

  }

  return 0;

}

bool is_prime(int num)

{

  int m;

  bool prime=true;

  for(int i=2;i<num;i++)

  {

    if(num%i==0){

    prime=false;

    break;

    }

  }

  return prime;

}

结果:

  • 输出前200个素数,并按每行10个输出

 

3、编程实现摄氏温度到华氏温度的转换:

编写一个头文件,包含下面两个函数:

double celsius_to_fah(double cel) //摄氏温度到华氏温度

double fahrenheit_to_cels(double fah) //华氏温度到摄氏温度

实现头文件,并编写测试程序,调用函数显示如下结果:

Celsius Fahrenheit | Fahrenheit Celsius

40.0 105.0 | 120.0 48.89

…… …… | …… ……

31.0 87.8 | 30.0 -1.11

39.0 102.0 | 110.0 43.33

(测试程序为主模块,即main( )函数所在cpp文件,头文件mytemperature.h只有函数声明;函数定义写在另一cpp文件mytemperature.cpp)

程序:

主程序:

#include<iostream>

#include "mytemperature.h";

using namespace std;

int main()

{

  double cel,fah;

  cout << "Celsius Fahrenheit: ";

  cin >> cel;

  printf("%.1f %.1f\n",cel, celsius_to_fah(cel));

  cout << "Fahrenheit Celsius: ";

  cin >> fah;

  printf("%.1f %.2f\n",fah, fahrenheit_to_cels(fah));

  return 0;

}

函数mytemperature.cpp:

#include<iostream>

double celsius_to_fah(double cel)

{

  double f;

  f = cel * 1.8 + 32;

  return f;

}

double fahrenheit_to_cels(double fah)

{

  double c;

  c = (fah - 32)/1.8;

  return c;

}

头文件mytemperature.h:

#ifndef _mytemperature_h_

#define _mytemperature_h_

double celsius_to_fah(double cel);//摄氏温度到华氏温度

double fahrenheit_to_cels(double fah); //华氏温度到摄氏温度

#endif

结果:

输入与输出

  • 输入摄氏度40.0,华氏度120.0

  • 输出转化后的华氏度104.0,转化后的摄氏度48.89
  • 输入摄氏度31.0,华氏度30.0

  • 输出转化后的华氏度87.8,转化后的摄氏度-1.11

4、猴子吃桃:猴子第一天摘若干桃子,当即吃了一半,还不过瘾,又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃一个,以后每天如此,到第10天,发现只剩最后一个桃子,问:第一天猴子共摘多少桃子(用递归实现)。

程序:

#include<iostream>

using namespace std;

int f(int n);

int main()

{

  int n=1;

  cout<<"第一天摘的桃子数为"<<f(n)<<endl;

  return 0;

}

int f(int n)

{

  int num;

  if(n==10)

  {

   num=1;

   return num;

  }

  else

  num=(f(n+1)+1)*2;

  return num;

}

结果:

  • 直接输出第一天摘的桃子数为1534

、实验思考

1、本实验中函数中返回的值为什么与函数类型一致?

  • 函数本没有类型,只是为了识别返回值的类型,才在声明中在函数前面也加了这个类型,一遍编译程序把返回值以这个指定类型来处理。所以,函数中返回值的类型只能与函数声明时的类型一致。

2、本实验中主函数调用函数时采用的是何种传递方式?

  • 传用参数的传递方式。

五、体会

这节实验内容相比前两节难度增大了许多,但经过不断尝试可以较好地完成,并对c++中的函数知识有较好的掌握。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值