Учитывая три nxn массива, создайте вывод A + B = C, где A, B и C представлены в виде матриц в выводе, используя C язык программирования - PullRequest
0 голосов
/ 07 апреля 2020

Предположим, что матрицы имеют вид, Matrices general form

Требуемый вывод на стандартный вывод с использованием языка C должен быть enter image description here

Мой код:

    #include<stdio.h>

    int main(void)
    {
     int size, i=0, j=0;
     printf("Enter the size of the array:");
     scanf("%d",&size);
     int A[size][size], B[size][size], C[size][size];   

//Entering the values in A[][]

     printf("enter the elements of Array A:\n");
     for(int i=0; i<size; i++)
         for(int j=0; j<size; j++)
           scanf("%d",&A[i][j]);

//Entering the values in B[][]

     printf("enter the elements of Array B:\n");
     for(int i=0; i<size; i++)
         for(int j=0; j<size; j++)
           scanf("%d",&B[i][j]);

// Calculating C[][]=A[][]+B[][]

     for(int i=0; i<size; i++)
         for(int j=0; j<size; j++)
           C[i][j]=A[i][j]+B[i][j]; 

     i=0;
     j=0;

     while(i<size)
     {
        if( i==size/2)
          printf("%*c%*c\n\n",6*size+1,'+',13*(size-1),'=');

         while(j<size)
           printf("%d\t",A[i][j++]);
         j=0;

         while(j<size)
           printf("%d\t",B[i][j++]);
         j=0; 

         while(j<size)
           printf("%d\t",C[i][j++]);
         j=0;

         printf("\n\n");
         i++;
    }
}

Но этот код выдает желаемый результат только при size=2. Output when size=2

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

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

вы используете вкладку (8 столбцов) для go до следующего столбца, поэтому замените

printf("%*c%*c\n\n",6*size+1,'+',13*(size-1),'=');

на

 printf("%*c%*c\n\n",8*size-4,'+',8*size,'=');

пример:

enter image description here

Конечно, предполагается, что все цифры должны содержать до 7 столбцов

Если вы хотите, чтобы между каждой строкой с цифрами всегда была 1 строка измените , в то время как , чтобы иметь:

  while(i<size)
  {
    if( i==size/2)
      printf("%*c%*c\n",8*size-4,'+',8*size,'=');
    else
      putchar('\n');

    while(j<size)
      printf("%d\t",A[i][j++]);
    j=0;

    while(j<size)
      printf("%d\t",B[i][j++]);
    j=0; 

    while(j<size)
      printf("%d\t",C[i][j++]);
    j=0;

    putchar('\n');
    i++;
  }

, производящий:

enter image description here

Из-за этого я призываю вас для проверки scanf всегда возвращайте 1, иначе вы не обнаружите неверный ввод

0 голосов
/ 08 апреля 2020

Этот код решит мой вопрос,

int size_odd_or_even=size%2;
    int check=1;

    while(i<size)
   {

       if( size_odd_or_even==0 && i==size/2 && check==1)
        {
          printf("\n%*c%*c\n",8*size-4,'+',8*size,'=');
          check=0;
          continue;
        }


       if( size_odd_or_even==1 && i== (int)(size/2) )
         {
               while( j<size-1)
                printf("%d\t",A[i][j++]);
               printf("%d   +   ",A[i][j]);
         }
        else
         {
           while( j<size)
            printf("%d\t",A[i][j++]);
         }
        j=0;


        if( size_odd_or_even==1 && i== (int)(size/2))
         {
               while( j<size-1)
                printf("%d\t",B[i][j++]);
               printf("%d   =   ",B[i][j]);
         }
        else
         {
           while(j<size)
          printf("%d\t",B[i][j++]);
         }
        j=0;


        while(j<size)
            printf("%d\t",Sum[i][j++]);
        j=0;

        if( size_odd_or_even==0 && !(i==size/2-1) )
          printf("\n\n");
        else if(size_odd_or_even==1)
          printf("\n\n");

        i++;
   }

Этот код дает выходные данные для size=4 и size=5 соответственно как Output for size=4 output for size=5

Если этот код можно оптимизировать, скажите, пожалуйста.

...