C语言实现三元组

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值