next up previous
suivant: À propos de ce

Devoir 02 :



 

 

#include <stdio.h>
unsigned long fact_term(unsigned long n, unsigned long s) {
  if(n < 2) return s;
  return fact_term(n - 1, n * s);
}
unsigned long fib(unsigned long n) {
  if(n < 1) return 0;
  if(n == 1 || n == 2) return 1;
  return fib(n - 1) + fib(n - 2);
}
int main(void) {
  unsigned long i;
  for(i = 0; i <= 12; i++)
	 printf("%lu! = %lu\n", i, fact_term(i, 1));
  for(i = 0; i <= 47; i++)
	 printf("fib(%lu) = %lu\n", i, fib(i, 1, 1));
  return 0;
}
 

 
Code 1 : Factorielle en récursivité terminale et Fibonacci en récursivité simple (
factnfib.c). 
 


 


 
 

#include <stdio.h>
int main(void) {
  unsigned char c = 'A', i;
  for (i = 128; i != 0; i = i / 2)
    if (c & i) putchar('1');
    else putchar('0');
  putchar('\n');
  return 0;
}
 
 

#include <stdio.h>        /* Pour les fonctions printf, fprintf et putchar */
#include <stdlib.h>       /* Pour la fonction atol, strtoul ... */
int main(int argc, char ** argv) {
  unsigned long v = 0, i, j;
  if(argc != 2) {
    fprintf(stderr, "usage : %s <nombre a convertir>\n", argv[0]);
    exit(1);
  }
  j = 1UL << ( (sizeof(v) << 3) - 1);
  v = strtoul(argv[1], NULL, 10);
  printf("Le nombre %lu s'ecrit : ", v);
  for (i = 0; i < (sizeof(v) << 3); i++, j >>= 1) {
    if (v & j) putchar('1');
    else putchar('0');
  }
  printf(" en binaire\n");
  return 0;
}
 

 
Code 2 : Conversion d'un décimal en binaire (
dec2bin.c). 
 


 


 
 

# Makefile

CC=gcc
CFLAGS=-Wall -O2
LDFLAGS=
SRC=dec2bin.c
OBJ=$(SRC:.c=.o)
PROG_NAME=dec2bin

# cibles et dependances

all: $(PROG_NAME)

%.o: %.c
	$(CC) $(CFLAGS) -c $<

$(PROG_NAME) : $(OBJ)
	$(CC) $(LDFLAGS) $^ -o $@

clean: 
	rm -f $(PROG_NAME) $(OBJ) *~
 

 
Code 3 : Exemple de Makefile pour
dec2bin.c. 
 


 


 
 

#include <stdio.h>  /* pour printf et scanf */
#include <stdlib.h> /* pour atol            */
#include <ctype.h>  /* pour isdigit         */
unsigned long fact(unsigned long n) {
  if(n > 1)
    return n * fact(n - 1);
  return 1;
}
int main(void) {
  unsigned long n;
  printf("Entrez un nombre\n");
  if(scanf("%lu", &n) == 1)
    printf("Fact(%lu) = %lu\n", n, fact(n));
  return 0;
} 
/*** OU BIEN ***
int main(void) {
  unsigned char buff[50], c, i = 0;
  while( (c = getchar()) != '\n') {
    if(isdigit(c))
      buff[i++] = c;
    else
      break;
  }
  buff[i] = '\0';
  printf("Fact(%l) = %l\n", atol(buff), fact(atol(buff)));
  return 0;
}*/
 

 
Code 4 : Fonction récursive pour le calcul de la factorielle
fact.c. 
 


 



next up previous
suivant: À propos de ce
Fares Belhadj 2007-03-09