Forum UVSQ
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

[DS]Sujet DS langage C - Novembre 2010

5 participants

Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty [DS]Sujet DS langage C - Novembre 2010

Message  romain L. Sam 12 Nov - 13:40

Devoir Surveillé du Langage C
N.Emad, E.Cardot, L.Chardenal, M. Belaoucha, M. Boukhanoufa


Exercice 1 (barème : 8/20) Quel est le résultat d’exécution du programme ci-dessous? Justifiez le résultat de chacune des expressions.
Code:
#include <stdio.h>
int main()
{
int I=1;
int i = 8;
int j = 5;
float x = 0.005f;
float y = -0.01f;
char c = 'c';
char d = 'd';
printf("Expression %1d=%1d\n",I++,(3*i - 2*j)%(2*d - c));
printf("Expression %1d=%1d\n",I++,2*((i/5) + (4*(j-3))%(i + j - 2)));
printf("Expression %1d=%1d\n",I++,i <= j);
printf("Expression %1d=%1d\n",I++,j != 6);
printf("Expression %1d=%1d\n",I++,c == 99);
printf("Expression %1d=%1d\n",I++,5*(i + j) > 'c');
printf("Expression %1d=%1d\n",I++,(i > 0) && (j < 5));
printf("Expression %1d=%1d\n",I++,(i > 0) || (j < 5));
printf("Expression %1d=%1d\n",I++,(x > y) && (i > 0) || (j < 5));
printf("Expression %1d=%1d\n",I++,(x > y) && (i > 0) && (j < 5));
printf("Expression %1d=%1d\n",I++, ((i&&j)||(!0&&I))&&!d);
printf("Expression %1d=%1d\n",I++,sizeof(I+i+j)==sizeof(int));
return 0;
}

Exercice 2 (barème : 6/20) Écrivez un programme qui affiche un tableau rectangulaire de nombres réels flottants, comme ceci:
1.0 2.0 3.0 4.0 | 10.0
5.0 6.0 7.0 8.0 | 26.0
9.0 10.0 11.0 12.0 | 42.0
La dernière colonne est faite des sommes des lignes. On demandera à l’utilisateur de saisir à l’avance le nombre de lignes et le nombre de colonnes du tableau. Attention: pour cela, vous n’avez pas besoin et vous ne devez pas utiliser un tableau!

Questions de cours (barème : 6/20)
1. Définir les étapes de la chaîne de compilation.
2. Quel est le rôle du préprocesseur dans la chaîne de compilation?
3. Citez 10 mots réservés du langage C.
4. Citez deux méthodes de définition d’une constante. Quelle est la différence entre de telles constantes ?
5. Quelle est la différence entre une déclaration statique et une déclaration dynamique ?

romain L.
Noob en Informatique
Noob en Informatique

Messages : 3
Date d'inscription : 12/11/2011

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Thomas Sam 12 Nov - 13:59

*Déplacé dans la bonne section*

Merci pour le sujet ! Wink
Si tu avais aussi la correction histoire de vérifier les réponses, ca serait cool Smile


PS: Je me suis permis de mettre le code entre balise pour une question de lisibilité
Thomas
Thomas
LUKE, JE SUIS TON PERE
LUKE, JE SUIS TON PERE

Messages : 54
Date d'inscription : 27/09/2011

https://forum-uvsq.forumgratuit.org

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Correction DS langage C - Novembre 2010

Message  romain L. Dim 13 Nov - 11:02

Ah oui dsl j'avais pas vu qu'il y avait une section DS ^^ Voici la correction Wink :

Spoiler:

romain L.
Noob en Informatique
Noob en Informatique

Messages : 3
Date d'inscription : 12/11/2011

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  DamienRD Dim 13 Nov - 12:22

Perso l'exo 2, je l'ai fait comme ça ( mais sans dev C++ j'aurai un peu galéré ):


Spoiler:
Si vous testez, vous verrez que la somme de la ligne ne marche pas, il ajoute le nombre de colonne a la somme.


Sinon pour l'exercice 1, je comprend pas trop le raisonnement pour les deux dernieres et les 2 premieres expressions ( enfin si mais j'ai un doute )


edit: c'est bon j'ai ajouté somme=0.0 dans le premier for puis j'ai mis k-1 dans l'autre je montre

Spoiler:
j'avais oublié que somme allait prendre l'incrémentation du k et que j'avais oublié de l'initialiser également -_-

DamienRD
Développeur
Développeur

Messages : 59
Date d'inscription : 28/09/2011

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Arthur - TitrOu Dim 13 Nov - 14:28

Si c'est possible, il y a moyen de détailler les calculs du 1er exo ?

Rien que sur la première je bloque XD
Arthur - TitrOu
Arthur - TitrOu
Forum-Designer & Administrateur
Forum-Designer & Administrateur

Messages : 109
Date d'inscription : 27/09/2011
Age : 32
Localisation : Clamart

http://titrou-toshop.skyrock.com

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  DamienRD Dim 13 Nov - 14:37

De ce que j'ai compris, I=1 ( et apres seulement il est incrémenté) puis on a 14% (2d-c) et la ... wtf

DamienRD
Développeur
Développeur

