Exercices de Programmation en C

char convertirNote(int note); // Déclaration de la fonction

int main() { int note; char lettre;

while(scanf("%d", &note) != EOF) {
    lettre = convertirNote(note);  // Appel de la fonction
    printf("Note : %d, Lettre : %c\n\n", note, lettre);
}

return 0;

}

// Définition de la fonction char convertirNote(int note) { char resultat;

switch(note/10) {
case 10:
case 9:   resultat = 'A'; break;
case 8:   resultat = 'B'; break;
case 7:   resultat = 'C'; break;
case 6:   resultat = 'D'; break;
default:  resultat = 'E';
}

return resultat;

}


</div>**Question 1** : La fonction convertirNote transforme une note entière en une lettre correspondante (A, B, C, D, E). Le paramètre est de type int et la valeur de retour est de type char.

**Question 2** : Le code exécute toutes les instructions du switch jusqu'à la fin, il ne sort pas immédiatement après le cas correspondent.

### Exercice 2 : Somme des chiffres d'un nombre

<div>```
#include <stdio.h>

int sommeChiffres(int n);  // Déclaration de la fonction

int main() {
    int n;
    int resultat;

    while(printf("Entrez n : "), scanf("%d", &n) != EOF) {
        resultat = sommeChiffres(n);    // Appel de la fonction
        printf("n = %d, resultat = %d\n\n", n, resultat);
    }

    return 0;
}

// Définition de la fonction
int sommeChiffres(int n) {
    int somme = 0;

    while(n != 0) {
        somme += n % 10;
        n /= 10;
    }

    return somme;
}

Question 2 : Oui, l'algoirthme fonctionne. L'approche actuelle utilise une boucle pour extraire chaque chiffre. Une alternative récursive consisterait à séparer le chiffre des unités et de traiter le reste du nombre récursivement.

Exercice 3 : Calcul de puissance

int puissance(int base, int exposant); // Déclaration de la fonction

int main() { int base, exposant; int resultat;

while(printf("Entrez la base et l'exposant : "), scanf("%d%d", &base, &exposant) != EOF) {
    resultat = puissance(base, exposant);  // Appel de la fonction
    printf("%d^%d = %d\n\n", base, exposant, resultat);
}

return 0;

}

// Définition de la fonction int puissance(int base, int exposant) { int temp;

if(exposant == 0)
    return 1;
else if(exposant % 2)
    return base * puissance(base, exposant-1);
else {
    temp = puissance(base, exposant/2);
    return temp*temp;
}

}


</div>**Question 1** : Calcule la puissance d'un nombre (base^exposatn).

**Question 2** : Oui, l'algorithme utilise une méthode efficace de "exponentiation par carrés" pour réduire le nombre d'opérations.

### Exercice 4 : Nombres premiers jumeaux

<div>```
#include <stdio.h>
#include <stdlib.h>
int estPremier(int n);

int main(){
    int i,compteur=0;
    printf("Nombres premiers jumeaux inférieurs à 100 :\n");
    for(i=1;i<=100;++i){
        if (estPremier(i)){
            if (estPremier(i+2)){
                printf("%d %d\n",i,i+2);
                compteur+=1;
            }
        }
    }
    printf("Il y a %d paires de nombres premiers jumeaux sous 100\n",compteur);
    system("pause");
    return 0;
}

int estPremier(int n){
    int i,flag=1;
    if (n==1)
        flag=0;
    for(i=2;i<=n/2;++i){
        if (n%i==0){
            flag=0;
            break;
        }
    }
    return flag;
}

unsigned int n;
while(scanf("%u",&n)!=EOF){ 
    deplacements=0;
    hanoi(n,'A','B','C');
    printf("\n");
    printf("Total des déplacements : %d\n",deplacements);
}

return 0;

} void hanoi(unsigned int n,char depart,char intermediaire,char arrivee){

if(n==1)
deplacerDisque(n,depart,arrivee);
else{
    hanoi(n-1,depart,arrivee,intermediaire);
    deplacerDisque(n,depart,arrivee);
    hanoi(n-1,intermediaire,depart,arrivee);
}

} void deplacerDisque(unsigned int n,char depart,char arrivee){

printf("Déplacer le disque %u de %c vers %c\n",n,depart,arrivee);
deplacements++;

}


</div>### Exercice 6.1 : Calcul de combinaisons (itératif)

<div>```
#include <stdio.h>
#include <stdlib.h>
int combinaison(int n, int p);   // Déclaration de la fonction

int main() {
    int n, p;
    int resultat;

    while(scanf("%d%d", &n, &p) != EOF) {
        resultat = combinaison(n, p);   // Appel de la fonction
        printf("C(%d,%d) = %d\n\n", n, p, resultat);
    }
    system("pause");
    return 0;
}
int combinaison(int n, int p)
{
    int i,j,denominateur=1,numerateur=1;
    for(i=1;i<=p;i++)
        denominateur*=i;
    for(j=n-p+1;j<=n;j++)
        numerateur*=j;
    return numerateur/denominateur;
}

int main() { int n, p; int resultat;

while(scanf("%d%d", &n, &p) != EOF) {
    resultat = combinaison(n, p);   // Appel de la fonction
    printf("C(%d,%d) = %d\n\n", n, p, resultat);
}
system("pause");
return 0;

} int combinaison(int n, int p) { if(n==p) return 1; if(n<p) return 0; if(p==0) return 1; return combinaison(n-1,p)+combinaison(n-1,p-1); }


</div>### Exercice 7 : PGCD de trois nombres

<div>```
#include<stdio.h>

int pgcd(int a,int b,int c);

int main(){
    int a,b,c;
    int resultat;

    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
        resultat=pgcd(a,b,c);
        printf("PGCD : %d\n\n",resultat);
    }

    return 0;
}

int pgcd(int a, int b, int c) {
    int i = a;
    if (i > b)
        i = b;
    if (i > c)
        i = c;
    for (i; i >= 1; --i) {
        if (a % i == 0 && b % i == 0 && c % i == 0)
            return i;

    }return 1;
}

Étiquettes: programmation C algorithmes récursifs fonctions mathématiques Nombres Premiers tour de Hanoï

Publié le 30 juin à 01h03