Proof of properties of injective and surjective functions.

Nicely done! In part (f), I think you mean that $g$ is not surjective since there is nothing in $A$ that $g$ will take to $2,$ but the idea is spot on.

A minor critique for your proof of (b): I would instead suggest that you take an arbitrary $c\in C$, use surjectivity of $f$ to conclude that there is some $b\in B$ such that $f(b)=c$, then use surjectivity of $g$ to conclude that there is some $a\in A$ such that $g(a)=b,$ whence $(f\circ g)(a)=c$ as you showed. Since $c$ was an arbitrary element of $C,$ then for all $c\in C$ there exists $a\in A$ such that $(f\circ g)(a)=c$. This is basically the same as the approach you took, but the connection is a bit clearer and more justified, to my mind.

You mentioned that you weren't sure about part (e). You can clean it up a bit by again taking an arbitrary $c\in C,$ concluding from surjectivity of $f\circ g$ that there is some $a\in A$ such that $(f\circ g)(a)=c,$ and noting that $g(a)\in B$ and $f\bigl(g(a)\bigr)=c.$ Since $c$ was an arbitrary element of $C,$ then for all $c\in C$ there exists $b\in B$ such that $f(b)=c$. As an alternate approach, you could let $h$ be the restriction of $f$ to the range of $g$--that is, $h:g(A)\to C$ is defined by $h(b)=f(b)$ for all $b\in g(A)$. Note/prove that $h$ is surjective if and only if $f\circ g$ is. Since $h$ is a restriction of $f$ and is surjective, then $f$ is surjective. I think your approach is better, personally, but you mentioned you weren't sure about it.