#include<stdio.h>#include<stdlib.h>//定义常量 方便操作//可能也没多方便 #define Status int#define Time 1000 /**定义一系列三元组的操作 C语言中的函数 *///初始化 Status* InitTriplet(Status* T, Status v1, Status v2, Status v3);//销毁三元组 Status* DestroyTriplet(Status *T);//返回第i个位置的的元素 void Get(Status* T, Status i);//改变第i个位置的元素的值 Status* Put(Status* T, Status i, Status e);//判断是否升序排列 void isAscending(Status* T);//判断是否降序排列 void isDescending(Status* T);//返回最大值 void Max(Status* T);//返回最小值 void Min(Status* T); /**UI 逻辑 函数 */ void Show();Status* Logic(Status* T, char key);void isTrue(Status* T);//打印三元组 void PRintTriplet(Status *T);int main(){ char key; Status* T = NULL; while(1){ Show(); scanf(" %c", &key); T = Logic(T, key); } } void isTrue(Status* T){ if(NULL == T){ printf("/n抱歉 未分配内存/n"); exit(0); }}void Show(){ system("cls"); printf("*****************************************************/n"); printf("/n "); printf("/n"); printf("/n 1.初始化三元组"); printf("/n 2.销毁三元组"); printf("/n 3.获取第i个位置的元素值"); printf("/n 4.改变第i个位置的元素值"); printf("/n 5.判断三元组是否为升序排列"); printf("/n 6.判断三元组是否为降序排列"); printf("/n 7.返回三元组中最大值"); printf("/n 8.返回三元组中最小值"); printf("/n 9.打印三元组"); printf("/n"); printf(" ###########################/n"); printf("/n 请问您需要执行什么操作?"); printf("/n 请输入相应数字并按回车执行"); printf(" /n"); printf("*****************************************************/n");}void PrintTriplet(Status *T){ isTrue(T); printf("第一个元素为 :%d/n", *T); printf("第二个元素为 :%d/n", *(T+1)); printf("第三个元素为 :%d/n", *(T+2)); }Status* InitTriplet(Status* T, Status v1, Status v2, Status v3){ T = (Status*)malloc(3*sizeof(Status)); T[0] = v1; T[1] = v2; T[2] = v3; return T;}Status* DestroyTriplet(Status *T){ isTrue(T); if(NULL != T){ free(T); T = NULL; } return T;}void Get(Status* T, Status i){ isTrue(T); printf("第%d个元素是%d/n", i, T[i - 1]); }Status* Put(Status* T, Status i, Status e){ isTrue(T); *(T + i - 1) = e; printf("您改变第%d个位置的元素为%d/n", i, e); return T;}void isAscending(Status* T){ isTrue(T); if(T[0] > T[1] && T[1] > T[2]){ printf("/n该三元组是升序排列/n"); }else{ printf("/n该三元组不是升序排列/n"); } }void isDescending(Status* T){ isTrue(T); if(T[0] < T[1] && T[1] < T[2]){ printf("/n该三元组是降序排列/n"); }else{ printf("/n该三元组是升序排列/n"); } }void Max(Status* T){ isTrue(T); int i; i = T[0] > T[1]?T[0] : T[1]; i = i > T[2]?i : T[2]; printf("/n三元组中最大值是%d/n", i);}void Min(Status* T){ isTrue(T); int i; i = T[0] < T[1]?T[0] : T[1]; i = i < T[2]?i : T[2]; printf("/n三元组中最小值是%d/n", i);}Status* Logic(Status* T, char key){ switch(key){ case '1': system("cls"); printf("/n请输入您想初始化三元组的值"); printf("/n输入三个int数据 以空格分开/n"); int i, j, k; scanf("%d %d %d", &i, &j, &k); T = InitTriplet(T, i, j, k); system("cls"); printf("/n初始化完成"); printf("/n您初始化的数据为 %d %d %d/n", i, j, k); _sleep(Time); break; case '2': system("cls"); T = DestroyTriplet(T); printf("/n三元组已销毁..."); _sleep(Time); break; case '3': system("cls"); printf("/n您想获得第几个位置的元素?/n"); printf("请输入/n"); int m; scanf("%d", &m); Get(T, m); _sleep(Time); break; case '4': system("cls"); printf("您想改变第几个位置的元素?/n"); scanf("%d", &i); printf("改变为多少?/n"); scanf("%d", &m); Put(T, i, m); system("cls"); printf("您已经改变第%d个元素为%d", i, m); _sleep(Time); break; case '5': system("cls"); isAscending(T); _sleep(Time); break; case '6': system("cls"); isDescending(T); _sleep(Time); break; case '7': system("cls"); Max(T); _sleep(Time); break; case '8': system("cls"); Min(T); _sleep(Time); break; case '9': system("cls"); PrintTriplet(T); _sleep(Time); break; } return T;}
新闻热点
疑难解答