Um tutorial rápido e direto ao ponto que demonstra como trabalhar e gerar números aleatórios - randômicos, em linguagem C.

Você pode usar as mesmas funções para trabalhar com C++.

A motivação veio da necessidade de meus alunos aprendizes de programação, principalmente de cursos não ligados diretamente com informática, como os da Engenharia Elétrica

sim, já ensinei muita Lógica de Programação em C para alunos da Engenharia Elétrica 😀

Números aleatórios, randômicos em C

Para gerar números pseudo-aleatórios em C podemos utilizar a função rand() da biblioteca stdlib.h.

Cada chamada da função produz um número aleatório no intervalo fechado 0..RAND_MAX.

A constante RAND_MAX está definida no arquivo-interface stdlib.h.

Esta função utiliza uma “semente” para gerar sua sequência aleatória, portanto, se chamada sem a criação de seed - uma semente, diferente a cada execução, seu resultado será sempre o mesmo, isto é, sempre iniciará com o mesmo número “aleatório” e apresentará a mesma sequência numérica a cada chamada, portanto, não esqueça, sempre chame a função rand após a função srand.

Para ficar mnemônico, rand é a abreviatura de “random” que significa aleatório em inglês. A função srand seria a abreviatura de “seed random” ou semente aleatória - em tradução literal.

Para gerar esta semente chamamos a função srand() passando como parâmetro um valor de base. Este valor pode ser o resultado obtido da função time() que retorna o valor de milissegundos ocorridos no dia.

Código de exemplo

Vamos ao que interessa, a seguir um algoritmo com exemplos de como gerar números aleatórios em linguagem c:

#include <stdio.h>
#include <stdlib.h>
int main ( ) {
   int inteiro, x;

   printf("*** EXEMPLOS PARA USO DA FUCAO RAND ***\n\n");

   inteiro=rand();
   printf("inteiro aleatorio sem geracao de semente: %d\n",inteiro);

   srand(25);
   inteiro=rand();
   printf("inteiro aleatorio com semente fixa: %d\n\n",inteiro);

   srand(time(0));
   inteiro=rand();
   printf("inteiro aleatorio com semente baseada no relógio: %d\n\n",inteiro);

   printf("note que a partir deste ponto, depois que a funcao srand gerou a semente, \n as execucoes mostrarao numeros diferentes\n\n");

   inteiro = rand()%51;
   printf ( "inteiro de 0 a 50: %d\n\n" , inteiro) ;	// utilizar o operador de modulo nos garante que o 
         // resultado do resto de rand pelo divisor 51 eh um numero de
	// 0 a 50

   // simular o rolar de um dado de 6 faces
   printf ( "Simulacao de 3 jogadas para um dado de 6 faces\n\n") ;

   for (x=1; x<=3; x++) {
      inteiro = (rand()%6)+1; 	// como o numero gerado por rand vai de 0 a RAND_MAX, 

      // geramos o resultado de 0 a 5 e somamos 1 para garantir o intervalo de 1 a 6
      printf ("Dado rolado com resultado %d\n", inteiro);
   }

   // simular tres jogadas de cara ou coroa com moeda
   printf ( "Simulacao de cara ou coroa\n\n") ;

   for (x=1; x<=3; x++) {
      inteiro = (rand()%2); 	
      if (inteiro == 0) {
         printf ("Cara\n");
      } else {
	printf ("Coroa\n");
      }
   }

   getchar() ;
}

Se você precisa gerar números verdadeiramente aleatórios uma sugestão é ler o artigo Números aleatórios, randômicos e Pseudo-aleatoriedade, e verificar o serviço de API do RAMDOM.ORG descrito neste artigo.