IDE:Visual Studio 2022
#define _CRT_SECURE_NO_WARNINGS 意思是可以用scanf(),
如果没有这个 #define _CRT_SECURE_NO_WARNINGS 的话只能用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef float ElemType;
typedef ElemType* Triplet;
以下代码是对三元组的一系列操作的函数
Status initTriplet(Triplet& T, ElemType v0, ElemType v1, ElemType v2) {//初始化
T = (Triplet)malloc(3 * sizeof(v0));//动态内存分配
T[0] = v0;
T[1] = v1;
T[2] = v2;
return OK;
}
Status getElem(Triplet T, int i, ElemType& e) {//取三元组的任意一个分量
if (i < 1 || i > 3)
return ERROR;
else
e = T[i - 1];
printf("%f", e);
return OK;
}
Status putElem(Triplet& T, int i, ElemType e) {//置三元组的任意一个分量
if (i < 1 || i > 3)
return ERROR;
else
T[i - 1] = e;
printf("%f", T[i - 1]);
return OK;
}
ElemType getMax(Triplet T, ElemType& e) {//求三元组的最大分量
if (T[0] > T[1])
e = T[0];
else
e = T[1];
if (T[2] > e)
e = T[2];
printf("%f", e);
return e;
}
ElemType getMin(Triplet T, ElemType& e) {//求三元组的最小分量
if (T[0] < T[1])
e = T[0];
else
e = T[1];
if (T[2] < e)
e = T[2];
printf("%f", e);
return e;
}
Status Increasing(Triplet& T){//将三元组升序排列
int i, j, t;
for (i = 0; i < 3 - 1; i++)
{
for (j = 0; j < 3 - 1 - i; j++)
{
if (*(T + j) > *(T + j + 1))
{
t = *(T + j);
*(T + j) = *(T + j + 1);
*(T + j + 1) = t;
}
}
}
for (i = 0; i < 3; i++)
{
printf("%f\n", T[i]);
}
return OK;
}
Status Descending(Triplet& T)//将三元组降序排列
{
int i, j, t;
for (i = 0; i < 3 - 1; i++)
{
for (j = 0; j < 3 - 1 - i; j++)
{
if (T[j] < T[j + 1])
{
t = T[j];
T[j] = T[j + 1];
T[j + 1] = t;
}
}
}
for (i = 0; i < 3; i++)
{
printf("%f\n", T[i]);
}
return OK;
}
Status Add(Triplet& T, Triplet& T0){//两个三元组对应分量相加减
ElemType x1, x2, x3,x4,x5,x6;
x1 = T[0] + T0[0];
x2 = T[1] + T0[1];
x3 = T[2] + T0[2];
x4 = T[0] - T0[0];
x5 = T[1] - T0[1];
x6 = T[2] - T0[2];
printf("两个三元组各分量相加为:\n%f %f %f\n", x1, x2, x3);
printf("两个三元组各分量相减为:\n%f %f %f\n", x4, x5, x6);
return OK;
}
Status Multiply(Triplet& T){//给三元组各分量同乘一个比例因子
ElemType n,n0,n1,n2;
printf("输入比例因子:\n");
scanf("%f", &n);
n0 = n*T[0];
n1 = n*T[1];
n2 = n*T[2];
printf("结果为:%f %f %f\n", n0, n1, n2);
return OK;
}
Status printTriplet(Triplet& T) {//显示三元组
int i;
for (i = 0; i < 3; i++) {
printf("%f\n", T[i]);
}
printf("\n");
return OK;
}
Status DestroyTriplet(Triplet& T) {//销毁三元组
free(T);
return OK;
}
以下代码是主函数
int main() {
int n;
int i;
Triplet T,T0;
Status flag;
ElemType v0, v1, v2, e = 0.0, v00, v01, v02;
printf("请输入三元组的三个值v0,v1,v2:\n");
scanf("%f%f%f", &v0, &v1, &v2);
flag = initTriplet(T, v0, v1, v2);
printf("调用初始化函数后,flag=%d,T的三个值为%4.2f,%4.2f,%4.2f\n", flag, T[0], T[1], T[2]);
printf("0 结束程序:\n");
printf("1 取三元组的任意一个分量:\n");
printf("2 置三元组的任意一个分量:\n");
printf("3 求三元组的最大分量:\n");
printf("4 求三元组的最小分量:\n");
printf("5 将三元组升序排列\n");
printf("6 将三元组降序排列\n");
printf("7 显示三元组:\n");
printf("8 销毁三元组:\n");
printf("9 两个三元组对应分量相加减:\n");
printf("10 给三元组各分量同乘一个比例因子:\n");
while (flag) {
printf("请输入你想完成的功能编号:\n");
scanf("%d", &n);
if (n == 0) {
break;
}
else {
switch (n) {
case 1:
scanf("%d", &i);
getElem(T, i, e);
break;
case 2:
scanf("%d%f", &i, &e);
putElem(T, i, e);
break;
case 3:
getMax(T, e);
break;
case 4:
getMin(T, e);
break;
case 5:
Increasing(T);
break;
case 6:
Descending(T);
break;
case 7:
printTriplet(T);
break;
case 8:
DestroyTriplet(T);
break;
case 9:
printf("请输入另一个三元组的三个值v00,v01,v02:\n");
scanf("%f%f%f", &v00, &v01, &v02);
initTriplet(T0, v00, v01, v02);
Add(T,T0);
break;
case 10:
Multiply(T);
break;
default:
printf("没有你想完成的功能\n");
break;
}
}
}
return 0;
}