实验二

2018-03-14  本文已影响0人  林之禾
//============================================================================
// Name        : Test3.cpp
// Author      : ldl
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>

#include <stdio.h>
#include <stdlib.h>

#include "Test3.h"

using namespace std;

int main(void) {
    Triplet T;
    ElemType e;
    setvbuf(stdout, NULL, _IONBF, 0);
    puts("请输入三个数字:");
    ElemType v1, v2, v3;

    int index;
    scanf("%d %d %d", &v1, &v2, &v3);
    int i = InitTriplet(T, v1, v2, v3);
    if (i) {
        printf("初始化成功!三元组内值为:");
        for (int i = 0; i < 3; ++i) {
            printf("%d\t", T[i]);
        }
        printf("\n");
    } else {
        puts("初始化失败");
    }

    puts("输入需要获取的数字的位置:");
    scanf("%d", &index);
    Get(T,index,e);
    printf("查询的值为:%d\n", e);

    puts("输入需要代替的数字的位置与数字:");
    scanf("%d %d", &index, &e);
    Put(T,index,e);
    printf("替换后三元组内值:");
    for (int i = 0; i < 3; ++i) {
        printf("%d\t", T[i]);
    }
    printf("\n");

    if (IsAscending(T)) {
        puts("三元组内元素为升序");
    } else {
        puts("三元组内元素不为升序");
    }

    if (IsDecending(T)) {
        puts("三元组内元素为降序");
    } else {
        puts("三元组内元素不为降序");
    }
    puts("三元组内最大值为:");
    printf("%d\n", Max(T, e));
    puts("三元组内最小值为:");
    printf("%d\n", Min(T, e));
    DestroyTriplet(T);
    puts("已销毁");
    return 0;
}

/*
 * Test3.h
 *
 *  Created on: 2018年3月10日
 *      Author: 林道利
 */

#define OK 1
#define ERROR 0

typedef int ElemType;
typedef ElemType* Triplet;
typedef int Status;
//操作结果:构造三元组T,元素e1, e2和e3分别被赋以v1, v2, v3值
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {
    if (!(T = (ElemType *) malloc(3 * (sizeof(ElemType))))) {
        return ERROR;
    }
    T[0] = v1;
    T[1] = v2;
    T[2] = v3;
    return OK;
}
//操作结果:三元组T被销毁
Status DestroyTriplet(Triplet &T) {
    free(T);
    T = NULL;
    return OK;
}
//初始条件:三元组T已存在,1≤i≤3
//操作结果:用e返回T的第i元的值
ElemType Get(Triplet T, int i, ElemType &e) {
    e = T[i-1];
    return e;
}
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按升序排列,则返回1,否则返回0
Status IsAscending(Triplet T) {
    for (int i = 0; i < 2; ++i) {
        if (T[i] > T[i + 1]) {
            return ERROR;
        }
    }
    return OK;
}
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按降序排列,则返回1,否则返回0
Status IsDecending(Triplet T) {
    for (int i = 0; i < 2; ++i) {
        if (T[i] < T[i + 1]) {
            return ERROR;
        }
    }
    return OK;
}
//初始条件:三元组T已存在,1≤i≤3
//操作结果:改变T的第i元的值为e
Status Put(Triplet &T, int i, ElemType e) {
    T[i-1] = e;
    return OK;
}
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最大值
ElemType Max(Triplet T, ElemType &e) {
    e = T[0];
    for (int i = 0; i < 3; ++i) {
        if (e < T[i]) {
            e = T[i];
        }
    }
    return e;
}
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最小值
ElemType Min(Triplet T, ElemType &e) {
    e = T[0];
    for (int i = 0; i < 3; ++i) {
        if (e > T[i]) {
            e = T[i];
        }
    }
    return e;
}


上一篇 下一篇

猜你喜欢

热点阅读