Exercices Tableaux Chaines Pointeurs

download Exercices Tableaux Chaines Pointeurs

of 12

Transcript of Exercices Tableaux Chaines Pointeurs

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    1/12

    Exercices Tableaux, chanes et pointeurs

    Question

    Exercices sur les tableaux

    1. Initialisation de tableaux :

    crire un programme qui remplit les 100 lments d'un tableau avec la valeur 3 etaffiche ce tableau l'cran.

    SolutionCorrection

    #include

    void main()

    {

    int tab[100];

    int i;

    for (i=0;i

    int main(){

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    2/12

    int tab[12];

    int i,j,som=0;

    float moy;

    for (i=0; i < 12 ; i++)

    { /*saisie des nombres*/

    printf("entrez le %d chiffre : ",i);

    scanf("%d",&tab[i]);

    som+=tab[i];

    }

    moy=(float)som/12;

    printf("affichage des chiffres superieur la moyenne\n");

    for (i=0; i < 12 ; i++)

    { if (tab[i]>moy) printf("%d\n",tab[i]);

    }

    return 0;

    }

    Question

    3. Produit scalaire :

    On peut reprsenter un vecteur de l'espace vectoriel Rn l'aide d'un tableau de n rels.

    crire un programme qui lit deux vecteurs de R10, calcule leur produit scalaire etaffiche les deux vecteurs et leur produit scalaire.

    SolutionCorrection

    #include < stdio.h >

    int main(){

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    3/12

    float tab1[10];

    float tab2[10];

    int i,j;

    float prod=0;

    for (i=0;i

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    4/12

    crire un programme qui lit deux vecteurs de R10, calcule leur somme et affiche cettesomme.

    SolutionCorrection

    #include < stdio.h >

    int main()

    {

    float tab1[10];

    float tab2[10];

    float res[10];

    int i,j;

    for (i=0;i

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    5/12

    printf("%f",res[j]);

    }

    return 0;

    }

    Question

    Exercices sur les pointeurs

    1. Pointeurs sur chane de caractre :

    crire un programme qui lit une chane de caractres CH de taille maximum 100 et

    dtermine la longueur de la chane l'aide d'un pointeur P. Le programme n'utilisera pasde variables numriques.

    SolutionCorrection

    #include < stdio.h>

    main()

    {

    /* Dclarations */

    char CH[101]; /* chane donne */

    char *P; /* pointeur d'aide */

    /* Saisie des donnes */

    printf("Entrez une ligne de texte (max.100 caractres) :\n");

    scanf("%s", CH); /* Placer P la fin de la chane */

    for (P = CH; *P !='\0'; P++) ;

    /* Affichage du rsultat */

    printf("La chane \"%s\" est forme de %d caractres.\n", CH, P - CH);

    return 0;

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    6/12

    }

    Question

    2. Pointeurs sur tableaux deux dimensions :

    crire un programme qui lit 5 mots d'une longueur maximale de 50 caractres et lesmmorise dans un tableau de chanes de caractres TABCH.

    Inverser l'ordre des caractres l'intrieur des 5 mots l'aide de deux pointeurs P1 etP2. Afficher ces mots.

    SolutionCorrection

    #include

    int main() {

    /* Dclarations */

    char TABCH[5][51];/* tableau de chanes de caractres */

    char AIDE; /* pour la permutation des caractres */

    char *P1, *P2; /* pointeurs d'aide */

    int I; /* indice courant */

    /* TABCH+I est l'adresse de la I-ime chane du tableau */

    /* Il vaut mieux convertir TABCH+I en pointeur sur char */

    /* Saisie des donnes */

    printf("Entrez 5 mots :\n");

    for (I=0; I

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    7/12

    /* Inverser l'ordre des caractres l'intrieur des mots */

    for (I=0; I

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    8/12

    Corrigez les dclarations fausses et indiquez pour chaque chane de caractres lenombre d'octets qui sera rserv en mmoire.

    a) char a[ ] = "un\ndeux\ntrois\n" ;

    b) char b[12] = "un deux trois" ;

    c) char c[] = 'abcdefg' ;

    d) char d[10] = 'x' ;

    e) char e[5] = "cinq" ;

    f ) char f[] = "Cette " "phrase" "est coupe";

    g) char g[2] = { 'a', '\0' };

    h) char h[4] = { 'a', 'b', 'c' } ;

    i) char i[4] = "'o'

    SolutionCorrection

    a) char a[] = "un\ndeux\ntrois\n";

    Dclaration correcte

    Espace: 15 octets

    b) char b[12] = "un deux trois";

    Dclaration incorrecte:

    la chane d'initialisation dpasse le bloc de mmoire rserv.

    Correction: char b[14] = "un deux trois";

    ou mieux: char b[] = "un deux trois";

    Espace: 14 octets

    c) char c[] = 'abcdefg';

    Dclaration incorrecte: Les symboles ' et encadrent des caractres;

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    9/12

    pour initialiser avec une chane de caractres, il faut utiliser les guillemets (ouindiquer une liste de caractres).

    Correction: char c[] = "abcdefg";

    Espace: 8 octets

    d) char d[10] = 'x';

    Dclaration incorrecte: Il faut utiliser une liste de caractres ou une chane pourl'initialisation

    Correction: char d[10] = {'x', '\0'} ou mieux: char d[10] = "x";

    Espace: 2 octets

    e) char e[5] = "cinq";

    Dclaration correcte

    Espace: 5 octets

    f) char f[] = "Cette ", "phrase", "est coupe";

    Dclaration incorrecte

    On ne peut affecter plusieurs chanes spares ainsi.

    g) char g[2] = {'a', '\0'};

    Dclaration correcte

    Espace: 2 octets

    h) char h[4] = {'a', 'b', 'c'};

    Dclaration incorrecte: Dans une liste de caractres, il faut aussi indiquer le symbolede fin de chane. Correction: char h[4] = {'a', 'b', 'c', '\0'};

    Espace: 4 octets

    i) char i[4] = "'o'";

    Dclaration correcte, mais d'une chane contenant les caractres '\'', 'o', '\'' et'\0'.

    Espace: 4 octets

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    10/12

    Question

    2. inverser l'ordre des mots :

    crire un programme qui lit 5 mots, spars par des espaces et qui les affiche ensuitedans une ligne, mais dans l'ordre inverse. Les mots sont mmoriss dans 5 variablesnommes de M1 M5.

    Exemple voici une petite phrase ! ! phrase petite une voici

    SolutionCorrection

    #include < stdio.h >

    main() {

    char M1[30], M2[30], M3[30], M4[30], M5[30];

    printf("Entrez 5 mots, spars par des espaces :\n");

    scanf ("%s %s %s %s %s", M1, M2, M3, M4, M5);

    printf("%s %s %s %s %s\n",M5, M4, M3, M2, M1);

    return 0;

    }

    Question

    3. Conjugaison :

    crire un programme qui lit un verbe du premier groupe (se terme avec "er") au clavieret qui affiche la conjugaison au prsent de l'indicatif de ce verbe.

    Contrlez s'il s'agit bien d'un verbe qui se termine avec "er" avant de conjuguer.

    Vous utiliserez pour rsoudre ce programme les fonctions scanf, printf, strcat et strlen.

    Exemple:

    erbe : fter

    je fte

    tu ftes

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    11/12

    il fte

    nous ftons

    vous ftez

    ils ftent

    SolutionCorrection

    #include

    #include

    main()

    {

    /* Dclarations */

    char VERB[20]; /* chane contenant le verbe */

    char AFFI[30]; /* chane pour l'affichage */

    int L; /* longueur de la chane */

    /* Saisie des donnes */

    printf("\nVerbe : ");

    scanf("%s",VERB);

    /* Contrler s'il s'agit d'un verbe en 'er' */

    L = strlen(VERB);

    if ((VERB[L-2]!='e') || (VERB[L-1]!='r')) printf("\nCe n'est pas un verbe du premiergroupe.!");

    else { /* Couper la terminaison 'er'. */

    VERB[L-2]='\0';

    /* Conjuguer ... */

    AFFI[0]='\0';

  • 7/30/2019 Exercices Tableaux Chaines Pointeurs

    12/12

    strcat(AFFI, "je ");

    strcat(AFFI, VERB);

    strcat(AFFI, "e");

    printf(AFFI);

    . . .

    AFFI[0]='\0';

    strcat(AFFI, "ils ");

    strcat(AFFI, VERB);

    strcat(AFFI, "ent");

    printf(AFFI);

    }

    return 0;

    }