INFO517-cours9

De Wiki du LAMA (UMR 5127)
Révision datée du 24 novembre 2008 à 13:55 par Lvaux (discussion | contributions) (Création)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Séance 9 du Cours-TD de Programmation C.

Préparation du TP

Voir le sujet.

Entrées/sorties dans des fichiers

Voir les pages de manuel des flux et de fopen fgetc, fputc, fprintf, fclose, et fscanf.

Un exemple pour scanf: <source lang="c">

  1. include <stdio.h>

int main () { int i,s ; s = 0 ; while (scanf("%d",&i) == 1) s = s + i ; printf("Somme: %d\n",s) ; return 0 ; } </source> et une variante pour comprendre la valeur de retour: <source lang="c">

  1. include <stdio.h>

int main () { int i,j,s ; s = 0 ; while (scanf("%d%d",&i,&j) == 2) s = s + i + j ; printf("Somme: %d\n",s) ; return 0 ; } </source>

Voir aussi l'archive liste-v2.tar.gz qui fournit une variante de ce qu'on a fait au TD2.

Opérations bit à bit

Un exemple qui réunit un peu tout ce qu'on a vu: <source lang="c">

  1. include <stdio.h>

int deux_puissance(int n) { /* Utilisation du décalage */ return 1 << n ; }

int xor(int x, int y) { /* OU exclusif binaire */ return (~x & y) | (x & ~y) ;

/* Note: le `xor' est aussi une primitive C: `^'. */ }

void ecrit_binaire(int z) { int i ; printf("%11d == 0x%08x : ",z,z) ; for (i=8*sizeof(int)-1;i>=0;--i) if (z & deux_puissance(i)) putchar('1') ; else putchar('0') ; printf("\n") ; }

int main () { int i,x,y ;


printf("Puissances de 2:\n") ; /* Notez le cas de deux_puissance(sizeof(int)*8-1) */ for (i=0; i<sizeof(int)*8; i++) { printf("2 puissance %3d == %11d\n",i,deux_puissance(i)) ; }

printf("\nQuelques écritures binaires:\n") ; ecrit_binaire(1) ; ecrit_binaire(127) ; ecrit_binaire(128) ; ecrit_binaire(-1) ; ecrit_binaire(0) ; ecrit_binaire(deux_puissance(sizeof(int)*8-1)) ;

x = 13 ; y = 32 ; ecrit_binaire(x) ; ecrit_binaire(y) ;

printf("\nOpposé:\n") ;

ecrit_binaire(-x) ; ecrit_binaire(-y) ;

/* Deux méthodes pour le XOR */ printf("\n%d XOR %d:\n",x,y) ; ecrit_binaire(xor(x,y)) ;

printf("\nPareil avec l'opérateur C: %d ^ %d:\n",x,y) ; ecrit_binaire(x^y) ;

/* Deux méthodes pour le complément */ printf("\nComplément de %d:\n",x) ; ecrit_binaire(~x) ;

printf("\nComplément de %d:\n",y) ; ecrit_binaire(xor(y,0)) ;

printf("\nComplément à 1 de %d (c'est pareil que l'opposé sur la plupart des machines):\n",x) ; ecrit_binaire(~x+1) ;

return 0 ; }

</source>