I)Introduction
La programmation, c'est la résolution d'un problème par un ordinateur.
Il existe plusieurs types de langages:
Tout d'abord, les langages impératifs(C, Pascal, Fortran, Assembleur, ...) où on donne une séquence d'ordres à la machine). Ensuite, les langages fonctionnels(Scheme, LISP, CAML, ...), les langages orientés objet(C++, Java, SmallTalk, ...), les langages à balisages(HTML, XML, SGML, Latex, ...) et enfin les langages déclaratifs(Prolog, Clisp) où on utilise des connaissances ainsi que la description du problème.
En programmation impérative, le programme est composé d'une séquence d'instructions élémentaires qui définit comment et dans quel ordre les opérations s'enchaînent.
Les structures de données sont passives en programmation impérative, les instructions s'appuient sur
les structures de données.
Plan du cour:
- La structure d'un programme C
- Types élémentaires de données, expressions
- Structures de contrôles
- Notion de fonction, entrée/sortie, modularité des programmes
- Tableaux, listes
- Pointeurs et gestion de la mémoire
- Types de données composées, structures, unions
- Récursion
II)La structure d'un programme C
Hello.c
/* Ce programme dit bonjour
*/
#include <stdio.h>
main()
{
printf("Bonjour\n");
}
Pour obtenir un programme exécutable, il y a 2 étapes:
1)la compilation du(ou des) fichier(s) source(s) : gcc -c -O hello.c
2)L'édition de liens : gcc -o hello hello.o
-O active les optimisations
-o permet de choisir le nom de l'executable (output)
Autre exemple:
add2.c
/* ... */
#include <stdio.h>
#include "simpio.h"
main()
{
int n1, n2, total;
printf("Ce programme calcule la somme de 2 entiers\n");
printf(" 1er entier: ");
n1 = getInteger();
printf("2e entier: ");
n2 = getInteger();
total=n1+n2;
printf("La somme vaut: %d\n", total);
}
simpio.h
simpio.c
#include <stdio.h>
int getInteger()
{
int n;
scanf("d", &n);
return(n);
}
#include: Inclut le fichier définissant les fonctions standard. Pour les entrées/sorties(I/O), il s'agit du fichier stdio.h.
#define: Définit une macro-instruction. A chaque fois que le compilateur la rencontrera dans sa traduction du fichier source, il la remplacera.
III) Les types élémentaires de données
2 attributs:
-ensemble des valeurs possibles (domaine)
-opérations associées.
Types entiers:| Int | Entier | 32bits |
| short[int] | Entier court | 16 bits |
| long[int] | Entier long | 32 bits |
1bit: [0,1]
2bits: [0,3]
...
32bits [0,232-1] ou [-231,231-1]
Types réels| Float | Réel simple précision | 32 bits |
| Double | Réel double précision | 64 bits |
Et enfin le type caractère : char
Tout ce que l'on vient de voir fait partie des mots réservés du C comme if, then, while, ...
typedef permet de définir un type
typedef double reel;
reel x;
On a redéfini un type réel.
Int n;
float x;
long double y;
printf(
"Un entier: %d", n);
/!\ Ne pas mettre un float à la place d'un réel!!!
printf(
"Un float: %e", x);
printf(
"Un float: %f", x);
printf(
"Un caractère: %c", 'a');
IV)Les expressions
Les expressions sont constituées de termes et d'opérateurs.
Termes:
-Constantes(entier, réel, caractère, caractères spéciaux)
-Une variable
-Un appel à une fonction
-Une expression entre parenthèses
Evaluation: n1+n2, résultat d'un appel à une fonction.
Variable: 3 attributs: nom, type, (valeurs)
Opérateurs: +,*,-,/ Ils utilisent 2 opérandes, ils sont donc binaires.
-(négatif) est unaire.
/!\ En entier, il y a une troncature mais pas d'arrondies. Cependant si on met 4.0/5 , 4/5.0 ou 4.0/5.0 on a l'évaluation à 0.8 et non pas à 0 comme dans 4/5 .
Précédence des opérateurs:
2*x+3*4=(2*x)+(3*4)
Table de précédence| Associativité | Arité
| Opérateurs |
| Gauche | Unaire | ++, --, -, (type) |
| Droite | Binaire | *, /, % |
| Droite | Binaire | +, - |
| Gauche | Binaire | <, >, <=, >= |
| Gauche | Binaire | == != |
| Gauche | Binaire | && || |
| Droite | Binaire | = op= |