I would suggest you to try C-h k C-x C-e to rtfm.
As your cursor (the "point", in emacs terminology) is just after the symbol a, the last expression is a.
As the variable a is not bound, trying to evaluate it produces the message error: (void-variable a).
If you really want to use C-x C-e, you should click just after the parenthesis closing the defun call and type C-x C-e and then move the point after the second expression and type again C-x C-e.
If you want to "execute the script" (in emacs terminology, we would say "evaluate the buffer"), you should type M-x eval-buffer RET or Menu > Evaluate buffer.
In this case, all the expressions contained in the buffer are evaluated, but there is no visible output: in you case, the interpreter will evaluate (defun add-numbers (a b) (+ a b)) which will define the function add-numbers (with no output). Then the interpreter will evaluate the expression (add-numbers 2 3) which computes and returns 5, but this does not produce any output.
Try to put in your file
(message "result of %s is %d" '(add-numbers 2 3) (add-numbers 2 3))
and M-x eval-buffer RET again. You should get the message in the minibuffer result of (add-numbers 2 3) is 5.
If you put more than one message in your buffer, you can see all of them with the shortcut C-h e (or M-x view-echo-area-messages RET).