Programmation avec C Jamart Vincent 1 RSVJ/Ministère de la Défense Nationale 22

Programmation avec C Jamart Vincent 1 RSVJ/Ministère de la Défense Nationale 22nd Logistic Wing Force Aérienne Systems Enabling UNIX Programmation avec C 2nd EDITION Vincent Jamart 1st Edition: Année Académique 1997-1998 2nd Edition: Année Académique 1999-2000 Programmation avec C Jamart Vincent 2 Table Des Matières Conception d'un programme 3 Types d'erreurs 3 Eviter les erreurs 3 Vérification 4 Avantages d'un programme pour la maintenance 4 Langages :interpréteur ou compilateur ? 4 Schéma de compilation en C annexe A Programmation en C 5 Les données 7 Type de données 7 Simple statements (Instructions simples) 8 Structured statements (Instructions structurées) 8 Déclaration/Définition de variables/constantes 8 Incrémentation ''++'' 8 IF-THEN-ELSE Statement 9 IF imbriqués 9 switch-case statement 9 Boucles 10 Fonctions d'entrée/sortie 11 Fonctions dans un programme 13 Passage d'arguments à une fonction 14 Recursivité des fonctions 14 Déclarations internes/externes 16 Les Tableaux(vecteurs) 17 Les chaînes de caractères (strings) 19 Passages de tableaux comme arguments à une fonction 19 Tableaux multidimensionnels (matrices) 21 Les Pointeurs 22 Opérations sur les pointeurs 26 Utilisation de la fonction SIZEOF 27 Passage des arguments de la ligne de commande 27 Les Structures 28 Les Unions 33 Les Fichiers: import/export, texte/binaire 35 Fichiers texte 35 Fichiers binaire 38 Une structure auto-référentielle: la Pile 41 Allocation Dynamique de la mémoire et implémentation a la Pile 42 Listes Chainées 45 Listes Doublement Chainées 53 Listes Circulaires 54 Récurence des Listes Chainées 55 Arbres Binaires 57 Récurence des Arbres Binaires 58 Annexes 60 Programmation avec C Jamart Vincent 3 CONCEPTION D’UN PROGRAMME 1) ANALYSE :(fonctionelle) : -Que veut le client -Définition correcte des données -Définition correcte des résultats 1’)ANALYSE :(organique) : -Adaptée au matériel (langage, O.S.) 2)CONCEPTION : -Analyse TOP-DOWN (découpage du programme) -PSEUDO-CODE indépendant du programme 3)CODAGE : -Pseudo-code > Langage 4)MISE AU POINT : -Mise en commun des différents modules (>topdown) 5)VERIFICATION : -Création d’un fichier test 6)DOCUMENTATION (externe) : -Pour les utilisateurs : mode d’emploi et analyse -Types de données IN/OUT -Fonctions du programmes 6’)DOCUMENTATION (interne) : -Algorithme -Remarques dans le fichier langage pour les programmeurs 7)MAINTENANCE ET MISE A JOUR : -Mise à jour des encodages de données -Correction des petites erreurs découvertes à l’emploi Donnée : Information avec laquelle un ordinateur peut travailler Objet : Ce qui appartient à un programme (variables, constantes, compteurs, modules,.) TYPES D’ERREURS • LOGIQUES (<>=) • SYNTAXIQUES (pintf, includde) • LEXICALES (idem) • SEMANTIQUE (mauvais types de données, non définies, plusieurs fois, absurdes) • EXECUTION (division par 0, dépassement de données, fichier absent) • ! ! ! ! PONCTUATION ! ! ! ! EVITER LES ERREURS • Comment l’utilisateur va-t-il introduire les données ? • Quelles erreurs peut-il commettre ? • Lisibilité et compréhension des commandes • Plusieurs possibilités d’utilisation du programme : avancé/débutant • Rattrapage en cas d’ erreurs (Annuler/marche arrière) Programmation avec C Jamart Vincent 4 VERIFICATION • Initialisation des var/const • > au lieu de < • = au lieu de <> • Confusion : 1 l ou I, 0 et O, 2 et Z • Test de sortie d’une boucle • Noms de variables ressemblants • Formules de calcul trop complexes AVANTAGES D’UN PROGRAMME POUR LA MAINTENANCE • Intégrité du programme : pas d’à-peu-près • Clarté facile, clair d’utilisation • Simplicité : éviter les formules trop compliquées • Efficacité : compromis vitesse/espace mémoire • Modularité : utiliser des procédures (modules) • Extensibilité : pouvoir ajouter qqch et adapter le programme au fil du temps LANGAGES BASIC, QBASIC, Visual Basic,Perl : INTERPRETEUR PASCAL, C ; Fortran, COBOL,.. : COMPILATEUR INTERPRETEUR Interpréteur : interprète (exécute) les commandes lignes par ligne : peut dépasser la capacité matérielle ou se planter en cours de programme Compilateur : voir schémas Programmation avec C Jamart Vincent 5 PROGRAMMATION EN C ANALYSE 1) <Déclaration des variables> 2) <Lecture des valeur, du taux, nombre d’années> 3) <Calcul du coéfficient pour la formule i=r/100> 4) <Détermination de la valeur future avec la formule : f=p*(1+i)> 5) <Ecriture du résultat> PSEUDO-CODE PGM (Calcul_des_interets_composes) BEGIN Declaration des variables IN(clavier ; p,r,n) <Calcul de i> <Calcul de la valeur future de F> OUT(ecran ; F) END FONCTION Calcul de i BEGIN (i=r / 100) END FONCTION Calcul de la valeur future de F BEGIN (F= p*pow(1+i),n) END *topdown du pseudo-code LANGAGE C (ANSI) #include <stdio.h> instruction préprocesseur de la librairie in/out #include <math.h> instruction préprocesseur de la librairie mathématique Si la librairie est entre <>, elle se trouve dans le répertoire des librairies. Si elle se trouve entre « « , elle se situe dans le répertoire courant. /*calcul des interets composes*/ remarque entre /* */ main () corps du programme, précède de VOID si la fonction ne renvoie aucune valeur (renvoi de valeur :c= main(a,b)) { équivalent au BEGIN float p,r,n,i,f ; définition des variables (float= nombres flottants) /*lecture des données*/ printf(« Montant du deopt(p) : ») ; printf(« » ) ; sortie vers l’écran de « « scanf(« %f »,&p) ; scanf(« « ) ; entrée des données au clavier %f définit l’entrée comme un float (p129) Programmation avec C Jamart Vincent 6 &p définit l’adresse (&)de la variable (p) i= r/100 i=r/100 > = est l’assignation (== est la comparaison) F=p*pow((1+i),n) ; fonction pow extraite de la librairie math.h /*affichage des resultats*/ printf(« \n La valeur (F) est : %2f\n »,F) ; \n indique un retour à la ligne (p57) %2f définit la sortie de f comme un float avec une précision de 2 (%d=entier) (F est la variable) } équivalent à un END Programmation avec C Jamart Vincent 7 LES DONNES L’OBJET (data) a trois attributs : Identificateur ( =nom, symbole,adresse, _, chiffres !case sensitive MAJ-min !!) Type (= integer,.. espace mémoire et opérations valables sur ce type) Valeur (=l’objet lui-même, soit var,const (3,10)) Valeur Ce qui est FIXE Ce qui CHANGE VARIABLE : nom et type valeur CONSTANTE nom, type, valeur Tout objet doit être déclaré avant utilisation CASE MEMOIRE (2 bytes/16bits) (int a ;) > |i|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| ^ Bit pattern qui déclare le contenu de la variable a (int= 2bytes > 16bits-1 bit pattern, donc le contenu est codé sur 15 bits) TYPES DE DONNES SIMPLES COMPOSEES Int (2 bytes) enum Tableaux Pointeurs Structures Short [ ] * Long struct Float (real)(4bytes) union Double(8bytes) Char (1byte) Structure X| X| X| ^nom ^num tel. ^salaire Union X| ^nom,num tel, salaire Ordre d’importance des types : long double >double>unsigned long interger>long integer>unsigned>integer>character Programmation avec C Jamart Vincent 8 SIMPLE STATEMENTS (INSTRUCTIONS DE CONTROLE SIMPLES) Nulle : ; Expression = + - * / Suivi de ; Break break Suivi de ; Continue continue Suivi de ; Goto (branchement) goto Suivi de ; (SPAGHETTI !) STRUCTURED STATEMENTS (INSTRUCTIONS COMPOSEES STRUCTUREES) Block Statement { xxxxxx ; xxxxxx ; } LOOP Statement DO WHILE FOR Conditional Statement (Control) IF SWITCH DECLARATION/DEFINITION DE VARIABLES/CONSTANTES  Déclarer une variable : int= cpt ;  Définir une variable : cpt= 0 ;  Affectation (assignation) : var<5 var=5 ;  DECLARATION-DEFINITION : int cpt = 0 ;  Définition d’une constante symbolique en préprocesseur (donc sans ;): #define const 10 TYPE CASTING : force le type d’un résultat X= (float)i/j >i est forcé float X= (float)(i/j) > i et j sont forcé float Exemple : (float)(2/4) > (float)0 > 0.0 (float)2/4 > 2.0/4 > 0.5  « %6.3f » 6 emplacements float (--.---) dont 3 décimaux ! le point est compté !  \n caractère de formatage (tableau p.57)  BOOLEAN : 0=false ; <>0= TRUE (1 ou n’importe quel nombre sauf 0) INCREMENTATION ++ a+1 peut s’effectuer de 3 façons : a+1 (normal) dans une ligne d’une boucle, par exemple (exécuté après le ;) a++ (post incrémentation) après l’exécution de la ligne (après le ;) Programmation avec C Jamart Vincent 9 ++a (pré incrémentation) avant l’exécution de la ligne (avant le ;)  printf(« %f » a++) ;  sort ‘5.0’ car c’est la valeur float (real) de a puis incrémente a de 1  b=a ;  b prend la valeur de a mais a a été incréménté (a+1) juste après la sortie ‘5.0’  printf(« %d » b) ;  sort ‘6’ car c’est la valeur entière de b IF-THEN-ELSE STATEMENT if (condition) { instruction ; } else { instruction } équivalent à: condition?alors:sinon; Test d’égalité == Test de différence <> != Test a<b ou a<=b > ou <= Test a>b ou a>=b >= ou >= ET logique (CAND, les deux vrais) && OU logique (un des deux vrai) || NOT logique (COR) !  Tableau complet p.10 IF IMBRIQUES( ELSEIF) if (condition1) { action1 ; } else if(condition2) ; { action2 ; } else action3 ; SWITCH-CASE STATEMENT switch (variable) { case valeur1: action1 ; action2; Programmation avec C Jamart Vincent 10 break; /*arrêt execution du switch, sinon continue tous les case*/ case valeur2: action3; break; default: /*non-obligatoire*/ defaultaction; } BOUCLES Boucle DO…LOOP (TANT QUE) while (condition de sortie) /*doncau moins un test*/ { instructions ; incrémentation ; } Boucle LOOP…UNTIL(JUSQUE) do /*s'exécutera au moins une fois avant le test*/ { instructions ; while (condition de sortie) uploads/Ingenierie_Lourd/ langage-c 3 .pdf

  • 20
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager