cours c instruction

8

Click here to load reader

Upload: ouamer-khalid

Post on 30-May-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 1/8

 

Page 2: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 2/8

1.1 Instructions

1.1.1 Affichage de texte 

Pour commencer, voici le programme C le plus simple qui fasse quelque-chose. Il se

contente d'afficher le texte Hello World !. C'est traditionnellement le premier programmeque l'on réalise lorsque l'on apprend un nouveau langage :

#include <stdio.h>

int main()

printf("Hello World!"); 

return 0;

On peut remarquer que ceci est un peu compliqué, pour un programme qui ne faitqu'afficher que deux mots. Il faut en effet connaître un certain nombre de notions dulangage C pour comprendre tous les détails de cet exemple.

La ligne printf("Hello World!"); est ce que l'on appelle une instruction du langage :un ordre simple que l'ordinateur doit exécuter. On parle ainsi d'exécuter un programme,pour demander à l'ordinateur d'exécuter les instructions qu'il contient. Pour commencer,seule la ligne qui affiche effectivement le texte nous intéressera. Nous verrons plus tardle rôle des autres lignes, que l'on considérera pour l'instant comme des lignes à ajoutersystématiquement avant et après le programme que nous écrirons.

Tous les programmes que vous devrez créer dans un premier temps auront donc la

forme :

#include <stdio.h>

int main()

/* Les instructions de votre programme */  

return 0;

Dans notre premier programme, la seule instruction qui nous intéresse actuellement estdonc :

printf("Hello World !"); 

Cette instruction permet d'afficher à l'écran le texte fourni entre les guillemets et nouspouvons remplacer le texte Hello World! par n'importe-quel autre texte, comme parexemple Bonjour Monde ! :

printf("Bonjour Monde !"); 

Le principe de base du fonctionnement d'un ordinateur est qu'il exécute des instructionsles unes après les autres. Bien qu'il ne soit pas directement le langage que comprend lamachine, le langage C en est assez proche, dans ses principes de fonctionnement. Ainsi,

les instructions d'un programme C sont exécutées les unes après les autres, dans l'ordre.

Page 3: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 3/8

Exercice : Essayez de prévoir ce que fera le programme suivant, puis compilez-le, etlancez le pour vérifier :

#include <stdio.h>

