FOUNDATIONS OF COMPUTER SCIENCE F - O

Academic Year 2023/2024 - Teacher: LUCA LEONARDI

Expected Learning Outcomes

Knowledge and understanding.
At the end of the course, the students will have acquired: Knowledge about the information representation inside computers and about the computer architecture. Understanding of how computers work. Knowledge about base software and operating systems. Understanding of algorithms.Knowledge about programming languages, compilers, and interpreters. Knowledge about computer networks. Knowledge about structured programming and C programming. 

Applying knowledge and understanding.
At the end of the course, the student will have acquired the ability to develop C programs for solving engineering calculation problems or for complex data structure management (archives, warehouses, etc.). They will also be able to apply the acquired knowledge to the selection of both the HW/SW components and the development tools suitable for the problem to be solved. 

Making judgements.
At the end of the course, while developing programs, the students will be able to autonomously make the suitable design choices based on the requirements. Such an ability is refined through the classroom exercises during the course and the programming tests at the examinations.

Communication skills.
At the end of the course, the students will have acquired mastery of computer engineering terminology. They will be able to present the computer architecture and software structure, the computer networks and structured programming concepts to both a specialist and a non-specialist audience, explaining the design choices made to solve the problems in a clear and unambiguous way.

Learning skills.
At the end of the course, the students will be able to autonomously extend their computer engineering knowledge and competences going through the relevant literature and reading papers published on specialialized magazines. They will also be able to improve their programming skills, also in other programming languages than C, by studying tutorials, programming guides and manuals.

Course Structure

The course is based on lectures, which also include the development of exercises by the lecturers. The course also includes programming exercises carried out by the students, also taking advantage of the multimedia rooms at the University premises. The above described methods of running the course allow the achievement of the pre-established training objectives, which include the acquisition of knowledge and the ability to apply knowledge.

Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, inline with the programme planned and outlined in the syllabus.

Required Prerequisites

Exponential or scientific notation. Rounding of numerical values. Real numbers. Operations using real numbers. Power with rational and real exponent. Logarithm of a positive real number. Functions. Vectors and Matrices.

Attendance of Lessons

Attendance is mandatory.

Detailed Course Content

Information Representation. Numbering systems and conversion algorithms. Integer and floating point numbers. (*)

Computer architecture. The computer structure: central memory, central unit, elementary operation of the computer. (*)

Operating System. Translation and execution of programs. Programming Environment. Compilers vs. interpreters. Operating System. (*)

Algorithms and Programs. Automatic data processing. Algorithms and programs. Programming languages. The design of a program. (*)

Computer Networks and the Internet. Computer networks. Local area networks. Wide area networks. Internet and the most popular network applications. (*)

The ‘’C’’ programming language: Syntax and semantics. Control: Assignment. Control structures. Data Types in C: simple types (int, char, float, double) and structured (arrays and strings, structures). The pointer type. Functions. Scope of identifiers. Declarations and scope of identifiers. Local variables, global and static. Techniques for binding of parameters. Recursion. Files: text files and binary files. (*)

Sorting and searching algorithms. Sequential and binary search. Sorting algorithms. (*)

Dynamic memory allocation.  (*)

Data Structures. Lists. (*)

Textbook Information

  • A. Bellini, A. Guidi, "Linguaggio C - guida alla programmazione", 4a Edition (or 5a Ed. or 6a Ed., at the student's choice), McGraw-Hill
  • Lecture notes. Avalable online on Studium (https://studium.unict.it) on the course section.

Course Planning

 SubjectsText References
1Information Representation. Bynary numbering system, Hexadecimal and Octal numbering systems. Numerical conversionalgorithms. Integer and floating point number representation. ASCII code.- Lecture notes provided by the lecturer. - Textbook: Appendix D.
2Computer architecture and basic computer operations. Instruction execution steps. Interrupts. Boolean algebra.- Lecture notes provided by the lecturer. - Textbook: Chapter 1.
3Operating System. CPU management policies, central memory andmass memory management policies.- Lecture notes provided by the lecturer. - Textbook: Chapter 2.
4Algorithms and Programs. Programming languages. Translation andexecution of programs. Linker. Flow charts.- Lecture notes provided by the lecturer. - Textbook: Chapters 3 and 4.
5The ‘’C’’ programming language. Data Types. Variables. Storage classes. Constants. Operators. Control structures. Instructions for selection, iteration, jump, expressions, program blocks. Preprocessor directives: include, define.Textbook: Chapters 5,6,7,8,9,23.
6Array. Pointers. Array pointers. Strings. Structures. Arrays of structures.Reading and writing of characters and strings. Formatted I/O. Textfiles. Dynamic memory allocation. Pointers to structures.Textbook: Chapters 10, 13, 14, 16.
7Functions. return instruction. parameter passing. Recursion. Local variables. Variable scope and lifetime.Textbook: Chapters 11, 15, 17, 19, 20.
8Sorting and searching algorithms.Textbook: Chapters 12.
9Linear data structures: Lists.Textbook: Chapters 21.
10Exercises on the covered topics.- Lecture notes provided by the lecturer.

Learning Assessment

Learning Assessment Procedures

The course final exam consists of a written assignment (mandatory) and an oral test (optional). The written assignment, two hours long, consists of a programming task to be developed on a computer, which scores up to 24/30 marks, and of a theory section, made up of one or multiple open-ended questions that score 6/30 marks in total. The programming task consists of multiple jobs, whose scores are explicitly indicated in the assignment text. The written task is passed with a total mark greater than or equal to 18/30. Students can integrate the written examination with an oral one to be taken in any regular exam session (before the end of the academic year).
The student reservation on the University portal is mandatory.


Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, in line with the program planned out in the syllabus.

Two tests are foreseen during the course. The first one consists of questions on the theoretical part and is one hour long. The second test, carried out on the computer, consists of multiple programming tasks and is two hours long.

The scores of each question and task are explicitly indicated in the assignment text.

The students who will have passed the two tests, i.e., who obtained a mark greater than or equal to 18/30 in each of the two tests, can either accept the proposed mark (i.e., the average of the marks of the two tests) or, upon request, try to improve the evaluation by integrating the two tests with an oral exam to be taken in any regular exam session (before the end of the academic year).

Examples of frequently asked questions and / or exercises

The ability to develop C language programs for the management of complex data structures will be assessed through questions about:

  • The implementation of multiple choice menus.
  • The use of functions and passing parameters.
  • The implementation of arrays of structures.
  • The implementation of lists.
  • The use of recursion through examples of recursive functions.

The questions in the theory section may be similar to, but not limited to, those listed below:

  • What is the difference between data and information?
  • What are the fundamental elements of the architecture of computing systems?
  • How to perform basic conversions between the various numbering systems (decimal, binary, hexadecimal, octal)?
  • What are the main components of the CPU?
  • What are interrupts?
  • What is a register?
  • What is the Program Counter used for?
  • What is an algorithm?
  • What is the difference between algorithms and programs?
  • What is the difference between the Internet and the Web?
  • What is a network protocol?
  • What are the main differences between central memory and mass memory?
  • Describe the memory hierarchy.
  • What is an Operating System? What is its role in a computing system?
  • What does multiprogramming mean?
  • What is the scheduler and what is its purpose?
  • What does file system mean?
  • Define the concept of process.
  • What is the difference between process and program?
  • Describe the state diagram of a process.
  • What is the Assembler language?
  • What is the difference between compilers and interpreters?
  • What is a flowchart and what is it used for?
VERSIONE IN ITALIANO