Bases du langage C

Bases du langage C

Fiche révision Bases du langage C Type de variables char qui peut mémoriser une valeur sur 8 bits comprise entre -27 (-128) et 27-1 (127), unsigned char qui peut mémoriser une valeur sur 8 bits comprise entre O et 28-1 (255), short qui peut mémoriser une valeur sur 16 bits comprise entre -215 (-32768) et 215-1 (32767), unsigned short qui peut mémoriser une valeur sur 16 bits comprise entre O et 216 1 (65535), int qui peut mémoriser une valeur sur 32 bits comprise entre -231 (-2 147 483 648) et 2 147 483 647), unsigned int qui peut ér. ??l , S. v. p next page entre O et 232-1 (42 295), r 32 bits comprise float qui peut mémoriser une valeur sur 32 bits comprise entre -3,4*1038 et 3,4*1038, double qui peut mémoriser une valeur sur 64 bits comprise entre -1 et Affectation L’affectation d’une valeur à une variable se fait avec le signe = L’élément situé à droite de ce signa affecte l’élément situé à gauche.

Exemple : char cutier; char pentier; cutier= 10; pentier = 20; cutier = pentier; //cutier et pentier contiennent la même valeur 20 = valeur * 4 //multiplication par 4 Après exécution, valeur vaut

Désolé, mais les essais complets ne sont disponibles que pour les utilisateurs enregistrés

Choisissez un plan d'adhésion
28 valeur valeur / 2; //dlvision par 2 -> Après exécution, valeur vaut 14 este = valeur % 5; //reste de la division de valeur par 5 Après exécution, valeur est inchangée, reste vaut 4 Opérateurs logiques : – Ou (bit à bit) : signe l, – Ou logique : signe l, – Et (bit à bit): signe – Et logique : signe – Négation : signe l, – Complément : signe — – Ou exclusif : signe A, – Décalage à gauche : signe – Décalage à droite : signe >> unsigned char octetl = 0x55; //initialisation par une valeur exprimee //en hexadécimal unsigned char octet2, octet3• bool resultat, 2 une division par Zn. Contractions : Presque toutes les opérations précédentes peuvent être écrites vec une notation « contractée ». int valeur; valeur 5; valeur valeur oxol t’équivalent à valeur = t’équivalent à valeur « l’équivalent à valeur = //ce qui permet de ne //poids faible -2 garder & 0x01 que le bit de Test Les tests sont réalisés avec l’instruction if. On peut réaliser les tests . strictement positive
« ); else if (ello < O) printf("La valeur est strictement négative "); printf("La valeur est nulle "); L'erreur du débutant à éviter : mettre ; après la parenthèse du if : if (erro //ne jamais mettre ce point virgule Code qui sera exécuté quelle que soit la valeur de la variable rro Boucles Il existe trois boucles : pour (for), faire tant que (do while) et tant que faire (while). Boucle for : elle est constituée de la manière suivante for (initialisation ; test de sortie ; chaque boucle) //code réalisé à chaque itération code exécuté 4 est exécutée au moins une fois puisque le test de la condition de sortie est réalisé après une exécution. La boucle tant que faire peut ne pas être exécutée suivant le résultat du test réalisé avant les instructions contenues dans le bloc. Tableau On définit un tableau grâce aux signes [J entre lesquels on précise a taille. On peut réaliser des tableaux de tous les types connus. har lettres[261; //définit un tableau de 26 variables de type char e premier élément d'un tableau est accessible avec l'indice O : lettres[O] = "affectation du premier élément du tableau Les éléments d'un tableau de N variables sont donc accessibles des indices O à N-l. lettres[25] = l'affectation du dernier élément du tableau char element; element = lettres[14]; //lira le 15ème élément du tableau L'erreur du débutant à éviter : donner un indice négatif ou supérieur ou égal à la taille du tableau. #define NBRE 5000 loat tab[NBREl; //définit un tableau de 5000 float float valeur; valeur = tab[-3]; "pas d'indice O (hors du tableau) valeur = tab[NBRE]; //pas d'indice à la taille du tableau Pointeur Un pointeur est défini par S u siene *.

