Simples algoritmo em C

Olá pessoal, alguem poderia me da um auxilio neste algoritmo, não sei se é a minha lógica ou se é uma especificação da linguagem c, em fim, não estou recebendo o valor desejado,
o algoritmo se trata do somatorio de n termos que o usuario infomra retornando seu resultado.

[b]Faça um programa para calcular seno ou cosseno de um dado ângulo. O seno ou
cosseno deve ser calculado iterativamente por meio da soma aproximada das séries
infinitas que os definem, a saber: Considere a equação que usei*

Entradas / saida

Você deseja entrar com o ângulo em graus ou radianos (g/r)? g
Qual a medida do ângulo? 30
Você deseja calcular seno ou cosseno deste ângulo (s/c)? s
Quantas iterações da série você deseja executar? 10
Resposta = 0.49998[/b]

#include<stdio.h>
#include<math.h>
/*PI = 3,14159...
 * RAD = PI*G/180
 * */

int main(void) {

	char grausRad, senCos;
	int i, iteracao;
	float sen, cos, angulo, rad, PI;
	PI = 3.14159;

	printf("Voce deseja entrar com o angulo em Graus ou Radianos (g/r)? ");
	scanf("%s", &grausRad);

	printf("Qual a medida do angulo: ");
    scanf("%f", &angulo);

	printf("Voce deseja calcular Seno ou Cosseno deste angulo (s/c)? ");
	scanf("%s", &senCos);

	printf("Quantas iteracoes da serie voce deseja executar? ");
	scanf("%d", &iteracao);

	if(grausRad == 'g'){
		rad = PI*angulo / 180;
		printf("%.5f g", rad);}
	else
      if(grausRad == 's') {
         rad = angulo;
         printf("%.5f r", rad);}

	sen = 0.0;
	cos = 0.0;
	if(senCos == 's') {
		for(i = 0; i <= iteracao; i++){
			sen = sen + (float) ((pow(-1, i) / fatorial(2*i + 1)) * pow(rad, 2*i+1));
			//Mostrando sen na tela para teste
            printf("sen: %d\n", sen);
		}
		printf("\n\nResposta: %.5f\n\n\n", sen);
	}
	else {
		for(i = 0; i < iteracao; i++){
			cos = cos +  (float)(((pow(-1, i)) / ((fatorial(2*i)) * pow(rad, 2*i))));
			//Mostrando o cos na tela para teste
			printf("cos: %d\n", cos);
		}
		printf("\n\nResposta: %.5f\n\n\n", cos);
	}

	return 0;
}

int fatorial(int numero) {
    int j, fat;
    fat = 1;
	for(j = 1; j < numero; j++) {
		fat *=  j;
	}
	//Mostrando o fat na tela para teste
	printf(" - fat: %d\n", fat);
	return fat;
}

A função que calcula fatorial tem um errinho:

[code]int fatorial(int numero) {
int j, fat;
fat = 1;
for(j = 1; j <= numero; j++) { // Aqui tinha que ser ‘<=’ e não só ‘<’ - então fatorial de 2 por exemplo retornava 1 e não 2… e assim por diante
fat *= j;
}
//Mostrando o fat na tela para teste
printf(" - fat: %d\n", fat);
return fat;

}[/code]
Se quiser deixar mais ‘elegante’ faça ela usando recursividade:

int fatorial (int numero) { if(numero==1) return numero; return fatorial(numero-1) * numero; }

Outra coisa, teus printfs de depuração estavam usando %d em vez de %f para variáveis float, então o resultado não era mostrado corretamente;
No scanf também estava esperando array de chars e definido somente char, então poderia haver sobreposição de memória.
Abaixo sugestão das alterações:

[code]#include<stdio.h>
#include<math.h>
/*PI = 3,14159…

  • RAD = PI*G/180
  • */

int main(void) {
char grausRad[2], senCos[2];
int i, iteracao;
float sen, cos, angulo, rad, PI;
PI = 3.14159;

printf("Voce deseja entrar com o angulo em Graus ou Radianos (g/r)? ");
scanf("%s", grausRad);

printf("Qual a medida do angulo: ");
    scanf("%f", &angulo);

printf("Voce deseja calcular Seno ou Cosseno deste angulo (s/c)? ");
scanf("%s", senCos);

printf("Quantas iteracoes da serie voce deseja executar? ");
scanf("%d", &iteracao);

if(grausRad[0] == 'g'){
	rad = PI*angulo / 180;
	printf("%.5f g", rad);}
else
    if(grausRad[0] == 's') {
       rad = angulo;
       printf("%.5f r", rad);
    }
sen = 0.0;
cos = 0.0;
if(senCos[0] == 's') {
	for(i = 0; i <= iteracao; i++){
		sen = sen + (float) ((pow(-1, i) / fatorial(2*i + 1)) * pow(rad, 2*i+1));
		//Mostrando sen na tela para teste
        printf("sen: %.5f\n", sen);
	}
	printf("\n\nResposta: %.5f\n\n\n", sen);
}
else {
	for(i = 0; i < iteracao; i++){
		cos = cos +  (float)(((pow(-1, i)) / ((fatorial(2*i)) * pow(rad, 2*i))));
		//Mostrando o cos na tela para teste
		printf("cos: %.5f\n", cos);
	}
	printf("\n\nResposta: %.5f\n\n\n", cos);
}
return 0;

}

int fatorial (int numero) {
if(numero==1)
return numero;
return fatorial(numero-1) * numero;
}
[/code]