Lecture des flotteurs dans un tableau

Comment pourrais-je lire, disons 10 flottants et les stocker dans un tableau sans perdre de mémoire?

int size = 10; float vet[size]; for(i = 0; i < size; i++){ scanf("%f", &vet[i]); } 

Aussi simple que cela pourrait être 🙂

Aha. Ce n’est pas la lecture des flotteurs, c’est le problème, c’est la mémoire. Vous lisez dans i , et vous avez besoin d’un tableau qui contienne exactement i

Cela sent vraiment les devoirs, ce qui est bien, mais je suis trop l’enseignant pour vous donner la réponse complète. Je vais donc vous dire que vous avez besoin d’une fonction C nommée malloc () et d’un opérateur C (il ressemble à une fonction mais il est en fait intégré dans le langage) nommé sizeof .

Regardez ce tutoriel .


Yup, vous l’avez là. Voici le code de votre commentaire, formaté.

 int n,index; float temp; scanf("%d",&n); float *pValues=(float *)calloc(n,sizeof(float)); for(index=0;index 

Je le ferais avec deux changements:

  1. Son plus idiomatique d'utiliser malloc pour autre chose que des caractères
  2. En C, les tableaux et les pointeurs ont une relation très étroite; en fait *(pValues+index) est exactement équivalent à pValues[index] .

Donc, je réécrirais ceci en tant que:

 int n,index; float temp; scanf("%d",&n); float *pValues=(float *)malloc(n*sizeof(float)); for(index=0;index 

Regardons une autre transformation du code. Vous avez pValues , qui est un pointeur à float . Vous avez &temp , qui est aussi un pointeur sur float , car & est l'adresse-de-opérateur et temp est un float . ET vous ne faites que de l'arithmétique de pointeur avec votre index. Nous pourrions donc réécrire cette fois encore:

 int n,index; // Don't need temp scanf("%d",&n); float *pValues=(float *)malloc(n*sizeof(float)); for(index=0;index 

Maintenant, question de quiz: que se passerait-il si vous faisiez la boucle

 for(index=0;index 

Vous devrez être plus précis sur le problème.

À moins que vous n’ayez autre chose à faire avec ces chiffres, le moyen le plus simple d’économiser de la mémoire consiste à ne pas les stocker dans un tableau.

Cela ressemble à ce que vous voulez, c’est quelque chose.

sum = 0;
faire
lire courant
sum + = courant
pendant que (vous n’avez pas encore lu 10 chiffres);

La réponse à votre question est que vous ne pouvez pas append d’éléments à un tableau et vous attendre à ce qu’il utilise de la mémoire.

 float arr[10]; for(i = 0; i < 10; i++){ scanf("%f", &arr[i]); } 

Je sais, c'est comme ci-dessus, mais n'utilise pas l'extra supplémentaire si ce n'est pas optimisé. héhé

Pour utiliser encore moins de mémoire, utilisez le code ci-dessous. Ils sont tous lus dans un tableau, mais seul le dernier à être lu est dans le tableau:

 float arr[1]; for(i = 0; i < 10; i++){ scanf("%f", &arr[0]); } 

sonne comme un devoir.

lit le nombre de flottants de l’entrée. multiplier par la taille d’un flottant individuel allouer le nombre exact d’octets stockant l’adresse dans un pointeur afin que les flottants aient une boucle lue dans les flottants à partir de l’entrée aient une boucle qui additionne tous les flottants du tableau

Je pense que la leçon à faire est de réaliser la connexion entre le terme pointeur et tableau, bien que vous puissiez le faire sans aucune indexation de tableau, mais votre question implique que vous deviez utiliser un tableau.