Exercice 1:
1)
#include <stdio.h>
int fact(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
int main() {
int n;
printf("Entrez un nombre entier naturel positif n: ");
scanf("%d", &n);
printf("Le factoriel de %d est %d\n", n, fact(n));
return 0;
}
2)
#include <stdio.h>
double exp(double x, int n) {
int i;
double result = 1;
for (i = 0; i < n; i++) {
result *= x;
}
return result;
}
int main() {
double x;
int n;
printf("Entrez un nombre x : ");
scanf("%lf", &x);
printf("Entrez un nombre entier naturel n : ");
scanf("%d", &n);
printf("Le résultat est : %lf", exp(x, n));
return 0;
}
3)
#include <stdio.h>
void SaisieMatrice(int n, int m, double matrice[n][m]) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("Entrez la valeur de M[%d][%d]: ", i, j);
scanf("%lf", &matrice[i][j]);
}
}
}
void ProduitMatrice(int n1, int m1, int n2, int m2, double matrice1[n1][m1], double matrice2[n2][m2]) {
int i, j, k;
double resultat;
if (m1 != n2) {
printf("Impossible de faire la multiplication des matrices car le nombre de colonnes de la première matrice n'est pas égal au nombre de lignes de la seconde matrice.");
return;
}
for (i = 0; i < n1; i++) {
for (j = 0; j < m2; j++) {
resultat = 0;
for (k = 0; k < m1; k++) {
resultat += matrice1[i][k] * matrice2[k][j];
}
printf("%.2lf ", resultat);
}
printf("\n");
}
}
int main(void) {
int n1, m1, n2, m2;
printf("Entrez les dimensions de la première matrice (nombre de lignes puis nombre de colonnes): ");
scanf("%d%d", &n1, &m1);
double matrice1[n1][m1];
SaisieMatrice(n1, m1, matrice1);
printf("Entrez les dimensions de la seconde matrice (nombre de lignes puis nombre de colonnes): ");
scanf("%d%d", &n2, &m2);
double matrice2[n2][m2];
SaisieMatrice(n2, m2, matrice2);
printf("\nRésultat du produit des matrices:\n");
ProduitMatrice(n1, m1, n2, m2, matrice1, matrice2);
return 0;
}
4)
#include <stdio.h>
double Ua(int n, double a)
{
double U = 1;
int i;
for (i = 0; i < n; i++)
U = 0.5 * (U + a / U);
return U;
}
programme qui lit un nombre "a" au clavier et affiche la valeur de "N" pour laquelle Ua (N,a) - Ua(N-1,a) < 1/10000:
#include <stdio.h>
double Ua(int n, double a)
{
double U = 1;
int i;
for (i = 0; i < n; i++)
U = 0.5 * (U + a / U);
return U;
}
int main(void)
{
int N = 0;
double a, diff;
printf("Entrez le nombre a : ");
scanf("%lf", &a);
diff = Ua(N, a) - Ua(N - 1, a);
while (diff >= 1.0 / 10000)
{
N++;
diff = Ua(N, a) - Ua(N - 1, a);
}
printf("La valeur de N est : %d\n", N);
return 0;
}
Conclusion : "Ua(N,a)" représente l'itération "N" de la suite numérique qui calcule la racine carrée d'un nombre "a". "1/10000" représente la précision souhaitée pour le résultat, c'est-à-dire l'erreur maximale tolérée entre deux itérations consécutives de la suite.
Probleme :
#include<stdio.h>
#include<string.h>
typedef struct {
char code[5];
char titre[30];
int credits;
float note;
} TMat;
typedef struct {
char matricule[20];
char sexe;
int jour;
int mois;
int annee;
TMat matieres[30];
} TEtudMat;
typedef struct {
TEtudMat etudiants[30000];
}TListeEtud;
void SaisieEtud(TEtudMat *e) {
printf("Saisir le matricule : ");
scanf("%s", e->matricule);
printf("Saisir le sexe (M/F) : ");
scanf(" %c", &e->sexe);
printf("Saisir la date de naissance (JJ/MM/AAAA) : ");
scanf("%d/%d/%d", &e->jour, &e->mois, &e->annee);
}
void SaisieMatEtud(TEtudMat *e) {
int i;
for (i = 0; i < 30; i++) {
printf("Saisir les informations sur la matière %d\n", i+1);
printf("Code : ");
scanf("%s", e->matieres[i].code);
printf("Titre : ");
scanf("%s", e->matieres[i].titre);
printf("Crédits : ");
scanf("%d", &e->matieres[i].credits);
printf("Note : ");
scanf("%f", &e->matieres[i].note);
}
}
float MoyenEtud(TEtudMat e) {
int i;
float somme = 0;
for (i = 0; i < 30; i++) {
somme += e.matieres[i].note * e.matieres[i].credits;
}
return somme / 30;
}
int main() {
int i;
TListeEtud liste;
for (i = 0; i < 30000; i++) {
printf("Saisir les informations sur l'étudiant %d\n", i+1);
SaisieEtud(&liste.etudiants[i]);
SaisieMatEtud(&liste.etudiants[i]);
liste.etudiants[i].moyenne = MoyenEtud(liste.etudiants[i]);
}
return 0;
}