标题:网上的多项式加法代码很多,但用结构体编写的差不多没有,请高手指教,多谢
只看楼主
k47455444
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-12-25
结帖率:0
已结贴  问题点数:20 回复次数:2 
网上的多项式加法代码很多,但用结构体编写的差不多没有,请高手指教,多谢
【问题描述】编写一个程序实现两个一元多项式相加的运算。要求:多项式的一项设计成一个结构体Item,它有系数和指数两个数据成员,多项式设计成另一个结构体Polymaial,它包含两个数据成员,一个Item的数组用以存储若干项的成员,及指示当前有多少项的count成员。

【输入形式】从标准输入中读入两行以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn +  an-1xn-1+ … + a1x1 + a0x0  (n≤50)的表示方法如下: an n an-1 n-1 … a1 1 a0 0

即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。

【输出形式】将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。在行的末尾也输出一个空格符,并且最后要求换行。

【样例输入】

10

54 8 2 6 7 3 25 1 78 0

6

43 7 4 2 8 1  

【样例输出】54 8 43 7 2 6 7 3 4 2 33 1 78 0    (数字之间用一个空格分隔,末尾也有空格符)

【样例说明】输入文件的两行分别代表了表达式

54x8 + 2x6 + 7x3 + 25x + 78

43x7 + 4x2 + 8x

其和为

54x8 + 43x7 + 2x6 + 7x3 + 4x2 + 33x + 78

注意:输入时候首先要输入多项式的系数个数以及指数个数的和,然后在下一行按照“系数 指数”的顺序输入系数和指数:

【评分标准】

5个测试点
搜索更多相关主题的帖子: 多项式 输入 输出 指数 系数 
2020-12-25 21:47
k47455444
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-12-25
得分:0 
要用C语言哦
2020-12-25 21:48
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
这个就是把结构体指数成员值相同的系数成员相加,然后再按照指数成员从大到小对结构体排序。

程序代码:

#include <stdio.h>
#include <stdlib.h>

struct Item
{
    unsigned int value;
    unsigned int x;
};

struct Polymaial
{
    struct Item item[50];
    unsigned int count;
};

int main()
{
    struct Item t;
    struct Polymaial poly[2];
    unsigned int in, val, valx;
    unsigned int n, k, i;

    for (n = 0; n < 2; n++)
    {
        i = 0;
        scanf("%u", &in);
        in /= 2;
        for (k = 0; k < in; k++)
        {
            scanf("%u %u", &val, &valx);
            if (val != 0) //舍弃系数为0的项
            {
                poly[n].item[i].value = val;
                poly[n].item[i].x = valx;
                i++; //统计有效项
            }
        }
        poly[n].count = i;
    }

    //合并同类项
    for (n = 0; n < poly[0].count; n++)
    {

        for (i = 0; i < poly[1].count; i++) //从头搜索同类项,有的话值相加,b=1
        {
            if ((poly[0].item[n].x == poly[1].item[i].x))
            {
                poly[1].item[i].value += poly[0].item[n].value;
                break; //不会再有同类项,跳出
            }
        }
        //该项不存在,把poly[0]的项插入poly[1]末尾
        poly[1].item[poly[1].count] = poly[0].item[n];
        poly[1].count++; //插入后统计数增加
    }

    //按x从大到小排序
    for (n = 0; n < poly[1].count - 1; n++)
    {
        for (i = n; i < poly[1].count; i++)
        {
            if (poly[1].item[n].x < poly[1].item[i].x)
            {
                t = poly[1].item[n];
                poly[1].item[n] = poly[1].item[i];
                poly[1].item[i] = t;
            }
        }
    }

    for (n = 0; n < poly[1].count; n++)
    {
        printf("%u %u ", poly[1].item[n].value, poly[1].item[n].x);
    }
    printf("\n");

    system("pause");

    return 0;
}


[此贴子已经被作者于2020-12-27 02:46编辑过]

2020-12-26 14:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504393-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.534710 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved