三元组数据结构:
int* Triplet;
相当于数组,实现过程中类似于一个数组,以下是其函数列表:
函数列表 |
---|
InitTriplet(初始化) |
DestoryTriple(销毁) |
Get(获取值) |
Put(赋值) |
IsAscending(升序?) |
IsDscending(降序?) |
Max(求最大) |
Min(求最小) |
PrintE(输出元素) |
PrintT(打印三元组) |
说明:ElemType为int;Triplet为int型指针;Status为int
malloc函数分配三个空间并且检查分配是否成功,传入三个元素赋值。
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType*)malloc(sizeof(ElemType) * 3);
if (!T)
exit(OVERFLOW);
T[0] = v1; T[1] = v2; T[2] = v3;
return OK;
}
将初始化过的T的内存free掉,将地址指向NULL。
Status DestoryTriple(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 IsDscending(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;
}
void PrintE(ElemType e)
{
printf("%d\n", e);
//printf("%f\n",e);
}
void PrintT(Triplet T)
{
printf("%d,%d,%d\n", T[0], T[1], T[2]);
//printf("%f,%f,%f", T[0], T[1], T[2]);
}
主函数
#if 0
#include "C1.H"
int main()
{
Triplet T;
ElemType m;
Status i;
i = InitTriplet(T, 5, 7, 9);
printf("调用初始化函数成功,i = %d(1成功)。T的3个值为:", i);
PrintT(T);
i = Put(T, 2, 6);
if (i == OK)
{
printf("将T的第二个值改为6,三个值为:");
PrintT(T);
}
i = IsAscending(T);
printf("调用测试升序的函数之后,i = %d(0否1是)\n", i);
i = IsDscending(T);
printf("调用测试降序的函数之后,i = %d(0否1是)\n", i);
if ((i = Max(T, m)) == OK)
{
printf("T中最大值为:");
PrintE(m);
}
if ((i = Min(T, m)) == OK)
{
printf("T中最小值为:");
PrintE(m);
}
DestoryTriple(T);
printf("T销毁之后,T = %u\n", T);
return 0;
}
#endif
头文件c1.h
// c1.h (文件名)
#pragma once
#ifndef C1_H
#define C1_H
#include // 字符串函数头文件
#include // 字符函数头文件
#include // malloc()等
#include // INT_MAX等
#include // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include // atoi(),exit()
#include // eof()
#include // 数学函数头文件,包括floor(),ceil(),abs()等
#include // ftime()
#include // 提供宏va_start,va_arg和va_end,用于存取变长参数表
// 函数结果状态代码。在教科书第10页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
// #define INFEASIBLE -1 没使用
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第7、8章用到
typedef int ElemType;
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);
Status DestoryTriple(Triplet &T);
Status Get(Triplet T, int i, ElemType &e);
Status Put(Triplet T, int i, ElemType e);
Status IsAscending(Triplet T);
Status IsDscending(Triplet T);
Status Max(Triplet T, ElemType &e);
Status Min(Triplet T, ElemType &e);
void PrintE(ElemType e);
void PrintT(Triplet T);
#endif
计算的是1-1/x+1/(x*x)…
头文件c1.h
#ifndef C1_H
#define C1_H
#include // 字符串函数头文件
#include // 字符函数头文件
#include // malloc()等
#include // INT_MAX等
#include // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include // atoi(),exit()
#include // eof()
#include // 数学函数头文件,包括floor(),ceil(),abs()等
#include // ftime()
#include // 提供宏va_start,va_arg和va_end,用于存取变长参数表
// 函数结果状态代码。在教科书第10页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
// #define INFEASIBLE -1 没使用
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第7、8章用到
typedef int ElemType;
typedef ElemType *Triplet;
#endif
获取当前的时间,这里t1.time跟t2.time表示的是秒,t1.millitm跟t2.millitm表示的是毫秒
主函数
#include"C1.h"
int main()
{
timeb t1, t2;
long t;
double x, sum = 1, sum1;
int i,n;
printf("输入x n:");
scanf("%lf%d", &x, &n);
ftime(&t1);
for (i = 1; i <= n; i++)
{
sum1 = -1.0/x;
sum += sum1;
}
ftime(&t2);
t = (t2.time - t1.time) * 1000 + (t2.millitm - t1.millitm);
printf("sum = %lf,用时 %ld 毫秒\n", sum, t);
}