Partage
  • Partager sur Facebook
  • Partager sur Twitter

Langage C - Fonction Calcul de deux nombres entier

Sujet résolu
7 janvier 2017 à 16:37:30

Salut à tous ;)

Je suis novice dans l'apprentissage du langage C.
Après lecture de vos cours , je voulais réaliser un code basique permettant de faire la somme de deux nombres.

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


int main()
{
    int a;
    int b;
    int addition;

    printf("Veuillez rentrer le 1er nombre : \n");
    scanf("%d", &a);

    printf("Veuillez rentrer le deuxième nombre : \n");
    scanf("%d", &b);

    addition = a+b;

    printf ("La somme de vos deux nombres est : %d",addition);

    return 0;
}


J'ai quelques questions à son sujet.

1) Pourquoi n'est-t-il pas indispensable d'initialiser les variables a et b à 0 ?

2) Aurait-t-il été possible d'afficher la somme de a+b sans créer la fonction addition ? (

3) Après avoir rentrer les deux nombres souhaités, on m'affiche le résultat. Puis on m'affiche " press any key to continue ". Si je rentre un nouveau chiffre, la console se ferme. Que manque-t-il dans mon code pour lui permettre d'enchainer les additions, sans que le programme se termine ?

Merci à vous =) 

-
Edité par Petitevache 7 janvier 2017 à 16:45:10

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2017 à 16:59:05

Bonjour !

1) Car les deux appels de scanf définirons a et b avant qu'ils soient utilisées, donc que la valeur soit définie ou non, ça change rien car cette valeur sera écrasée.

2) Oui (c'est une variable et pas une fonction), il suffit juste de remplacer "addition" par a + b à la ligne 19.

Ensuite, tu pourra supprimer "addition"

3) Ce message s'affiche car ton IDE l'ajoute, ça ne fait pas parti de l’exécutable lui-même.

Pour que ton programme continue, il suffit juste d'englober à partir du  "Veuillez rentrer le 1er nombre" jusqu'à avant le "return 0" par une boucle while(1)

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2017 à 18:09:24

Merci pour ta réponse Tsnake ;)

Ta réponse m'amène à d'autres questions ^^

1)


Je pense avoir mal compris ce qui se passe lors de l'utilisation & ( va falloir que je relise les cours de ce site ^^ )
Selon ce que j'ai compris, ça permet de stocker une variable a une adresse.

Mais si j'écris au début : int a, qu'est ce qui me dit qu'à  &a  il n'y a pas stocké l'entier 478 ou 1359 ?

2)

En fait, je me suis compliqué la tâche pour rien, en créant une variable addition; non ?
C'est pas évident au début de s'y retrouver, car en fait on peut créer ce même programme, en le codant de façon différentes.

Par exemple, si je n'avais pas utilisé la fonction scanf dans mon code, il me suffisait de créer la variable addition ( addition = a+b ), pour que ça marche ?

Une question en aparté, je me suis rendu compte que je n'étais pas au clair avec la définition de fonction.
Si j'avais écris au début : int addition (a+b)

Est-ce que addition est toujours une variable ou une fonction ? 

3)

Pour ce qui est de la boucle, tu m'indiques d'utiliser while à titre d'exemple, ou m'est-t-il possible également d'utiliser une boucle for ? 

Merci encore à toi ;)

-
Edité par Petitevache 7 janvier 2017 à 18:11:57

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2017 à 20:14:41

Je pense avoir mal compris ce qui se passe lors de l'utilisation & ( va falloir que je relise les cours de ce site ^^ )

Le modificateur '&' permet de retourner le pointeur de la variable, en gros.

int variable = 42;
int *pointeur = &variable; // pointeur pointera à l'adresse mémoire de varible

Mais si j'écris au début : int a, qu'est ce qui me dit qu'à  &a  il n'y a pas stocké l'entier 478 ou 1359 ?

Pour la valeur de la variable non-initialisé, on ne peut pas prévoir sa valeur comme elle n'est pas initialisée à 0 (contrairement à d'autres langages comme le C# ou le Java).

En fait, je me suis compliqué la tâche pour rien, en créant une variable addition; non ?
C'est pas évident au début de s'y retrouver, car en fait on peut créer ce même programme, en le codant de façon différentes.

Par exemple, si je n'avais pas utilisé la fonction scanf dans mon code, il me suffisait de créer la variable addition ( addition = a+b ), pour que ça marche ?

Une question en aparté, je me suis rendu compte que je n'étais pas au clair avec la définition de fonction.
Si j'avais écris au début : int addition (a+b)

Est-ce que addition est toujours une variable ou une fonction ? 

En C, le passage des arguments dans une fonction se fait par valeur, ça veut donc dire que l'on peut utiliser tout ce qui représente une valeur en tant que paramètre.
Soit : une variable, une expression (par exemple a+b), une constante, le retour d'une fonction, etc.
ça veut dire que tu peux simplifier 
printf ("La somme de vos deux nombres est : %d",addition);
En
printf ("La somme de vos deux nombres est : %d",a + b);
Sans avoir besoin de la variable addition.

Pour ce qui est de la boucle, tu m'indiques d'utiliser while à titre d'exemple, ou m'est-t-il possible également d'utiliser une boucle for ? 

Oui, regarde dans le cours sur les boucles.

-
Edité par TSnake41 7 janvier 2017 à 20:15:27

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2017 à 20:35:26

Bonjour,

1) En fait, quand tu créais une variable comme int a, tu réserves de l'espace dans la mémoire pour ton a. &a correspond à l'adresse de la variable dans la mémoire. Imagine ta mémoire comme une grande ville où tu stockerais toutes tes valeurs. a serait une maison, & serait l'adresse de cette maison. Scanf peut être vu comme un livreur, il a besoin de l'adresse de la maison pour livrer le colis (ici la valeur de la variable). 

2) Une fonction se défini hors du main(). Si tu voulais créais une fonction addition tu aurais fais 

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

int addition_fonction(int a, int b) //Ta fonction addition
{
    return a+b; // la fonction retourne l'addtion a + b
}
int main()
{
    int a, b, addition_variable; // création des 3 variables
    scanf("%d %d", &a, &b); // l'utilisateur saisie les deux nombres à additionner
    addition_variable = addition_fonction(a, b); // équivalent de addition_variable = a+b;
    printf("%d", addition_variable); // On affiche la valeur de la variable
    return 0;
}

3) while(1) est une boucle infini, du coup tu peux faire autant d'opération que tu le souhaites. Il est possible de faire une boucle infini avec un for mais ce n'est pas conseillé.

J'espère avoir répondu à toutes tes questions, 

Bonne soirée.

EDIT : Je n'avais pas vu que TSnake avait répondu avant désolé.

-
Edité par tom59psg 7 janvier 2017 à 20:37:08

  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2017 à 13:33:30

Merci à vous deux pour vos réponses ;)

C'est plus clair. Ta métaphore sur la ville m'a bien aidé également ;)

Bonne continuation.

  • Partager sur Facebook
  • Partager sur Twitter
9 août 2019 à 6:04:34

Bonjour,,, je un petit problème j'aimerais additionner plusieurs nombres en langage c à l'aide d'une fonction que dois-je faire........ Merci à vous tous j'attends vos réponses

  • Partager sur Facebook
  • Partager sur Twitter
9 août 2019 à 6:12:55

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter