三元组的基本操作(C语言)

1.内容

     编程实现三元组的基本操作,并设计一个菜单调用。

    ①赋值、遍历、取值、置换

    ②判断是否为升序排列、是否为降序排列、求最大值、最小值

2.代码实现

   我是利用DEV软件创建了一个项目来进行实验,大概如下图:

    

1)函数实现(function1.cpp)

#include<stdio.h>
#include<stdlib.h>
#include "com_h1.h"

/*赋值*/
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; 
}
 
/*取值*/
/*也就是将第i个位置的值给e*/ 
Status get(Triplet t,int i,ElemType &e){
	if(i<1||i>3) return ERROR;
	e=t[i-1];
	return OK;
}

/*替换*/ 
/*也就是说将t中的第i个值替换为e*/ 
Status put(Triplet &t,int i,ElemType e){
	if(i<1||i>3) return ERROR;
	t[i-1]=e;
	return OK;
}

/*求最大值*/
/*将三元组的最大值赋值给e*/ 
Status Max(Triplet t,ElemType &e){
	e=t[0];
	e=e>t[1]?e:t[1];
	e=e>t[2]?e:t[2]; 
	return OK;
} 

/*求最小值*/
/*将三元组的最小值赋值给e*/ 
Status Min(Triplet t,ElemType &e){
	e=t[0];
	e=e<t[1]?e:t[1];
	e=e<t[2]?e:t[2]; 
	return OK;
} 

/*判断是否按升序排列*/
Status IsAscend(Triplet t){
	return (t[0]<t[1])&&(t[1]<t[2]); 
} 

/*判断是否按降序排列*/
Status IsDescend(Triplet t){
	return (t[0]>t[1])&&(t[1]>t[2]); 
} 

/*遍历*/
Status Traverse(Triplet t){
	printf("三元组的值为:");
	printf("%4d%4d%4d",t[0],t[1],t[2]); 
} 

2)头文件(com_h1.H)

#ifndef _FUNC_H
#define _FUNC_H


#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;

typedef int ElemType;
typedef ElemType *Triplet;//这句话相当于typedef (ElemType*) Triplet 

extern Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3);
extern Status DestroyTriplet (Triplet t);
extern Status get(Triplet t,int i,ElemType &e);
extern Status put(Triplet &t,int i,ElemType e);
extern Status Max(Triplet t,ElemType &e);
extern Status Min(Triplet t,ElemType &e);
extern Status IsAscend(Triplet t);
extern Status IsDescend(Triplet t);
extern Status Traverse(Triplet t);

#endif

3)主函数(main1.cpp)

#include<stdio.h>
#include<stdlib.h>
#include "com_h1.h"

int main(int argc, char** argv) {
	Triplet t;
	ElemType v1,v2,v3,order,i,e;
	printf("输入三个数,创建一个三元组(格式:t1,t2,t3):\n");
	scanf("%d,%d,%d",&v1,&v2,&v3);
	if(!InitTriplet (t,v1,v2,v3)){
		printf("创建三元组失败,程序被迫中止!!!\n");
		exit(0);
	}	
	else
		printf("创建成功!!!\n");
	do{
		printf("=========================菜单=========================\n");
		printf("  1.查找第i个位置的值        2.将第i个位置的值替换成e \n");
		printf("  3.求最大值                 4.求最小值               \n");
		printf("  5.判断是否按升序排列       6.判断是否按降序排列     \n");
		printf("  7.遍历输出                 0.退出                   \n");
		printf("======================================================\n"); 
		printf("请输入你的选择:");
		scanf("%d",&order);
		switch(order)
		{
			case 1:
				printf("请输入你要查找的位置i:");
				scanf("%d",&i);
				if(!get(t,i,e))
					printf("i输入错误!!!\n");
				else
					printf("第%d个位置的值为%d\n",i,e);
				break;
			case 2:
				printf("请输入i和e(格式:i,e)");
				scanf("%d,%d",&i,&e);
				if(!put(t,i,e))
					printf("i输入错误!!!\n");
				else
				{
					printf("替换成功!!!\n");
					Traverse(t);
					printf("\n");
				}
				break;
			case 3:
				Max(t,e); 
				printf("三元组的最大值为:%d\n",e);
				break;
			case 4:			
				Min(t,e); 
				printf("三元组的最小值为:%d\n",e);
				break;				
			case 5:
				if(!IsAscend(t))
					printf("此三元组并未按照升序排列!!!\n");
				else	
					printf("此三元组按照升序排列!!!\n");
				break;		
			case 6:
				if(!IsDescend(t))
					printf("此三元组并未按照降序排列!!!\n");
				else	
					printf("此三元组按照降序排列!!!\n");
				break;
			case 7:
				Traverse(t); //遍历输出
				printf("\n");
				break;	
			case 0:
				printf("程序退出!!!\n");
				break;
			default:
				printf("输入的选择不合法!!!\n");							
		} 
	}while(order!=0);
	DestroyTriplet (t);		
	return 0;
}

3.运行结果

1)验证创建和查找功能

2)验证替换功能

3)验证求最大值和最小值功能

 

4)其余功能

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值