Ho fatto copia e incolla e (dopo aver aggiunto int prima del main, perchè altrimenti non compilava) ho testato il programma inserendo la matrice
1 2 3
4 5 6
7 8 9
e ""sembrava"" funzionare. Sottolineo "sembra", perchè poi leggendo il codice mi sono accorto che la logica della funzione è sbagliata. Infatti inserendo la matrice
9 2 3
-3 1 2
-4 5 1
come previsto ottengo un risultato errato (mi dice che il max è uguale a 9 e non ad .
L'errore è nell'inizializzazione max=a[0][0].
Cmq ho riscritto il tuo codice rendendolo (a mio parere) un po' più chiaro e leggibile (per esempio rispettando la spaziatura, l'indentazione, ecc...).
#include <stdio.h>
#define R 100
#define C 100
double calcola_max(double a[][C], int r , int c)
{
double somma;
double max = a[0][0];
for(unsigned int j = 0; j < c; ++j)
{
somma = a[0][j];
for(unsigned int i = 1; i < r; ++i)
{
somma += a[i][j];
}
if(somma > max)
{
max = somma;
}
}
return max;
}
int main()
{
unsigned int r;
unsigned int c;
double m[R][C];
printf("RIGHE( <=100 ): ");
scanf("%d", &r);
printf("COLONNE( <=100 ): ");
scanf("%d", &c);
for(unsigned int i = 0; i < r; ++i)
{
for(unsigned int j = 0; j < c; ++j)
{
printf("m[%d][%d]: ", i, j);
scanf("%lf", &m[i][j]);
}
}
printf("MAX: %lf", calcola_max(m, r, c));
}
Ragiona sull'inizializzazione della variabile "max" e prova a correggere il programma.
Per quanto riguarda il fatto che ti mostra sempre 0.000 non saprei dirti... non so se come ipotesi stanno in piedi, ma magari è un problema dovuto al fatto che non hai scritto "int main" o all'utilizzo dei double?! Inoltre noto che il valore di ritorno del programma è 20! Magari prova a mettere "int main" e ad usare i float al posto dei double e fammi sapere.
EDIT: al posto della faccina ci sarebbe un 8, peccato che 8+) restituisca l'emoticon!