Triplet
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回1,否则返回0 */
return(T[0]>=T[1]&&T[1]>=T[2]);
}
Status Max(Triplet T,ElemType &e)
{ /*初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最大值*/ e=(T[0]>=T[1])?((T[0]>=T[)?T[1]:T[2]);
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int ElemType; //这里三元组的每个元素类型为int
return ERROR;
e=T[i-1];
return OK;
}
Status Put(Triplet &T,int i,ElemType e)
{ /*初始条件:三元组T已存在,1≤i≤3。操作结果:改变T的第i元的值为e */ if(i<1||i>3)
return ERROR;
T[i-1]=e;
return OK;
return OK;
}
Status DestroyTriplet(Triplet &T)
{ /*操作结果:三元组T被销毁*/
free(T);
T=NULL;
return OK;
}
Status Get(Triplet T,int i, ElemType &e)
{ /*初始条件:三元组T已存在,1≤i≤3。操作结果:用e返回T的第i元的值*/ if(i<1||i>3)
if(IsAscending(T))
printf("\nT升序排序\n");
if(IsDescending(T))
printf("\nT降序排序\n");
printf("\n第1个元素为:%d\n",T[0]);
Put(T,1,5);
printf("赋值后:\n");
Get(T,1,elem);
printf("第1个元素为:%d\n",elem);
}
Status IsAscending(Triplet T)
{ /*初始条件:三元组T已存在。操作结果:如果T的三个元素按升序排列,返回1,否则返回0 */
return(T[0]<=T[1]&&T[1]<=T[2]);
}
Status IsDescending(Triplet T)
{ /*初始条件:三元组T已存在。操作结果:如果T的三个元素按降序排列,返
Status Get(Triplet T,int i, ElemType &e); //用e返回T的第i元的值
Status Put(Triplet &T,int i,ElemType e); //改变T的第i元的值为e
Status IsAscending(Triplet T); //如果T的三个元素按升序排列,返回1,否则返回0Status IsDescending(Triplet T); //如果T的三个元素按降序排列,返回1,否则返回0Status Max(Triplet T,ElemType &e); //用e返回T的三个元素中的最大值
{
printf("第%d个元素为:%d\n",i,T[i]);
}
ElemType elem;
if(Max(T,elem)==OK) //先赋值再比较
printf("\n最大的元素为:%d\n",elem);
if(i=Min(T,elem)==OK)
printf("最小的元素为:%d\n",elem);
(4).在Triplet.cpp中定义需要多次用到的函数,这样在TripletMain.cpp中如若需要就可多次调用,免去多次定义的麻烦,同时可以令程序更加简化,便于查错以及更新程序。
}
// TripletMain.cpp:主程序,测试程序
#include<stdio.h>
#include"triplet.h"
int main()
{
Triplet T;
printf("//初始化T=(1,3,4)\n");
InitTriplet(T,1,3,4);
for(int i=0;i<3;i++)
1.源程序
文件结构:
Triple.h:三元组的头文件
Triplet.cpp:基本操作的函数实现
TripletMain.cpp:主程序,测试程序
代码:
// Triple.h:三元组的头文件
#ifndef _TRIPLE_H//防止重复包含
#define _TRIPLE_H
//预定义常量和类型
#define TRUE 1
typedef ElemType *Triplet; //用指向首元素的指针来表示一个三元组
//函数原型
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3);//初始化
Status DestroyTriplet(Triplet &T); //销毁
DestroyTriplet(T);
return 0;
}
2.运行结果
3.心得体会
(1).在头文件中定义自定义常量,可以免去在各个子文件中重复定义,使程序变得通俗易懂。同时若程序编译出错,也便于检查出错误。
(2).巧妙利用函数返回值,有助于程序的简化。
令函数返回OK,可以通过函数的返回值判断函数时候正确执行,有保护作用。
{ /*操作结果:构造三元组T,依次置T的三个元素的初值为v1,v2和v3 */
T=(Triplet)malloc(3*sizeof(Triplet));//分配3个元素的存储空间
if(!T)//分配存储空间失败
exit(OVERFLOW);//终止整个程序的运行
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
Status Min(Triplet T,ElemType &e)
{ /*初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最小值*/ e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return OK;
(3).在头文件加上类似下面的语句就能防止头文件重复调用:
#ifndef _ TRIPLE _H
#define _ TRIPLE _H
…… //头文件内容
#endif
原因如下:第一次调用,没定义过_ TRIPLE _H,就会定义_TEST_H_然后头文件被调用,如果还有调用,_ TRIPLE _H已被第一次定义,自动就跳过了
Status Min(Triplet T,ElemType &e); //用e返回T的三个元素中的最小值
#endif
// Triplet.cpp:基本操作的函数实现
#include<stdlib.h>// malloc,free
#include"Triplet.h"
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
return(T[0]>=T[1]&&T[1]>=T[2]);
}
Status Max(Triplet T,ElemType &e)
{ /*初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最大值*/ e=(T[0]>=T[1])?((T[0]>=T[)?T[1]:T[2]);
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int ElemType; //这里三元组的每个元素类型为int
return ERROR;
e=T[i-1];
return OK;
}
Status Put(Triplet &T,int i,ElemType e)
{ /*初始条件:三元组T已存在,1≤i≤3。操作结果:改变T的第i元的值为e */ if(i<1||i>3)
return ERROR;
T[i-1]=e;
return OK;
return OK;
}
Status DestroyTriplet(Triplet &T)
{ /*操作结果:三元组T被销毁*/
free(T);
T=NULL;
return OK;
}
Status Get(Triplet T,int i, ElemType &e)
{ /*初始条件:三元组T已存在,1≤i≤3。操作结果:用e返回T的第i元的值*/ if(i<1||i>3)
if(IsAscending(T))
printf("\nT升序排序\n");
if(IsDescending(T))
printf("\nT降序排序\n");
printf("\n第1个元素为:%d\n",T[0]);
Put(T,1,5);
printf("赋值后:\n");
Get(T,1,elem);
printf("第1个元素为:%d\n",elem);
}
Status IsAscending(Triplet T)
{ /*初始条件:三元组T已存在。操作结果:如果T的三个元素按升序排列,返回1,否则返回0 */
return(T[0]<=T[1]&&T[1]<=T[2]);
}
Status IsDescending(Triplet T)
{ /*初始条件:三元组T已存在。操作结果:如果T的三个元素按降序排列,返
Status Get(Triplet T,int i, ElemType &e); //用e返回T的第i元的值
Status Put(Triplet &T,int i,ElemType e); //改变T的第i元的值为e
Status IsAscending(Triplet T); //如果T的三个元素按升序排列,返回1,否则返回0Status IsDescending(Triplet T); //如果T的三个元素按降序排列,返回1,否则返回0Status Max(Triplet T,ElemType &e); //用e返回T的三个元素中的最大值
{
printf("第%d个元素为:%d\n",i,T[i]);
}
ElemType elem;
if(Max(T,elem)==OK) //先赋值再比较
printf("\n最大的元素为:%d\n",elem);
if(i=Min(T,elem)==OK)
printf("最小的元素为:%d\n",elem);
(4).在Triplet.cpp中定义需要多次用到的函数,这样在TripletMain.cpp中如若需要就可多次调用,免去多次定义的麻烦,同时可以令程序更加简化,便于查错以及更新程序。
}
// TripletMain.cpp:主程序,测试程序
#include<stdio.h>
#include"triplet.h"
int main()
{
Triplet T;
printf("//初始化T=(1,3,4)\n");
InitTriplet(T,1,3,4);
for(int i=0;i<3;i++)
1.源程序
文件结构:
Triple.h:三元组的头文件
Triplet.cpp:基本操作的函数实现
TripletMain.cpp:主程序,测试程序
代码:
// Triple.h:三元组的头文件
#ifndef _TRIPLE_H//防止重复包含
#define _TRIPLE_H
//预定义常量和类型
#define TRUE 1
typedef ElemType *Triplet; //用指向首元素的指针来表示一个三元组
//函数原型
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3);//初始化
Status DestroyTriplet(Triplet &T); //销毁
DestroyTriplet(T);
return 0;
}
2.运行结果
3.心得体会
(1).在头文件中定义自定义常量,可以免去在各个子文件中重复定义,使程序变得通俗易懂。同时若程序编译出错,也便于检查出错误。
(2).巧妙利用函数返回值,有助于程序的简化。
令函数返回OK,可以通过函数的返回值判断函数时候正确执行,有保护作用。
{ /*操作结果:构造三元组T,依次置T的三个元素的初值为v1,v2和v3 */
T=(Triplet)malloc(3*sizeof(Triplet));//分配3个元素的存储空间
if(!T)//分配存储空间失败
exit(OVERFLOW);//终止整个程序的运行
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
Status Min(Triplet T,ElemType &e)
{ /*初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最小值*/ e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return OK;
(3).在头文件加上类似下面的语句就能防止头文件重复调用:
#ifndef _ TRIPLE _H
#define _ TRIPLE _H
…… //头文件内容
#endif
原因如下:第一次调用,没定义过_ TRIPLE _H,就会定义_TEST_H_然后头文件被调用,如果还有调用,_ TRIPLE _H已被第一次定义,自动就跳过了
Status Min(Triplet T,ElemType &e); //用e返回T的三个元素中的最小值
#endif
// Triplet.cpp:基本操作的函数实现
#include<stdlib.h>// malloc,free
#include"Triplet.h"
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)