0
votes

Comment calculer la somme totale de la table de multiplication

J'ai généré le tableau et je veux trouver la somme totale du tableau.

Le code est le suivant:

#include <stdio.h>

int main()
{
    int no, i, mult, sum;

    printf("Enter the number you wish to multiply: \n");
    scanf("%d", &no);

    printf("Enter how many times you want to multiply the number: \n");
    scanf("%d", &mult);

    printf("Multiplication is as follows: \n");

    for( i = 1; i <= mult; i++ )
    {
        printf("%d X %d = %d\n", no, i, i * no);
    }
}

Comment puis-je obtenir la somme totale du tableau général?

c

9 commentaires

En ajoutant chaque valeur à par ex. sum (après l'avoir correctement initialisé bien sûr)?


Qu'avez-vous essayé? Cela ne ressemble pas à du code "somme d'une table".


Vous devez enregistrer le résultat de i * no dans la somme et l'imprimer après la boucle


Initialisez sum à 0. Ensuite, à l'intérieur de la boucle, ajoutez i * no à sum et imprimez sum à la toute fin ...


@Jabberwocky "Vous devez enregistrer le résultat de i * no ET L'AJOUTER À sum et l'imprimer après la boucle" mieux?: D


@Roquotrix c'est ce que j'écris. Lisez mon commentaire de près à nouveau.


@Jabberwocky J'ai très bien compris le problème, merci. J'ai corrigé mon commentaire


@RoQuOTriX oui, maintenant votre commentaire dit exactement la même chose que le mien ...


la valeur résultante «somme» pourrait facilement déborder. Même le i * no déborderait si la valeur résultante est supérieure à 2 gig. Suggérer de vérifier le débordement et de modifier les valeurs de travail pour qu'elles soient long int ou même long long int


3 Réponses :


0
votes

Peut-être que cela aide à comprendre

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

int main()
{
  int no, i, mult, sum, tmp;

  printf("Enter the number you wish to multiply: \n");
  scanf("%d", &no);

  printf("Enter how many times you want to multiply the number: \n");
  scanf("%d", &mult);

  printf("Multiplication is as follows: \n");

  sum = 0;
  for(i = 1; i <= mult; i++)
  {
      tmp = i*no;
      printf("%d X %d = %d\n", no,i,tmp);
      sum += tmp;
  }

  printf("The sum is: %d\n", sum);

  return 0;
}


4 commentaires

La variable tmp n'est absolument pas nécessaire.


@Jabberwocky Comment l'imprimer sans tmp sans calculer deux fois?


@RoQuOTriX s'il est calculé deux fois dans le code C, cela n'implique pas que le code généré fera le calcul deux fois. Les compilateurs modernes l'optimiseront automatiquement.


@Jabberwocky, même le tmp est optimisé, alors pourquoi s'embêter? godbolt.org/z/z6sbqv



1
votes

Initialisez sum = 0 au début, puis chaque fois que vous imprimez une valeur, ajoutez-la à la somme.

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

int main()
{
  int no,i,mult,sum=0;

  printf("Enter the number you wish to multiply: \n");
  scanf("%d", &no);

  printf("Enter how many times you want to multiply the number: \n");
  scanf("%d", &mult);

  printf("Multiplication is as follows: \n");

  for(i = 1; i <= mult; i++)
  {
      printf("%d X %d = %d\n", no,i,i*no);
      sum = sum + i*no
  }
  printf("sum = %d", sum);
}


4 commentaires

Considérez le problème de «performances», car vous calculez i * no deux fois par boucle


@RoQuOTriX votre compilateur s'occupera de ce problème, à moins bien sûr que vous n'utilisiez un compilateur désuet.


@RoQuOTriX Je sais, je voulais juste changer le moins possible leur propre code. Aussi, comme @ Jabberwocky l'a dit, ce n'est pas un problème dans les compilateurs modernes


Ne faites pas trop confiance aux «compilateurs modernes» - de nos jours, les programmeurs ont tendance à penser que les compilateurs peuvent faire de la magie. Si l'appel printf avait été une fonction prenant n'importe quelle adresse entière comme paramètre, le compilateur pourrait avoir à supposer que la fonction aurait pu changer la valeur de la variable. Il sera alors non seulement obligé de relire la variable, il devra à nouveau effectuer le calcul.



0
votes

Comment puis-je obtenir la somme totale du tableau global?

En initialisant la variable sum que vous avez déjà déclarée (zéro est généralement un bon début) et en mettant à jour sa valeur lors du calcul des produits.

J'ai pris la liberté, en le code ci-dessous, d'ajouter quelques vérifications d'entrée et d'effectuer le calcul sans aucun produit réel, mais cela n'a pas d'importance pour la question. N'hésitez pas à l'expérimenter ici .

#include <stdio.h>

int ask_int(const char *str);

int main(void)
{
    int number = ask_int("Enter the number you wish to multiply:");
    int mult = ask_int("Enter how many times you want to multiply the number:");

    puts("Multiplication is as follows:");

    int sum = 0;  // <--------------------------------------  Initialize the accumulator.

    for(int i = 1, tmp = number; i <= mult; ++i, tmp += number)
    {
        printf("%d X %d = %d\n", number, i, tmp);

        sum += tmp; // <------------------------------------- Update.
    }
    printf("sum = %d", sum);
}

int ask_int(const char *str)
{
    int number = 0;
    for (;;)
    {
        puts(str);
        int ret = scanf("%d", &number);
        if ( ret == 1 )
            break;
        if ( ret == EOF )
        {
            fprintf(stderr, "Error: Unexpected end of input.\n");
            break;
        }
        puts("That's not a number.");
    }
    return number;
}
blockquote >

0 commentaires