No, il problema non dovrebbero essere i double (anche se io consiglierei di scrivere %fl invece di %f quando usi la funzione printf(), è un long double ed è più preciso).
Il problema sta nella funzione che utilizzi per convertire i radianti in gradi.
La proporzione che vi è tra gradi e radianti è e quindi dovresti usare questa relazione:
Perciò il tuo codice sarà:
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
// definizione prototipi
double cos_deg(double alfa);
double sin_deg(double alfa);
double tan_deg(double alfa);
int main()
{
//dichiarazione varaibili
double ang, res;
char c;
printf("Inserisci il valore dell'angolo in gradi:\n");
scanf_s("%f", &ang);
printf("Scegli funzione:\nC. coseno S. seno T. tangente\n");
scanf_s("%c", &c);
if (c == 67 || 99)
{
res = cos_deg(ang);
printf("Il coseno e' %f\n", res);
}
if (c == 83 || 117)
{
res = sin_deg(ang);
printf("Il seno e' %f\n", res);
}
if (c == 84 || 118)
{
res = tan_deg(ang);
printf("La tangente e' %f\n", res);
}
else
printf("Carattere non valido\n");
system("PAUSE");
return EXIT_SUCCESS;
}
//dichiarazione delle funzioni
double cos_deg(double alfa)
{
double beta, gamma;
beta = (180 / M_PI)*alfa;
gamma = cos(beta);
return gamma;
}
double sin_deg(double alfa)
{
double beta, gamma;
beta = (180 / M_PI)*alfa;
gamma = sin(beta);
return gamma;
}
double tan_deg(double alfa)
{
double beta, gamma;
beta = (180 / M_PI)*alfa;
gamma = tan(beta);
return gamma;
}