EPL232: Programming Techniques and Tools

Instructor: Andreas Aristidou
Type: Undergraduate (Compulsory)
Prerequisite: EPL131 - Programming Principles I
Lectures A: Tuesday & Friday, 09:00-10:30 (ΧΩΔ01 #104)         Lectures B: Tuesday & Friday, 10:30-12:00 (ΧΩΔ02 #Β204)
Recitations A: Wednesday, 09:00-10:00 (ΧΩΔ02 #014)             Recitations B: Wednesday, 10:00-11:00 (ΧΩΔ01 #103)
Laboratory: Tuesday, 14:00-16:00 or 16:00-18:00 (ΘΕΕ01 #Β103 or ΘΕΕ01 #103)
Teaching Assistants: Pavlos Antoniou and Pyrros Bratskas
This lecture has been structured based on the notes of the Associate Professor Demetris Zeinalipour.


The course teaches intermediate and advanced programming concepts, techniques and tools through a language that compiles to machine code. The course familiarizes the students with advanced programming constructs utilized for handling memory and files. Advanced topics in compilation, debugging, documentation and optimization of software. Methodological aspects in developing large-scale system software that addresses complex problems. Basic commands for programmers in the UNIX operating system.


Sign-up now to Moodle using code handed out in class!


  • Introduction to C for Programmers: types x86/x64, loops, selections, expressions, arrays, functions, IO, basic program organization,
  • Advanced C programming constructs: program anatomy and processes, memory and addresses (pointers, pointers and arrays, strings and examples), structures, unions and enumerations. Linear and non-linear programming data structures (dynamic memory allocation, lists, queues, doubly-linked lists, trees, applications and examples).
  • Advanced Compilation Topics and Tools: preprocessor directives, compiling multiple files with makefiles, static (.a) and dynamic (.so) linking of object files (.o), error handling (assert.h), static and dynamic code analysis (valgrind and gprof).
  • low-level programming (binary operators and examples, binary files and hexdump).
  • Basic commands for programmers in the UNIX operating system: file system, redirection and pipes, permissions and basic filters.
You can download the syllabus of the course here...

Course Schedule and Lectures

  1. Introduction: Syllabus & Basics Course Objectives and Syllabus, C Advantages and Drawbacks, Comparing C with JAVA, First Program, Directives, Functions, Statements, Compiling C Programs with GCC, Native vs. Intermed. Compile [C/C++/Objective-C vs. JAVA/Android/C#], Basic Data Types, basic comments, x86/x64 data types basics, reserved identifiers. [PDF | 1.43 MB]
  2. Fundamentals I: Formatted I/O, Expressions, Selection Statements, Loops The printf() and scanf() functions, Arithmetic Operators, Assignment Operators lvalues), Incr/Decr Operators, Expression Evaluation (precedence and order), Logical Expressions and _BOOL (C99), if..else, dangling-else, switch ... break, Loops (while, do, for, break, continue, goto) [PDF | 0.63 MB]
  3. Fundamentals II: Basic Types, Arrays and Functions Integer, Float, Character Types on x86 and x64 platforms, Type overflow and explanation, Type Conversion (Implicit and Casting), Type Definitions with typedef, The sizeof operator, 1-d arrays and m-d arrays: subscripting, initialization, sizeof [PDF | 2.21 MB]
    Recitations I [PDF | 0.28 MB]
  4. Program Organization Local Variables (auto vs. static), External Variables, Blocks {}, Scope, Organizing a C Program, Comments with Documentation Systems (doxygen), Files: fopen, fread, fwrite, examples with srand(), rand() and time(NULL); [PDF | 1.12 MB]
  5. Memory I: Pointers Pointer Variables: Declaring and Using, Address (&) and Indirection Operators (*), Pointer Assignment (=), Pointer as Arguments, Using Const to protect arguments, Pointers as Return Values. [PDF | 1.01 MB]
    Recitations II [PDF | 0.29 MB]
  6. Memory II: Pointers and Arrays Pointer Arithmetic (adding, comparing), Pointers Variables and types, Using Pointers for Array Processing, Combining increment (++) and indirect (*) operators, arrays-functions-pointers, pointers and multi-dimensional arrays ((*p)[i]): working with rows, working with columns, sum example in five different ways. [PDF | 1.18 MB]
  7. Memory III: Strings, Array of Pointers and Examples String Literals and Variables, Reading and Writing, Implementing strcpy(), strlen(), strcat(), strcmp(), Arrays of Strings, Command Line Arguments (argc and *argv[]) [PDF | 1.16 MB]
    Recitations III [PDF | X.XX MB]

Lab Schedule

  1. Tools Moodle, Cygwin, Eclipse CDT, GCC Basics
    Exercises Basic Programs & Fundamentals (operators, conditionals) [ZIP | 0.32 MB]
  2. Tools Google style guide (naming, formatting, comments), Using Doxygen to generate javadoc style comments for C programs
    Exercises Fundamentals (files, loops, functions) through examples with string.h [ZIP | 1.84 MB]
  3. Exercises Fundamentals (tables, pointers) with emphasis on pointers [ZIP | 0.09 MB]


All Assignments will be announced in Moodle. Sign-up using the code handed out in class!

Text Book and Bibliography

Links and Manuals

To be uploaded soon...

© 2017 Andreas Aristidou