Wh_xxx 2021-04-07 18:44 采纳率: 50%
浏览 1298
已结题

一元单项式输入和输出(灵活格式)

从一行输入的字符串里,读取其中的单项式,并按照要求的格式输出(输出时,每行一个)。单项式的基本格式为:

系数x^幂指数

例如:

5x^2 表示5倍的 x 平方
3x^-4 表示3倍的 x 的 -4 次方

输入要求

1)当省略系数,则表示系数为 1。例如:x^3
2)当系数省略为减号时,则表示系数为 -1。例如:-x^3
3)当省略幂指数时,则表示幂指数为1。例如:-5x。
4)对于常数项,可以省略x^0,例如:-2 表示 -2x^0
5)输入时,一个单项式内部【不允许】有空白字符(空格或\t)。例如:2  x^    3

输出要求

1)如果幂指数为0,则简化为常数项。例如:-3 x ^ 0 应该输出为 -3
2)如果幂指数为 1,则须省略它。例如:-3x^1 应该输出为-3x
3)如果系数为1或-1,则输出时须省略1。例如:-x^6,x^2
4)输出时,单项式内部不能有空白字符(空格或\t)

函数接口定义:

----------------------------------------------------------------------------------------
函数 InputMonomial - 读入字符串中的第一个单项式
char* InputMonomial(char *s, PolynomialNode *p );
    参数 
        s - 字符串指针,从中读取数据
        p - 单项式结构指针,保存读取结果
    返回值是一个字符串指针
        成功 - 指向字符串 s 中未被处理的第一个字符(包括\0)
        失败 - NULL
----------------------------------------------------------------------------------------
函数 OutputMonomial - 以精简格式输出单项式(系数为coef,幂指数为expo)
void OutputMonomial(int coef, int expo); 
    参数
         coef - 单项式的系数
         expo - 单项式的幂指数
    返回值 
        无 
----------------------------------------------------------------------------------------

裁判测试程序样例:

#include <stdio.h>

#define MAXLINE 1024

typedef struct PolynomialStruct{
    int coef; // 系数
    int expo;  // 幂次
    struct PolynomialStruct * next;
} PolynomialNode;

//判断字符串 s 的起始字符是否为:x^ 或 X^
int IsEXP(char *s)
{
    return ( (s[0]=='x' || s[0]=='X') && s[1]=='^');
}

//字符是否为\n或\0
int IsEndingChar(char ch)
{
    return (ch==0 || ch=='\n');
}

//跳过字符串起始部分的空格和制表符
//返回值:一个指针
//      指向字符串前面的第一个非空白字符
char * SkipSpaceChars(char *s)
{
    while( *s==' ' || *s=='\t' )
        s++;
    return s;
}

char* InputMonomial(char *s, PolynomialNode *p );
void OutputMonomial(int coef, int expo); 

int main()
{
    char linebuffer[MAXLINE], *p;
    PolynomialNode node;

    p = fgets(linebuffer, sizeof(linebuffer), stdin);
    while( p = InputMonomial(p, &node) ) {
        OutputMonomial(node.coef, node.expo);
        printf("\n");
    }

    return 0;
}
/* 请在这里填写答案 */

输入样例:

-3x^-6    x^5   3x    1   3x^0   -1x    x^0

输出样例:

对应上面的每一行输入,输出结果分别是:

-3x^-6
x^5
3x
1
3
-x
1
  • 写回答

1条回答 默认 最新

  • 活力为零 2022-03-15 17:30
    关注
    
    char* InputMonomial(char *s, PolynomialNode *p ){
        if(IsEndingChar(*s))return NULL;
        int m;
        if(IsEXP(s))p->coef = 1;
        else{
            if(*s=='-'&&IsEXP(s+1)){
                p->coef = -1;
                s = s + 1;
            }else{
                sscanf(s,"%d%n",&(p->coef),&m);
                s = s+m;
            }
        }
        if(*s=='x'){
            s++;
            if(*s!='^'){
                p->expo = 1;
                s = s++;
            }
            else {
                s++;
                sscanf(s,"%d%n",&(p->expo),&m);
                s = s+m;
            }
        }
        else p->expo = 0;
        s = SkipSpaceChars(s);
        return s;
    }
    void OutputMonomial(int coef, int expo){
        if(expo==1){
            if(coef!=1&&coef!=-1)printf("%dx",coef);
            else if(coef==1)printf("x");
            else printf("-x");
        }
        else if(expo==0)printf("%d",coef);
        else if(coef==1)printf("x^%d",expo);
        else if(coef==-1){
            printf("-x^%d",expo);
        }
        else printf("%dx^%d",coef,expo);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 已采纳回答 6月29日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助