Сложение количества полиномов без использования структуры

#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;
}

также я не хочу использовать какие-либо другие методы, если это возможно... и можем ли мы умножать многочлены аналогичным образом?


person Ayush pokharel    schedule 11.08.2018    source источник


Ответы (1)


Если вы измените

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

to

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

ваш код дает правильный вывод, если динамическая память, выделенная в разных местах, и значения мусора равны нулю.

Вы выделяете n*sizeof(int) памяти для p[j]th указателя

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.

person satyaGolladi    schedule 11.08.2018