Tu problema reside en que todo lo que está dentro del paréntesis son valores enteros y por tanto c++ te los resolverá como valores enteros (truncando y, por tanto, perdiendo la parte decimal). Una forma de solucionarlo es multiplicar alguno de esos valores por 1.0 o cambiar esos 1 que tienes puestos por 1.0 de tal manera que ahora al ser 1.0 c++ interpreta que no estás trabajando con enteros. Yo lo haría convirtiendo dichos 1 a 1.0 por que lo considero la solución que menos ensucia el código.
Código C++:
Ver original#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
double suma(double n) {
int i;
double a =0;
for (i=-20;i<=n;i++) {
if (i==-1) continue;
a=a+(i/((i+1.0)*(i+1.0)));
}
return a;
}
int main(){
double n;
cout<<"Ingrese el valor de n: ";
cin>>n;
cout<<"Resultado de la suma es: "<<suma(n)<<endl;
}