C algo td3

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Exercice 1

Dérouler le programme suivant de façon à suivre l’état des variables :

#define N 5
int main(){
    int tab[N], i;
    i=0;
    while(i < N){
        tab[i]=N-i;
        i+=1;
    }
    return 0;
}


Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

#define N 5
int main() {
	int tab[N], i;
	i = 0;
	while (i < N) {
		tab[i] = N - i;
		printf("L'index %d du tableau vaut %d\n", i, tab[i]);
		i += 1;
	}
	return 0;
}

Exercice 2

Dérouler le programme suivant de façon à suivre l’état des variables :

#define N 7
int main(){
    int tab[N], i;
    tab[0]=1;
    for(i=1; i < N; i++){
        tab[i]=tab[i-1]+2;
    }    
    return 0;
}


Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

#define N 7
int main() {
	int tab[N], i;
	tab[0] = 1;
	for (i = 1; i < N; i++) {
		tab[i] = tab[i - 1] + 2;
		printf("L'index %d du tableau vaut %d, la somme de %d avec 2\n", i, tab[i], tab[i - 1]);
	return 0;
}

Exercice 3

Dérouler le programme suivant de façon à suivre l’état des variables :

#define N 10
int main() {
	int tab[N], i;
	tab[0] = 1;
	tab[1] = 1;
	i = 2;
	do {
		tab[i] = tab[i - 1] + tab[i - 2];
		i++;
	} while (i <= 7);
	return 0;
}


Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

#define N 10
int main() {
	int tab[N], i;
	tab[0] = 1;
	tab[1] = 1;
	i = 2;
	do {
		tab[i] = tab[i - 1] + tab[i - 2];
		printf("L'index %d du tableau vaut %d, la somme de %d avec %d\n", i, tab[i], tab[i - 1], tab[i-2]);
		i++;
	} while (i <= 7);
	return 0;
}

Exercice 4

L’objectif de cet exercice consiste à écrire un programme permettant d’inverser l’ordre des valeurs d’un tableau.

Exemple : {1, 2, 3, 4} → {4, 3, 2, 1}.

  • Écrire l’algorithme en pseudo-code pour une version du programme utilisant un tableau intermédiaire.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	int tab[] = { 1, 2, 3, 4 }, res[4], i;
	for (i = 0; i < 4; i++) {
		res[3 - i] = tab[i];
	}
	for (i = 0; i < 4; i++) {
		printf("A l'index %d, le tableau source vaut %d et le tableau destination vaut %d\n", i, tab[i], res[i]);
	}
	return EXIT_SUCCESS;
}
  • Écrire l’algorithme en pseudo-code pour une version du programme n’utilisant pas de tableau intermédiaire.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	int tab[] = { 1, 2, 3, 4 }, tmp, i;
	for (i = 0; i < 4; i++) {
		tmp = tab[3-i] + tab[i];
		tab[i] = tmp - tab[i];
		tab[3-i] = tmp - tab[i];
	}
	for (i = 0; i < 4; i++) {
		printf("A l'index %d, le valeur est %d\n", i, tab[i]);
	}
	return EXIT_SUCCESS;
}

Exercice 5

L’objectif consiste ici à généraliser l’exercice précédent. On souhaite permettre à l’utilisateur d’effectuer une permutation circulaire des valeurs du tableau en précisant la valeur d’un décalage de position.

Cette valeur sera saisie par l’utilisateur : une valeur positive correspondant à un décalage vers la droite et une valeur négative à un décalage vers la gauche.

Par exemple, un décalage de +2 donne :

{‘a’, ‘b’, ‘c’, ‘d’} → {‘c’, ‘d’, ‘a’, ‘b’}

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	char tab[] = { 'a', 'b', 'c', 'd' }, res[4];
	int i, decalage, index;
	printf("De combien désirez-vous décaler ?  ");
	scanf("%d", &decalage);
	for (i = 0; i < 4; i++) {
		index = decalage + i;
		if (index > 3) {
			index -= 4;
		}
		res[index] = tab[i];
		printf("On décale l'index %d (%c) avec l'index %d\n", i, tab[i],index);
	}
	for (i = 0; i < 4; i++) {
		printf("A l'index %d, le valeur est %c\n", i, res[i]);
	}
	return EXIT_SUCCESS;
}

Exercice 6

Écrire un programme permettant à l’utilisateur de saisir un nombre choisi de valeurs, qui devront être stockées dans un tableau. L’utilisateur commence par entrer le nombre de valeurs qu’il compte saisir (maximum 100) et effectue ensuite la saisie.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	int n = 101, i;
	while (n > 100 || n < 0) {
		printf("Combien de valeurs souhaitez vous saisir ?  ");
		scanf("%d", &n);
	}
	int tab[n];
	for (i = 0; i < n; i++) {
		printf("Saisissez la valeur %d: ", i + 1);
		scanf("%d", &tab[i]);
	}
	for (i = 0; i < n; i++) {
		printf("La valeur à l'index %d vaut %d\n", i + 1, tab[i]);
	}
	return EXIT_SUCCESS;
}

Exercice 7

Modifier le programme pour qu’une fois la saisie terminée, le programme détermine et affiche le nombre de valeurs négatives, le nombre de valeurs nulles et le nombre de valeurs positives.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	int n = 101, i, neg = 0, zero = 0, pos = 0;
	while (n > 100 || n < 0) {
		printf("Combien de valeurs souhaitez vous saisir ?  ");
		scanf("%d", &n);
	}
	int tab[n];
	for (i = 0; i < n; i++) {
		printf("Saisissez la valeur %d: ", i + 1);
		scanf("%d", &tab[i]);
		if (tab[i] < 0) {
			neg++;
		} else if (tab[i] > 0) {
			pos++;
		} else {
			zero++;
		}
	}
	printf("Il y a: \n");
	printf("--> %d valeurs positives\n", pos);
	printf("--> %d valeurs négatives\n", neg);
	printf("--> %d valeurs nulles:\n", zero);
	for (i = 0; i < n; i++) {
		printf("La valeur à l'index %d vaut %d\n", i + 1, tab[i]);
	}
	return EXIT_SUCCESS;
}

Exercice 8

Sur le même principe, écrivez un programme permettant à l’utilisateur de saisir les notes d’une classe.

Le programme, une fois la saisie terminée, renvoie le nombre de notes supérieures ou égales à la moyenne de la classe.

Afficher la solution:

#include <stdio.h>
#include <stdlib.h>

int main() {
	int n = 101, i, moy = 0, sup = 0;
	while (n > 100 || n < 0) {
		printf("Combien de notes souhaitez vous saisir ?  ");
		scanf("%d", &n);
	}
	int tab[n];
	for (i = 0; i < n; i++) {
		printf("Saisissez la valeur %d: ", i + 1);
		scanf("%d", &tab[i]);
		moy += tab[i];
	}
	moy = moy / n;
	for (i = 0; i < n; i++) {
		if (tab[i] >= moy) {
			sup++;
		}
	}
	printf("La moyenne de la classe est %d\n", moy);
	printf("Il y a %d notes au dessus", sup);
	return EXIT_SUCCESS;
}