This work arises from our teaching this subject during many years. The vast majority of these exercises are the exams we gave to our students in this period. We carefully selected the subjects of the exercises to cover all the material which is most needed and which is treated in the most well known texts on these subjects. Each exercise is carefully solved in full details, explaining the theory behind the solution with particular care for those issues that, from our experience, are found most difficult from the average student. Indeed, several exercises are designed to throw light on aspects of the theory that, for one reason or another, are usually neglected with the result to make the students feel uneasy about them. In fact most students get acquainted just with the more common manipulations, which are illustrated by many examples in textbooks. Our exercises never require extensive calculations but tend to be somewhat unusual and force the solver to think about the problem starting from the principles, rather than by analogy with some previously solved exercise.