This course provides the basic concepts underlying computer systems and their applications, and introduces the design of computer programs of moderate complexity by means of C programming language. At the end of the course, the students will understand the operating principles and the hardware/software organization of modern computers, and will be able to develop computer programs of moderate complexity. The students will apply knowledge and understanding of the topics of the course also by means of individual programming exercises with computers. Among the general course objectives, this course fosters the ability of facing problems and representing solutions at different abstraction levels, as well as identifying the most efficient solution. This particularly fosters the ability of making judgements and lifelong learning skills.