实验二 函数的应用

实验二 函数的应用

一、实验目的

1.了解C++开发工具并学习使用

2.理解函数的形参、函数原型、内联函数;学会编制重载函数和递归函数。

二、实验内容

1.编写函数实现递归方式求取整数n的阶乘,要求在主函数中输入整数n,通过调用输出结果,例如输入5,得到5!=120。

2.编写函数求两个整数的最大公约数和最小公倍数。

3.编写函数输出指定行数的星星等腰三角形。例如输入:5,得到以下图形。

图片描述

4.编写函数实现从键盘输入一个正整数,将其按照二进制进行输出。例如,将135打印成10000111.

5.编写函数实现输出从1 开始的整数矩阵。例如输入4,5,则能够输出4x5的矩阵:

1    2   3   4  5

6  7  8  9  10

11  12  13  14  15

16  17  18  19  20

6.编写函数输出能够整除某数的所有因子,能够实现从键盘输入两个整数,例如,输入6,则输出1,2,3,6。

7.编写函数输出指定范围内的质数。例如输入100,200,则能够实现求出100-200之间的质数。

8.编写函数求平面中两个点坐标(x1,y1)与(x2,y2)的距离。例如输入:0 0 3 4,则得到坐标(0,0)与(3,4)两个点之间的距离为5。

9.编写三个同名的函数:函数返回类型 Area(…),它们之间形成重载,分别用于求圆的面积,矩形的面积,三角形面积。

10.理解下面的程序,并在IDE中运行,查看结果,回答程序后面的问题。

#include <iostream>
using namespace std;
void swap(int a, int b)
{
 int temp = a;
 a = b;
 b = temp;
}
void swap(int *a, int *b)
{
 int temp = *a;
 *a = *b;
 *b = temp;
}
int main()
{
 int i = 5;
 int j = 10;
 cout<<"Before swap: i="<<i<<",j="<<j<<endl;
 swap(i,j); -------------------------------------------------------①
 cout<<"After the first swap: i="<<i<<",j="<<j<<endl;
 swap(&i,&j); -----------------------------------------------------②
 cout<<"After the second swap: i="<<i<<",j="<<j<<endl;
 
 return 0;
}

1.问题一:上述程序3的输出结果是什么?

答:

2.问题二:程序3在①处函数调用后并不能实现两个数的交换,而②处却可以,为什么?

答:

3.问题三:程序3在②处调用的是哪个重载函数?

答:

三、实验步骤及结果

题目1

/*
程序名:题目1.cpp
功能:编写函数实现递归方式求取整数n的阶乘,要求在主函数中输入整数n
日期:2021.9.28
版本:1.0
*/
#include <iostream>
using namespace std;
unsigned fac(unsigned n){    
	unsigned f;
	if(n==0)      //注意n可以等于0的特殊情况
        f=1;
	else
	    f=fac(n-1)*n;
	return f;  
}

int main(){
	unsigned n;
	cout<<"Enter a positive integer:";
	cin>>n;
	unsigned x=fac(n);
	cout<<n<<"!="<<x<<endl;
	return 0; 
}

运行结果截图:

图片描述

题目2

/*
程序名:题目2.cpp
功能:函数求两个整数的最大公约数和最小公倍数。
日期:2021.9.28
版本:1.0
*/
#include <iostream>
using namespace std;
int main()
{
	int yue(int,int);
	int bei(int,int,int);
	int gy;
	int gb;        
	int n,m;
	cout<<"输入两个整数:";
	cin>>n>>m;
	gy = yue(n,m);
	gb = bei(n,m,gy);
	cout<<"两数的最大公约数为:"<<gy<<endl;
	cout<<"两数的最小公倍数为:"<<gb<<endl;
}
int yue(int n,int m){
	int r;
	while(n>0){
		r = m%n;
		m=n;
		n=r;
	}
    return m;
}

int bei(int n,int m,int gy){   //搞完公约再搞公倍
	return (n*m/gy);
}


运行结果截图:图片描述

题目3

/*
程序名:题目3.cpp
功能:函数输出指定行数的星星等腰三角形。
日期:2021.9.28
版本:1.0
*/
#include<iostream>
using namespace std;
int f(int x){
	x = x * 2; 
	for(int i = 1;i<=x;i+=2){
		int y = (x - i) / 2;
		for(int j = 1;j<=y;j++){
			cout<<' ';    //输出对应数目空格
		}
		for(int j = 1;j<=i;j++){
			cout<<'*';  //输出对应数目*
		}
		cout<<endl;
	}
}
int main(){
	int n;
	cout<<"请输入你要的行数:"; 
	while(cin>>n){
		f(n);
	}
	return 0;
}

运行结果截图:图片描述

题目4

/*
程序名:题目4.cpp
功能:函数实现从键盘输入一个正整数,将其按照二进制进行输出。
日期:2021.9.28
版本:1.0
*/
#include <iostream>
using namespace std;
void fun(int num) {
	if (num > 1) {
		fun(num/2);
		cout << num % 2;
	} else {
		cout << num;
	}
}
int main () {
	int x;
	cout << "请输入一个十进制的数:" ; 
	cin >> x;
	fun(x);
	cout << endl;
	return 0;
} 

运行结果截图:图片描述

题目5


/*
程序名:题目5.cpp
功能:函数实现输出从1 开始的整数矩阵。
日期:2021.9.28
版本:1.0
*/

