- Docente: Antonella Carbonaro
- Credits: 12
- SSD: INFO-01/A
- Language: Italian
- Moduli: Antonella Carbonaro (Modulo 1) Mirko Ravaioli (Modulo 2)
- Teaching Mode: In-person learning (entirely or partially) (Modulo 1); In-person learning (entirely or partially) (Modulo 2)
- Campus: Cesena
- Corso: First cycle degree programme (L) in Computer Science and Engineering (cod. 6673)
-
from Sep 14, 2026 to Dec 16, 2026
-
from Sep 17, 2026 to Dec 17, 2026
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 aims to provide a solid competence in C programming. No prior computer science background is required. The course first introduces the algorithmic approach to problem-solving by computer, and then develops, through the C language, the main problems, data structures, and algorithms. The language is presented in a complete and self-contained way, without assuming any prior knowledge on the part of the students.
The C Language
- Memory organization: addresses, words, pointers
- Data types and data structures
- The C language: goals, features, and program structure (headers, declarations, libraries)
- Pointers and pointer arithmetic
- Arrays and matrices: memory representation
- Fundamental data structures: lists, stacks, queues, trees
- Library functions and user-defined functions
- Parameter passing and recursive functions
- Input/output functions and file handling
- Direct memory management
- String manipulation functions
Algorithm Design and Analysis
- Abstract data types: algebraic specification and implementation of vectors, lists, stacks, queues, trees
- Algorithms on data structures: construction, search, and sorting
The Role of Artificial Intelligence Tools in Programming
- Use of generative AI tools throughout the code lifecycle
- Potential and risks in supporting learning and productivity
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.