IUT-UMLV :: DUT - INFO :: 1ère Année (2012-2013) Programmation en Langage C :: Corrigé du TD N°3 =================================================================================================== Fonctions ne renvoyant pas de valeur ========================================== Exercice 1. (Table de multiplication) -------------------------------------------------#include <stdio.h> void Multiples(int n); int main(void) { int j; for (j=1; j<=10; j++) { Multiples(j); printf("\n"); } return 0; } void Multiples(int n) { int i; for (i=0; i<10; i++) printf("%3d ", n*i); } Exercice 2. (Test de primalité) -------------------------------------------------#include <stdio.h> void AffichePremier(int n); int main(void) { int test; do { printf("Entrez un entier positif : "); scanf("%d", &test); if (test < 0) printf("%d est un numbre negatif. (il faut un numbre positif).\n", test); } while (test < 0); AffichePremier(test); return 0; } void AffichePremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } if (estPremier) printf("\n%d est un nombre premier.\n\n", n); else printf("\n%d n'est pas un nombre premier.\n\n", n); } Fonctions renvoyant une valeur ========================================== Exercice 1. (Test de primalité) -------------------------------------------------#include <stdio.h> int EstPremier(int n); void DeuxPremiers(int, int); int main(void) { int n1, n2; do { printf("Entrez un entier positif : "); scanf("%d%d", &n1, &n2); if (n1 < 0 || n2 < 0) printf("(n1= %d, n2= %d) - Il faut entrer deux numbres positifs).\n", n1, n2); } while (n1 < 0 || n2 < 0); DeuxPremiers(n1, n2); return 0; } void DeuxPremiers(int n, int m) { if (EstPremier(n) && EstPremier(m)) printf("\nLes deux nombres sont premiers.\n\n"); else if (!EstPremier(n) && !EstPremier(m)) printf("\nAucun des nombres n’est premier.\n\n"); else printf("\nUn seul nombre est premier.\n\n"); } int EstPremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } return (estPremier); } Exercice 2. (Nombre premier supérieur un entier n) -------------------------------------------------#include <stdio.h> int EstPremier(int n); int PremierSuperieur(int n); int main(void) { int n; do { printf("Entrez un entier positif : "); scanf("%d", &n); if (n < 0) printf("%d est un numbre negatif. (il faut un numbre positif).\n", n); } while (n < 0); printf("Le premier nombre premier superieur ou egal a %d est %d\n", n, PremierSuperieur(n)); return 0; } int PremierSuperieur(int n) { for (;!EstPremier(n); n++); return (n); } int EstPremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } return (estPremier); } Exercice 3. (Liste des nombres premiers) -------------------------------------------------#include <stdio.h> int EstPremier(int n); void PremiersPremiers(int n); int main(void) { int n; do { printf("Entrez un entier positif : "); scanf("%d", &n); if (n < 0) printf("%d est un numbre negatif. (il faut un numbre positif).\n", n); } while (n < 0); PremiersPremiers(n); return 0; } void PremiersPremiers(int n) { int i; printf("\nLes nombres premiers inferieurs a %d: ", n); for (i = 2; i < n; i++) if (EstPremier(i)) printf("%d ", i); printf("\n\n"); } int EstPremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } return (estPremier); } Exercice 4. (Nombres premiers jumeaux) -------------------------------------------------#include <stdio.h> int EstPremier(int n); void Jumeaux(int n); int main(void) { int n; do { printf("Entrez un entier positif : "); scanf("%d", &n); if (n < 0) printf("%d est un numbre negatif. (il faut un numbre positif).\n", n); } while (n < 0); Jumeaux(n); return 0; } void Jumeaux(int n) { int i; if (n <= 4) printf("Pas de couples..\n"); else { printf("\nLes couples de nombres premiers jumeaux inferieurs a %d: \n", n); for (i = 2; i < n; i++) if (EstPremier(i) && EstPremier(i+2)) printf("(%d, %d)\n", i, i+2); } } int EstPremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } return (estPremier); } Exercice 5. (Décomposition en facteurs premiers) -------------------------------------------------#include <stdio.h> int EstPremier(int n); void Decomposition(int n); int main(void) { int n; do { printf("Entrez un entier positif : "); scanf("%d", &n); if (n < 0) printf("%d est un numbre negatif. (il faut un numbre positif).\n", n); } while (n < 0); Decomposition(n); return 0; } void Decomposition(int n) { int divisor=2, power=0, flag=0; printf("\nla decomposition en facteurs premiers de %d = ", n); while (n >= divisor) { if (n % divisor == 0) { power += 1; n = n / divisor; flag = 1; } else { if (flag) printf("%d^%d * ", divisor, power); divisor++; power=0; flag = 0; } } if (flag) printf("%d^%d", divisor, power); printf("\n\n"); } int EstPremier(int n) { int i, estPremier = 1; if (n == 1 || n == 0) estPremier = 0; for (i = 2; i < n; i++) { if (n % i == 0) { estPremier = 0; break; } } return (estPremier); } Exercice 6. (Papier, caillou, ciseaux) -------------------------------------------------#include <stdio.h> int LireInf2(void); int arbitre(void); int main(void) { int j1=0, j2=0; int i; } for ( i = 0 ; i < 10 ; i++ ) switch (arbitre()) { case 1: j1++; break; case 2: j2++; break; default: break; } printf("\nScores :\n\tJoueur 1: %d\n\tJoueur 2: %d\n\n",j1, j2); return 0; int LireInf2(void) { int i; } do { printf("Entrez votre pari (0, 1, ou, 2): "); scanf("%d",&i); if (i < 0 || i > 2) printf("\nIl faut entrer 0, 1, ou 2 !!!\n\n"); } while (i < 0 || i > 2); return i; int arbitre(void) { int J1, J2; printf("Codification :\n\tcaillou = 0\n\tpapier = 1\n\tciseau = 2\n"); printf("pari du joueur 1 :"); J1 = LireInf2(); printf("pari du joueur 2 :"); J2 = LireInf2(); } if (J1==J2) return 0; if (J1==((J2+1)%3)) return 1; return 2;