#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 3
typedef float ElemType;
typedef ElemType* Triplet;
//创建三元组
void initTriplet(Triplet &T,ElemType v[]){
T=(Triplet)malloc(sizeof(ElemType)*N);
if(!T)exit(-2);
int i;
for(i=0;i<N;i++)
T[i]=v[i];
}
//输出三元组
void printTripet(Triplet T){
int i;
for(i=0;i<N;i++)
printf("%.1f ",T[i]);
printf("\n");
}
//三元组相加
void add(Triplet T1,Triplet &T2){
int i;
for(i=0;i<N;i++)
T2[i]+=T1[i];
}
//N元组的各分量同乘比例系数
void multiX(Triplet &T1,float X){
int i;
for(i=0;i<N;i++)
T1[i]*=X;
}
//取三元组的任意一个分量
void getElem(Triplet T1,int i){
printf("%.1f\n",T1[i-1]);
}
//置三元组的任意一个分量
void setElem(Triplet &T1,int i,ElemType j){
T1[i-1]=j;
}
//求三元组的最大分量
ElemType getMax(Triplet T2){
ElemType max=T2[0];
int i;
for(i=0;i<N;i++){
if(T2[i]>max)
max=T2[i];
}
return max;
}
//求三元组的最小分量
ElemType getMin(Triplet T2){
ElemType min=T2[0];
int i;
for(i=0;i<N;i++){
if(T2[i]<min)
min=T2[i];
}
return min;
}
//销毁三元组,退出
void deleteTriplet(Triplet &T){
if(!T)
free(T);
exit(0);
}
//是否升序
int isAscending(Triplet T){
int i;
for(i=0;i<N-1;i++){
if(T[i]>=T[i+1]){
return 0;
}
}
return 1;
}
//是否降序
int isDescending(Triplet T){
int i;
for(i=0;i<N-1;i++){
if(T[i]<=T[i+1]){
return 0;
}
}
return 1;
}
//主函数
int main(){
Triplet T1,T2;
ElemType v[N];
printf("请输入N元组的每个元素(N=%d)\n",N);
int i,Num=0;
for (i = 0; i < N; i++)
scanf("%f", &v[i]);
initTriplet(T2, v);
while(Num!=10){
printf("\n");
printf("1.输出三元组\n");
printf("2.两个%d元组相加\n", N);
printf("3.%d元组的各分量同成比例系数\n",N);
printf("4.获取T的第i个元素的值\n");
printf("5.置换T的第i元的值为e\n");
printf("6.是否升序排列\n");
printf("7.是否降序排列\n");
printf("8.取最大值\n");
printf("9.取最小值\n");
printf("10.退出\n");
printf("-------------------------------\n");
printf("请输入你想实现的功能的编号:\n");
scanf("%d", &Num);
switch (Num) {
case 1 :
printf("三元组为:\n");
printTripet(T2);
break;
case 2:
printf("请输入第二个相加的三元组:\n");
for (i = 0; i < N; i++)
scanf("%f", &v[i]);
initTriplet(T1,v);
printf("\n");
add(T1,T2);
printf("相加后三元组为:\n");
printTripet(T2);
break;
case 3:
printf("请输入要乘的系数X\n");
float X;
scanf("%f",&X);
multiX(T2,X);
printf("改变后三元组为:\n");
printTripet(T2);
break;
case 4:
printf("请输入要获取第几个数\n");
scanf("%d",&i);
getElem(T2,i);
break;
case 5:
ElemType k;
printf("请输入要改变的序号和相应的值\n");
scanf("%d %f",&i,&k);
setElem(T2,i,k);
printf("改变后三元组为:\n");
printTripet(T2);
break;
case 6:
int b;
b=isAscending(T2);
if(b)
printf("是升序\n");
else
printf("不是升序\n");
break;
case 7:
int a;
a=isDescending(T2);
if(a)
printf("是降序\n");
else
printf("不是降序\n");
break;
case 8 :
printf("三元组最大值为:\n");
printf("%.1f\n",getMax(T2));
break;
case 9 :
printf("三元组最小值为:\n");
printf("%.1f\n",getMin(T2));
break;
case 10 :
printf("您已退出程序");
deleteTriplet(T2);
break;
}
}
return 0;
}
三元组的创建 删除 增删改查 升降序判断
于 2023-03-15 20:25:23 首次发布