#include<string.h>//字符串函数头文件
#include<ctype.h>//字符函数头文件
#include<malloc.h>//malloc等
#include<stdio.h>//标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include<stdlib.h>//atoi(),exit()
#include<io.h>//eof()
#include<math.h>//数学函数头文件,包括floor(),celil(),abs()等
#include<sys/timeb.h>//ftime()
#include<stdarg.h>//提供宏va_start,va_arg和va_end,用于存取变长参数表
//函数结果状态代码。
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean;//Boolean是布尔类型,,其值是TRUE和FALSE
typedef int ElemType;
typedef ElemType * Triplet;//由InitTriplet分配3个元素存储空间
//Triplet类型是ElemType类型的指针,存放ElemType类型的地址
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){
//操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和v3。
T = (ElemType *)malloc(3 * sizeof(ElemType));//分配3个元素的存储空间
if (!T)exit(OVERFLOW);//分配失败则退出
T[0] = v1, T[1] = v2, T[2] = v3;
return OK;
}
Status DestroyTriplet(Triplet &T){
//操作结果:三元组T被销毁。
free(T);//释放T所指的三元组存储空间
T = NULL;//T不再指向任何存储单元
return OK;
}
Status Get(Triplet T, int i, ElemType &e){
//初始条件:三元组T已存在,1 <= i <= 3。操作结果:用e返回T的第i元的值。
if (i<1 || i>3) return ERROR;//i不在三元组范围内
e = T[i - 1];//将三元组T的第i个元素赋给e
return OK;
}
Status Put(Triplet T, int i, ElemType e){
//初始条件:三元组T已存在,1 <= i <= 3。操作结果:改变T的第i元的值为e。
if (i<1 || i>3) return ERROR;//i不在三元组范围内
T[i - 1] = e;//将e的值赋给三元组T的第i个元素
return OK;
}
Status IsAscending(Triplet T){
//初始条件:三元组T已存在。操作结果:如果三元组T的3个元素按升序排列,则返回1,否则返回0。
return (T[0] <= T[1] && T[1] <= T[2]); //只在T[0]不大于T[1]且不大于T[2]时返回真
}
Status IsDescending(Triplet T){
//初始条件:三元组T已存在。操作结果:如果三元组T的3个元素按降序排列,则返回1,否则返回0。
return (T[0] >= T[1] && T[1] >= T[2]);//只在T[0]不小于T[1]且不小于T[2]时返回真
}
Status Max(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;
}
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;
}
void PrintE(ElemType e){//输出元素的值
printf("%d\n", e);
}
void PrintT(Triplet T){//依次输出三元组的值
printf("%d, %d, %d\n", T[0], T[1], T[2]);
}
void main(){
Triplet T;
ElemType m;
Status i;
i = InitTriplet(T, 5, 7, 9);//初始化三元组T,其3个元素依次为5,7,9。
printf("调用初始化函数后,i = %d(1:成功)。 T的三个值为", i);
PrintT(T);//输出T的3个值
i = Get(T, 2, m);//将三元组T的第2个值赋给m
if (i == OK){//调用Get()成功
printf("T的第2个值为:");
PrintE(m); //输出m (= T[1])
}
i = Put(T, 2, 6);//将三元组T的第2个值改为6
if (i == OK){//调用Put()成功
printf("将T的第2个值改为6后,T的三个值为:");
PrintT(T);//依次输出三元组T的3个值
}
i = IsAscending(T);//测试升序的函数
printf("调用测试升序的函数后,i = %d(0:否 1:是)\n", i);
i = IsDescending(T);//测试降序的函数
printf("调用测试降序的函数后,i = %d(0:否 1:是)\n", i);
if (i = Max(T, m) == OK){//先赋值再比较
printf("T中的最大值为");
PrintE(m); //输出最大值m
}
if (i = Min(T, m) == OK){
printf("T中的最小值为");
PrintE(m);//输出最小值m
}
DestroyTriplet(T);//函数也可以不带返回值
printf("销毁T后,T = %u\n", T);
getchar();
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-09-26 22:33:30