#include <iostream>
using namespace std;
int fun1(int a, int b){
    int n=1;int c=1;int d=1;
    while(c<=a){
        for(n=1;n<=b;n=n+1){     
        cout<<d<<"\t";
        d=d+1;
        }
    cout<<endl;
    c=c+1;
    }
return 0;
}
int main(){
    int x,y;
    cout<<"输入矩阵数:" ;
    cin>>x>>y;
    fun1(x,y);
    return 0;
}


输出结果截图:图片描述

题目6

/*
程序名:题目6.cpp
功能:函数输出能够整除某数的所有因子,能够实现从键盘输入
日期:2021.9.28
版本:1.0
*/
#include <iostream>
using namespace std;
void sum(int a)
{
    for (int i=1;i<=a;i++)
    {
        if (a%i == 0)   //整除 
        {
            cout << i << ",";
        }
    }
}

int main() {
    int a;
    cout<<"请输入一个数:"; 
    cin >> a;
    sum(a);
    return 0;
}

输出结果截图:图片描述

题目7

/*
程序名:题目7.cpp
功能:函数输出指定范围内的质数
日期:2021.9.28
版本:1.0
*/
#include <iostream>
using namespace std;
void num(int a,int b)
{
    for (int i = a; i <= b; i++)
    {
        for (int j = 2, a = 0; j < i; j++)
        {
            a = i % j;
            if (a == 0)
            {
                break;
            }
            else if (j == i - 1)
            {
                cout << i << endl;
            }
        }
    }


}

int main() {
    int a = 0, b = 0;
    cout << "请输入范围:" ;
    cin >> a;
    cin >> b;
  
    num(a, b);

    return 0;
}

运行结果截图:图片描述

题目8

/*
程序名:题目8.cpp
功能:编写函数求平面中两个点坐标(x1,y1)与(x2,y2)的距离。
日期:2021.9.28
版本:1.0
*/
#include <iostream>
#include <math.h>
using namespace std;

void  len(int a, int b, int c, int d)
{
    int p = (a > c ? a - c: c - a);
    int q = (b > d ? b - d : d - b);
    double L = sqrt(p*p + q * q);
    cout << "这两个点之间的距离是:" << L << endl;
}

int main() {
    int a=0, b=0, c=0, d=0;
    cout << "请输入四个数值:" ;
    cin >> a;
    cin >> b;
    cin >> c;
    cin >> d;
    len(a, b, c, d);
    return 0;
}

运行结果截图:图片描述

题目9


/*
程序名:题目9.cpp
功能:三个同名的函数:函数返回类型 Area(…),它们之间形成重载,分别用于求圆的面积,矩形的面积,三角形面积。
日期:2021.9.28
版本:1.0
*/
#include<iostream>    //该题目写的过程中有问同学
#include<math.h>
using namespace std;
int Area(int a){
    float S;
    float n=3.1415926;
    S=n*a*a*0.5;
    cout<<"半径为:"<<a<<"的圆面积为"<<S<<endl;
    return 0;
}
int Area(int a,int b){
    float S;
    S=a*b;
    cout<<"长宽为:"<< a << b <<"的矩形的面积为"<<S<<endl;
    return 0;
}
int Area(double a,double b,double c){
    double S,d;
    d=(a+b+c)*0.5;
    S=sqrt(d*(d-a)*(d-b)*(d-c));
    cout<<"三边为:"<< a << b << c <<"的三角形面积为"<<S<<endl;
    return 0;
}
int main(){
    float x;
    cout<<"输入所求圆的半径:";
    cin>>x;
    Area(x);
    float y, z;
    cout<<"输入所求矩形的长和宽:";
    cin>>y>>z;
    Area(y,z);
    int o, p, q;
    cout<<"输入所求三角形的三边长:";
    cin>>o>>p>>q;
    Area(o,p,q);
    return 0;
}

运行结果截图:图片描述

题目10

#include <iostream>
using namespace std;
void swap(int a, int b)
{
 int temp = a;
 a = b;
 b = temp;
}
void swap(int *a, int *b)
{
 int temp = *a;
 *a = *b;
 *b = temp;
}
int main()
{
 int i = 5;
 int j = 10;
 cout<<"Before swap: i="<<i<<",j="<<j<<endl;
 swap(i,j); -------------------------------------------------------①
 cout<<"After the first swap: i="<<i<<",j="<<j<<endl;
 swap(&i,&j); -----------------------------------------------------②
 cout<<"After the second swap: i="<<i<<",j="<<j<<endl;
 
 return 0;
}

运行结果截图:图片描述

1.问题一:上述程序3的输出结果是什么?

答:Before swap: i=5,j=10

After the first swap: i=5,j=10

After the second swap: i=10,j=5

2.问题二:程序3在①处函数调用后并不能实现两个数的交换,而②处却可以,为什么?

答:①处仅把实参的值copy给了形参不对实参造成影响。② 处函数运用指针地址传递,把实参的地址传递给了指针,因此可以影响实参的值。

3.问题三:程序3在②处调用的是哪个重载函数?

答:void swap(int *a, int *b)

四、实验小结

问题与解决办法:

1.有时候莫名无法运行 但是又没报错

解决:找到有一行代码少了;

2.遇到不会的题了 一直想不明白

解决:问同学 看别人的代码

心得体会:

已经是大学了,学习不能死扣一道题很久,网上有很多资源,包括同学老师都可以问,能够解决问题下次记住就很好,提升自己的做题效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一只大狸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值