Chap. 3 Introduction au langage C

Documents pareils
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction au langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Algorithmique et Programmation, IMA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

UE C avancé cours 1: introduction et révisions

Cours d Algorithmique et de Langage C v 3.0

Algorithmique, Structures de données et langage C

Conventions d écriture et outils de mise au point

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Claude Delannoy. 3 e édition C++

Rappels Entrées -Sorties

Bases de programmation. Cours 5. Structurer les données

Chap III : Les tableaux

SUPPORT DE COURS. Langage C

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Plan du cours. Historique du langage Nouveautés de Java 7

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programmation C++ (débutant)/instructions for, while et do...while

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

UE Programmation Impérative Licence 2ème Année

Programmation C. Apprendre à développer des programmes simples dans le langage C

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Le langage C. Introduction, guide de reference

Programmation Classique en langage C

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Introduction à l algorithmique et à la programmation M1102 CM n 3

Programmation C. J.-F. Lalande. 15 novembre 2012

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Programmation en langage C

Les structures. Chapitre 3

Chapitre 1 : La gestion dynamique de la mémoire

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Cours Programmation Système

Informatique Générale

Langages et Concepts de Programmation Introduction à la programmation en langage C

Initiation. àl algorithmique et à la programmation. en C

Programmation système I Les entrées/sorties

Les structures de données. Rajae El Ouazzani

Gestion de la mémoire

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

ALGORITHMIQUE ET PROGRAMMATION En C

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

TP : Gestion d une image au format PGM

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cours de programmation avancée. Le langage C. Université du Luxembourg

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Langage Éric Guérin 5 octobre 2010

Le prototype de la fonction main()

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Architecture des ordinateurs

Représentation d un entier en base b

Programmation impérative

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Notions fondamentales du langage C# Version 1.0

INITIATION A LA PROGRAMMATION

Problèmes liés à la concurrence

Structure d un programme

Programmer en JAVA. par Tama

as Architecture des Systèmes d Information

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

V- Manipulations de nombres en binaire

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Programmation avec Xcas ou Python

Solutions du chapitre 4

Logiciel de Base. I. Représentation des nombres

L ALGORITHMIQUE. Algorithme

Cours d algorithmique pour la classe de 2nde

I. Introduction aux fonctions : les fonctions standards

Corrigé des TD 1 à 5

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours 1 : La compilation

OS Réseaux et Programmation Système - C5

Java Licence Professionnelle CISII,

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Algorithmique I. Algorithmique I p.1/??

Cours 1 : Qu est-ce que la programmation?

Support de Cours de Langage C. Christian Bac

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Licence Sciences et Technologies Examen janvier 2010

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les arbres binaires de recherche

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Recherche dans un tableau

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Transcription:

Chapitre 3. Introduction au langage C Quelques propriétés du langage C : utilisation intensive des fonctions ; au début, langage faiblement typé (au contraire de Pascal) ; C est un langage structuré ; une programmation de bas niveaux est possible (manipulation de bits) utilisation intensive des pointeurs. Pourquoi C est-il devenu un langage largement utilisé? il possède des constructions de haut niveau ; il est possible de développer des programmes très proches de la machine ; le langage C produit des programmes efficaces ; des compilateurs existent pour un grand nombre de machines. M. KRAJECKI 1 DESS IAS Année 2003-2004 1. Type, variables et affectation Un mot mémoire est une suite de chiffres en binaire (0 ou 1). Il est composé d un nombre fixe de bits (par exemple 8, 16, 32 ou 64). Une suite de 8 bits est appelé un octet ou byte. Un type définit une méthode d interprétation d un mot mémoire. Par exemple, le type entier permet une représentation binaire des nombres entiers et le type caractère, une représentation binaire d un caractère. Le nombre de mots mémoire associés à chaque type est dépendant de la version d UNIX utilisée, cependant le type char est pratiquement toujours codé sur un octet. M. KRAJECKI 2 DESS IAS Année 2003-2004

Types du langage C Les principaux types du langage C sont : int : les entiers signés ; unsigned int : les entiers non signés ; char : les caractères ; float : les réels ; double : les réels à double précision. Attention : il n existe pas en C de type booléen. C est à vous de le définir (à l aide du type caractère ou entier). Voici un petit programme C (stocké dans le fichier taille.c) vous permettant de connaître le nombre d octets utilisés pour coder chaque type élémentaire... M. KRAJECKI 3 DESS IAS Année 2003-2004 Un premier programme printf("char : %d\n", sizeof(char)) ; printf("int : %d\n", sizeof(int)) ; printf("float : %d\n", sizeof(float)) ; printf("double : %d\n", sizeof(double)) ; Il ne reste qu à le compiler et à l exécuter (sur PC avec Linux)... M. KRAJECKI 4 DESS IAS Année 2003-2004

