程序设计入门——C语言 第7周编程练习 1 多项式加法(5分)

第7周编程练习

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1
多项式加法(5分)

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

2x6+3x5+12x3+6x+20

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为100。

 

输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

 

输出格式:

从最高幂开始依次降到0幂,如:

2x6+3x5+12x3-6x+20

注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

 

输入样例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

 

输出样例:

4x6+6x5+12x3+12x2+12x+40

时间限制:500ms内存限制:32000kb
 
  1 #include <stdio.h>
  2 int main()
  3 {
  4     int a[101][2], b[101][2];
  5     int i, j;
  6 
  7     /*输入*/
  8     for (i = 0; i < 101; i++)
  9     {
 10         scanf("%d %d", &a[i][0], &a[i][1]);
 11         if (a[i][0] == 0)    /*遇0结束*/
 12             break;
 13     }
 14     int na = i + 1;    /*a项数*/
 15     for (i = 0; i < 101; i++)
 16     {
 17         scanf("%d %d", &b[i][0], &b[i][1]);
 18         if (b[i][0] == 0)
 19             break;
 20     }
 21     int nb = i + 1;    /*b项数*/
 22 
 23     //printf("\n输入调试:\n");
 24 
 25     //printf("na=%d,nb=%d\n", na, nb);
 26     //for (i = 0; i < na; i++)
 27     //{
 28     //    printf("%d %d\n", a[i][0], a[i][1]);
 29     //}
 30 
 31     //for (i = 0; i < nb; i++)
 32     //{
 33     //    printf("%d %d\n", b[i][0], b[i][1]);
 34     //}
 35 
 36     /*比较,求和*/
 37     int c[101 * 2][2];    /*和数组*/
 38     for (i = 0; i < na; i++)
 39     {
 40         c[i][0] = a[i][0];
 41         c[i][1] = a[i][1];
 42     }
 43 
 44     int nc = na;    /*c项数*/
 45     int ch;    /*判断用*/
 46     for (j = 0, ch = 1; j < nb; j++, ch = 1)
 47     {
 48         for (i = 0; i < na; i++)
 49         {
 50             if (b[j][0] == c[i][0])    /*幂次相同,系数相加*/
 51             {
 52                 c[i][1] += b[j][1];
 53                 ch = 0;
 54                 break;
 55             }
 56         }
 57         if (ch)    /*ch=0,有相同幂次。ch=1,没有相同幂次,加到数组后面*/
 58         {
 59             nc++;
 60             c[nc - 1][0] = b[j][0];
 61             c[nc - 1][1] = b[j][1];
 62         }
 63     }
 64 
 65     //printf("\n求和调试:\n");
 66 
 67     //printf("nc=%d\n", nc);
 68     //for (i = 0; i < nc; i++)
 69     //{
 70     //    printf("%d %d\n", c[i][0], c[i][1]);
 71     //}
 72 
 73     /*排序*/
 74     int t;
 75     for (j = 0; j < nc - 1; j++)
 76         for (i = 0; i < nc - 1 - j; i++)
 77             if (c[i][0] < c[i + 1][0])
 78             {
 79                 t = c[i][0];
 80                 c[i][0] = c[i + 1][0];
 81                 c[i + 1][0] = t;
 82 
 83                 t = c[i][1];
 84                 c[i][1] = c[i + 1][1];
 85                 c[i + 1][1] = t;
 86             }
 87 
 88     //printf("\n排序调试:\n");
 89 
 90     //printf("c=%d\n", nc);
 91     //for (i = 0; i < nc; i++)
 92     //{
 93     //    printf("%d %d\n", c[i][0], c[i][1]);
 94     //}
 95 
 96     /*输出*/
 97 
 98     /*输出第一项*/
 99     for (i = 0; i < nc; i++)    /*第一个系数不为0的项*/
100         if (c[i][1] != 0)
101         {
102             if (c[i][0] == 0)
103                 printf("%d", c[i][1]);
104             else if (c[i][0] == 1 && c[i][1] == 1)
105                 printf("x");
106             else if (c[i][0] == 1 && c[i][1] == -1)
107                 printf("-x");
108             else if (c[i][0] == 1)
109                 printf("%dx", c[i][1]);
110             else if (c[i][1] == -1)
111                 printf("-x%d", c[i][0]);
112             else
113                 printf("%dx%d", c[i][1], c[i][0]);
114             break;
115         }
116 
117     int first = i;    /*第一项数组位置行标*/
118     if (i == nc)    /*全为0*/
119         printf("0");
120 
121     /*输出第二项之后*/
122     for (i = first + 1; i < nc; i++)
123         if (c[i][1] != 0)
124         {
125             if (c[i][0] == 0)
126                 printf("%+d", c[i][1]);
127             else if (c[i][0] == 1 && c[i][1] == 1)
128                 printf("+x");
129             else if (c[i][0] == 1 && c[i][1] == -1)
130                 printf("-x");
131             else if (c[i][0] == 1)
132                 printf("%+dx", c[i][1]);
133             else if (c[i][1] == -1)
134                 printf("-x%d", c[i][0]);
135             else
136                 printf("%+dx%d", c[i][1], c[i][0]);
137         }
138 
139     return 0;
140 }

 

posted @ 2018-04-16 21:13  Emerl  阅读(947)  评论(0)    收藏  举报