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?
3 Réponses :
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;
}
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
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);
}
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.
Comment puis-je obtenir la somme totale du tableau global?
En initialisant la variable
sumque 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 >
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 * nodans la somme et l'imprimer après la boucleInitialisez
sumà 0. Ensuite, à l'intérieur de la boucle, ajoutezi * noàsumet imprimezsumà la toute fin ...@Jabberwocky "Vous devez enregistrer le résultat de
i * noET L'AJOUTER Àsumet 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 * nodé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 soientlong intou mêmelong long int