This is a computer-programming course to equip students with software knowledge and skills to solve engineering problems. Students will learn fundamental programming concepts in C, such as data representation and variables, operators and expressions, flow-control statements, functions, arrays, structures, pointer basics, input/ output handling, etc. In addition to lectures and e-learning, students will work in labs to practise solving problems and complete an engineering software project. The course will cover various problem solving methods such as incremental development, divide-and-conquer, debugging technique, finite-state machine, etc. Through practices, students will acquire skills to define problems and specifications, to perform modelling and simulation, to develop software system prototypes, to carry out verification, validation, and performance analysis.