Academic Year 2022-2023



Fabio Alessi
Course Year
Unit Credits
Teaching Period
Course Type
Prerequisites. There are no knowledge requirements.
Teaching Methods. The course is based on frontal lecturing (with blackboard and slides). Lectures are coupled with exercises on C programming (Laboratory activity). It is possible for the students to propose topics of interest. If necessary, the course could be taught in English.
Verification of Learning. Final exam consists of an examination script which encompasses theoretical questions, exercises, and writing/discussing programs in C, plus a possible oral examination when necessary for better defining marks. Before final exam there are two tests which are useful for verifying the comprehension degree of students.
The course intends to endow the student with skills on representation of computational problems, abstract solutions, and implementation in the programming language C.

The student is expected to achieve the following targets:

Knowledge and Understanding:

to know the basics of C programming;

to know some fundamental algorithms;

to know how to plan a (moderately) complex program;

to single out the proper structures for modelling problems;

Applying knowledge and understanding:

to know how to model concrete problems, via proper abstract representation;

to know how to use/develop known/new algorithms for solving problems and evaluate their computational complexity;

Making Judgements:

Being able to formalize a problem, analyze it, and decide which tools are adequate for confronting it, taking a critical line open to possible improvements.

Communication skills:

Being able to describe/comment properly one’s code and to work with peers in a constructive way.

Learning skills:

Being able to extend one’s competence to other programming languages.

– Mathematical preliminaries (combinatorics, statistics, algebra). Recursion technique for solving problems.

– Introduction to algorithms and elements of Computation Complexity. Big O notation.

-Introduction to the C programming language. Basic types: (long) int, char, float, double. Number representation and computer arithmetic.

– Variables and arrays. Structured programming. Tests. If, While, For statements. Iterative and recursive paradigm. Nested loops.

– Functions. Call by value and call by reference.

– Sorting algorithms (Insertion-Sort, Bubble-Sort, Quick-Sort, Merge-Sort).

– Random numbers, Montecarlo methods with some applications.

– Bitwise operations.

– Structures.

– Pointers.

– Programming techniques for efficiency: memoization and dynamic programming.

– File access.

– Formatting Input/Output.

– Abstract data types: lists, queues, stacks, trees. Applications.

– Graphs and related algorithms: DFS, BFS, Minimum Spanning Tree.

– “Il linguaggio C. Fondamenti e Tecniche di Programmazione”. Authors: Deitel & Deitel. Ed. Pearson

[or the previous editions: “C Corso Completo di Programmazione”, Authors: Deitel & Deitel. Edizioni APOGEO Education].

– “Introduzione agli Algoritmi e strutture dati”. Authors: Cormen, Leiserson, Rivest, Stein. Ed. Mc Graw Hill.

– Course notes.