Explications $ gcc taille.c $ a.out char : 1 int : 4 float : 4 double : 8 Donc le type double est codé sur 8 octets. Examinons plus en détail ce premier programme C : un programme C est un ensemble de fonctions ; ces fonctions peuvent éventuellement ne pas rendre de résultat ; elles sont définies dans un ou plusieurs fichiers source. M. KRAJECKI 5 DESS IAS Année 2003-2004 Explications Chaque fonction est constituée par une suite d instructions. Chaque instruction est terminée par ;. Il exite une fonction particulière, la fonction main() qui définit le point d entrée du programme. La fonction printf permet d afficher une chaîne de caractères sur la sortie standard. L instruction : printf("char : %d\n", sizeof(char)) ; demande l affichage de la chaîne de caractères "char : " suivie d un entier (%d) qui est passé en paramètre à la fonction printf (sizeof(char)). La fonction sizeof a pour résultat la taille mémoire en octets associée au paramètre qui peut être soit un type (char), soit une variable. M. KRAJECKI 6 DESS IAS Année 2003-2004

Variable et affectation Une variable est désignée par un nom et un type qui sont invariables au cours de l exécution du programme. À chaque variable est associée un ou plusieurs mots mémoire. L affectation permet de donner une valeur à une variable. Les deux paramètres de l affectation doivent avoir des types compatibles. Par exemple : a,b : entier int a, b ; a 5 a = 5 ; b a b = a ; M. KRAJECKI 7 DESS IAS Année 2003-2004 Opérateurs et négation Le test d égalité est effectué à l aide de l opérateur ==. Le résultat de cette opération est 1 si les 2 opérandes sont égales, 0 sinon. On peut également utiliser les différents opérateurs arithmétiques (+, -, *, /). Il existe des opérateurs de comparaison (<, >, <=, >=) ainsi que des opérateurs booléens et (&&), ou ( ), la négation (!). M. KRAJECKI 8 DESS IAS Année 2003-2004

Les pointeurs Il existe également en C, un type pointeur qui permet de désigner l adresse mémoire où est stockée une variable. Voici un cours exemple de son utilisation et son résultat : int a, b, *pa, *pb ; a = 5 ; b = 23 ; pa = &a ; /* pa contient l adresse mémoire où est stockée a */ M. KRAJECKI 9 DESS IAS Année 2003-2004 Les pointeurs (exemple) pb = &b ; printf("a= %d, pa = %d\n", a, pa) ; printf("b= %d, pb = %d\n", b, pb) ; pb = pa ; *pb = 10 ; /* le contenu de la variable désignée par pb prend la valeur 10 */ printf("après la modification :\n"); printf("a= %d, pa = %d\n", a, pa) ; printf("b= %d, pb = %d\n", b, pb) ; M. KRAJECKI 10 DESS IAS Année 2003-2004

