三元组基本操作及应用-数据结构类C语言

目录

一、三元组相关函数声明(before.h)

二、三元组功能函数定义(func.cpp)

三、三元组主调函数(main.cpp)

四、运行环境


一、三元组相关函数声明(before.h)

#ifndef _BEFORE_H
#define _BEFORE_H

#define OK 1.0
#define ERROR 0.0
#define OVERFLOW (-1.0)

typedef float Status;        //函数返回值类型重定义
typedef float ElemType;      //对元素的类型重定义
typedef ElemType* Triplet;   //一个指针,类似数组首地址

//三元组相关功能函数声明
Status InitTriplet(Triplet& t, ElemType v1, ElemType v2, ElemType v3); //分配三元组的空间
Status DestroyTriplet(Triplet &t);                                     //销毁三元组
Status get(Triplet t, int i, ElemType& e);                             //查看元素值
Status put(Triplet& t, int i, ElemType e);                             //替换元素值
void Max(Triplet t, ElemType& e);                                      //求最大值
void Min(Triplet t, ElemType& e);                                      //求最小值
Status IsAscend(Triplet t);                                            //判断是否递增
Status Average(Triplet t);                                             //求平均值

//菜单声明
void Menu();

#endif
//
//Created by somewon on 2022/9/29.
//

二、三元组功能函数定义(func.cpp)

#include <cstdio>
#include <cstdlib>
#include "before.h"

using namespace std;

Status InitTriplet(Triplet& t, ElemType v1, ElemType v2, ElemType v3)
{

    t = (ElemType*)malloc(3*sizeof(ElemType));
    if (!t) return OVERFLOW;        //分配失败  空间不够
    t[0] = v1; t[1] = v2; t[2] = v3;
    return OK;
}//分配三元组空间

Status DestroyTriplet(Triplet &t)
{
    free(t);
    return OK;
}//销毁三元组

Status get(Triplet t, int i, ElemType& e)
{
    if (i < 1 || i>3) return ERROR; //位序不合理
    e = t[i - 1];
    return OK;
}//查看元素的值

Status put(Triplet &t, int i, ElemType e)
{
    if (i < 1 || i>3) return ERROR; //位序不合理
    t[i - 1] = e;
    return OK;
}//替换元素值

Status IsAscend(Triplet t)
{
    return t[0] < t[1] && t[1] < t[2];
}//判断三元组是否递增

void Max(Triplet t, ElemType& e)
{
    ElemType temp = t[0] > t[1] ? t[0] : t[1];  //存储t[0]与t[1]之间较大的数
    e = temp > t[2] ? temp : t[2];
}//求三元组最大值

void Min(Triplet t, ElemType& e)
{
    ElemType temp = t[0] > t[1] ? t[1] : t[0];  //存储t[0]与t[1]之间较小的数
    e = temp > t[2] ? t[2] : temp;
}//求三元组最小值

Status Average(Triplet t)
{
    return (t[0]+t[1]+t[2])/3.0;
}//求三元组平均值

void Menu()
{
    printf("\t\t***********************此为三元组菜单***********************\n");
    printf("\t\t\t1、查看元素                    2、判断是否递增             \n");
    printf("\t\t\t3、求最大值                    4、求最小值                 \n");
    printf("\t\t\t5、置换元素                    6、求平均值                 \n");
    printf("\t\t\t7、查看三元组所有元素           8、退出操作系统              \n");
    printf("\t\t***********************************************************\n");
}//三元组菜单
//
//Created by somewon on 2022/9/29.
//

三、三元组主调函数(main.cpp)

#include <cstdio>
#include "before.h"

using namespace std;

int main()
{
    Triplet  p;
    ElemType e, v1, v2, v3;
    int i,select,fine;
    printf("输入三个数,建立一个三元组:\n");
    scanf_s("%f%f%f", &v1, &v2, &v3);
    if (InitTriplet(p, v1, v2, v3) == OVERFLOW)
        printf("分配失败,退出程序!\n");
    else
    {
        printf("三元组创建成功!\n");
        do
        {
            Menu();
            printf("请输入你的选择:");
            getchar(); //去掉换行符
            scanf_s("%d", &select);
            switch (select)
            {
                case 1:
                    printf("请输入您想查看的元素的位序:");
                    scanf_s("%d", &i);
                    if (get(p, i, e) == ERROR)  printf("该位序不合法!\n");
                    else printf("第%d个元素的值为:%g\n", i, e);
                    break;
                case 2:
                    if (IsAscend(p) == OK) printf("该三元组元素递增!\n");
                    else printf("该三元组元素不递增!\n");
                    break;
                case 3:
                    Max(p, e);
                    printf("该三元组中的最大值为:%g\n", e);
                    break;
                case 4:
                    Min(p, e);
                    printf("该三元组中的最小值为:%g\n", e);
                    break;
                case 5:
                    printf("请输入重置元素的位序:");
                    scanf_s("%d", &i);
                    printf("请输入该位序元素重置的值:");
                    scanf_s("%g", &e);
                    fine = put(p, i, e);
                    if(fine == ERROR) printf("该位序不合理!无法进行替换!\n");
                    else printf("重置第%d个元素后三元组的三个值为:%g\t%g\t%g\n", i, p[0], p[1], p[2]);
                    break;
                case 6:
                    printf("该三元组的平均值为:%g\n",Average(p));
                    break;
                case 7:
                    printf("当前三元组的元素为:\n");
                    printf("%g\t%g\t%g\n", p[0], p[1], p[2]);
                    break;
                case 8:
                    goto END;
                default:
                    printf("无该选项!请再次输入!\n");
            }
        } while (select);
    }

    END:
        printf("操作结束!欢迎您下次使用嘿哈!\n");
    DestroyTriplet(p);
    return 0;
}
//
//Created by somewon on 2022/9/29.
//

四、运行环境

        CLion(没啥好玩儿的,简单看看代码框架就好!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值