A book which I have found excellent is Epp's Discrete Mathematics with Applications. The book is very patient and explains things really well -- stuff like formal logic, induction and recursion, proofs, probability and combinatorics. Lots of good exercises too.
I used this as a textbook in a course required of all of our sophomore CS students. It lays an excellent foundation for more sophisticated material that follows.
The latest edition is absurdly expensive (as is the case with most textbooks), but used copies of previous editions are likely to be ubiquitous on Amazon and elsewhere.