2. Schémas itératifs Les conditionnelles : supposons, que nous ayons à écrire un algorithme qui a pour but la comparaison de 2 entiers. Cet algorithme se formule de la façon suivante. a, b, min : entier int a, b, min ; Si a<b alors if (a<b) { min a min = a ; Sinon else { min b min = b ; Fsi M. KRAJECKI 11 DESS IAS Année 2003-2004 Les conditionnelles (généralisation) Plus généralement, une conditionnelle s exprime ainsi : Si exp1 alors if (exp1) { suite-inst1 suite-inst1 ; SinonSi exp2 alors else if (exp2) { suite-inst2 suite-inst2 ;...... SinonSi expn-1 alors else if (expn-1) { suite-instn-1 suite-instn-1 ; SinonSi expn alors else if (expn) { suite-instn suite-instn ; Fsi M. KRAJECKI 12 DESS IAS Année 2003-2004

Exemple : résolution d un polynome du second degré #include <math.h> int a, b, c ; printf("résolution\n"); printf("valeur de a? ") ; scanf("%d", &a) ; printf("\n Valeur de b? ") ; scanf("%d", &b) ; printf("\n Valeur de c? ") ; scanf("%d", &c) ; printf("\n Racine de %d x^2 + %d x + %d :\n", a, b, c) ; M. KRAJECKI 13 DESS IAS Année 2003-2004 Résolution d un polynome du second degré (suite) if (a==0) if (b==0) if (c==0) printf("tout x est solution.\n"); else printf("pas de solution.\n"); else printf("%f est solution.\n", (float) c/b) ; else M. KRAJECKI 14 DESS IAS Année 2003-2004

Résolution d un polynome du second degré (suite) else { int delta = b*b -4*a*c ; if (delta < 0) printf("pas de solution réelle.\n") ; else if (delta == 0) printf("sol. double : %f.\n", (float)-b/(2*a)) ; else { float rac = sqrt(delta) ; printf("x1 = %f, x2 = %f.\n", (-b-rac)/(2*a), (-b+rac)/(2*a)); M. KRAJECKI 15 DESS IAS Année 2003-2004 Les boucles pour L itération bornée permet d exécution un nombre fixe de fois un bloc d instructions. Pour i de indmin à indmax faire for(i=indmin ; i<= indmax ; i=i+1){ suite_inst suite_inst ; Fpour Par exemple, pour calculer n!, voici un petit programme... M. KRAJECKI 16 DESS IAS Année 2003-2004

Remarques sur les boucles pour Quand on arrive à la fin de la boucle pour, la variable de contrôle est automatiquement incrémentée de, puis le programme teste si la borne supérieure est atteinte. Si non, on recommence les instructions qui sont dans la boucle avec la nouvelle valeur de la variable de contrôle. La variable de contrôle doit être de type scalaire (entier, caractère). La valeur de la variable est indeterminée à la fin d une boucle : défense de l utiliser à nouveau sans réinitialisation. M. KRAJECKI 17 DESS IAS Année 2003-2004 Calcul de n! int n, nb, produit = 1 ; printf("factorielle\n"); printf("n =? ") ; scanf("%d",&n) ; for(nb = 1 ; nb <= n ; nb++) produit = produit * nb ; printf("\n factorielle(%d) = %d\n", n, produit); M. KRAJECKI 18 DESS IAS Année 2003-2004

Itération non bornée Il existe en C une itération non bornée qui s exécute tant qu une condition de continuation (expression booléenne) est vérifiée. Tant que exp faire while(exp) { suite_inst ; suite_inst ; Ftantque Attention : si l expression booléenne est fausse la première fois, la suite d instructions n est pas exécutée. Par contre, si l expression est toujours vraie, une boucle infinie apparaît et le programme ne termine pas. M. KRAJECKI 19 DESS IAS Année 2003-2004 Exemple : calcul du PGCD de deux entiers int a, b ; printf("a = ") ; scanf("%d", &a); printf("\nb = "); scanf("%d", &b); while (a!= b) { if (a>b) a = a - b ; else b = b - a ; printf("\n PGCD = %d\n", a); M. KRAJECKI 20 DESS IAS Année 2003-2004

3. Définition de fonctions et procédures Une fonction est un bloc (une suite) d actions (d instructions), nommé et éventuellement paramétré permettant d obtenir un résultat. Une fonction est déclarée afin de pouvoir ensuite l appeler par son nom. On distingue trois types de paramètres : 1. paramètres en entrée (initialisés avant l appel à la fonction) ; 2. paramètres de sortie (calculés par la fonction) ; 3. paramètres en entrée et sortie (initialisés avant l appel et modifiés par la fonction). M. KRAJECKI 21 DESS IAS Année 2003-2004 Exemple : calcul du PGCD int pgcd(int a, int b) { while (a!= b) { if (a>b) a = a - b ; else b = b - a ; return(a) ; M. KRAJECKI 22 DESS IAS Année 2003-2004

Calcul du PGCD int u, v, p ; printf("a = ") ; scanf("%d", &u); printf("\nb = "); scanf("%d", &v); p = pgcd(u,v) ; printf("\n PGCD = %d\n", p); M. KRAJECKI 23 DESS IAS Année 2003-2004 Définition d une procédure Une procédure regroupe et nomme un ensemble d instructions éventuellement paramétré. Comme pour les fonctions, on distingue trois types de paramètres : en entrée, en sortie ou bien en entrée/sortie. Exemple : un nombre est dit parfait, s il est égal à la somme de ses diviseurs. Le premier nombre parfait est 6, car. Voici un programme en C qui affiche tous les nombres parfaits inférieurs à... M. KRAJECKI 24 DESS IAS Année 2003-2004

Les nombres parfaits void NombreParfait(int n){ int i, d, nb ; for(i=2; i<n; i++){ nb = 1 ; for(d=2; d<i; d++) if (i%d==0) nb+=d ; if (nb==i) printf("%d est un parfait\n", i); NombreParfait(100) ; M. KRAJECKI 25 DESS IAS Année 2003-2004 Passage de paramètres Nous avons déjà vu qu il existe trois types de paramètres : les paramètres en entrée, en sortie et en entrée/sortie. Les paramètres en entrée doivent être initialisés avant l appel de la fonction : si la fonction modifie ces paramètres, ces modifications seront perdues après l exécution de la fonction ; le compilateur C réalise dans ce cas un passage par valeur ; il alloue une variable temporaire pour chaque paramêtre en entrée et recopie sa valeur ; la fonction n aura alors pas accès directement au paramètre mais seulement à sa copie. M. KRAJECKI 26 DESS IAS Année 2003-2004

Les paramètres en sortie Les paramètres en sortie sont modifiés par l appel de fonction : pour que cette opération soit possible, il est nécessaire de fournir l adresse mémoire du paramètre en entrée ; la fonction doit être en mesure de modifier directement le paramètre ; c est pourquoi, les paramètres en sortie sont transmis en utilisant des pointeurs ; c est le même mécanisme qui est utilisé pour les paramètres en entrée/sortie. M. KRAJECKI 27 DESS IAS Année 2003-2004 Une procédure qui calcule le PGCD de 2 entiers void pgcd(int a, int b, int *resultat) { while (a!= b) { if (a>b) a = a - b ; else b = b - a ; *resultat = a ; M. KRAJECKI 28 DESS IAS Année 2003-2004

Une procédure qui calcule le PGCD de 2 entiers int a, b, r ; printf("a = ") ; scanf("%d", &a); printf("b = "); scanf("%d", &b); pgcd(a, b, &r) ; printf("pgcd = %d\n", r); M. KRAJECKI 29 DESS IAS Année 2003-2004