两个正整数相加 相减 相乘的代码
时间: 2023-04-03 14:03:11 浏览: 94
以下是两个正整数相加、相减、相乘的代码:
相加:
```c
#include <stdio.h>
int main() {
int a, b, sum;
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
sum = a + b;
printf("%d + %d = %d\n", a, b, sum);
return 0;
}
```
相减:
```c
#include <stdio.h>
int main() {
int a, b, diff;
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
diff = a - b;
printf("%d - %d = %d\n", a, b, diff);
return 0;
}
```
相乘:
```c
#include <stdio.h>
int main() {
int a, b, product;
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
product = a * b;
printf("%d * %d = %d\n", a, b, product);
return 0;
}
```
相关问题
c语言编写数据结构的一元多项式计算器,输入多项式,序列按指数升序排列,实现两个多项式的相加相减相乘,并输出相加相减相乘结果
好的,我可以帮你解答这个问题。首先,我们需要定义多项式的结构体,包含系数和指数两个成员变量:
```c
typedef struct PolyNode {
float coef; // 系数
int expn; // 指数
struct PolyNode *next;
} PolyNode, *Polynomial;
```
接着,我们可以实现多项式的输入函数,按照指数升序排列:
```c
Polynomial CreatePoly() {
Polynomial head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
Polynomial p = head;
int n;
printf("请输入多项式项数:");
scanf("%d", &n);
printf("请按指数升序输入各项系数和指数,如:a*x^b\n");
for (int i = 0; i < n; i++) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
scanf("%f*x^%d", &node->coef, &node->expn);
while (p->next && p->next->expn <= node->expn) {
if (p->next->expn == node->expn) {
p->next->coef += node->coef;
free(node);
node = NULL;
break;
}
p = p->next;
}
if (node) {
node->next = p->next;
p->next = node;
p = head;
}
}
return head;
}
```
接下来,我们可以实现多项式的加减乘运算,具体实现可以参考下面的代码:
```c
Polynomial Add(Polynomial P1, Polynomial P2) {
Polynomial head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
Polynomial p = head;
Polynomial p1 = P1->next, p2 = P2->next;
while (p1 && p2) {
if (p1->expn < p2->expn) {
p->next = p1;
p1 = p1->next;
} else if (p1->expn > p2->expn) {
p->next = p2;
p2 = p2->next;
} else {
float sum = p1->coef + p2->coef;
if (sum != 0) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = sum;
node->expn = p1->expn;
p->next = node;
p = p->next;
}
p1 = p1->next;
p2 = p2->next;
}
}
p->next = p1 ? p1 : p2;
return head;
}
Polynomial Subtract(Polynomial P1, Polynomial P2) {
Polynomial head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
Polynomial p = head;
Polynomial p1 = P1->next, p2 = P2->next;
while (p1 && p2) {
if (p1->expn < p2->expn) {
p->next = p1;
p1 = p1->next;
} else if (p1->expn > p2->expn) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = -p2->coef;
node->expn = p2->expn;
p->next = node;
p = p->next;
p2 = p2->next;
} else {
float diff = p1->coef - p2->coef;
if (diff != 0) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = diff;
node->expn = p1->expn;
p->next = node;
p = p->next;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1) {
p->next = p1;
p1 = p1->next;
p = p->next;
}
while (p2) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = -p2->coef;
node->expn = p2->expn;
p->next = node;
p = p->next;
p2 = p2->next;
}
return head;
}
Polynomial Multiply(Polynomial P1, Polynomial P2) {
Polynomial head = (Polynomial)malloc(sizeof(PolyNode));
head->next = NULL;
Polynomial p = head;
for (Polynomial p1 = P1->next; p1; p1 = p1->next) {
for (Polynomial p2 = P2->next; p2; p2 = p2->next) {
int expn = p1->expn + p2->expn;
float coef = p1->coef * p2->coef;
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = coef;
node->expn = expn;
while (p->next && p->next->expn <= expn) {
if (p->next->expn == expn) {
p->next->coef += coef;
free(node);
node = NULL;
break;
}
p = p->next;
}
if (node) {
node->next = p->next;
p->next = node;
p = head;
}
}
}
return head;
}
```
最后,我们可以在主函数中调用上述函数实现多项式的输入和运算,并输出结果:
```c
int main() {
Polynomial P1, P2, P;
printf("请输入第一个多项式:\n");
P1 = CreatePoly();
printf("请输入第二个多项式:\n");
P2 = CreatePoly();
P = Add(P1, P2);
printf("相加结果为:\n");
PrintPoly(P);
P = Subtract(P1, P2);
printf("相减结果为:\n");
PrintPoly(P);
P = Multiply(P1, P2);
printf("相乘结果为:\n");
PrintPoly(P);
return 0;
}
```
其中,PrintPoly函数可以用于输出多项式:
```c
void PrintPoly(Polynomial P) {
if (!P->next) {
printf("0\n");
return;
}
for (Polynomial p = P->next; p; p = p->next) {
if (p->coef > 0 && p != P->next) {
printf("+");
}
if (p->expn == 0) {
printf("%.2f", p->coef);
} else if (p->expn == 1) {
printf("%.2f*x", p->coef);
} else {
printf("%.2f*x^%d", p->coef, p->expn);
}
}
printf("\n");
}
```
这样,我们就完成了一个简单的多项式计算器。
c语言编写数据结构的一元多项式计算器,输入多项式的系数和指数,排序使其按指数升序排列,实现两个多项式的相加相减相乘,并输出相加相减相乘结果
好的,我可以为您提供一个基于链表实现的一元多项式计算器的代码。这个计算器可以实现输入多项式的系数和指数,排序使其按指数升序排列,实现两个多项式的相加相减相乘,并输出相加相减相乘结果。
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int coef; // 系数
int expn; // 指数
struct node *next;
} node, *linklist;
// 创建多项式
void create_polyn(linklist *L, int n) {
*L = (linklist)malloc(sizeof(node));
(*L)->next = NULL;
linklist p, q;
q = *L;
for (int i = 0; i < n; i++) {
p = (linklist)malloc(sizeof(node));
scanf("%d %d", &(p->coef), &(p->expn));
p->next = NULL;
q->next = p;
q = p;
}
}
// 排序多项式
void sort_polyn(linklist L) {
linklist p, q, pre;
pre = L;
for (p = L->next; p != NULL; p = p->next) {
for (q = pre; q != p; q = q->next) {
if (q->next->expn > p->expn) {
linklist tmp = q->next;
q->next = p;
pre->next = p->next;
p->next = tmp;
p = tmp;
}
}
pre = p;
}
}
// 打印多项式
void print_polyn(linklist L) {
linklist p = L->next;
while (p != NULL) {
if (p->coef > 0) {
printf("%d", p->coef);
} else {
printf("(%d)", p->coef);
}
if (p->expn > 1) {
printf("x^%d", p->expn);
} else if (p->expn == 1) {
printf("x");
}
if (p->next != NULL && p->next->coef > 0) {
printf("+");
}
p = p->next;
}
printf("\n");
}
// 多项式相加
void add_polyn(linklist *L1, linklist *L2, linklist *L3) {
linklist p1, p2, p3;
p1 = (*L1)->next;
p2 = (*L2)->next;
*L3 = (linklist)malloc(sizeof(node));
(*L3)->next = NULL;
p3 = *L3;
while (p1 != NULL && p2 != NULL) {
if (p1->expn < p2->expn) {
p3->next = p1;
p3 = p1;
p1 = p1->next;
} else if (p1->expn > p2->expn) {
p3->next = p2;
p3 = p2;
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum != 0) {
linklist tmp = (linklist)malloc(sizeof(node));
tmp->coef = sum;
tmp->expn = p1->expn;
tmp->next = NULL;
p3->next = tmp;
p3 = tmp;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
while (p2 != NULL) {
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
// 多项式相减
void sub_polyn(linklist *L1, linklist *L2, linklist *L3) {
linklist p1, p2, p3;
p1 = (*L1)->next;
p2 = (*L2)->next;
*L3 = (linklist)malloc(sizeof(node));
(*L3)->next = NULL;
p3 = *L3;
while (p1 != NULL && p2 != NULL) {
if (p1->expn < p2->expn) {
p3->next = p1;
p3 = p1;
p1 = p1->next;
} else if (p1->expn > p2->expn) {
p3->next = (linklist)malloc(sizeof(node));
p3->next->coef = -1 * p2->coef;
p3->next->expn = p2->expn;
p3->next->next = NULL;
p3 = p3->next;
p2 = p2->next;
} else {
int diff = p1->coef - p2->coef;
if (diff != 0) {
linklist tmp = (linklist)malloc(sizeof(node));
tmp->coef = diff;
tmp->expn = p1->expn;
tmp->next = NULL;
p3->next = tmp;
p3 = tmp;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
while (p2 != NULL) {
p3->next = (linklist)malloc(sizeof(node));
p3->next->coef = -1 * p2->coef;
p3->next->expn = p2->expn;
p3->next->next = NULL;
p3 = p3->next;
p2 = p2->next;
}
}
// 多项式相乘
void mul_polyn(linklist *L1, linklist *L2, linklist *L3) {
linklist p1, p2, p3;
p1 = (*L1)->next;
p2 = (*L2)->next;
*L3 = (linklist)malloc(sizeof(node));
(*L3)->next = NULL;
p3 = *L3;
while (p1 != NULL) {
while (p2 != NULL) {
int coef = p1->coef * p2->coef;
int expn = p1->expn + p2->expn;
linklist tmp = (linklist)malloc(sizeof(node));
tmp->coef = coef;
tmp->expn = expn;
tmp->next = NULL;
p3->next = tmp;
p3 = tmp;
p2 = p2->next;
}
p1 = p1->next;
p2 = (*L2)->next;
}
sort_polyn(*L3);
linklist pre, cur;
pre = (*L3);
cur = (*L3)->next;
while (cur != NULL) {
if (cur->expn == pre->expn) {
pre->coef += cur->coef;
pre->next = cur->next;
free(cur);
cur = pre->next;
} else {
pre = cur;
cur = cur->next;
}
}
}
int main() {
linklist L1, L2, L3;
int n1, n2;
printf("请输入第一个多项式的项数:");
scanf("%d", &n1);
printf("请依次输入第一个多项式的系数和指数:\n");
create_polyn(&L1, n1);
sort_polyn(L1);
printf("第一个多项式为:");
print_polyn(L1);
printf("请输入第二个多项式的项数:");
scanf("%d", &n2);
printf("请依次输入第二个多项式的系数和指数:\n");
create_polyn(&L2, n2);
sort_polyn(L2);
printf("第二个多项式为:");
print_polyn(L2);
printf("多项式相加结果为:");
add_polyn(&L1, &L2, &L3);
print_polyn(L3);
printf("多项式相减结果为:");
sub_polyn(&L1, &L2, &L3);
print_polyn(L3);
printf("多项式相乘结果为:");
mul_polyn(&L1, &L2, &L3);
print_polyn(L3);
return 0;
}
```
以上代码实现了一个基于链表的一元多项式计算器,可以实现输入多项式的系数和指数,排序使其按指数升序排列,实现两个多项式的相加相减相乘,并输出相加相减相乘结果。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)