Android Lab Test : Le capteur gyroscope (français)
Le langage C
1. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Sommaire
PRÉSENTATION..........................................................................................................3
QUELLE EST L’HISTOIRE DU C ?...........................................................................................3
COMMENT RÉALISER UN PROGRAMME C ?...............................................................................3
QUELLE EST LA STRUCTURE D'UN PROGRAMME C ?....................................................................3
QUELLE EST LA STRUCTURE D'UNE FONCTION C ?......................................................................4
Syntaxe..................................................................................................................4
Exemples................................................................................................................4
QUELS SONT LES TYPES DE DONNÉES ?..................................................................................4
QUELS SONT LES OPÉRATEURS ?..........................................................................................5
Exemple.................................................................................................................5
LES COMMANDES........................................................................................................6
QUELS SONT LES TYPES DE COMMANDE ?...............................................................................6
QUELS SONT LES BOUCLES POSSIBLES ?................................................................................6
QUELS RAPPORTS ENTRE FOR ET WHILE ?..............................................................................6
QU’EST-CE QU’UN PRÉPROCESSEUR ?....................................................................................7
QU’EST-CE QU’UNE FONCTION ?..........................................................................................7
QU’EST-CE QU’UN POINTEUR ?............................................................................................7
Quels sont les fichiers supportés par le C ?.................................................................8
LES ENTRÉES / SORTIES.............................................................................................9
QUELLES SONT LES COMMANDES D'ENTRÉES / SORTIES ?............................................................9
QUE FAIT PRINTF ?.........................................................................................................9
OBJET....................................................................................................................9
SYNTAXE................................................................................................................9
PARAMETRES..........................................................................................................9
EXEMPLE...............................................................................................................10
QUE FAIT SCANF ?........................................................................................................10
OBJET..................................................................................................................10
EXEMPLE...............................................................................................................10
PARAMETRES........................................................................................................10
EXEMPLE...............................................................................................................11
QUEL EST LE STYLE D'UN PROGRAMME C ?............................................................................11
LES DONNÉES...........................................................................................................12
QU’EST-CE QU’UN IDENTIFICATEUR ?...................................................................................12
COMMENT DÉCLARER DES DONNÉES ?..................................................................................12
QUELS SONT LES TYPES ?................................................................................................12
COMMENT INITIALISER DES DONNÉES ?................................................................................13
LES TYPES.................................................................................................................14
QUEL EST LE DOMAINE DES TYPES ?....................................................................................14
COMMENT CONVERTIR DE TYPE ?........................................................................................14
Comment convertir de type par évaluation ?.............................................................14
Comment convertir de type par casts ?....................................................................14
QU’EST-CE QU’UN TABLEAU ?............................................................................................15
QU’EST-CE QU’UNE CHAÎNE DE CARACTÈRES ?........................................................................15
Comment traiter les chaînes ?.................................................................................15
COMMENT DÉCLARER DE NOUVEAUX TYPES ?..........................................................................15
1
2. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
DE PASCAL À C..........................................................................................................17
QUELS RAPPORTS ENTRE PASCAL ET C ?..............................................................................17
QUELLES SONT LES ERREURS CLASSIQUES ?..........................................................................19
2
3. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Présentation
Quelle est l’histoire du C ?
Le langage C est passé par plusieurs étapes :
• Langage BCPL
• Langage B
• Langage C
Le langage BCPL a été développé au MIT puis à l'université de Cambridge.
Le C se prête très bien à la programmation système. En effet, il est proche
des caractéristiques machines. Par exemple, le système d'exploitation Unix a
été écrit en C.
Comment réaliser un programme C ?
• Ecriture du source à l'aide d'un éditeur
• Compilation du fichier source
• Linkage du ou des fichiers compilés
Quelle est la structure d'un programme C ?
• Directives de Compilation
• Variables globales
• Fonction principale MAIN ()
• Fonctions externes
3
4. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Quelle est la structure d'une fonction C ?
Syntaxe
Nom_de_la_fonction (arg1, arg2, ...)
Déclaration des arguments;
{
Déclaration des variables locales;
..................................
Commandes composant la fonction;
................................
}
Exemples
main()
{ printf ('Le carré de deux est %d',carre(2));
}
carre(x)
int x;
{ int y;
y = x * x;
return y;
}
Quels sont les types de données ?
Caractères char c;
Tableaux int a[10];
char ligne[80];
char page[80][25];
Réels float x;
double y;
Constantes 254 (entier)
02110 (octal)
0x05 (hexadécimal)
10.15 (réel)
'a' (caractère)
"exemple" (chaîne de caractères)
Entiers int nombre;
4
5. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Quels sont les opérateurs ?
Type Liste
arithmétiques +,-,*,/,% (modulo)
relationnels <,<=,>,=>,!= (différent),== (égal)
logiques && (et),¦¦ (ou),! (non)
Attention : = est un opérateur d'assignation et == un opérateur de relation.
Exemple
if ((x==0) && !(y==5)) z=3;
5
6. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Les commandes
Quels sont les types de commande ?
Il y a deux types de commandes :
• les commandes non prédéfinies
Ce sont les fonctions définies dans le programme.
• les commandes prédéfinies
Elles sont intrinsèques au langage.
Exemple : if (), while (), ...
On distingue encore :
• les commandes composées.
Exemple : { commande1; commande2; }
• les commandes simples. Exemple : commande;
Quels sont les boucles possibles ?
On compare les boucles While et les boucles For.
while (expression)
{
commandes;
}
expression = condition de boucle
for (e1;e2;e3)
{
commandes;
}
e1 = condition initiale
e2 = condition de boucle
e3 = incrémentation
Quels rapports entre For et While ?
somme=0; somme=0;
i=0; for (i=0;i<=n;i=i+1)
while (i<=n) somme=somme+i;
{
6
7. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
somme=somme+i;
i=i+1;
}
Qu’est-ce qu’un préprocesseur ?
Le pré-processeur est le langage du compilateur.
Son rôle est multiple :
• compilations conditionnelles
• détermination des fichiers à compiler
• définition de constantes
• définition de macros
Qu’est-ce qu’une fonction ?
Les fonctions peuvent ête utilisées de façon :
• procédurale (exemple : fonction (arguments);),
• fonctionnelle : (exemple : val=fonction(args);).
Les fonctions peuvent être récursives et peut transmettre les arguments par
valeurs.
Qu’est-ce qu’un pointeur ?
Un pointeur est l'adresse d'une variable.
Ses fonctions sont :
• accès direct de la mémoire
• allocation dynamique de la mémoire
• transmission d'arguments par variables
7
8. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Quels sont les fichiers supportés par le C ?
Les fichiers supportés par le C sont :
• fichiers à accès séquentiel
• fichiers à accès direct
• fichiers à enregistrements bruts
• fichiers à enregistrements formatés
8
9. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Les entrées / sorties
Quelles sont les commandes d'entrées / sorties ?
La directive de compilation #include <stdio.h> est nécessaire pour pouvoir
utiliser les entrées/sorties.
Commande Description
c=getchar(); Saisie d'un caractère.
putchar(c); Affichage d'un caractère.
printf ("Valeur de x : %d",x); Affichage d'une chaîne formatée.
scanf (%d",x); Saisie d'un chaîne formatée.
Que fait PrintF ?
OBJET
La fonction printf permet l'affichage à l'écran.
SYNTAXE
printf ("chaîne de contrôle",arg1,arg2,...);
PARAMETRES
La chaîne de contrôle est une chaîne de caractère contenant des % donnant
l'emplacement et le type des arguments arg1, arg2, ... ainsi que des
caractères spéciaux prédéfinies affichant retours de chariot, tabulations, etc
...
Types de données Description
%c caractère
%s chaîne de caractères
%f virgule flottante
%d entier de base 10
%o entier de base 8
%x entier de base 16
%e réel avec exponentielle
%u entier non signé
Caractères spéciaux Description
n nouvelle ligne
t tabulation
0 caractère nul
b retour arrière
9
10. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
r retour chariot
f page suivante
antislash
EXEMPLE
main()
{
int i,puiss;
i=1;
puiss=1;
while (i<=10) {
printf ("Deux à la puissance %d : %dn",i,puiss);
i=i+1;
}
}
Que fait ScanF ?
OBJET
La fonction scanf permet une saisie à l'écran.
EXEMPLE
scanf ("chaîne de contrôle",&arg1,&arg2, ...);
PARAMETRES
La chaîne de contrôle est une chaîne de caractère contenant des % donnant
l'emplacement et le type des arguments arg1, arg2, ... (types de données)
ainsi que des caractères spéciaux prédéfinies affichant retours de chariot,
tabulations, etc ...
Attention : Les & sont obligatoires dans un scanf.
10
11. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
EXEMPLE
main ()
{
int i,puiss,n
puiss=1;
printf("Combien de puissances de deux ?");
scanf("%d",&n);
while (i<=n) {
puiss=puiss*2;
printf("Deux puissance %d : %dn",i,puiss);
i=i+1;
}
}
Quel est le style d'un programme C ?
Le style d'un programme est créé par :
• le placement des tabulations (touche TAB)
• le placement des accolades ({, })
• le choix des noms de variables
• les commentaires (/* et */)
• le placement des espaces dans les expressions
Il est aussi conseillé d'écrire :
• les constantes en majuscules,
• les variables et les fonctions en minuscules.
11
12. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Les données
Qu’est-ce qu’un identificateur ?
Un nom de variable est un identificateur.
Or un identificateur est une séquence de lettres ou de chiffres qui commence
par une lettre. Les espaces interdits et les minuscules et les majuscules sont
différenciées.
Exemple : int num,NUM,no_1,No_1.
Comment déclarer des données ?
fonction (args)
Déclaration des args;
{
Déclarations;
}
Le format est : Classe_de_stockage Extension_de_type Type
Nom1,Nom2,...
Exemple : static unsigned int compteur,somme;
Quels sont les types ?
Les types sont :
• Int
• Char
• Float
• Double
• Tableaux
• Constantes
12
13. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Les extensions de type sont :
Type Description
Unsigned Variables non signée, extension de ses limites.
Long Force le stockage sur 32 bits, applicable uniquement sur les entiers.
Short Force le stockage sur 16 bits, applicable uniquement pour les entiers.
Auto Stockage local à la fonction courante, utilisation facultative
Register Stockage local, dans un registre du microprocesseur si possible
Extern Variable déclarée hors de la fonction; utile si utilisation de plusieurs modules
Static Rend globale une variable déclarée dans une fonction
Comment initialiser des données ?
Les variables peuvent être initialisées lors de la déclaration.
Exemple :
int i=0,j=1;
int a[5]={1,2,4,5,32);
char message [30]="Veuillez appuyer sur une touche";
char tab[2][3]={"unn","deux"};
Les variables globales sont automatiquement initialisées à zéro. Pour les
variables locales, les tableaux ne peuvent pas être initialisés de cette façon.
13
14. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Les types
Quel est le domaine des types ?
Types et ext. Stockage Valeurs
char 8 bits 128 à 127
int 16/32 bits (cf types suivants)
short 16 bits -32768 à 32767
long 32 bits -2147483648 à 2147483647
unsigned char 8 bits 0 à 255
unsigned short 16 bits 0 à 65535
unsigned long 32 bits 0 à 4294967295
float 32 bits 3.4E-38 à 3.4E+38
double 64 bits 1.7E-308 à 1.7E+308
Comment convertir de type ?
Comment convertir de type par évaluation ?
Le langage C permet une conversion automatique des données dans les
évaluations d'expressions.
Exemple :
int x; x est de type double
double y; x ajouté à y
x=x+y; x tronqué en entier
Comment convertir de type par casts ?
La syntaxe est : (type)expression
Ce type de conversion est utilisé essentiellement dans les fonctions.
Exemple :
double x;
int n;
x=sqrt((double)n);
14
15. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Qu’est-ce qu’un tableau ?
Les tableaux sont déclarés comme suit : type nom[l][m]...;
Les énumérations sont utilisées pour nommer les éléments d'une liste
d'indices.
Exemple :
enum color (bleu,blanc,rouge);
double teinte[3]; bleu blanc rouge
teinte[bleu]=0.5; teinte : ¦ 0.5 ¦ 0.6 ¦ 0.7 ¦
teinte[blanc]=0.6;
teinte[rouge]=0.7;
Type quelconque de donnée, tableaux statique.
[]... = dimensions du tableau, indiçage à partir de zéro.
Qu’est-ce qu’une chaîne de caractères ?
Une chaîne de caractères est un tableau de caractères.
Attention : La fin d'une chaîne correspond au caractère NULL (0). Il faut
donc prévoir des tableaux d'au moins un caractère de plus que les chaînes.
Exemple :
Pour la représentation en mémoire de char mot[6]="bonjour", on aurait en
mémoire :
mot [0] [1] [2] [3] [4] [5] [6] [7]
mot : ¦ b ¦ o ¦ n ¦ j ¦ o ¦ u ¦ r ¦ 0 ¦
Comment traiter les chaînes ?
Les fonctions str ... :
Attention :
chaine1=chaine2; est INCORRECT !
if (chaine1==chaine2)...
Pour faire une telle affectation, il faut utiliser une fonction de traitement de
chaînes.
Exemple :
strcpy (chaine_destin,chaine_source);
if (strcmp(ch1,ch2)==0) printf("Chaînes identique");
Comment déclarer de nouveaux types ?
Déclarer un nouveau type consiste à donner un nouveau nom à un type
prédéfini.
Ceci est fait par la commande typedef :
typedef type_prédéfini nouveau_nom_de_type;
15
16. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
Exemple :
typedef int LOGIQUE; /* simulation de booléen */
LOGIQUE Réponse,Trouvé;
typedef double vecteur[2]; /* Simplification des déclarations */
vecteur inc;
inc[0]=12; inc[1]=128;
16
17. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
De Pascal à C
Quels rapports entre Pascal et C ?
On distingue :
• les caractères spéciaux
• les instructions
• les directives
Cependant, certains ordres n'ont pas été traduits.
C Pascal
" '
{ BEGIN
} END;
<tab> <2 espaces>
/ DIV
% MOD
~ XOR
! NOT
>> SHR
<< SHL
() <rien>
&& AND
|| OR
comment start {
comment end }
== =
!= <>
= :=
printf writeln
scanf readln
while WHILE
/*...*/ {...}
static id = valeur id = valeur
id type type id
char boolean
int integer
exit() halt
double real
typedef struct { LISTE-MEMBRE } ID id = record LISTE-MEMBRE end
typedef enum {...} ID ID = (...)
17
18. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
TYPEDEF type ID [RANGE] ID = array [RANGE] of TYPE
TYPE-DEFINI *ID ID = ^TYPE-DEFINI
TYPEDEF char ID [N] ID = string [N]
FILE *ID int ID
ID = text ID = text
for (VAR = FIRST; VAR <= LAST; VAR+ for VAR := FIRST to LAST do
+) STATEMENT STATEMENT
for (VAR = FIRST; VAR >= LAST; for VAR := FIRST downto LAST do
VAR--) STATEMENT statement
while (COND) ordre while COND do ordre
do { ORDRES } while (!COND) repeat ORDRES until COND
if (COND) ORDRE; else ORDRE if COND then ORDRE else ORDRE
switch (VALUE) { case V: ORDRE; case VALUE of V: ORDRE; V,U: ORDRE;
break; case V: case U: ORDRE; break; else ORDRE end
default: ORDRE; }
inset (VAL, setof (A, B, C, -1)) VAL in [A,B,C]
arcv paramcount
argv[n] paramstr(n)
*VAR VAR^
VAR->MEMBRE VAR^.MEMBER
return exit
VAR = malloc (sizeof (*VAR)) new (VAR)
null nil
0xhhhh $hhhh
printf("%d%nd%n.md",VAR, VAR, VAR) write(VAR,VAR:n,VAR:n:m)
fprintf(FILE,"%d%d%dn", VAR, VAR, writeln(FILE,VAR,VAR,VAR)
VAR)
scanf("%d%nd%d",&VAR, &VAR, read(VAR,VAR,VAR)
&VAR)
fscanf(FILE,"%d%d%dn", &VAR, readln(FILE,VAR,VAR,VAR)
&VAR, &VAR)
strcpy(VAR, "string") VAR := "string"
strcpy(VAR, concat(VAR1, "string")) VAR := VAR1 + "string"
(strcmp(VAR,"string") == 0 VAR == "string"
(strcmp(VAR,"string") < 0) VAR < "string"
(strcmp("string",VAR) >= 0) "string" >= VAR
return expr FUN_NAME := expr
{$B+/-} #pragma standard_io(ON/OFF)
{$C+/-} #pragma control_c_check (ON/OFF)
{$D+/-} #pragma device_check(ON/OFF)
{$Fn} #pragma max_files(n)
{$Gn} #pragma input_file_buffer(n)
{$I name} #include "name"
{$I+/-} #pragma io_error_check (ON/OFF)
{$K+/-} #pragma stack_check(ON/OFF)
{$Pn} #pragma output_file_buffer (n)
{$R+/-} #pragma range_check(ON/OFF)
{$U+/-} #pragma user_interrupt (ON/OFF)
{$V+/-} #pragma param_type_check (ON/OFF)
Les listes de paramètres formels des fonctions/procédures sont traduites en
déclaration de procédure séparée et déclaratios de variable de paramètre,
comme dans le cas ci-dessous :
18
19. Bruno Delb http://www.brunodelb.com Date : 25/03/2001
Le langage C
C Pascal
TYPE3 NAME (V1,V2) TYPE1 V1; TYPE2 function NAME(V1: TYPE1; V2: TYPE2):
V2; TYPE3
Les procédures sont traduites en fonctions avec les types VOID en types de
retour. La syntaxe littérale d'un caractère spécial, comme ^C ou #nn, est
traduit en 'ooo', où ooo est la notation octale pour le code ASCII.
Des listes de paramètres vides sont ajoutées aux appels de fonction et de
procédure, où elles sont nécessaires en C et pas en Pascal.
Ne sont pas traduits :
• Les procédures ou fonctions imbriquées qui ne peuvent pas être
codées en C.
• Les paramètres VAR doivent être manuellement recodés.
• Les procédures d'accès au fichier doivent être codées (RESET,
ASSIGN, CLOSE, ...).
• Les portées dans la forme VAL..VAL ne sont pas traduites en ordres
CASE.
• Les déclarations de type pointeur FORWARD sont traduits, mais ne
seront pas compilés en C. Elles doivent être recodées
manuellement.
• Les types d'enregistrement variant doivent être retraduits en
UNIONS, mais ne le sont pas.
• Les opérateurs AND et OR sont toujours traduits en opérateurs
logiques && et ||.
• La "precidence" de l'opérateur C diffère de celui du Pascal, et les
différences ne sont pas traduites.
• L'ordre WITH n'est pas traduit.
• Les tableaux MEM [] et PORT [] ne sont pas traduits. Ils doivent
être retranscris en appels de fonction.
• Les variables absolues ne sont pas traduites (et ne peuvent
probablement pas l'être).
Quelles sont les erreurs classiques ?
Oubli d'un point virgule. Exemple : printf("Bonjour");
Oubli du & dans un scanf. Exemple : scanf("%d",valeur);
Présence de caractère dans la chaîne de contrôle d'un scanf. Exemple : scanf
(Entrez un nombre : %d",valeur);
Ajout superflu d'un point virgule.
Oubli d'une accolade.
Oubli de la déclaration d'une variable.
Oubli de l'insertion de stdio.h.
19