/ / come restituire due valori in una funzione senza usare struct? - c

come restituire due valori in una funzione senza usare struct? - c

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


double calculate(int ar[], int npts, int *gtr);


int main()
{

int ar[4] = {1,2,3,0};
double result;
result = calculate(ar,4, &ar);
printf("%lf ",result );


return 0;
}


double calculate(int ar[], int npts, int *gtr)
{
double total =0;
int i = 0;

double average;

for(i=0; i<npts; i++)
{
total = total + ar[i];
}

average = total / npts;
return average;

for(i=0; i<npts; i++)
{
if(average < ar[i])
{
*gtr++;
}
}

return *gtr;
}

quando chiamo funzione calcola voglio restituire sia il valore medio che * gtr ma restituire solo il valore medio del rendimento. * gtr è per il conteggio di quanti numeri maggiori della media in arrary.

risposte:

1 per risposta № 1

da quello che ho capito, vuoi restituire la media e in qualche modo ottenere il valore di gtr.you puoi restituire il valore medio e salvare il valore gtr in un'altra variabile usando un puntatore.

int main()
{

int ar[4] = {1,2,3,0};
double result;
int gtr = 0;
result = calculate(ar,4,&gtr);
printf("%lfn",result );
printf("gtr : %dn",gtr);


return 0;
}


double calculate(int ar[], int npts, int *gtr)
{
double total = 0 , average;

int i = 0;

for(i=0; i<npts; i++)
{
total = total + ar[i];
}

average = total / npts;

for( i = 0 ; i < npts ; i++ )
{
if(average < ar[i])
{
*gtr += 1;
}
}
return average;
}

1 per risposta № 2

Hai reso la funzione quasi corretta, è la chiamata che deve essere fatta in modo diverso.

Per prima cosa, non tornare *gtr dalla funzione; ritorno average. Fallo alla fine, però, non nel mezzo.

Quindi, cambia la chiamata a

int gtr;
result = calculate(ar,4, &gtr);
printf("%lf %dn",result, gtr);

Assicurati di aver impostato *gtr a zero prima del secondo ciclo, altrimenti rimarrebbe non inizializzato.


0 per risposta № 3

Per restituire entrambi i valori puoi farlo:

    double calculate(int ar[], int npts, int *gtr)
{
double total =0;
int i = 0;

double average;

for(i=0; i<npts; i++)
{
total = total + ar[i];
}

average = total / npts;
return average;

for(i=0; i<npts; i++)
{
if(average < ar[i])
{
*gtr++;
}
}

return avergage;
}

quindi, restituendo avergage hai la prima variabile e usando il valore puntator di gtr puoi avere quel valore.