Faça sua própria tabuada em C ;D
Autor: Guilherme José Carvalho Gois | Publicado: 2011-05-31T21:47:00-03:00

Neste post estarei ensinando a montar uma tabuada básica que irá receber um número real inteiro digitado por você (usuário) e será retornado a tabuada do mesmo do 1 ao 10, será um utilitário bem básico escrito em C. A ideia para esta postagem surgiu de um exercício de Lógica de Programação do curso Técnico em Informática da Etec Fernando Prestes (Sorocaba). Programas e arquivos necessários para sua construção terão links para download no decorrer da postagem. Só para constar, a linguagem C é case-sensitive, isto é, oi é diferente de Oi e de oI, o código que estiver em negrito deve ser escrito do mesmo modo que se encontra aqui.

Primeiramente e antes de mais nada precisaremos de uma IDE (ambiente integrado de desenvolvimento), neste caso utilizarei o Dev-C++, então supondo que você já está com o Dev-C++ aberto mãos a obras, caso o contrário abra e se não tiver instalado faça o download aqui para instalar:
Para criar um projeto vá em: Arquivo/Novo/Projeto... e na aba Basic escolha Console Application, dê um nome para seu projeto, Tabuada por exemplo, se a opção Projeto C não estiver marcada marque-a, e clique em ok e escolha aonde você quer salvar seu projeto.
No arquivo que irá se abrir, main, reduza todo o código a isso:
&nbsp; #include &lt;stdio.h&gt;     
&nbsp; #include &lt;stdlib.h&gt;
&nbsp; #include &lt;ctype.h&gt;
     

main()
&nbsp; {     
&nbsp; }
     

O que há para se entender neste código é que você está linkando os cabeçalhos dos includes ao seu arquivo de código para poder usar suas funções e que a função main() é sua função principal, então ela será executada primeiro, mas neste caso não me utilizarei de mais funções para não haver confusões.
Agora iremos declarar uma variável caracter dentro do main para que no 'final' do programas possamos refazer ou finalizar o mesmo:
char dec;
     

Primeiro vamos inserir dentro do main() o laço do...while (faça...enquanto) para que possamos recalcular outra tabuada sem ter que reabrir nosso programa sempre que o valor da variável dec (declarada anteriormente) seja S, caso contrário o programa encerra:
do
&nbsp; {
&nbsp; }while(dec=='S');
Agora dentro do do...while vamos declarar as variáveis inteiras que usaremos para o cálculo e exibição da tabuada:
int x,y,z;
O próximo passo será limpar a tela caso já fosse feito uma tabuada para começar outra em uma tela em 'branco', escreveremos uma mensagem e receberemos um número inteiro para guardar na variável x:
system('CLS');
gotoxy(35,2); printf("Tabuada: ");
scanf("%d",&amp;x);
Para que o gotoxy funcione, você precisará baixar o conio, maiores informações você encontra neste post feito por meu colega de sala. A função system executa o comando cls (clear screen) que irá limpar toda a tela, com o gotoxy setamos o cursor na linha 2 coluna 35 do prompt para imprimirmos na tela a mensagem de printf() e recebemos através de scanf() um número inteiro digitado pelo usuário, se for digitado alguma letra ou um número de ponto flutuante ocasionará em erro e seu programa fechará pois, o scanf funciona da seguinte maneira: entre as aspas inserimos o tipo da variável que será recebida que é determinada pelo caracter depois da %, em nosso caso usamos %d para dizer que o valor recebido será um inteiro (poderia ser também %i) e após as aspas colocamos uma vírgula para podermos indicar qual variável receberá o valor precedida pelo &amp;, no caso &amp;x guardará o valor recebido na variável x e vale lembrar que o tipo do valor recebido e da variável destino devem IGUAIS. Agora se atente ao próximo trecho de código que fará a 'mágica' do programa:
 for(y=1;y&lt;=10;y++)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z = x * y;
gotoxy(35,4+y); printf("%d * %d = %d",x,y,z);
}
Aqui nós temos o laço for que traduzindo seria algo como para y=1 faça enquanto y&lt;=10 incremento1 (o y++ fará com que seja adicionado um ao valor de y em todo final do laço for), então o que está entre as chaves do laço for será feito enquanto y for menor ou igual a 10, ou seja, ao executar o bloco de código do laço for pela 10ª vez y terá valor 10 e após realizar a última função do bloco y assumirá o valor 11 devido ao incremento y++ e sairá assim do loop for (laço ou loop tanto faz) continuando o resto do programa. Dentro do laço teremos o calculo da tabuada, que multiplicará x (que será constante neste bloco) por y (que será variável neste bloco devido ao incremento y++) e guardará o resultado na variável z, a essa operação chamamos de operação de processamento. No gotoxy teremos o cursor setado na coluna 35 e na linha 4 mais y (5,6,7 e por ai vai) para imprimirmos na tela os argumentos de printf(), lembram que precisamos especificar no scanf que tipo iremos receber para guardar em uma variável de mesmo tipo? Com o printf funciona no mesmo esquema (exceto que scanf é uma operação de entrada e printf de saida), a troca dos %d pelas variáveis se dará na mesma ordem, exemplo: x=5,y=2,z=10, com esses valores a saida daquele printf seria 5 * 2 = 10. Agora iremos usar mais um do...while:
do
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gotoxy(35,17); printf("De novo? ");
gotoxy(44,17); scanf("%c",&amp;dec);
if(islower(dec)) {dec=toupper(dec);}
&nbsp;&nbsp;&nbsp; }while(dec!='S' &amp;&amp; dec!='N');
Uma explicação rápida agora pra finalizar, o que há de novo aqui é a decisão if, islower() e toupper(). O %c no scanf é para trabalhar com caracter, se você escrever uma palavra só a primeira letra será guardada na variável, para pegar a palavra inteira usamos o %s. O if é uma estrutura de decisão, aqui é bem simples, ele irá verificar se o conteúdo de dec é minúscula com a função islower(), se for ele executará o que estiver em suas chaves, ou seja, mudará de minúsculo para maiúsculo com a função toupper(), no while() o que será avaliado para executar de novo o do...while é se dec é diferente de S e N, se for executará tudo de novo, se for S ou N continuará com o código.
Ao final seu código deverá se parecer com isso, porém aqui foi identado com dois espaços, a identação fica a critério, mas é recomendável se utilizar pois em códigos grandes poderá ajudar muito na hora de se procurar erros:
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;ctype.h&gt;
#include &lt;conio.c&gt;
main()
{
&nbsp; char dec;
&nbsp; do
&nbsp; {
&nbsp;&nbsp;&nbsp; int x,y,z;
&nbsp;&nbsp;&nbsp; system("cls");
&nbsp;&nbsp;&nbsp; gotoxy(35,2); printf("Tabuada: ");
&nbsp;&nbsp;&nbsp; scanf("%d", &amp;x);
&nbsp;&nbsp;&nbsp; for(y=1;y&lt;=10;y++)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z = x * y;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gotoxy(35,4+y); printf("%d * %d = %d",x,y,z);
&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gotoxy(35,17); printf("De novo? ");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gotoxy(44,17); scanf("%c",&amp;dec);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(islower(dec)) {dec=toupper(dec);}
&nbsp;&nbsp;&nbsp; }while(dec!='S' &amp;&amp; dec!='N');
&nbsp; }while(dec=='S');
}