实验一 三元组(Triplet)
定义三元组:
ADT Triplet{
数据对象:D={e1,e2,e3}
}
输出三元组内容: PrintTriplet(T)
实现两个三元组的对应分量的相加或相减:add(T1,&T2)
这里用T2带回来结果,对T2进行引用
给三元组的各分量同乘一个比例因子:mulCoef(&T1,coef)
这里用T1带回结果
实现N元组:
代码:
拿三元组的看,如果需要改为N元组还需要再main函数中添加循环……
#include <stdio.h>
#include <stdlib.h>
#define N 3 //定义符号常量N 目的是不把代码写死方便实现N元组
typedef float ElemType;//给float类型重新定义为ElemType
typedef ElemType *Triplet;//给指向ElemType类型的指针定义(起别名)为Triplet
//1.N元组初始化
void initTriplet(Triplet &T, ElemType a[]) { //用T带回结果-void a[]数组类型和上面定义的类型一样
T = (Triplet)malloc(sizeof(ElemType) * N);
if (!T)
exit(-1); //0表示正常退出,其他值表示异常退出
int i;
for (i = 0; i < N; i++) {
T[i] = a[i];
}
}
//2.输出N元组
void PrintfTriplet(Triplet T) {
int i;
for (i = 0; i < N; i++) {
printf("%.1f\t", T[i]);
}
printf("\n");
}
//3.用e获取T的第i个元素的值
void getElem(Triplet T, int i, ElemType& e)
{
if (i<i || i>N)
printf("请输入正确范围内的值!");
else
e = T[i - 1];
}
//4.置换T的第i元的值为e
void putElem(Triplet &T, int i, ElemType e) {
T[i - 1] = e;
}
//5.取最大值
void getMax(Triplet T, ElemType &e) {
int i;
e = T[0];
for (i = 1; i < N; i++) {
if (T[i] > e)
e = T[i];
}
}
//6.取最小值
void getMin(Triplet T, ElemType &e) {
int i;
e = T[0];
for (i = 1; i < N; i++) {
if (T[i] < e)
e = T[i];
}
}
//7.两个N元组相加
void add(Triplet T1, Triplet &T2) {
int i;
for (i = 0; i < N; i++) {
T2[i] += T1[i];
}
}
//8.N元组的各系数同乘比例
void MulCoef(Triplet T1, float coef) {
int i;
for (i = 0; i < N; i++) {
T1[i] *= coef;
}
}
//9.销毁三元组并退出系统
void destroy(Triplet T) {
if (!T)
free(T);
exit(0);
}
//主函数
int main() {
Triplet T1, T2;
ElemType v[N], coef, e;
int i, Num, flat;
printf("-----N元组操作主菜单-----\n");
printf("1.N元组初始化\n");
printf("2.输出三元组\n");
printf("3.用e获取T的第i个元素的值\n");
printf("4.置换T的第i元的值为e\n");
printf("6.取最大值\n");
printf("7.取最小值\n");
printf("8.输入另一个N元组(N = %d)并相加\n", N);
printf("9.N元组的倍增或倍减\n");
printf("10.释放内存并退出系统\n");
while (1) {
printf("请输入你想实现的功能的编号:\n");
printf("请先初始化三元组!\n");
scanf("%d", &Num);
switch (Num) {
//N元组初始化
case 1:
printf("请输入N元组(N=%d)的每个元素的值:\n", N);
for (i = 0; i < N; i++)
scanf("%f", &v[i]);
initTriplet(T1, v);
break;
//输出N元组
case 2:
printf("初始化好的N元组为:\n");
PrintfTriplet(T1);
break;
//获取第i个元素的值
case 3:printf("请输入要获取第几个元素的值:\n");
scanf("%d", &i);
getElem(T1, i, e);
if (i >= 1 && i <= N)
printf("第%d个元素的值为:%.1f\n", i, e);
break;
//置换T的第i元的值为e
case 4:
printf("请输入你想要置换第几个元素:\n");
scanf("%d", &i);
putElem(T1, i, e);
printf("置换后的新的N元组为:\n");
PrintfTriplet(T1);
break;
//取最大值
case 6:
getMax(T1, e);
printf("最大值为:%.1f\n", e);
break;
//取最大值
case 7:
getMin(T1, e);
printf("最小值为:%.1f\n", e);
break;
//输入另一个N元组(N = %d)并相加
case 8:
printf("请输入要相加的N元组(N=%d)的每个元素\n", N);
for (i = 0; i < N; i++)
scanf("%f", &v[i]);
initTriplet(T2, v);
add(T1, T2);
printf("相加后的N元组为:\n");
PrintfTriplet(T2);
break;
//N元组的倍增或倍减
case 9:
printf("请输入N元组要相乘的数:\n");
scanf("%f", &coef);
MulCoef(T1, coef);
printf("N元组乘以比例系数后的结果为:\n");
PrintfTriplet(T1);
break;
//释放内存并退出系统
case 10:
destroy(T1);
destroy(T2);
break;
default:
printf("没有所需的功能\n");
break;
}
printf("感谢您的本次使用!\n");
}
return 0;
}
数据类型没有直接定义为float……而是直接定义为了ElemType,后续直接在前更改就好,但是后面输出时需要注意printf