通过键盘接收一组多项式的系数和指数,建立多项式(要求各项按指数升序排列),并按指定格式输出.
第一行输入一个正整数n,表示非零项个数。
第二行输入n对整数,每对形如(7,3),表示系数为7、指数为3的项。
样例输入:
4
(6,0)(2,1)(-8,70)(4,150)
样例输出:
6+2X-8X^70+4X^150
实现代码:
/************************************************************************
> File Name: 表达式减法.c
> Author: dongmengyuan
> Mail: 1322762504@qq.com
> Created Time: 2016年09月27日 星期二 15时07分45秒
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
int coef; //系数
int expn; //指数
struct node *next; //指向下一个结点的指针
}polynimial,*polyn;
polyn creat(int i) //建立一元多项式,参数i代表要输入的非零项个数
{
polyn head;
head = (polyn) malloc (sizeof(polyn)); //建立多项式头结点
polynimial *r,*s;
r = head;
int j;
char a,b; //定义字符型,意在后面需要输入括号
for(j = 0; j <= i; j++) {
s = (polynimial *) malloc (sizeof(polynimial)); //申请新的节点
scanf("%c%d,%d%c",&a,&s -> coef,&s -> expn,&b);
r -> next = s; //在当前表尾插入
r = s;
}
return head;
}
void print(polyn p) //输出多项式
{
polyn q = p -> next -> next;
int flag = 1;
if(!q) {
putchar('0');
printf("\n");
return;
}
while(q) {
if(q -> coef > 0 && flag != 1) { //系数为正数,用加号
putchar('+');
}
if(q -> coef != 1 && q -> coef != -1) { //系数不为1和-1,则需在X前输出该系数
printf("%d",q -> coef);
if(q -> expn == 1) { //指数为1,则直接输出X
putchar('X');
}
else if(q -> expn) { //指数不为0,输出X的次方形式
printf("X^%d",q -> expn);
}
}
else {
if(q -> coef == 1) { //系数为1
if(!q -> expn) { //指数为0
putchar('1'); //直接输出常数1
}
else if(q -> expn == 1) { //指数为1
putchar('X'); //输出未知数X
}
else { //指数不为1
printf("X^%d",q -> expn); //输出X次方形式
}
}
if(q -> coef == -1) { //系数为-1
if(!q -> expn) { //指数为0
printf("-1"); //直接输出常数-1
}
else if(q -> expn == 1) { //指数为1
printf("-X"); //输出-X
}
else { //指数不为0和1的情况
printf("-X^%d",q -> expn);
}
}
}
q = q -> next;
flag++;
}
printf("\n");
}
int main()
{
int i; //允许输入非零项个数
scanf("%d",&i);
polynimial *p;
p = creat(i);
print(p);
}
运行结果:
这道题其实就是要分别考虑系数和指数的几种特殊取值,如系数为0,1,-1及其他常数的情况.指数为0,1,及其他数的情况.用if循环判断,就可以满足题目的输入输出要求.