- Docente: Antonella Carbonaro
- Credits: 12
- Language: Italian
- Moduli: Antonella Carbonaro (Modulo 1) Mirko Ravaioli (Modulo 2)
- Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2)
- Campus: Cesena
- Corso: First cycle degree programme (L) in Computer Science and Engineering (cod. 6673)
-
from Sep 22, 2025 to Dec 16, 2025
-
from Sep 17, 2025 to Dec 17, 2025
Learning outcomes
After completing the course, the student has a strong knowledge of programming using C language and the analysis of some fundamental problems and related algorithms solvers.
Course contents
The Programming course is designed to provide students with strong skills in computer programming. No prior knowledge of computer science is required. The course begins with an introduction to the algorithmic approach to problem-solving using computers. Then, through the use of the C programming language, presented in a detailed and accessible manner, regardless of students’ previous experience, the course addresses key problems, data structures, and algorithms.
The C Language
Memory organization, addresses, words, pointers. Data types and data structures. C language: goals and features. Structure of a C program: headers, declarations, libraries. Pointers and pointer arithmetic. Arrays and matrices and their memory representation. Data structures: lists, stacks, queues, trees. Standard and user-defined functions. Parameter passing. Recursive functions. Input/output functions. File handling functions. Dynamic memory management functions. String functions
Algorithm Design and Analysis
Data types; algebraic specification and implementation: arrays, lists, stacks, queues, trees. Algorithms with data structures: construction, searching, and sorting
Course Structure
The Programming course is divided into two distinct modules, designed to support a complete and progressive learning experience:
Module 1 – Lectures (in-class)This module takes place entirely in the classroom and systematically covers all topics in the syllabus. Lectures guide students through the fundamental theoretical concepts of programming, providing the foundation needed for hands-on practice.
Module 2 – Laboratory (on-site)The second module is fully dedicated to laboratory activities. Here, students have the opportunity to apply what they have learned in class by writing code, solving exercises, and working on small projects. The goal is to reinforce theoretical knowledge through guided, hands-on experience.
Readings/Bibliography
Required for exam preparation:
Copies of the lecture slides and the teaching materials provided by the instructor on the course website.
Recommended reading:
Programming in C – Kim N. King – Apogeo, 2009.
Further reading:
Introduction to Algorithms – T. H. Cormen, C. E. Leiserson, R. L. Rivest – MIT Press, Cambridge, 1990.
Teaching methods
Teaching methods:
Lectures, classroom exercises, and laboratory sessions.
Given the nature of the activities and the teaching methods adopted, attendance to this course requires all students to have previously completed Modules 1 and 2 of the safety training for study environments, available in e-learning format at [https://elearning-sicurezza.unibo.it/ ].
Assessment methods
Learning assessment is carried out through a written exam followed by an oral exam.
The written exam, lasting approximately two hours, is designed to assess the student’s programming skills in the C language, including the implementation of efficient algorithms, as well as to verify the acquisition of the knowledge covered in the course syllabus. During the written exam, students are not allowed to use books, notes, or any other form of assistance. To take the written exam, students must register for the exam session through the AlmaEsami platform.
The written exam must receive at least a passing grade (i.e., a score ≥ 18/30) in order for the student to be admitted to the mandatory oral exam. The oral exam, also graded on a 30-point scale, aims to further verify the student’s understanding of the course content.
The final grade, expressed in thirtieths, is determined by taking into account both the written and oral exam results. The evaluation will consider the student’s mastery of fundamental concepts and their ability to apply them effectively. Higher marks will be awarded to students who demonstrate a thorough understanding of all course topics, express ideas with technical precision, and solve problems autonomously, including those of a novel or more complex nature not explicitly covered in class. Failure to pass the exam may result from an insufficient or partial understanding of key concepts, improper use of technical language, or inadequate abstraction and generalization skills.
Although not mandatory, active participation in lectures and laboratory sessions is strongly recommended, as it provides essential support for the gradual and effective acquisition of the course content.
Teaching tools
All materials used during lectures and laboratory exercises are also made available in electronic format and can be accessed through the University's online platforms dedicated to the course.
Office hours
See the website of Antonella Carbonaro
See the website of Mirko Ravaioli
SDGs


This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.