int main(){ 

printf("Hello World !"); 

printf("Hello World !"); 

return 0;

Comme prévu, ce programme affiche deux fois de suite le texte "Hello World !". Il lesaffiche cependant bout à bout, sur la même ligne et sans séparation. Pour aller à la ligneentre les deux affichages, il est nécessaire d'afficher un caractère spécial permettant unretour à la ligne, qui se note "\n". Le programme suivant affiche donc nos deux messages

sur deux lignes différentes :

#include <stdio.h>

int main()

printf("Hello World !"); 

printf("\n"); 

printf("Hello World !"); 

return 0;

Pour comprendre ce qui se passe lorsque ce programme est exécuté, on applique donc larègle suivante :

Effectuer les instructions une par une, dans l'ordre, dans le sens de la lecture. 

Il est aussi possible d'écrire le même programme en n'utilisant qu'un seul printf, toutsimplement en concaténant les trois morceaux de texte : printf("Hello World

!\nHello World !");.

1.1.2 Affichage de nombres 

L'instruction printf permet également d'afficher des nombres. On peut bien sûr exécuterprintf("42"); pour afficher le nombre 42, mais c'est en fait le texte "42" qui est fourni

à l'instruction printf, et non le nombre 42. Pour afficher réellement un nombre, il faututiliser la syntaxe suivante :

#include <stdio.h>

int main()

printf("Le nombre est %d\n", 42); 

return 0;

Page 4: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 4/8

Ce programme affichera le texte "Le nombre est 42", suivi d'un retour à la ligne. Lescaractères "%d" situés dans la chaîne indiquent en effet l'endroit de la chaîne où lenombre doit être inséré. Le nombre qui doit y être placé doit être fourni juste après lachaîne, séparé par une virgule.

La différence entre afficher un nombre, ici 42, ou le texte correspondant, "42", est que le

premier permet d'afficher le résultat de ce qu'un ordinateur fait le mieux : des calculs. Eneffet, si en plus d'afficher le nombre 42, on souhaite afficher son successeur, 42 + 1, ilsuffit d'exécuter le programme suivant :

#include <stdio.h>

int main()

printf("Le nombre est %d\n", 42); 

printf("Le successeur de ce nombre est %d\n", 42 + 1); 

return 0;

Pour effectuer des calculs en C, on écrit une expression qui ressemble à ce que l'on écriten mathématiques, ou à ce que l'on tape sur une calculatrice. Par exemple, l'expression3 + 4 - 2 signifie que l'on ajoute 4 à 3, puis retire 2, et vaut donc 5. L'instructioncorrespondante pour afficher le résultat est :

printf("Le résultat de 3 + 4 - 2 est %d\n", 3 + 4 - 2); 

Cet exemple permet de bien différencier l'affichage d'une chaîne de l'affichage d'unnombre, puisque le texte "3 + 4 - 2" contenu dans la chaîne est laissé inchangé, alorsque l'opération 3 + 4 - 2 placée après la virgule est calculée et que c'est son résultat

(5) qui est affiché.

Exercice : écrivez un programme qui affiche le texte "Le résultat du calcul de 423 moins117 est X", suivi d'un retour à la ligne, où X est remplacé par le résultat de l'opération,que vous devez laisser l'ordinateur calculer.

Solution : 

#include <stdio.h>

int main()

printf("Le résultat du calcul de 423 moins 117 est %d\n", 423 - 117); 

return 0;

Remarque : si vous tapez votre source sous Windows, puis exécutez votre programmedans une fenêtre DOS, les accents ne s'afficheront pas correctement. Le problème estque Windows et Dos ne stockent pas les accents de la même manière. Si vous rencontrezce problème, utilisez simplement du texte sans accents, ce n'est pas important pour cecours.

Page 5: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 5/8

D'autres opérateurs que + et - sont utilisables. Par exemple le caractère "*" représentel'opérateur de multiplication et le caractère "/" représente l'opérateur de division entière(qui donne le résultat de la division, sans les décimales). On peut également manipulerdes nombres négatifs en plaçant un - devant ces nombres.

Comme en mathématiques, certains opérateurs sont prioritaires aux autres : si l'on écrit

l'expression -2 + 5 * 6, l'ordinateur calcule d'abord 5*6, puis ajoute le résultat à -2.Pour choisir soi-même l'ordre dans lequel on effectue les opérations et calculer parexemple -2 + 5 avant de multiplier le résultat par 6, on utilise tout simplement desparenthèses : (-2 + 5) * 6 .

Exercice : Afficher le texte "Trois heures quinze minutes contiennent M minutes, ou Ssecondes", suivi d'un retour à la ligne, où M est remplacé par le nombre de minutes et Spar le nombre de secondes. Ecrivez votre programme en utilisant uniquement lesnombres 60, 15 et 3.

Solution :

#include <stdio.h>

int main()

printf("Trois heures quinze minutes contiennent %d minutes, ", 3 * 60 + 

15); 

printf("ou %d secondes\n", (3 * 60 + 15) * 60); 

return 0;

Il est possible d'afficher plusieurs nombres en une seule instruction printf. On met pourcela deux fois "%d" dans la même chaîne, puis on place après la chaîne, séparées pardes virgules, les deux expressions dont la valeur doit être affichée, dans l'ordre danslequel leur résultat doit remplacer les "%d". Si par exemple on veut afficher deuxnombres, 42 et 54, on peut écrire l'instruction suivante :

printf("Le premier nombre est %d, le deuxième nombre est %d\n", 42, 54); 

Cette instruction affichera le texte suivant :

Le premier nombre est 42, le deuxième nombre est 54

On peut ainsi afficher autant de nombres qu'on le souhaite, en une seule instructionprintf. Il ne faut cependant pas en abuser, pour ne pas rendre le programme difficile à

lire. En général on se limitera à trois ou quatre nombres maximum dans un mêmeprintf.

Exercice : écrivez la solution de l'exercice précédent en n'utilisant qu'une instructionprintf.

Solution :

Page 6: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 6/8

 

#include <stdio.h>

int main()

printf("Trois heures quinze minutes contiennent %d minutes, ou %d

secondes\n", 3 * 60 + 15, (3 * 60 + 15) * 60); 

return 0;

1.1.3 Erreurs de compilation 

Si vous faites une erreur lors de l'écriture de votre programme, et que du fait de cetteerreur, celui-ci n'est plus un programme C valide, un message d'erreur sera affiché aumoment où vous compilerez votre programme. Ces messages sont affichés en anglais etil faut parfois un peu d'habitude pour comprendre ce qui les a provoqué : le compilateurne vous indique en effet pas l'erreur exacte que vous avez commise, mais plutôt l'endroitoù il l'a détectée. Nous allons donc étudier plusieurs exemples.

Chaque instruction C doit, pour être valide, se terminer par un caractère ";" (un pointvirgule), qui permet de séparer les différentes instructions. Par exemple, le programmesuivant est invalide, car il manque un ";" après le premier printf. Compilez-le pour voirle résultat obtenu :

#include <stdio.h>

int main()

printf("Hello ") printf("World !"); 

return 0;

L'erreur affichée est la suivante :test.c: In function `main':

test.c:6: parse error before `printf'

La première ligne de l'erreur indique que celle-ci se trouve dans la fonction nommée"main". Nous verrons plus tard en détail la notion de fonction, et vous comprendrezfacilement ce message. C'est plutôt la deuxième ligne qui nous intéresse. Le message"parse error before printf" se traduit en français "erreur de syntaxe avant printf". Une

erreur de syntaxe peut être considérée comme une erreur de grammaire : vous n'avezpas respecté les règles du langage C.

L'erreur est indiquée comme se trouvant sur la ligne 6, juste avant le "printf". C'est eneffet à cette ligne que le compilateur détecte une erreur, car jusqu'à la ligne précédenteincluse, tout est parfaitement valide. Le problème est que l'on ne peut pas ajouter unprintf sur la ligne 6, sans avoir auparavant ajouté un ";". On peut par exemple corriger leproblème en modifiant uniquement la ligne 6 :

#include <stdio.h>

int main(){ 

printf("Hello ")

Page 7: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 7/8

;printf("World !"); 

return 0;

Le langage C n'impose en effet aucune règle, quand à la position précise du ";", ni de laplupart des éléments. Le programme suivant est par exemple parfaitement équivalent au

précédent :

#include <stdio.h>

int

main(

){printf

("Hello "

);printf

("World !"

);return

0;}

S'il est équivalent pour la machine, il est cependant beaucoup plus difficile à comprendrepour l'être humain, c'est pourquoi il est important de suivre un certain nombre de règlesde présentation, pour avoir un code source le plus lisible possible. La première de cesrègles peut être de ne toujours mettre qu'une seule instruction par ligne (et de mettre le";" sur cette même ligne). Nous en verrons d'autres dans ce cours et surtout nous nousefforcerons de montrer l'exemple.

Cherchez maintenant l'erreur dans le programme suivant :

#include <stdio.h>

int main()

{

printf("Hello);

printf("World !");

return 0;

}

Si vous compilez ce programme, vous obtiendrez l'erreur de compilation suivante :

none.c:6: unterminated string or character constant

none.c:5: possible real start of unterminated constant

Le message indique ici qu'une chaîne de caractères n'est pas terminée, à la ligne 6. Lachaîne de caractères qui n'est pas terminée est ici notre "Hello", puisqu'il manque leguillemet de fin. Ce "Hello" se trouve cependant sur la ligne 5, mais le compilateur, unefois de plus, ne s'en rend compte que plus tard : il considère d'une part le texte entreguillemets :

"Hello);

printf("

Et le texte entre guillemets qui n'est pour lui pas terminé est le suivant :

");return 0;

Page 8: Cours c Instruction

8/9/2019 Cours c Instruction

http://slidepdf.com/reader/full/cours-c-instruction 8/8

}

Le texte entre les deux, "World !" est considéré comme étant en dehors de toute chaînede caractères.

La ligne d'erreur suivante montre cependant que le compilateur estime probable quel'erreur se trouve en fait à la ligne 5, où se trouve effectivement notre chaîne nonterminée.

Lorsqu'un programme contient plusieurs erreurs, le compilateur les affiche toutes, lesunes après les autres, pour vous permettre de toutes les corriger tout de suite. Il estcependant important de se concentrer surtout sur la première de ces erreurs. Les erreurssuivantes sont parfois de simples conséquences de la première et ne se produisent plusune fois cette première erreur corrigée.

De nombreux autres types d'erreurs peuvent être produits à partir de notre code sourceactuel et vous pouvez essayer vous-même d'en générer d'autres, pour voir le résultat.Un bon nombre d'entre-elles ne sera cependant compréhensible que lorsque nous auronsavancé un peu plus dans ce cours.

Site web :

http://www.labo-info.co.cc 

http://www.algofree.co.cc