lab1:复数的四则运算

配环境花了不少时间,代码还是很简单的,附上关键内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 计算两个复数的和
int AddComplex(Complex sCpx1, Complex sCpx2, Complex* psSum)
{
if (psSum == NULL)
return 1;

psSum->fReal = sCpx1.fReal + sCpx2.fReal;
psSum->fImage = sCpx1.fImage + sCpx2.fImage;

return 0;
}

// 计算两个复数的差
int SubComplex(Complex sCpx1, Complex sCpx2, Complex* psDiff)
{
if (psDiff == NULL)
return 1;

psDiff->fReal = sCpx1.fReal - sCpx2.fReal;
psDiff->fImage = sCpx1.fImage - sCpx2.fImage;

return 0;
}
// 计算两个复数的积
int MulComplex(Complex sCpx1, Complex sCpx2, Complex* psProd)
{
if (psProd == NULL)
return 1;

psProd->fReal = sCpx1.fReal * sCpx2.fReal - sCpx1.fImage * sCpx2.fImage;
psProd->fImage = sCpx1.fReal * sCpx2.fImage + sCpx1.fImage * sCpx2.fReal;

return 0;
}
// 计算两个复数的商
int DivComplex(Complex sCpx1, Complex sCpx2, Complex* psQuot)
{
if (psQuot == NULL || (sCpx2.fReal == 0 && sCpx2.fImage == 0))
return 1;

float denominator = sCpx2.fReal * sCpx2.fReal + sCpx2.fImage * sCpx2.fImage;
psQuot->fReal = (sCpx1.fReal * sCpx2.fReal + sCpx1.fImage * sCpx2.fImage) / denominator;
psQuot->fImage = (sCpx1.fImage * sCpx2.fReal - sCpx1.fReal * sCpx2.fImage) / denominator;

return 0;
}

lab2:一元二次多项式的加减运算(线性表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>

#define MAX_TERMS 100

//定义单项式
typedef struct {
float coef;
int exp;
} Term;

//定义多项式
typedef struct {
Term terms[MAX_TERMS];
int size;
} Polynomial;

//初始化多项式
void initPolynomial(Polynomial *p) {
p->size = 0;
}

//插入单项式
void insertTerm(Polynomial *p, float coef, int exp) {
if (coef == 0) return;
int i = 0;
while (i < p->size && p->terms[i].exp > exp) i++;

if (i < p->size && p->terms[i].exp == exp) {
p->terms[i].coef += coef;
if (p->terms[i].coef == 0) {
for (int j = i; j < p->size - 1; j++) {
p->terms[j] = p->terms[j + 1];
}
p->size--;
}
} else {
for (int j = p->size; j > i; j--) {
p->terms[j] = p->terms[j - 1];
}
p->terms[i].coef = coef;
p->terms[i].exp = exp;
p->size++;
}
}

//打印多项式
void printPolynomial(Polynomial *p) {
if (p->size == 0) {
printf("0\n");
return;
}
for (int i = 0; i < p->size; i++) {
if (i > 0 && p->terms[i].coef > 0) printf("+");
printf("%f * x^%d", p->terms[i].coef, p->terms[i].exp);
}
printf("\n");
}

//求多项式的和
void addPolynomial(Polynomial *p1, Polynomial *p2, Polynomial *result) {
initPolynomial(result);
int i = 0, j = 0;
while (i < p1->size && j < p2->size) {
if (p1->terms[i].exp > p2->terms[j].exp) {
insertTerm(result, p1->terms[i].coef, p1->terms[i].exp);
i++;
} else if (p1->terms[i].exp < p2->terms[j].exp) {
insertTerm(result, p2->terms[j].coef, p2->terms[j].exp);
j++;
} else {
insertTerm(result, p1->terms[i].coef + p2->terms[j].coef, p1->terms[i].exp);
i++;
j++;
}
}

while (i < p1->size) insertTerm(result, p1->terms[i].coef, p1->terms[i].exp), i++;
while (j < p2->size) insertTerm(result, p2->terms[j].coef, p2->terms[j].exp), j++;
}

//求多项式的差
void subtractPolynomial(Polynomial *p1, Polynomial *p2, Polynomial *result) {
initPolynomial(result);
int i = 0, j = 0;
while (i < p1->size && j < p2->size) {
if (p1->terms[i].exp > p2->terms[j].exp) {
insertTerm(result, p1->terms[i].coef, p1->terms[i].exp);
i++;
} else if (p1->terms[i].exp < p2->terms[j].exp) {
insertTerm(result, -p2->terms[j].coef, p2->terms[j].exp);
j++;
} else {
insertTerm(result, p1->terms[i].coef - p2->terms[j].coef, p1->terms[i].exp);
i++;
j++;
}
}

while (i < p1->size) insertTerm(result, p1->terms[i].coef, p1->terms[i].exp), i++;
while (j < p2->size) insertTerm(result, -p2->terms[j].coef, p2->terms[j].exp), j++;
}

//求多项式的积
void multiplyPolynomial(Polynomial *p1, Polynomial *p2, Polynomial *result) {
initPolynomial(result);
for (int i = 0; i < p1->size; i++) {
for (int j = 0; j < p2->size; j++) {
int coef = p1->terms[i].coef * p2->terms[j].coef;
int exp = p1->terms[i].exp + p2->terms[j].exp;
insertTerm(result, coef, exp);
}
}
}
int main() {
Polynomial p1, p2, sum, diff, product;

initPolynomial(&p1);
initPolynomial(&p2);

printf("请输入第一个多项式的项数");
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
float coef;
int exp;
printf("请输入第%d项的系数和指数", i + 1);
scanf("%f%d", &coef, &exp);
insertTerm(&p1, coef, exp);
}


printf("请输入第二个多项式的项数");
int m;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
float coef;
int exp;
printf("请输入第%d项的系数和指数", i + 1);
scanf("%f%d", &coef, &exp);
insertTerm(&p2, coef, exp);
}

printf("P1: ");
printPolynomial(&p1);
printf("P2: ");
printPolynomial(&p2);

addPolynomial(&p1, &p2, &sum);
printf("P1 + P2: ");
printPolynomial(&sum);

subtractPolynomial(&p1, &p2, &diff);
printf("P1 - P2: ");
printPolynomial(&diff);

multiplyPolynomial(&p1, &p2, &product);
printf("P1 * P2: ");
printPolynomial(&product);
return 0;
}