在不使用结构的情况下增加多项式的数量

时间:2018-08-11 14:05:44

标签: c arrays addition polynomials

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

int main() {
    int i, j, n, m, c[20], s = 0;
    int *p[100];

我要求用户输入要添加的多项式方程式的数量:

    printf("Enter the number of equations to add:\n");
    scanf("%d", &m);

并要求用户输入他计划使用的系数数量

    printf("Enter the maximum coefficient size of largest equation:\n");
    scanf("%d", &n);
    for (j = 1; j <= m; j++) {
        printf("Enter the coefficients of equation number %d:\n", j);
        p[j] = (int*)malloc(n * sizeof(int));
        for (i = n; i > 0; i--)
            scanf("%d", p[j] + i);
        printf("The equation %d becomes as follows:\n", j);
        i = n;
        printf("%dx^%d", *(p[j] + i), i - 1);
        for (i = n - 1; i > 0; i--)
            printf("+%dx^%d", *(p[j] + i), i - 1);
        printf("\n");
    }

代码在这里可以正常工作,但是我在添加多项式时遇到问题

    printf("On adding all equations we get:\n");
    for (i = n; i > 0; i--) {
        for (j = 1; j <= m; j++) {
            s = s + (*(p[j] + i));
            c[i] = s;
        }
    }
    i = n;
    printf("%dx^%d", c[i], i - 1);
    for (i = n - 1; i > 0; i--)
        printf("+%dx^%d", c[i], i - 1);
    printf("\n");
    return 0;
}

如果可能的话,我也不想使用任何其他方法...并且我们可以类似地相乘多项式吗?

1 个答案:

答案 0 :(得分:0)

如果您更改

  

for(j = 1; j <= m; j ++){

for(s=0,j=1;j<=m;j++){

如果在不同的网络位置分配的动态内存和垃圾值均为零,您的代码将提供正确的输出。

您正在为第p [j]个指针分配n * sizeof(int)内存

p[j]=(int*)malloc(n*sizeof(int));
for(i=n;i>0;i--)
    scanf("%d",p[j]+i);

这意味着您可以从 p [j] +0到p [j] + n-1 进行访问。如果将某些元素读到p [j] + n,则意味着您正在访问不属于您的内存。 我修改了一些代码,效果很好

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

int main()
{
    int i,j,n,m,c[20] = {0},s=0;
    int *p[100];
    printf("Enter the number of equations to add:\n");
    scanf("%d",&m);
    printf("Enter the maximum coefficient size of largest equation:\n");
    scanf("%d",&n);
    for(j=1;j<=m;j++){
        printf("Enter the coefficients of equation number %d:\n",j);
        p[j]=(int*)malloc(n*sizeof(int));
        for(i=n-1;i>=0;i--)
            scanf("%d",p[j]+i);
        printf("The equation %d becomes as follows:\n",j);
        i=n-1;
        printf("%dx^%d",*(p[j]+i),i);
        for(i=n-2;i>=0;i--)
            printf("+%dx^%d",*(p[j]+i),i);
        printf("\n");
    }
    printf("On adding all equations we get:\n");
    for(i=n-1;i>=0;i--){
        for(s=0,j=1;j<=m;j++){
            s=s+(*(p[j]+i));
        c[i]=s;
        }
    }
    i=n-1;
    printf("%dx^%d",c[i],i);
    for(i=n-2;i>=0;i--)
        printf("+%dx^%d",c[i],i);
    printf("\n");
    return 0;
}

注意:不要忘记添加对scanf和malloc的检查。