建立与输出一元多项式

通过键盘接收一组多项式的系数和指数,建立多项式(要求各项按指数升序排列),并按指定格式输出.

第一行输入一个正整数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循环判断,就可以满足题目的输入输出要求.

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值