OK, against my own better judgement I have stepped through the code, although it's not easy to see what it's supposed to be doing.

What exactly are you expecting it to do?

Currently all it does is to get an expression from the user, create an expression tree from that, then output the same expression. It doesn't attempt to differentiate the expression before displaying it.

The zero output after the expression tree has been printed seems to be an attempt to evaluate the expression, but as all operations are done on v, and this is always initialised to zero, that probably explains why you don't get a non-zero result. If I add a line like this:
Code:
printf("term() creating pt(tn=%d,v=%d,op=%c)\n",pt->tn,pt->v,pt->op);
after the assignments to tn,v and op in each of expression(), term() and factor() I get the following output:
Code:
Enter f(x) = (2*x)+3-1
f'(x) = factor() creating pt(tn=0,v=0,op= )
factor() creating pt(tn=0,v=0,op= )
term() creating pt(tn=2,v=0,op= )
factor() creating pt(tn=0,v=0,op= )
expression() creating pt(tn=2,v=0,op= )
factor() creating pt(tn=0,v=0,op= )
expression() creating pt(tn=2,v=0,op= )
2*x+3-1

0