Ciao, come prima cosa ti segnalo che è inutile postare tutto questo codice, senza un commento o descrivendo che tipo di problema hai. Anche la persona più generosa del forum non riuscirebbe ad aiutarti
Non sapendo che tipo di problema hai, posso cmq darti un primo possibile errore che ho riscontrato nel main del tuo codice:
int n;
leggidim(n);
double a[n][n],b[n];
Questa sintassi è illegale in c. Infatti te stai cercando di allocare una matrice statica (a) e un vettore statico (b) con il parametro dinamico n, che il compilatore non ha modo di sapere in fase di compilazione. Per creare una matrice nxn e un vettore di lunghezza n devi allocare dinamicamente la memoria, utilizzando la funzione malloc, disponibile nella libreria <stdlib.h> (che è già stata includa).
Un'altra cosa da segnalare è il passaggio del parametro n per valore nella funzione leggidim. Per fare in modo che leggidim modifichi la tua variabile n, gliela devi passare per indirizzo, e quindi devi modificare anche la funzione che deve prendere come paramentro un puntatore ad n.
Ultima cosa, in c si dichiarano sempre prima le variabili, e poi il codice. Non è come in java, o c++ dove puoi fare quello che vuoi.
Quindi il codice lo devi cambiare con questo:
int i, n;
double ** a, *b;
leggidim(&n);
a = (int **) malloc(sizeof(int *) * n);
for (i = 0; i < n; i++)
a[i] = (int *) malloc(sizeof(int) * n);
v = (int *) malloc(sizeof(int) * n);
Saluti.