serhane le crackeur
  1.1 Instructions
 

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 programme que 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 fait qu'afficher que deux mots. Il faut en effet connaître un certain nombre de notions du langage 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 tard le rôle des autres lignes, que l'on considérera pour l'instant comme des lignes à ajouter systé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 est donc :

printf("Hello World !");

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

printf("Bonjour Monde !");

Le principe de base du fonctionnement d'un ordinateur est qu'il exécute des instructions les unes après les autres. Bien qu'il ne soit pas directement le langage que comprend la machine, 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.

Exercice : Essayez de prévoir ce que fera le programme suivant, puis compilez-le, et lancez 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 les affiche cependant bout à bout, sur la même ligne et sans séparation. Pour aller à la ligne entre les deux affichages, il est nécessaire d'afficher un caractère spécial permettant un retour à 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 la rè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, tout simplement 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écuter printf("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 faut utiliser la syntaxe suivante :


#include <stdio.h>

int main()
{
   printf("Le nombre est %dn", 42);
   return 0;
}

Ce programme affichera le texte "Le nombre est 42", suivi d'un retour à la ligne. Les caractères "%d" situés dans la chaîne indiquent en effet l'endroit de la chaîne où le nombre doit être inséré. Le nombre qui doit y être placé doit être fourni juste après la chaî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. En effet, si en plus d'afficher le nombre 42, on souhaite afficher son successeur, 42 + 1, il suffit d'exécuter le programme suivant :


#include <stdio.h>

int main()
{
   printf("Le nombre est %dn", 42);
   printf("Le successeur de ce nombre est %dn", 42 + 1);
   return 0;
}

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

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

Cet exemple permet de bien différencier l'affichage d'une chaîne de l'affichage d'un nombre, puisque le texte "3 + 4 - 2" contenu dans la chaîne est laissé inchangé, alors que 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 moins 117 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  %dn", 423 - 117);
   return 0;
}

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


D'autres opérateurs que + et - sont utilisables. Par exemple le caractère "*" représente l'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 manipuler des 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 par exemple -2 + 5 avant de multiplier le résultat par 6, on utilise tout simplement des parenthèses : (-2 + 5) * 6 .

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

 


Solution :


#include <stdio.h>

int main()
{
   printf("Trois heures quinze minutes contiennent %d minutes, ", 3 * 60 + 15);
   printf("ou %d secondesn", (3 * 60 + 15) * 60);
   return 0;
}

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

printf("Le premier nombre est %d, le deuxième nombre est %dn", 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 instruction printf. 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ême printf.

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

 


Solution :


#include <stdio.h>

int main()
{
   printf("Trois heures quinze minutes contiennent %d minutes, ou %d secondesn",
      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 cette erreur, celui-ci n'est plus un programme C valide, un message d'erreur sera affiché au moment où vous compilerez votre programme. Ces messages sont affichés en anglais et il faut parfois un peu d'habitude pour comprendre ce qui les a provoqué : le compilateur ne vous indique en effet pas l'erreur exacte que vous avez commise, mais plutôt l'endroit où 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 point virgule), qui permet de séparer les différentes instructions. Par exemple, le programme suivant est invalide, car il manque un ";" après le premier printf. Compilez-le pour voir le 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 comprendrez facilement 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'avez pas 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 en effet à cette ligne que le compilateur détecte une erreur, car jusqu'à la ligne précédente incluse, tout est parfaitement valide. Le problème est que l'on ne peut pas ajouter un printf sur la ligne 6, sans avoir auparavant ajouté un ";". On peut par exemple corriger le problème en modifiant uniquement la ligne 6 :


#include <stdio.h>

int main()
{
   printf("Hello ")
   ;printf("World !");
   return 0;
}

Le langage C n'impose en effet aucune règle, quand à la position précise du ";", ni de la plupart 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 à comprendre pour l'être humain, c'est pourquoi il est important de suivre un certain nombre de règles de présentation, pour avoir un code source le plus lisible possible. La première de ces rè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 nous efforcerons 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. La chaîne de caractères qui n'est pas terminée est ici notre "Hello", puisqu'il manque le guillemet de fin. Ce "Hello" se trouve cependant sur la ligne 5, mais le compilateur, une fois de plus, ne s'en rend compte que plus tard : il considère d'une part le texte entre guillemets :

"Hello);
   printf("

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

");
   return 0;
}

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

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

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

De nombreux autres types d'erreurs peuvent être produits à partir de notre code source actuel 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 aurons avancé un peu plus dans ce cours.


 par serhane le crakeur

Agence publicite Afrique
 
  google-site-verification=0bcz4aeJDJ9T3dUZ30OBJLMEF867Z1npIGezBoHmXok  
 
Ce site web a été créé gratuitement avec Ma-page.fr. Tu veux aussi ton propre site web ?
S'inscrire gratuitement