广州大学学生实验报告,程序设计基础,实验2函数

广州大学学生实验报告

开课学院及实验室:计算机学院/电子信息楼             202x年  月  日

  

计算机

年级/专业/

计科

姓名

Great

Macro

学号

实验课程名称

程序设计基础

成绩

实验项目名称

实验2函数

指导老师

(***(1)报告只能为文字和图片;(2)实验项目名称不能有任何改动;(3)必须填写正确的姓名和学号;否则会影响最后成绩的统计,后果自负***)

一、实验目的及要求

1.掌握函数的定义方法,及函数调用的形式;

2.掌握函数实参与形参的对应关系,“值传递”与“地址传递”的方式与区别;

3.掌握函数的应用方法,熟悉函数的嵌套调用和递归调用的设计方法;

4.了解全局变量、局部变量、动态变量及静态变量的概念和使用方法;

5.综合应用顺序结构选择结构循环结构的设计方法设计函数程序。

二、实验设备与平台

1. 实验设备:计算机;

2. 平台:Windows操作系统,Visual C++ 6.0或Microsoft Visual Studio 2005/2008/2010/2012/2013/2015/2017/2019;或适合的C/C++编程环境。

三、实验内容及步骤

编写程序,解下列问题,然后把编写的程序代码和运行结果截图复制到题目后面的空白处。

1、求三角形的面积。已知三角形的三边a、b、c,则三角形的面积为

 (1)三角形的三边的边长由cin输入,需要判断这三边是否构成一个三角形。若是,则计算其面积并输出,否则输出“错误:不能构成三角形!”。

(2)程序中要包含两个函数,一个函数判断是否构成三角形,另一个函数计算三角形的面积。

#include <iostream>
#include <math.h>
using namespace std;

int check(float a, float b, float c)
{
    if(a + b > c && a + c > b && b + c > a 
        && a - b < c && a - c < b && b - c < a)
        {
            return 1;
        }
    
    return 0;
}

float Area(float a, float b, float c)
{
    float s;
    s = (a + b + c) / 2;

    return sqrt(s*(s-a)*(s-b)*(s-c));
}

int main()
{
    float a, b, c;
    cout << "请输入三角形的三条边(用空格分开):";
    cin >> a >> b >> c;

    if(check(a, b, c))
    {
        cout << "该三角形的面积是:" << Area(a, b, c) << endl;
    }
    else
    {
        cout << "所输入的三边无法构成三角形!" << endl;
    }

    return 0;
}

 

 

 2、编程求下式值,其中ni用函数来实现,且设参数n的默认值为2:

                    

 

#include <iostream>
using namespace std;

int fun(int i, int n = 2)
{
    if(n <= 0)
    {
        return 0;
    }

    int j, sum;
    for(j = 1, sum = 1; j <= i; j++)
    {
        sum *= n;
    }

    return sum;
}

int main()
{
    int i, n, sum;
    cout << "请输入n的值:";
    cin >> n;

    for(i = 1, sum = 0; i <= 10; i++)
    {
        sum += fun(i, n);
    }

    cout << "计算n^1+n^2+...+n^10 = " << sum << endl; 

    return 0;
}

 

 

 3、用递归法将一个整数n转换成字符串。如输入1234,应输出字符串“1234”。n的位数不确定,可以是任意位数的整数。

#include <iostream>
#include <string.h>
using namespace std;

void fun(int n, char *s)
{
    // 最高位,直接放到s[0]中
    if(n > 0 && n < 10)
    {
        *s = char('0' + n);
        return;
    }

    // 递归调用从最高位开始一直加到最低位
    fun(n / 10, s);

    // strlen(s) 用来计算数组的长度
    s[strlen(s)] = char('0' + n % 10);
}

int main()
{
    int n;
    char s[15] = {'\0'};

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

    fun(n, s);
    cout << "转换成字符串为:"<< s << endl;

    return 0;
}

 

 

4、编写程序,计算下面公式并输出结果。

 (1)编写一个函数计算n!

(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算。

(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。

(4)运行程序,输出计算, 

#include <iostream>
using namespace std;

// 计算n!
int fun(int n)
{
    if(n <= 1)
    {
        return 1;
    }

    int i, sum;
    for(i = 2, sum = 1; i <= n; i++)
    {
        sum *= i;
    }

    return sum;
}

int main()
{
    int n, m;
    cout << "请输入组合数C(n, m)的n 和 m:";
    cin >> n >> m;

    if(n < m)
    {
        cout << "输入的m值不应该大于n" << endl;
        return 0;
    }

    cout << "C(" << n << "," << m << ") = " << fun(n) / (fun(n - m) * fun (m)) << endl; 
    cout << "C(8, 5) = " << fun(8) / (fun(3) * fun(5)) << endl;
    cout << "C(5, 2) = " << fun(5) / (fun(3) * fun(2)) << endl;
    cout << "C(7, 0) = " << fun(7) / (fun(7) * fun(0)) << endl;

    return 0;
}

 

 

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值