Un pointeur est type des données mémorisées en préfixant cette //fonction malloc ici : (short *) me paramètre de la fonction malloc précise la taille mémoire //demandée ici : 49 fois la taille d’une variable de type short (ce //qui fait 98 octets). Écriture d’une valeur : on utilise le signe * *pCourt = 456; mnitialisation du premier élément • 1) = 789; initialisation du second élément + 48) = 65000,’ //initialisation du dernier élément Lecture d’un élément pointé : on utilise aussi le signe * short val lue; val_lue = *pCourt; //val_lue prendra la valeur 456 val_lue *(pCourt + 1); //val_lue prendra la valeur 789 Remarque : lorsqu’on écrit + i) on pointe le ième + 1 élément.

Le pointeur étant typé (ici il est déclaré short *), le déplacement mémoire est de i fois la taille d’un élément (donc ici i fois 2 puisque chaque élément short est codé sur 2 octets). -6- Analogie avec les tableaux memoire non //réservée Libération mémoire Le système ayant accordé de la mémoire lors de l’allocation, il faut la rendre lorsqu’on n’en a plus besoin. Pour cela, il faut utiliser la fonction free. Cette fonction admet un seul paramètre : le pointeur qui a été retourné par la fonction malloc. Attention, cette valeur ne doit pas avoir été modifiée ou, sinon, elle doit être repositionnee sur le 1er élément alloué. hort *pCourt; pCourt = (short //dans cette partie de code, pCourt doit avoir gardé sa « valeur free(pCourt); //libération de la mémoire allouée Une méthode pour éviter les mauvaises surprises est de travailler avec une copie du ointeur et de garder le pointeur pour la libération #define TAILLE 4096 float * pReels; float * pCopie; Ma Ilo cation pReels = (float *)malloc(TAILLE * sizeof(float)); //réalisation de la copie pCopie = pReels; Mon travaille avec la copie for (int i=o; de modifier cette chaine est d’en faire une copie grâce (par exemple) ? la fonction strcpy . printf(« Texte constant : « déclaration d’un nouveau pointeur char *pTexteNonConstant; Mallocation sans oublier le caractère de fin de chaîne pTexteNonConstant = (char //cople du texte dans la nouvelle zone strcpy(pTexteNonConstant, pTexteConstant); //modification du texte (pTexteNonConstant + 4) – printf(« Texte non constant : %s
« ,pTexteNonConstant); //libération mémoire (sans problème) free(pTexteNonConstant); Notez bien que pour la variable pTexte, il n’y a pas d’allocation mémoire et donc pas de libération (free) à exécuter (un free est associé à un malloc).

Fonctions Prototype : c’est la signature de la fonction et il est constitué de la manière suivante Type_retour nom_fonction([type(s) éventuel(s) paramètre(s)]); Exemple : fonction, nommée IndiceMaxi, qui va retourner l’indice du maximum d’un tableau de float dont on passe l’adresse et la taille en paramètre. prototype peut être le suivant : Int IndiceMaxi(float *, int); On pourrait aussi déclarer le retour de type unsigned int, de même pour la taille du Appel : il faut utiliser le nom de la fonction et donner des noms de variable pour 8 initialiser avec des valeurs Mon peut appeler la même fonction en lui passant un pointeur ndiceMaxi(iDTab, TAILLE2); Exploitation du retour : dans l’exemple précédent, on appelle bien la fonction qui détermine l’indice de l’élément le plus grand du tableau mais on ne mémorise pas cette valeur.

Il faut affecter la valeur retournée à une variable int retour; retour – Indicervqaxi(tab, TAILLEI); Retour = IndiceMaxi(pTab, TAILLE2); Il est fortement conseillé d’exploiter la variable retour. Fonction spéciale main : tout programme (sous Windows et sous Linux) écrit en C doit contenir une fonction nommée main. C’est le point d’entrée de ce programme. Elle peut être déclarée de la manière suivante : void main() h’ou void main(void) Le plus souvent elle est déclarée de la manière suivante • int main(int argc, char ** argv) Elle reçoit donc deux arguments : argc qui indique le nombre d’arguments reçus et argv qui permet d’accéder à tous ces arguments. Elle retourne un entier qui peut 9