/*
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;
}