C語言(本書未直接采用類和對象等設施,而是從C語言中精選了一個核心子集,並增添C++語言的引用調用參數傳遞方式等,構成一個類C描述語言)源代碼如下:
[cpp]
# include <stdio.h>
# include <stdlib.h>
# define TRUE 1
# define FALSE 0
# define OK 1
# define ERROR 0
# define INFREASIBLE -1
# define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef ElemType * Triplet;
Status InitTriplet(Triplet & T, ElemType v1, ElemType v2, ElemType v3);
Status DestroyTiplet(Triplet & t);
Status Get(Triplet T, int i, ElemType & e);
Status Put(Triplet & T, int i, ElemType & e);
Status IsAscending(Triplet T);
Status IsDescending(Triplet T);
Status Max(Triplet T, ElemType & e);
Status Min(Triplet T, ElemType & e);
Status Show(Triplet T);
Status InitTriplet(Triplet & T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType *)malloc(3 * sizeof(ElemType));
if(!T) {
exit(OVERFLOW);
}
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}
Status DestroyTiplet(Triplet & T)
{
free(T);
T = NULL;
return OK;
}
Status Get(Triplet T, int i, ElemType & e)
{
if(i < 1 || i > 3) {
return ERROR;
}
e = T[i - 1];
return OK;
}
Status Put(Triplet & T, int i, ElemType e)
{
if(i < 1 || i > 3) {
return ERROR;
}
T[i - 1] = e;
return OK;
}
Status IsAscending(Triplet T)
{
return (T[0] <= T[1]) && (T[1] <= T[2]);
}
Status IsDescending(Triplet T)
{
return (T[0] >= T[1]) && (T[1] >= T[2]);
}
Status Max(Triplet T, ElemType & e)
{
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)
{
e = (T[0] <= T[1]) ? (T[0] <= T[2] ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
return OK;
}
Status Show(Triplet T)
{
int i;
for(i = 0; i < 3; i++) {
printf("%d ", T[i]);
}
putchar('\n');
return OK;
}
int main(void)
{
Triplet T;
InitTriplet(T, 9, 3, 0);
Show(T);
ElemType e;
Get(T, 2, e);
printf("%d\n", e);
Put(T, 1, 5);
Show(T);
printf("%d %d\n", IsAscending(T), IsDescending(T));
ElemType e1, e2;
Max(T, e1);
Min(T, e2);
printf("%d %d\n", e1, e2);
}