Me perdí de un rato en el foro, pero bueno .....
Respecto a
getchar() y
system("PAUSE"), aunque operan similarmente, la primera es estándar y funcionará en cualquier sistema. La segunda, se puede garantizar siempre que estés en un sistema Windows.
Lo que ocurre es que
system(str) pasa la cadena str al procesador de comandos del sistema operativo. Hacer
system(str) es lo mismo que abrir el Símbolo de Sistema de Windows y escribir el contenido de la cadena str en él. Y como es de suponer, la cadena será interpretada en el contexto del sistema operativo de que se trate.
Por esta razón, recomendamos usar
getchar() que tiene un comportamiento predecible. Lo que hace
c = getchar();
es esperar la pulsación de una tecla, seguida de ENTER (o de la secuencia EOF) y depositar el código ASCII de esta tecla en c. Si pulsas 'A' y luego ENTER asignará en c el valor 97 que es el código ASCII de la letra 'a'.
Si pulsas sólo ENTER entonces retornará al programa inmediatamente. Por eso la invocación de
getchar() es para los programadores de C un equivalente a "Pulse ENTER para continuar", jejeje.
=====================================
De todas las soluciones publicadas creo que la mejor (más eficiente computacionalmente) sería la de leosansan porque no requiere siquiera calcular el módulo i%2. Yo la reduciría "un pelín" con:
int signo = -1;
for (i = 1; i<= n; i++, signo *= -1)
pi = pi + signo * 1.0/(2*i+1);
y buena la observación del "1." en lugar de "1".