编写一个程序用同一个函数名对圆矩形梯形求面积

编写一个程序,用同一函数名对圆、矩形和梯形求面积,参数自行设置,要求所有输入输出在主函数内进行。

#include <iostream>  
using namespace std;

// 函数名:Area(radius)  
// 参数:radius 圆的半径  
// 返回值:圆的面积  
double Area(double radius) {  
    return 3.14 * radius * radius;  
}

// 函数名:Area(width, height)  
// 参数:width 矩形的宽,height 矩形的高  
// 返回值:矩形的面积  
double Area(double width, double height) {  
    return width * height;  
}

// 函数名Area(width, height, depth)  
// 参数:width 梯形的上底,height 梯形的高,depth 梯形的下底  
// 返回值:梯形的面积  
double Area(double width, double height, double depth) {  
        return (width * depth) * height / 2;  
}

int main() {  
    double radius, width, height;  
    cout << "请输入圆的半径 (单位:米):";  
    cin >> radius;  
    double area = Area(radius);  
    cout << "圆的面积是:" << area << endl;

    double width, height;  
    cout << "请输入矩形的宽和高 (单位:米):";  
    cin >> width >> height;  
    double area = Area(width, height);  
    cout << "矩形的面积是:" << area << endl;

    double depth, height, width;  
    cout << "请输入梯形的上底、高和下底:";  
    cin >> depth >> height >> width;  
    double area = Area(width, height, depth);  
    cout << "梯形的面积是:" << area << endl;  
    return 0;  
}

#include <stdio.h>

// 函数声明
double calculateArea(double radius);
double calculateArea(double length, double width);
double calculateArea(double upper, double lower, double height);

int main() {
    int shape;
    double area;

    // 获取图形类型
    printf("请选择图形类型:\n");
    printf("1. 圆形\n");
    printf("2. 矩形\n");
    printf("3. 梯形\n");
    printf("请输入数字选择:");
    scanf("%d", &shape);

    // 计算面积
    switch (shape) {
        case 1:
            double radius;
            printf("请输入圆的半径:");
            scanf("%lf", &radius);
            area = calculateArea(radius);
            printf("圆形的面积为:%.2f\n", area);
            break;
        case 2:
            double length, width;
            printf("请输入矩形的长度和宽度,用空格分隔:");
            scanf("%lf %lf", &length, &width);
            area = calculateArea(length, width);
            printf("矩形的面积为:%.2f\n", area);
            break;
        case 3:
            double upper, lower, height;
            printf("请输入梯形的上底、下底和高,用空格分隔:");
            scanf("%lf %lf %lf", &upper, &lower, &height);
            area = calculateArea(upper, lower, height);
            printf("梯形的面积为:%.2f\n", area);
            break;
        default:
            printf("不支持的图形类型!\n");
            break;
    }

    return 0;
}

// 计算圆形面积的函数
double calculateArea(double radius) {
    return 3.14159 * radius * radius;
}

// 计算矩形面积的函数
double calculateArea(double length, double width) {
    return length * width;
}

