« Exercices en langage C/Structures de contrôle » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
 
Ligne 11 :
int main(void) {
unsigned char i=7;
i=i/2; //"/": division entiereentière...
switch(i) {
case 1 : (void)printf("Premier\n");break;
Ligne 42 :
{{Boîte déroulante|titre=Solution|contenu=
* pour le premier programme :
Comme i vaut 7 au début du programme, on pourrait penser que i/2 donne 3.5 qui est arrondi à 4 (puisqu'affecté à une variable entière sur un octet). Mais il n'en est rien : 8/3 = 2.66 ne donne pas plus 3 mais seulement 2... parce que 8/3 donne un quotient de 2 avec 2 comme reste et que l'on s'intéresse à ce quotient justement ! C'est cela la division entière. Don quand on arrive au <code>switch</code>, i vaut 3 et donc
<pre>
Troisième
Ligne 273 :
 
=== Somme d'entiers (boucle simple) ===
EcrireÉcrire un programme ''somme'' demandant à l'utilisateur de taper 10 entiers et qui affiche leur somme. Le programme ne devra utiliser que 3 variables et ne devra pas utiliser de tableau.
 
<div style="width:70%">{{Boîte déroulante|titre=Solution|contenu =
Ligne 319 :
* Utilisation d'une constante symbolique ''NB_ENTIERS'' au lieu de valeurs littérales 10 : si le nombre d'entier à demander change, il n'y aura qu'une seule ligne à modifier au lieu de 3 dans notre cas.
*''for (int i = 0'' : c'est une syntaxe autorisée en C99. Avec les anciennes normes C, La variable aurait dû être déclarée hors de la boucle. Cette nouvelle syntaxe permet d'avoir des variables d'itération locales à la boucle for.
* ''(void)printf(...'' : la fonction <code>printf</code> retourne le nombre de caractères écrit dans le flux de sortie. Comme j'ai décidé de ne pas utiliser ce code retour, je le signale en castant à <code>void</code> la fonction. L'outil qualité ''lint'' signale toute fonction retournant une valeur qui n'est pas affectée à une variable ou ignoré explicitement. Cela permet d'éviter l'erreur qui consiste à oublier de traiter un code retour de fonction.
*Le code retour de scanf est ignoré. Il renvoie le nombre de valeurs correctement récupérée. Dans un code opérationnel robuste, tous les codes retours doivent être traités et un traitement doit être prévu en cas d'erreur. Le type void n'existait pas en C K&R.
 
Ligne 466 :
'''Remarque''' :
*''for (int i = 0'' : c'est une syntaxe introduite en C99. Avec les anciennes normes C, La variable aurait dû être déclarée hors de la boucle. Cette nouvelle syntaxe permet d'avoir des variables d'itération locales à la boucle for.
* ''(void)putchar('*');'' : la fonction putchar retourne le caractère écrit dans le flux de sortie ou EOF en cas d'erreur. Comme j'ai décidé de ne pas utiliser ce code retour, je le signale en castant à <code>void</code> la fonction. L'outil qualité ''lint'' signale toute fonction retournant une valeur qui n'est pas affectée à une variable ou ignoré explicitement. Cela permet d'éviter l'erreur qui consiste à oublier de traiter un code retour de fonction.
Dans un code opérationnel robuste, tous les codes retours doivent être traités et un traitement doit être prévu en cas d'erreur. Le type void n'existait pas en C K&R.
 
Ligne 475 :
/*
Nom ... : afficherTriangle
RoleRôle .. : Afficher un triangle d'etoilesd’étoiles
Paramètre :
Parametre :
nbLignes : nombre de lignes du triangle
Version 2 du 9/1/2008
Ligne 482 :
static void afficherTriangle(const int nbLignes)
{
// Déclaration de la chainechaîne de caractère (voir ma remarque)
char chaineEtoiles[nbLignes+1];
// Initialisation du tableau avec un terminateur de chainechaîne
chaineEtoiles[0] = '\0';