SIF-1053 Architecture des ordinateurs Int2Bin Sujets Structures des programmes en C Types, instructions, opérateurs Tableaux (matrices) Chaînes de caractères Fonctions Références: http://fr.wikipedia.org/wiki/C_(langage) http://www.commentcamarche.net/c/cintro.php3 http://www-rocq.inria.fr/codes/Anne.Canteaut/COURS_C/ http://www.iu.hio.no/~mark/CTutorial/CTutorial.html http://www.cplusplus.com/doc/tutorial/control/
Int2Bin Ce programme doit convertir une chaîne de caractères correspondant à un entier dans sa représentation interne binaire Étape 1: Demander le type d’entier à convertir, ‘c’ pour le type char, ‘s’ pour le type short et ‘i’ pour le type int. Étape 2: Valider le type d’entier et la valeur entière introduite. Étape 3: Convertir la valeur entière décimale en binaire et afficher le résultat. Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {} Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, || et opérateur de mise à la puissance pow(). Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {} Caractères spéciaux dans les énoncés de formattage: \b retour arrière (backspace) \f saut de page (formfeed) \n nouvelle ligne (newline) \r retour chariot (return) \t tabulation horizontale \v tabulation verticale \\ le caractère ‘\’ \’ le caractère ‘’’ \" le caractère ‘"’ \0 le caractère NULL
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {} Important pour la validation des données introduites
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 1 Structures du langage C utilisées pour résoudre l’étape 1: printf(), scanf(), while() {}, if () {} else if () {} else {}
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow().
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow(). //operateurs logiques int i = 0 , j = 6 ; if (( i < j ) && (j < 10)) // vrai! if ( i || j ) // vrai! if ( i && j ) // faux! if ( !i ) // vrai! if ( ! (i < j )) // faux!
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow().
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow(). //operateurs relationnels int i = 0 , j = 6 ; if ( i <= j ) // test est vrai ….. k = (i > j) ; // k = 0 k = (i != j) ; // k = 1 if ( i ) // faux! if ( j ) // vrai (!= 0 est considere vrai)
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow().
Étape 2 Structures du langage C utilisées pour résoudre l’étape 2: Opérateurs logiques &&, ||, opérateurs relationnels et opérateur de mise à la puissance pow().
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %. Déclaration type-retour nom-fonction (type1 param1, type2 param2, …) float fct (int i, float x) // valeur de retour reelle, 2 arguments void fct1 (int i) // sans valeur de retour, un argument int fct2 () // fonction sans paramètre
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %. Passage de paramètres Par défaut le passage de paramètre se fait par valeur. Cela signifie que le paramètre est une variable locale de la fonction, Si la valeur de l’argument est changé dans la fonction, elle le sera que localement (sur la pile). La valeur de la variable passée en argument ne change donc pas de valeur au niveau du programme appelant.
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %. Passage de paramètres par adresse (référence) Ce type de passage de paramètres utilise des variables de type référence (pointeur). Une variable de type référence est une variable contenant l’adresse d’une autre variable (adressage indirect). Cette variable doit être initialisée lors de sa déclaration avec l’adresse dont elle est la référence. L’affectation est donc définitive.
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 3 //operateurs mathématiques (arithmetiques) Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %. //operateurs mathématiques (arithmetiques) int i = 13 , j = 5 , k ; double x = 12.45 ; x = x + i * j ; // x = 77.45 k = i % j ; // k = 3
Étape 3 Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %.
Étape 3 //operateurs ++ ou – (voir boucle for()) int x = 5; Structures du langage C utilisées pour résoudre l’étape 3: Fonction, for (;;), Opérateurs modulo %. //operateurs ++ ou – (voir boucle for()) int x = 5; int z = ++x; int y = x ++; // z = 6 y = 6 et x = 7
Structures des programmes en C (Instructions) Chaque instruction en C se termine par un délimiteur de fin d’instruction qui est le point-virgule. L’instruction la plus simple est l’affectation. Elle peut être simple ou multiple : i = 4 ; j = k = l = 12 ; Une structure de contrôle comme une boucle ou une conditionnelle s’adresse souvent qu’à une seule instruction. Il est possible de regrouper plusieurs instructions en un groupe d’instructions délimité par les accolades { }.
Structures des programmes en C (Instructions) #include <iostream.h> //#include <stdio.h> main ( ) { int i = 4, j = 5 ; // variables preinitialisees while ( i > 0) int j = 8; j = j + 1 ; cout << "\ni = " << i ; // printf("\ni = “, i ); cout << " j = " << j ; // printf(“ j = “, j ); i = i - 1; } cout << "\ni = " << i ; cout << " j = " << j ; Sorties: i=4 j=9 i=3 j=9 i=2 j=9 i=1 j=9 i=0 j=5
Structures des programmes en C (Opérateurs et expressions) Préséance des opérateurs Visibilité : : Primaires () [ ] -> Unaires ! ~ ++ -- + - * & sizeof new delete conversion de type Arithmétiques * / % Arithmétiques + - Décalages << >> Comparaisons < <= > >= Comparaisons == != Bit à bit & Bit à bit ^ Bit à bit | Logiques && Logiques || Affectations = op= a + b % c * d (a + ((b % c) * d)) 3 2 1
Structures des programmes en C (Opérateurs et expressions) Conversion de type (cast) int i = 12 ; double x = 4 ; x = x + i ; // i devient double avant de faire le + unsigned k = 4 ; int l = 5 ; k = l + k ; // l devient unsigned avant de faire le + int i = 3 ; float x ; x = (i / 2) * 3.14 ; // x = 3.14, i/2 = 1 division entiere x = ((float) i / 2) * 3.14 ; // en C x = (float (i)/ 2) * 3.14 ; // en C++
Structures des programmes en C (Tableaux, matrices) Déclaration d’un tableau de 4 éléments (vecteur de 4 entiers): int vec[4]; Accès aux éléments d’un tableau: vec[0], vec[1], vec[2], vec[3] Déclaration d’un tableau de 6 éléments (matrice de 2 lignes et 3 colonnes) placés en mémoire de façon linéaire ligne par ligne: mat[0][0], mat[0][1], mat[0][2], mat[1][0], mat[1][2], mat[1][2]: int mat[2][3]; Initialisation et définition d’un tableau de 3 entiers: int vec2[ ]={1,2,3};
Structures des programmes en C (Chaînes de caractères) Une chaîne de caractères est stockée dans un tableau de "char". Pour permettre l’utilisation de plusieurs fonctions de gestion de chaînes de caractères il faut compléter une chaîne de caractères avec le caractère NULL ('\0'). char x[]="SIF1053"; // x est un tableau de 8 caractères // x[7]=='\0' x[7]==0
Structures des programmes en C (Fonctions) Passage de paramètres #include <iostream.h> int valeur-positive (int val); void main ( ){ const int val1 = -100; int pos1 = valeur-positive(val1); cout << pos1 ; // affichage de 0 const int val2 = 600; int pos2 = valeur-positive(val2) ; cout << pos2 ;} // affichage de 1 int valeur-positive (int n){ if (n > 0) return 1; else return 0;}
Structures des programmes en C (Fonctions) Passage de paramètres par adresse en C standard (référence) Type * nom de variable; int i ; int * j; j = &i ; // j pointe sur i, j fait reference a i i = 10; (*j)++ ; printf(“%d”,i); // i == 11
Structures des programmes en C (Fonctions) Passage de paramètres par adresse en C++ (référence) Type & nom = nom de variable int i ; int & j = i ; // j pointe sur i, j fait reference a i i = 10; j++ ; cout << i; // i == 11
Structures des programmes en C (Fonctions) Passage de paramètres par adresse (C++) (référence) #include <iostream.h> int valeur-positive (int val, int & valref); void main ( ){ const int val1 = -100; int val; int pos1 = valeur-positive(val1, val); cout << val ; // affichage de -200 const int val2 = 600; int pos2 = valeur-positive(val2, val) ; cout << val ;} // affichage de 700 int valeur-positive (int n, int & valref){ if (n > 0) {valref = n + 100; return 1} else {valref = n – 100; return 0;}}
Structures des programmes en C (Fonctions) Passage de paramètres par adresse (C) (référence) #include <stdio.h> int valeur-positive (int val, int * valref); void main ( ){ int val1 = -100; int val2 = 600; int val, pos1, pos2; pos1 = valeur-positive(val1, &val); printf(“%d”,val); // affichage de -200 pos2 = valeur-positive(val2, val) ; printf(“%d”,val);} // affichage de 700 int valeur-positive (int n, int * valref){ if (n > 0) {*valref = n + 100; return 1} else {*valref = n – 100; return 0;}}