三元组的创建 删除 增删改查 升降序判断

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> 
#define N 3

typedef float ElemType;
typedef ElemType* Triplet;

//创建三元组
void initTriplet(Triplet &T,ElemType v[]){
	T=(Triplet)malloc(sizeof(ElemType)*N);
	if(!T)exit(-2);
	int i;
	for(i=0;i<N;i++)
		T[i]=v[i];
}

//输出三元组
void  printTripet(Triplet T){
	int i;
	for(i=0;i<N;i++)
		printf("%.1f	",T[i]);
	printf("\n");
} 
 
//三元组相加 
void add(Triplet T1,Triplet &T2){
	int i;
	for(i=0;i<N;i++)
		T2[i]+=T1[i];
}

//N元组的各分量同乘比例系数
void multiX(Triplet &T1,float X){
	int i;
	for(i=0;i<N;i++)
		T1[i]*=X; 
}

//取三元组的任意一个分量
void getElem(Triplet T1,int i){
	printf("%.1f\n",T1[i-1]); 
}

//置三元组的任意一个分量
void setElem(Triplet &T1,int i,ElemType j){
	T1[i-1]=j;
}

//求三元组的最大分量
ElemType getMax(Triplet T2){
	ElemType max=T2[0];
	int i;
	for(i=0;i<N;i++){
		if(T2[i]>max)
			max=T2[i];
	}
	return max;
}

//求三元组的最小分量
ElemType getMin(Triplet T2){
	ElemType min=T2[0];
	int i;
	for(i=0;i<N;i++){
		if(T2[i]<min)
			min=T2[i];
	}
	return min;
}

//销毁三元组,退出 
void deleteTriplet(Triplet &T){
	if(!T) 
		free(T);
	exit(0);
}

//是否升序
int isAscending(Triplet T){
	int i;
	for(i=0;i<N-1;i++){
		if(T[i]>=T[i+1]){
			return 0;
		}
	}
	return 1;
}

//是否降序 
int isDescending(Triplet T){
	int i;
	for(i=0;i<N-1;i++){
		if(T[i]<=T[i+1]){
			return 0;
		}
	}
	return 1;
}

//主函数
int main(){
	Triplet T1,T2;
	ElemType v[N];
		printf("请输入N元组的每个元素(N=%d)\n",N);
		int i,Num=0;
				for (i = 0; i < N; i++)
					scanf("%f", &v[i]);
				initTriplet(T2, v); 
	while(Num!=10){
		printf("\n");
		printf("1.输出三元组\n");
		printf("2.两个%d元组相加\n", N);
		printf("3.%d元组的各分量同成比例系数\n",N);
		printf("4.获取T的第i个元素的值\n");
		printf("5.置换T的第i元的值为e\n");
		printf("6.是否升序排列\n");
		printf("7.是否降序排列\n");
		printf("8.取最大值\n");
		printf("9.取最小值\n");
		printf("10.退出\n");
		printf("-------------------------------\n");
                printf("请输入你想实现的功能的编号:\n");
		        scanf("%d", &Num);
		switch (Num) {
			case 1 :
			printf("三元组为:\n");
			printTripet(T2);
				break;
				
			case 2:
				printf("请输入第二个相加的三元组:\n");
				for (i = 0; i < N; i++)
				scanf("%f", &v[i]);
				initTriplet(T1,v);
				printf("\n");
				add(T1,T2);
				printf("相加后三元组为:\n");
				printTripet(T2);
				break;	
			
			case 3:
				printf("请输入要乘的系数X\n");
				float X;
				scanf("%f",&X);
				multiX(T2,X);
				printf("改变后三元组为:\n");
				printTripet(T2);				
				break;
			
			case 4:
				printf("请输入要获取第几个数\n");
				scanf("%d",&i);
				getElem(T2,i);
				break;
				
			case 5:
				ElemType k;
				printf("请输入要改变的序号和相应的值\n");    
				scanf("%d %f",&i,&k);
				setElem(T2,i,k);
				printf("改变后三元组为:\n");
				printTripet(T2);
				break;
			
			case 6:
				int b;
				b=isAscending(T2);
				if(b)
				printf("是升序\n");
				else
				printf("不是升序\n");
				break;
				
			case 7:
				int a;
				a=isDescending(T2);
				if(a)
				printf("是降序\n");
				else
				printf("不是降序\n");
				break;
				
			case 8 :
				printf("三元组最大值为:\n");
				printf("%.1f\n",getMax(T2));
				break;
		
			case 9 :
				printf("三元组最小值为:\n");
				printf("%.1f\n",getMin(T2));
				break; 
			
			case 10 :
				printf("您已退出程序");
				deleteTriplet(T2);
				break; 
	}
} 
	return 0;
}







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值