目录
一、三元组相关函数声明(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(没啥好玩儿的,简单看看代码框架就好!)