Messages : 59
Date d'inscription : 28/09/2011

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Thibaut J Dim 13 Nov - 17:51

Je vais tenter une explication des calculs de l'exo 1 :
  • Expression 1=14
    I est incrémenté après son affichage
    (3*i - 2*j)%(2*d - c)= ((3*8)-(2*5)) mod (2*d - c)
    = 14 mod (2*d -c)
    Ici, il faut savoir que un char correspond en c à un entier int en décimal.

    Sachant, d'après les cours d'archi, que a --> 0x61 (ici pour vous en convaincre), ce qui donne 616=01102 et 116=00012,
    61 en base hexa nous donne 0110 0001 en binaire.
    Soit 'a' qui correspond donc à 97 en décimal.
    Donc c correspond à 99 et d à 100.

    je passe par bcp de détours, mais sinon on peut apprendre par cœur que 'a' --> 9710)

    Revenons au calcul :
    14 mod (2*d -c)
    = 14 mod (2*100 - 99)
    = 14 mod (200 -99)
    = 14 mod 101
    = 14 (google le dit)

    Donc, finalement, voici le résultat du premier printf :
    Code:
    Expression 1=14

  • Expression 2=18
    2*((i/5) + (4*(j-3))%(i + j - 2))
    = 2*(8/5 + (4*(5-3) mod (8 + 5-2))
    = 2*(8/5 + 8 mod 11)
    = 2*(1+ 8) car 8/5, c'est un entier divisé par un autre entier, ce qui donne un entier (1) en C
    = 2*9
    = 18

    Soit pour le printf :
    Code:
    Expression 2=18

  • Expression 3=0
    Pour le 0, il faut évaluer la proposition i <= j :
    comme i n'est pas inférieur ou égal à j, cette proposition prends la valeur ... 0 !

  • Expression 4=1
    Idem que ci-dessus, sauf que la proposition est vraie

  • Expression 5=1
    Again,

  • Expression 6=0
    and again,

  • Expression 7=0
    and again and again,

  • Expression 8=1
    and again and again,

  • Expression 9=1
    and again and again and again and again,

  • Expression 10=0
    and again and again and again and again and again and again and again and again,

  • Expression 11=0
    On va détailler ici :
    (( i && j )||( !0 && I )) && !d
    __________i && j , ça donne 1, parce qu'aucun ne vaut 0
    __________!0 && I, équivaut à 1 && I, soit 1 parce que I ne vaut pas 0
    __________!d, sachant d n'est pas égal à 0, d est vrai, et sa négation !d vaut donc 0
    = (1 || 1) && 0
    = 0

    Donc :
    Code:
    Expression 11=0

  • Expression 12=1
    sizeof(I+i+j)==sizeof(int)
    Ici, il faut calculer le nb d'octets qu'il faut pour stocker la somme de I, I et j d'une part, et d'autre part pour stocker un entier int

    I+i+j
    = 1 + 8 + 5
    = 14

    14 étant un int, il a besoin d'autant d'octets (4, voir ici) qu'un autre int quelconque pour être mis en mémoire.

    Donc, dans la proposition à évaluer :
    sizeof(I+i+j)==sizeof(int)
    [DS]Sujet DS langage C - Novembre 2010 014cced2b73c22eb88cdc6901afb0c9d 4 == 4
    [DS]Sujet DS langage C - Novembre 2010 014cced2b73c22eb88cdc6901afb0c9d 1

    Donc,
    Code:
    Expression 12=1



Note : pour les gens incultes ne comprenant pas les and again and again, voir ici.


Bonne soirée à vous.
Thibaut J
Thibaut J
Mini Développeur
Mini Développeur

Messages : 39
Date d'inscription : 28/09/2011
Age : 111

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Arthur - TitrOu Dim 13 Nov - 20:00

Merci Thibaut pour cette petite explication ^^' ! [DS]Sujet DS langage C - Novembre 2010 3244585244
Arthur - TitrOu
Arthur - TitrOu
Forum-Designer & Administrateur
Forum-Designer & Administrateur

Messages : 109
Date d'inscription : 27/09/2011
Age : 32
Localisation : Clamart

http://titrou-toshop.skyrock.com

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  DamienRD Dim 13 Nov - 20:24

Merci beaucoup, surtout pour les deux dernières, j'ai pas eu le réflexe de me dire que les caractères correspondaient aussi a un nombre.

DamienRD
Développeur
Développeur

Messages : 59
Date d'inscription : 28/09/2011

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Thibaut J Lun 14 Nov - 16:45

Ça m'a pris deux bonnes heures : ça fera 20 € (prix d'ami), à payer par Damien. Cash. Maintenant.

J'édite d'ailleurs ce message pour te dire Damien, que c'est dès la première expression que l'on a besoin de savoir qu'un caractère est égal à un entier int de la table ascii... donc tu as peut-être trouvé qqch de bon pour cette expression, mais je vois pas comment alors !
Thibaut J
Thibaut J
Mini Développeur
Mini Développeur

Messages : 39
Date d'inscription : 28/09/2011
Age : 111

Revenir en haut Aller en bas

[DS]Sujet DS langage C - Novembre 2010 Empty Re: [DS]Sujet DS langage C - Novembre 2010

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum