Ejemplos.

Comprobar si un número dado por el usuario es primo.

/*
     Comprobar si un número dado por el usuario es primo
*/

#include <stdio.h>
#define PRIMO 1
#define NO_PRIMO 0

int primo(unsigned long);

int main(void)
{

 unsigned long numero;
 int resultado;
 puts("Introduce un número entero positivo");
 scanf("%lu",&numero);
 resultado = primo(numero);
    
    if(resultado == PRIMO)
    {
     printf("El numero %lu es primo\n",numero);
    }
    else
    {
     printf("El numero %lu no es primo\n", numero);
    }
     
     
     return 0;
}


int primo(unsigned long num)
{
 int result;
 int i, aux;
 
 if(num == 0 || num == 1 || num == 2){
     
      result = PRIMO;
     }
     if(result != PRIMO){
      for(i=2;i<num;i++){
      
       aux = num %i ;
       if(aux != 0){
        result = PRIMO;
       }
       else{
        result = NO_PRIMO;
        break;
       } 
      }
 }
 return result;

}

Mostrar los 50 primeros número de la secuencia de Fibbonaci.

/*
   Mostrar los primeros 50 valores de la secuencia de Fibbonaci
   en la que cada número es es resultado de sumar los dos anteriores
   n = (n-1)+(n-2)
*/

#include <stdio.h>

int main(void)
{
   long secuencia, n, nn;
   int i;
n = nn = 1;
   printf("1 - %ld \n2 - %ld \n",n, nn);
 
   for(i = 2;i < 50; i++){
secuencia = n + nn;

printf("%d - %ld\n", i+1, secuencia);
n = nn;
nn = secuencia;
   }

    puts("\n");
     return 0;
}

Calcula la letra del DNI.


/*
   Cálcula la letra del DNI
   Fórmula:
           (número del DNI) / 23, nos quedamos cone el resto y lo utilizamos para seleccionar
           la letra
*/

#include <stdio.h>

char letra(int);

int main(void)
{
char texto[] = "Introduce tu numero de D.N.I.";
long dni;

puts(texto);
scanf("%lu",&dni);

printf("%lu%c\n",dni,letra(dni % 23));

return 0;
}

char letra(int valor)
{
char letra[23]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S',
'Q','V','H','L','C','K','E'};

return letra[valor];
}

Muestra el día de la semana que es, dado un número introducido por el usuario.

#include <stdio.h>


void diaSemana(void);

int main(void)
{
diaSemana();

return 0;
}

void diaSemana(void)
{
char *nombreDia[] = {" ", "lunes", "martes", "miercoles", "jueves", "viernes",
                                         "sabado", "domingo"};
int vDia;

puts("introduce un número correspondiente al día de la semana que quieres que te muestre");
scanf("%d",&vDia);

if(vDia < 1 || vDia > 7)
{
puts("El valor introducido está fuera del rango\nEl rango es del 1 al 7");
}
else{
printf("El día de la semana elegido es: %s\n",nombreDia[vDia]);
}

}


Cuenta las vocales y las consonantes de un texto introducido por el  usuario.
No cuenta las vocales acentuadas, ni las letras eñe.

/*
 cuenta las vocales y las consonantes de un texto introducido por el usuario
*/

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void contar(char *t, int *vocal, int *conso);

int main(void)
{
    char texto[80];
    int contador = 0;
    int vocales, consonantes;

    vocales = consonantes = 0;

    puts("Escribe una línea de texto de 80 caracteres máximo");

    for(contador = 0; contador < 80; contador++){
        texto[contador] = getchar();

        if(texto[contador] == '\n') {
            texto[contador + 1] ='\0';
            break;
        }

    }
    if(contador > 0){
        printf("La frase introducida es:\n%s\n",texto);
        contar(texto, &vocales, &consonantes);
        printf("El texto introducido contiene %d vocales y %d consonantes\n", vocales, consonantes);
    }

    return 0;
}

void contar(char *t, int *vocal, int *conso)
{
 unsigned long i;

     for (i=0; i<= strlen(t); i++)
     {
         //if(isalpha(t[i])){
        if((t[i] > 64 && t[i] < 91) ||
            (t[i] > 96 && t[i] < 123))
        {
            switch(t[i])
            {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                case 'A':
                case 'E':
                case 'I':
                case 'O':
                case 'U':
                    *vocal += 1;
                break;
                default:
                    *conso += 1;
                break;
            }
        }
     }

}

Muestra por pantalla los años bisiestos desde el año 0 al año actual.

/*
Programa: Bisiesto
Muestra por pantalla los años bisiestos desde el año 0 al año actual
Un año es bisiesto si es múltiplo de cuatro si ser multiplo de 100
y si es múltiplo de 100, también lo es de 400

*/
#include <stdio.h>
#define True 1
#define False 0

int is_bis(int);

int main(void)
{
int y, _year;

for(y = 0 ; y <=2017; y++)
{
_year = is_bis(y);
if(_year == True)
{
printf("el año %d es bisiesto\n", y);
}
}

return 0;
}

int is_bis(int val)
{
int resp = False;

if((val % 4) == 0){
if((val % 100) != 0){
resp = True;
}
else if((val % 400) == 0){
resp = True;
}
}
else
resp = False;

return resp;
}


Mostrar una representación binaria de un número entero positivo dado por el usuario

#include <stdio.h>

int main(void)
{
    int valor;
    short int binario[16];
    int i;

    puts("Introduce un número entero");
    scanf("%d",&valor);

    for(i=0;i<=15;i++)
    {
        binario[i] = 0;
    }

    for(i=0;i<=15;i++)
    {
        binario[i]=valor%2;
        valor /= 2;
    }
    puts("Representación binaria");
    for(i=15;i>=0;i--)
    {
        printf("%d",binario[i]);
        if(i == 8)
            printf("|");
    }
    printf("\n");

    return 0;

}


Ejecución multihilo
Ejemplo sacado de:
http://www.um.es/earlyadopters/actividades/a3/PCD_Activity3_Session1.pdf

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>


struct parametros {
int id;
float escalar;
float matriz[3][3];
};

void init(float m[3][3])
{
int i;
int j;
for ( i = 0 ; i < 3 ; i++ )
{
for ( j = 0 ; j < 3 ; j++ )
{
m[i][j] = random()*100; }
}
}

void *matrizporescalar(void *arg)
{
struct parametros *p;
int i;
int j;
p = (struct parametros *)arg;
       for ( i = 0 ; i < 3 ; i++ )
      {
printf("Hilo %d multiplicando fila %d\n", p -> id, i);
     for ( j = 0 ; j < 3; j++ )
     {
     p -> matriz[i][j] = p -> matriz[i][j] * p -> escalar;
     usleep (100000) ;
}
}
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t h1;
pthread_t h2;
struct parametros p1;
struct parametros p2;
p1.id = 1;
p1.escalar = 5.0;
init(p1.matriz);
p2.id = 2;
p2.escalar = 10.0;
init(p2.matriz);
pthread_create(&h1, NULL, matrizporescalar , (void *)&p1);
pthread_create(&h2, NULL, matrizporescalar , (void *)&p2);
pthread_join(h1, NULL);  /*   Espera a que termine el hilo */
pthread_join(h2, NULL);  /*   Espera a que termine el hilo */ 
printf("Fin\n");
return 0;
}