第一章 绪论 课堂习题 1、试写一算法,自大到小依次输出顺序读入的三个整数 X,Y 和 Z 的值。 【解答】 一解:IF XY; IF Y>Z Y<->Z; IF XY; 此算法最坏情况下比较 3 次,移动(即赋值 9 次) 二解: IF XTEMP Y=TEMP ELSE {Y=X;X=TEMP;} 此算法最坏情况下比较 3 次,移动 7 次 三解: IF XZ X<->Y ELSE X<->Z;} ELSE {IF XZ;} IF Y #include typedef int ElemType; typedef ElemType *Triplet; typedef int Status; #define OK 1 #define ERROR 0 #define OVERFLOW -2 Status InitTriplet(Triplet *T) { ElemType v1,v2,v3; *T=(ElemType *)malloc(3*sizeof(ElemType)); if (*T==0) return(OVERFLOW); scanf("%d,%d,%d",&v1,&v2,&v3); (*T)[0]=v1; (*T)[1]=v2; (*T)[2]=v3; } Status DestroyTriplet(Triplet *T) { free(*T); *T=NULL; } 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 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 main() { Triplet T; ElemType e; int select,i; printf("请输入三个数,建立一个三元组:\n"); if (InitTriplet(&T)==OVERFLOW) printf("存储空间分配失败,退出程序\n"); else { do { printf("1:取三元组第 I 个元素\n"); printf("2:修改三元组第 I 个元素\n"); printf("3:判断三元组元素是否递...