// 计算梯形面积的函数
double calculateArea(double upper, double lower, double height) {
    return (upper + lower) * height / 2.0;
}
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7429521
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:将文件中的表达式读出来计算,并把结果连同表达式写入另一个文件
  • 除此之外, 这篇博客: 线性表中链表,顺序表,链栈,顺序栈的异同中的 本文侧重于比较链表,顺序表,链栈及顺序栈实现方式上的异同及头,尾结点的区别。(本文参考的类型基于学校教材) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 首先比较链表和顺序表的总体差异:
    链表是含有头结点,且一般头结点不存储数据或只存储长度等附加信息。尾结点存储数据且尾结点的指针域指向空。实现方法多为对已经定义的结构体指针进行动态分配并作为头结点,之后再进行各类操作。

    引用https://blog.csdn.net/oqqHuTu12345678/article/details/52677935中的总结:

    其实若有足够多的结构体,无需动态分配也可以创建链表,但这违背了动态扩展的初衷,另外,直接在全局定义的结构体,存储在静态存储区;在函数内定义的结构体,存储在栈区;而使用malloc来申请空间的结构体,存储在堆空间中。链表一般都放在堆空间中。

    静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

    栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。

    顺序表含有头结点与尾结点,且头尾结点皆存储数据。实现方法为对已经定义的结构体中的指针变量进行动态分配

    接下来我们分别了解下顺序表和链表中栈与队列的异同。

    1.顺序栈
    实现方法:其定义的结构体(设结构体名为S)中普遍包含base与top这两个指针变量(base作为栈底,top作为栈顶),一般对S.base进行动态分配,而base存储数据,top指向栈顶元素的下一个空间,无数据。(这样做方便通过判定top=base是否成立,来判断是否空栈)

    2.顺序队列
    由于其先进先出的特点,不同于栈,队列的顺序实现其实是一种循环队列。
    实现方式:对结构体中(设名为Q)的base指针进行动态分配,而队头front与队尾rear,则以int形式来表示,即单纯看作一个记号来充当“指针”,而非真正的指针变量。此外,不同于栈可以通过top=base的判定来进行空栈判断,顺序队列由于其循环的特性,满栈时front=rear同样成立。为了避免混淆,通常牺牲一个空间来进行判定,即队列Q的最大存储数据量为实际申请量-1(此处不考虑malloc可能额外申请的空间)

    3.链栈
    实现方法同链表,但是其头结点是有数据的。另外,链栈的指针next是从栈顶指向栈底的,这意味这在初始化函数中需要先定义栈顶作为"第一个"结点。与逻辑上“先为栈底元素开空间”的想法不同。

    4.链队列
    链队列较为特殊,由于结构体Q中只存在数据及表示结点之间关系的指针next,头指针和尾指针需要在另一个结构体内定义,即总共需要两个结构体(或者也可以直接定义全局变量)且头结点无数据,尾结点有数据。
    实现方法:对于头指针和尾指针进行动态分配(一开始指向同一地址),Q存储数据和指针域。

    总结:不同于顺序表,顺序栈和顺序队列都是头结点有数据,尾结点无数据。而链队列与链表的头尾结点特点基本一致,都是头结点不存而尾结点存,但链队列任一结点都存储数据。

    本文参考栈与队列的特点基于学校教材,供交流复习使用,若有理解不到位或错误处,希望各位在评论区指正。

  • 您还可以看一下 李月喜老师的企业微信开发第三方应用开发篇课程中的 第三方应用概述、开发流程、上线与上架小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    根据题目要求,需要编写一个能够计算圆、矩形和梯形面积的程序,使用同一个函数名来实现对不同图形的面积计算,但需要在函数内部根据不同的形状进行相应的计算。以下为解决方案:

    1. 需要定义一个函数名相同但参数不同的函数,例如函数名为“calculateArea”,则需要通过参数来判断需要计算哪种图形的面积。函数定义如下:
    double calculateArea(int type, double... params);
    

    其中,type表示图形的类型,如0表示圆形,1表示矩形,2表示梯形;params为图形的参数,具体根据不同的图形类型来赋值。使用可变参数(...表示)来支持不同参数个数的图形计算。

    1. 在函数内部根据type参数的不同来进行不同形状的计算,具体的操作如下:
    double calculateArea(int type, double... params) {
        double area = 0.0;
        switch(type) {
            case 0: // 圆形计算
                area = 3.1415926 * params[0] * params[0];
                break;
            case 1: // 矩形计算
                area = params[0] * params[1];
                break;
            case 2: // 梯形计算
                area = (params[0] + params[1]) * params[2] / 2.0;
                break;
            default: // 错误类型就返回0
                break;
        }
        return area;
    }
    

    在函数体内使用switch语句来根据type参数的值不同进行不同图形的面积计算,最后返回计算结果。此处使用默认的0值来表示错误类型的返回结果。

    1. 在主函数内进行输入输出操作,具体的操作如下:
    int main() {
        int type;
        double params[3];
        printf("请输入图形类型: 0-圆形 1-矩形 2-梯形\n");
        scanf("%d", &type);
        printf("请输入图形参数:\n");
        for(int i = 0; i < 3; i++) {
            scanf("%lf", &params[i]);
        }
        double area = calculateArea(type, params[0], params[1], params[2]);
        printf("图形面积为: %.2lf\n", area);
        return 0;
    }
    

    在主函数内先通过输入函数将图形类型type和图形参数params读入,然后调用calculateArea函数进行面积计算,并输出计算结果。

    完整代码如下:

    #include <stdio.h>
    
    // 计算图形面积的函数,type表示图形类型,如0表示圆形,1表示矩形,2表示梯形
    double calculateArea(int type, double... params) {
        double area = 0.0;
        switch(type) {
            case 0: // 圆形计算
                area = 3.1415926 * params[0] * params[0];
                break;
            case 1: // 矩形计算
                area = params[0] * params[1];
                break;
            case 2: // 梯形计算
                area = (params[0] + params[1]) * params[2] / 2.0;
                break;
            default: // 错误类型就返回0
                break;
        }
        return area;
    }
    
    int main() {
        int type;
        double params[3];
        printf("请输入图形类型: 0-圆形 1-矩形 2-梯形\n");
        scanf("%d", &type);
        printf("请输入图形参数:\n");
        for(int i = 0; i < 3; i++) {
            scanf("%lf", &params[i]);
        }
        double area = calculateArea(type, params[0], params[1], params[2]);
        printf("图形面积为: %.2lf\n", area);
        return 0;
    }
    

    通过以上方案,可以实现对不同图形面积计算的支持,并且使用同一个函数名来简化函数调用过程。