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)其余功能