资源描述
using System;
using System.Collections.Generic;
using System.Text;
namespace 多à项?式?加ó法ぁ?和í乘?法ぁ?
{
class Node
{
public int coeff;
public int expo;
public Node next;
}
class list
{
public list()
{
}
public Node 输?入?(int n, Node m)
{
m = null;
int i, c, e;
Console.WriteLine("请?输?入?第台瞷0}个?多à项?式?的?项?数簓:", n);
i = Convert.ToInt32(Console.ReadLine());
for (int j = 1; j <= i; j++)
{
Console.Write("请?输?入?第台瞷0}项?系μ数簓:阰", j);
c = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("");
Console.Write("请?输?入?第台瞷0}项?幂Y次?:阰", j);
e = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("");
Node a = new Node();
a.coeff = c;
a.expo = e;
a.next = m;
m = a;
}
return m;
}
public Node 输?出?(int n, Node m)
{
Node p;
if (n == 1 || n == 2)
Console.Write("第台瞷0}个?多à项?式?:阰", n);
else
if(n==3)
Console.Write("计?算?结á果?:阰");
else
Console.Write("计?算?结á果?(辍?逆?置?后ó)?:阰");
for (p = m; p != null; p = p.next)
{
if (p.coeff < 0 || p == m)
Console.Write(p.coeff + "*X^" + p.expo);
else
Console.Write("+" + p.coeff + "*X^" + p.expo);
}
Console.WriteLine("\n");
return m;
}
public Node 复′制?(Node n, Node m)
{
Node p;
for (p = m; p != null; p = p.next)
{
Node b = new Node();
b.coeff = p.coeff;
b.expo = p.expo;
b.next = n;
n = b;
}
return n;
}
public Node 加ó法ぁ?Node q)
{
Node s;
Node r;
Node t;
s = q;
while (s != null)
{
r = s;
t = s.next;
while (t != null)
{
if (s.expo == t.expo)
{
s.coeff += t.coeff;
r.next = t.next;
t = t.next;
}
else
{
t = t.next; r = r.next;
}
}
s = s.next;
}
return q;
}
public Node 乘?法ぁ?Node a, Node b, Node c)
{
b = null;
Node q;
Node p;
p = a; q = c;
while (p != null)
{
q = c;
while (q != null)
{
Node h = new Node();
h.coeff = p.coeff * q.coeff;
h.expo = p.expo + q.expo;
h.next = b;
b = h;
q = q.next;
}
p = p.next;
}
return b;
}
public Node 升序ò(Node m, Node n)
{
n = null;
Node p; Node q; Node s; Node t; Node r;
p = m; q = p.next;
while (q != null)
{
if (q.expo < p.expo)
p = q;
q = q.next;
}
Node a = new Node();
a.coeff = p.coeff;
a.expo = p.expo;
a.next = n;
n = a;
s = m;
while (s != null)
{
if (s == p)
s = s.next;
if (s == null)
break;
Node b = new Node();
b.coeff = s.coeff;
b.expo = s.expo;
t = n; r = n.next;
while (r != null)
{
if (r.expo > b.expo)
{
b.next = r;
t.next = b;
break;
}
t = t.next;
r = t.next;
}
if (r == null)
{
b.next = r;
t.next = b;
}
s = s.next;
}
return n;
}
public Node 逆?置?(Node m)
{
Node p;
Node q;
p = m;
m = null;
while (p != null)
{
q = p.next;
p.next = m;
m = p;
p = q;
}
return m;
}
static void Main(string[] args)
{
Node start1 = null;
Node start2 = null;
Node start3 = null;
Node start4 = null;
list m = new list();
while (true)
{
try
{
Console.WriteLine("\n <<菜?单蹋?>");
Console.WriteLine("\n1、¢一?元a多à项?式?的?输?入?");
Console.WriteLine("\n2、¢一?元a多à项?式?的?加ó法ぁ?);
Console.WriteLine("\n3、¢一?元a多à项?式?的?乘?法ぁ?);
Console.WriteLine("\n0、¢退?出?");
Console.Write("\n请?输?入?您ú的?选?择?:阰");
char ch = Convert.ToChar(Console.ReadLine());
Console.WriteLine("\n");
switch (ch)
{
case '1':
{
start1 = m.输?入?(1, start1);
start2 = m.输?入?(2, start2);
Console.WriteLine("\n输?入?完?成é!\n");
break;
}
case '2':
{
start3 = null;
start3 = m.复′制?(start3, start1);
start3 = m.复′制?(start3, start2);
start3 = m.加ó法ぁ?start3);
m.输?出?(1, start1);
m.输?出?(2, start2);
start4 = m.升序ò(start3, start4);
m.输?出?(3, start4);
start4 = m.逆?置?(start4);
m.输?出?(4, start4);
break;
}
case '3':
{
start3 = m.乘?法ぁ?start1, start3, start2);
start3 = m.加ó法ぁ?start3);
m.输?出?(1, start1);
m.输?出?(2, start2);
start4 = m.升序ò(start3, start4);
m.输?出?(3, start4);
start4 = m.逆?置?(start4);
m.输?出?(4, start4);
break;
}
case '0':
{
return;
}
default:
{
Console.WriteLine("\n输?入?有瓺误ó!?");
break;
}
}
}
catch (Exception e)
{
Console.WriteLine("\n请?确ā?定¨输?入?是?否?正y确ā?!?" + e.Message);
}
}
}
}
}
展开阅读全文