1 Created by Hamid IMIHI ا   ا وي اري www.startimes2.com Solutions Des

1 Created by Hamid IMIHI ا   ا وي اري www.startimes2.com Solutions Des Exercices Exercice 2.1 En Pascal, En C, il existe des fonctions et des procédures il existe seulement des fonctions. (Les fonctions fournissant le résultat void correspondent aux procédures de Pascal.) il existe une structure spéciale program pour la définition du programme principal la fonction principale main est exécutée automatiquement lors de l'appel du programme les blocs d'instructions sont délimités par begin ... end les blocs d'instructions sont délimités par { ... } les commentaires sont délimités par (* ... *) ou { ... } les commentaires sont délimités par /* ... */ les points-virgules séparent les instructions simples à l'intérieur d'un bloc d'instructions les points-virgules marquent la fin de toutes les instructions simples Exercice 2.2 Exercice 2.3 Voici une des solutions possibles: #include <stdio.h> /* Notre premier programme en C */ main() fonction-1 pas accepté (contient le caractère spécial '-' ) _MOYENNE_du_MOIS_ accepté 3e_jour pas accepté (chiffre au début de l'identificateur) limite_inf. pas accepté (contient le caractère spécial '.' ) lim_supérieure pas accepté (contient le caractère spécial 'é' ) __A_ accepté _ accepté a accepté 3 pas accepté (chiffre au début de l'identificateur) 2 { printf("hello, "); printf("world"); printf("\n"); return 0; } Exercice 2.4 séq. d'échapp. descr. anglaise descr. française \n new line passage à la ligne \t tabulator tabulation \b back curseur arrière \r return retour au début de la ligne \" quotation marks guillemets \\ back-slash trait oblique \0 NUL fin de chaîne \a attention (bell) signal acoustique Exercice 2.5 #include <stdio.h> /* Ce programme calcule la somme de 4 nombres entiers introduits au clavier. */ main() { int NOMBRE, SOMME, COMPTEUR; /* Initialisation des variables */ SOMME = 0; COMPTEUR = 0; /* Lecture des données */ while (COMPTEUR < 4) { /* Lire la valeur du nombre suivant */ printf("Entrez un nombre entier :"); scanf("%i", &NOMBRE); /* Ajouter le nombre au résultat */ SOMME += NOMBRE; /* Incrémenter le compteur */ COMPTEUR++; } /* Impression du résultat */ printf("La somme est: %i \n", SOMME); return 0; } Solution: 3 - Commande au compilateur: #include<stdio.h> pour pouvoir utiliser les fonctions printf et scanf. - Fonction main n'a pas de paramètres (la liste des paramètres est vide) et fournit par défaut un résultat du type int (à l'environnement). - Commentaires (mis en italique). - Variables utilisées: NOMBRE, SOMME, COMPTEUR déclarées comme entiers (type int). - Fonctions utilisées: printf, scanf de la bibliothèque <stdio>. - Opérateurs: += opérateur arithmétique d'affectation ++ opérateur arithmétique < opérateur de comparaison = opérateur d'affectation - Structure de contrôle: while(<condition>) { ... } répète le bloc d'instructions aussi longtemps que la <condition> est remplie. - L'instruction return 0; retourne la valeur zéro comme code d'erreur à l'environnement après l'exécution du programme Ajoutes : - la fonction scanf est appelée avec deux paramètres: le format de saisie de la donnée (ici: "%i" pour lire un entier du type int) l'adresse de la variable destination (ici: l'adresse de NOMBRE). - la fonction printf est appelée avec un respectivement avec deux paramètres: le premier paramètre est une chaîne de caractères, qui peut contenir une information pour le format d'affichage des variables indiquées dans la suite (ici: "%i" pour afficher la valeur du type int contenue dans SOMME). les paramètres qui suivent la chaîne de caractères indiquent les noms des variables à afficher. (ici: SOMME) 4 Exercice 3.1 signed unsigned No: char short int long char short int long float double long double 1 !X! X X X X X X 2 !X! !X! X X X X 3 X X X !X! X X X X X X 4 !X! X X 5 !X! !X! X X X X 6 !X! 7 X !X! !X! X X X X 8 !X! X X X 9 !X! X 10 !X! X X X 11 !X! X 12 !X! X 13 !X! X X choix possible !X! meilleur choix Exercice 3.2 Traduisez les déclarations suivantes en C, sachant que vous travaillerez dans les ensembles de nombres indiqués. Choisissez les types les plus économiques, sans perdre en précision. Solution: (1) entier COMPTEUR {0 ,..., 300} int COMPTEUR; (2) entier X,Y {-120 ,..., 100} char X,Y; (3) entier MESURE {-10 ,..., 104} int MESURE; (4) réel SURFACE1 {0.5 ,..., 150075} float SURFACE1; 6 positions significatives (5) réel SURFACE2 {-12 ,..., 1500750.5} double SURFACE2; 8 positions significatives (6) entier N1 {0 ,..., 210} = {0 ,..., 1024} int N1; (7) entier N2 {-47 ,..., 47} = {-16384 ,..., 16384} int N2; (8) entier N3 {0 ,..., 326} = {0 ,..., 1 073 741 824} long N3; 5 (9) entier N4 {-1280 ,..., 1285} = {-1 ,..., 3.4*1010} double N4; 11 positions significatives (10) booléen TROUVE {vrai, faux} int TROUVE; par convention Exercice 3.3 base décimale base octale base hexadécimale représ. binaire 1016 01770 0X3F8 1111111000 8100 017644 0X1FA4 1111110100100 43690 0125252 0XAAAA 1010101010101010 585 01111 0X249 1001001001 51966 0145376 0XCAFE 1100101011111110 10000 023420 0X2710 10011100010000 156 0234 0X9C 10011100 Exercice 3.4 Donnée Type (si correct) Valeur / Erreur 12332 int 12332 23.4 double 23.4 345lu - déclaration correcte: 345ul 34.5L long double 34.5 -1.0 double -1.0 0xeba int 10+11*16+14*256 = 3770 0123l long 3+2*8+1*64 = 83 '\n' char val. dépend de la machine (ASCII: 10) 1.23ul - 'unsigned' seulement pour des entiers -1.0e-1 double -0.1 0FE0 - 0 => octal; 'FE' seulement pour hexa. 40000 long 40000 40000u unsigned int 40000 70000u unsigned long 70000 1e1f float 10 '0' char val. dépend de la machine (ASCII: 48) o - apostrophes manquent '\0' char valeur en général zéro 0 int valeur zéro 'O' char val. dépend de la machine (ASCII: 79) 67e0 double 67 \r - apostrophes manquent 6 01001 int 1+0*8+0*64+1*512 = 513 0.0l long double 0 0XEUL unsigned long 14 Exercice 3.5 Evaluer les expressions suivantes en supposant A=20 B=5 C=-10 D=2 X=12 Y=15 (1) (5*X)+2*((3*B)+4) -> 98 / (2) (5*(X+2)*3)*(B+4) -> 1890 / (3) A == (B=5) -> 0 B=5 (4) A += (X+5) -> 37 A=37 (5) A != (C *= (-D)) -> 0 C=20 (6) A *= C+(X-D) -> 0 A=0 (7) A %= D++ -> 0 D=3 A=0 (8) A %= ++D -> 2 D=3 A=2 (9) (X++)*(A+C) -> 120 X=13 (10) A = X*(B<C)+Y*!(B<C) -> 0+15 = 15 A=15 (11) !(X-D+C)||D -> !0||1 = 1 / (12) A&&B||!0&&C&&!D -> 1||1&&1&&0 = 1 / (13) ((A&&B)||(!0&&C))&&!D -> (1||1)&&0 = 0 / (14) ((A&&B)||!0)&&(C&&(!D)) -> (1||1)&&(1&&0) = 0 / Exercice 3.6 (1) (5*X) + 2*((3*B)+4) <=> 5*X + 2*(3*B+4) (2) (5*(X+2)*3)*(B+4) <=> 5*(X+2)*3*(B+4) (3) A == (B=5) / (4) A += (X+5) <=> A += X+5 (5) A != (C *= (-D)) <=> A != (C *= -D) (6) A *= C + (X-D) <=> A *= C + X-D (7) A %= D++ / (8) A %= ++D / (9) (X++) * (A+C) <=> X++ * (A+C) (10) A = X*(B<C) + Y*!(B<C) / (11) !(X-D+C)||D / (12) A&&B||!0&&C&&!D / (13) ((A&&B)||(!0&&C))&&!D <=> (A&&B||!0&&C)&&!D (14) ((A&&B)||!0)&&(C&&(!D)) <=> (A&&B||!0)&&C&&!D 7 Exercice 3.7 #include <stdio.h> #include <math.h> main() { double A; double B; double RES; /* Saisie de A et B */ printf("Introduire la valeur pour A : "); scanf("%lf", &A); printf("Introduire la valeur pour B : "); scanf("%lf", &B); /* Calcul */ RES = pow(A,B); /* Affichage du résultat */ printf("A exposant B est %f \n", RES); /* Calcul */ RES = sqrt(pow(A,2)+pow(B,2)); /* Affichage du résultat */ printf("L'hypoténuse du triangle rectangle est %f \n", RES); /* Calcul */ RES = sin(A)/cos(A); /* Affichage du résultat */ printf("La tangente de A est %f \n", RES); /* Calcul */ RES = floor(A/B); /* Affichage du résultat */ printf("La valeur arrondie en moins de A/B est %f \n", RES); /* Calcul */ RES = floor(1000*(A/B))/1000; /* Affichage du résultat */ printf("La valeur A/B arrondie à trois décimales: %f \n", RES); return 0; } Exercice 3.8 Soient les déclarations: long A = 15; char B = 'A'; /* code ASCII : 65 */ short C = 10; Expression Type Valeur (1) C + 3 int 13 (2) B + 1 int 66 (3) C + C int 75 8 (4) 3 * C + 2 * B int 160 (5) 2 * B + (A + 10) / C long 132 (6) 2 * B + (A + 10.0) / C double 132.5 Exercice 4.1 Voici les résultats du programme : C : n=6 p=2 q=1 D : n=6 p=3 q=1 E : n=6 p=2 q=0 F : n=6 p=3 q=1 G : S S H : 83 83 I : 53 53 Exercice 4.2 #include <stdio.h> main() { int JOUR, MOIS, ANNEE, RECU; printf("Introduisez la date (JOUR, MOIS, ANNéE) : "); RECU=scanf("%i %i %i", &JOUR, &MOIS, &ANNEE); printf("\ndonnées reçues : %i\njour : %i\nmois : %i\nannee : %i\n", RECU, JOUR, MOIS, ANNEE); return 0; } Changez la partie format du programme de façon à séparer les différentes données par le symbole '-'. Solution: . . . RECU=scanf("%i-%i-%i", &JOUR, &MOIS, &ANNEE); . . . Exercice 4.3 Ecrire un uploads/Industriel/ solution-des-exercices-c-c.pdf

  • 21
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager