つかさ。
double k(double x);に対して、
scanf("%lf",k);
は無いとおもうんだけどな。

char buf[255];
fgets( buf, sizeof( buf ), stdin )
printf("%lf",buf[0]=='f' ? f(x) : g(x));
ふつー、こんな感じやないか。