Explaining the definition of vector bundles Recall the definition of a vector bundle:

Let $M$ be a topological space. A $k$-dimensional vector bundle over $M$ is a topological  space $E$  with a surjective continuous  map $\pi\colon E \to B$, satisfying the following:
For each $p\in M$:
    a) The fiber $E_p=\pi^{-1}(p)$ is a (real) vector space of dimention $k$.
    b) for each $p \in M$, there's a neighborhood $U\ni p$ and a homeomorphism $\phi\colon \pi^{-1}(U) \to U \times \mathbb{R}^k$ such that:
    c) $P_1\circ \phi = \pi$, where $P_1$ is projection onto the first factor.
    d)  for each $q\in U$, the restriction $\phi\colon E_q \to {q}\times \mathbb{R}^k$ (where $\phi$ is the homeomorphism from c)) is a linear isomorphism.

My questions:
If I'm right the condition (b) guarantees that the attached vector spaces are locally of the same dimention. But why we need condition (c)? And what extra information  condition (d) gives us besides what we already have from condition (a)?
 A: A vector bundle isn't just a vector space over each point; it's supposed to be a continuously varying family of vector spaces over the points of your space. What a) in these axioms guarantees you is that you have a vector space over each point. But it says nothing of them being continuously varying! So...
b) tells you that the "family of spaces" continuously varies (but the vector space structures do not necessarily do so). What I mean by this is best illustrated by an example: take $E = \{(0,y,z) \in \mathbb R^3 : y \geq 0\} \cup \{(x,y,0) \in \mathbb R^3 : y < 0\}$. This has a continuous surjection $E \to \mathbb R$ (that is, $(x,y,z) \mapsto y$) and each fiber has the structure of a real vector space of the same dimension. But I would hardly say that the vector spaces 'continuously vary' over the points of $\mathbb R$. This is an important sort of example, one that we do not want to call a vector bundle. So we impose b), which is usually called 'local triviality'.
c) and d) serve a joint purpose: to guarantee that the vector space structures (scalar multiplication, addition) vary continuously. To even formulate d) you need c); to say that a map between vector spaces is linear, you'd better start with a map between vector spaces. 
What do we mean by 'continuously varying vector space structure'? Take continuous local sections $f,g: U \to \pi^{-1}(U)$. Then axiom a) guarantees well-defined sums $f+g$ and scalar multiples $\lambda f$ (where $\lambda: U \to \mathbb R$ is a continuous function). But why should these still be continuous? That's the point of d).
(As another non-example of vector bundle, take $\mathbb R^2 \to \mathbb R$, $(x,y) \mapsto x$, with the scalar multiplication $\lambda(x,y) = xy$ if $x \neq 0$, $\lambda(x,y) = y$ if $x = 0$. This is far from a 'continuously varying' scalar multiplication.)
When working in the context of smooth vector bundles over smooth manifolds, everything above applies with the words 'continuous' changed to 'smooth'.
