Вывести таблицу умножения в рамке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Задача: Сделать таблицу умножения в рамке. Я в принципе сделал, но возникла проблема: когда в таблице появляется двухзначное число, рамка рушится. Подскажите как избежать этого. P.S. извиняюсь за безобразный код, я только начинаю изучать язык.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
main()
{
    int i,j, a;
    int H,L;
    char q, w, e, r, t, y, u,o,p, s, d;                             //H - кол-во строк  //L - кол-во столбцов
    int **mas;                              //mas[H][L]
 
    printf("Hight: ");
    scanf("%d", &H);
                                        
    printf("Lengh: ");
    scanf("%d", &L);
    
    mas=(int**)malloc(H*sizeof(int*));           
    for(i=0; i<H; i++)                            
        {   
            mas[i]=(int*)malloc(L*sizeof(int));
        }
 
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
for (i=0; i<H; i++)       //Первый столбец
    {   
    mas[i][0]=i+1;
    }
 
for (j=0; j<L; j++)       //Первая строка
    {   
    mas[0][j]=j+1;
    }   
    
for (i=1; i<H; i++)       //Остальные элементы
    for (j=1; j<L; j++)
    {
        mas[i][j]=(mas[0][j])*(mas[i][0]);
    }
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////

////////////////<РАМКА>/////////
q=186;  //  ||
w=201;  //  ,,=
e=205;  //  ==
r=187;  //  =,,
t=203;  //  =,,=
y=206;  //  =||=
u=204;  //  ||=
o=185;  //  =||
p=200;  //  "=
s=202;  //  ="=
d=188;  //  ="
////////////////<РАМКА>/////////

////////////////<ВЫВОД>/////////////////////
printf ("%c", w);                                  // ,,=
    for (a=0; a<(L-1); a++)
            printf("%c%c%c%c",e,e,e,t);            // ,,===,,
    printf("%c%c%c%c",e,e,e,r);                    
    printf("\n");                                  // ,,===,,===,,
 
    for (i=0; i<H-1; i++)
        {
         
         for (j=0; j<L; j++)
            {
                printf("%c ", q );
                printf("%d ", mas[i][j]);        //   || n || n 
            }
        printf("%c\n", q);                       //   || n || n ||
        printf("%c", u);                         //   ||=
        for (a=0; a<(L-1); a++)
            {
            printf("%c%c%c%c", e,e,e,y);         //   ||===||
            }
            printf("%c%c%c%c\n", e,e,e,o);       //   ||===||===||
        }
        
        for (j=0; j<L; j++)
            {
                printf("%c ", q );
                printf("%d ", mas[i][j]);       //Последняя строка таблицы умножения
            }
    printf("%c\n", q);
    printf("%c", p);                            // "=
    for (a=0; a<L-1; a++)
            printf("%c%c%c%c",e,e,e,s);         // "==="
    printf("%c%c%c%c\n",e,e,e,d);               // "==="==="

////////////////<ВЫВОД>/////////////////////        
    
    return(0);  
}
Всё, сам справился. Можно делать таблицу умножения до 9999.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
main()
{
    int i,j, a, b ,N, K;
    int H,L;
    char q, w, e, r, t, y, u,o,p, s, d;                             //H - кол-во строк  //L - кол-во столбцов
    int **mas;                              //mas[H][L]
 
    printf("Hight: ");
    scanf("%d", &H);
                                        
    printf("Lengh: ");
    scanf("%d", &L);
    
    mas=(int**)malloc(H*sizeof(int*));           
    for(i=0; i<H; i++)                            
        {   
            mas[i]=(int*)malloc(L*sizeof(int));
        }
 
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
for (i=0; i<H; i++)       //Первый столбец
    {   
    mas[i][0]=i+1;
    }
 
for (j=0; j<L; j++)       //Первая строка
    {   
    mas[0][j]=j+1;
    }   
    
for (i=1; i<H; i++)       //Остальные элементы
    for (j=1; j<L; j++)
    {
        mas[i][j]=(mas[0][j])*(mas[i][0]);
    }
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////

if ((mas[H-1][L-1]>0)  && (mas[H-1][L-1]<10))
    N=3;
if (mas[H-1][L-1]>9 && mas[H-1][L-1]<100)
    N=4;
if (mas[H-1][L-1]>99 && mas[H-1][L-1]<1000)
    N=5;
printf("\nSize %d\n", N);

////////////////<РАМКА>/////////
q=186;  //  ||
w=201;  //  ,,=
e=205;  //  ==
r=187;  //  =,,
t=203;  //  =,,=
y=206;  //  =||=
u=204;  //  ||=
o=185;  //  =||
p=200;  //  "=
s=202;  //  ="=
d=188;  //  ="
////////////////<РАМКА>/////////

////////////////<ВЫВОД>/////////////////////
printf ("%c", w);                                  // ,,=
    for (a=0; a<(L-1); a++)
        {
         for (b=0; b<N; b++)
            printf("%c",e);                         // ,,===
         printf("%c",t);                            // ,,===,,
        }
    for (b=0; b<N; b++) 
        printf("%c",e);                             // ,,===,,===
    printf("%c\n",r);                                   // ,,===,,===,,

    for (i=0; i<H-1; i++)
        {
         
         for (j=0; j<L; j++)
            {
                printf("%c ", q );
                
                if (mas[i][j]>0 && mas[i][j]<10)
                    K=2;
                if (mas[i][j]>9 && mas[i][j]<100)
                    K=3;
                if (mas[i][j]>99 && mas[i][j]<1000)
                    K=4;
                for (b=0; b<(N-K); b++)
                    printf(" ");
                printf("%d", mas[i][j]);        //   || n || n 
            }
         printf("%c\n", q);                       //   || n || n ||
         printf("%c", u);                        //   ||=
         for (a=0; a<(L-1); a++)
            {
             for (b=0; b<N; b++)
             printf("%c",e);                    
             printf("%c",y);                        
            }
         for (b=0; b<N; b++)    
            printf("%c",e);                         
         printf("%c\n",o);                              
        }

        for (j=0; j<L; j++)
            {
                printf("%c ", q );
                if (mas[i][j]>0 && mas[i][j]<10)
                    K=2;
                if (mas[i][j]>9 && mas[i][j]<100)
                    K=3;
                if (mas[i][j]>99 && mas[i][j]<1000)
                    K=4;
                for (b=0; b<(N-K); b++)
                    printf(" ");
                printf("%d", mas[i][j]);        //Последняя строка таблицы умножения
            }
    printf("%c\n", q);
    printf("%c", p);                            // "=
    for (a=0; a<L-1; a++)
        {
         for (b=0; b<N; b++)
            printf("%c",e);                 
         printf("%c",s);                        
        }
         for (b=0; b<N; b++)    
            printf("%c",e);                         
         printf("%c\n",d);                              

////////////////<ВЫВОД>/////////////////////        
    
    return(0);  
}

Решение задачи: «Вывести таблицу умножения в рамке»

textual
Листинг программы
printf("%4d", x);

Объяснение кода листинга программы

Код, представленный в вопросе, выводит значение переменной x с помощью функции printf(). Функция printf() используется для форматирования и вывода текста на консоль. В данном случае, %4d является спецификатором формата, который указывает функции printf() выводить значение переменной x в 4-значном формате. Число 4 перед спецификатором формата указывает на минимальное количество символов, которые должны быть выведены. Если значение x меньше 4-х цифр, то оно будет дополнено пробелами слева до полного 4-значного поля. Таким образом, в консоль будет выведено значение переменной x, дополненное пробелами до 4-значного поля, если оно меньше 4-х цифр.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы