|Programming Languages I||832LPR1|
|2||Undergraduate||Computer Systems Engineering||7 ects|
|Learning Period:||Language of Instruction:||Total Hours:|
|Learning Outcomes of the Curricular Unit:|
|This course unit aims to enable students to understand and express themselves algorithmically through C language. More specifically:|
• Master C language syntax and semantics
• Understand, interpret and identify compiling and executing errors in C programs
• Fluently use data types, operators and expressions, flow control, vectors, data structures, pointers and IO operations
• Apply functions in the design and implementation of C applications
• Define and implement dynamic data structures using pointers and structures
• Properly structure the storage of information in text and binary format
• Apply text and binary files to persistent information storage and retrieval
• Apply dynamic structures and files to solve concrete problems
|1. Introduction to C: program structuring; variables and data types; operators and expressions; flow control and IO.|
2. Structuring programs in functions: pass by value; local variables and recursion.
3. Vectors and Strings: declaration and initialization; function parameters and multi-dimensional vectors.
4. Pointers: declaration and initialization; pointer arithmetic; pointers and vectors; passing by reference and pointers to pointers.
5. Data structures: type declaration; function variables and parameters; memory management.
6. Pointers and dynamic data structures: stacks and queues with linked lists.
7. Files: input and output of data in files; text and binary files; sequential and random access files.
8. Advanced Concepts: Preprocessor Instructions; register, enumeration and union variables; pointers to functions; static functions and variables.
|Demonstration of the Syllabus Coherence with the Curricular Unit's Objectives:|
|The syllabus covers the intended objectives, as it is organized into modules that specifically address the concepts of the C language and their use in solving concrete problems. The basic concepts are reviewed in modules 1, 2 and 3 (cf. data types, operators and expressions, control structures, IO, function structuring, vectors and strings) and advanced concepts are covered in modules 4, 5, 6, 7 and 8 (cf. pointers, structures, dynamic memory management and files). In all modules the theoretical concepts associated with each theme are explained and demonstrated with concrete examples of its application. The individual resolution of exercises in each module is also encouraged.|
|Teaching Methodologies (Including Evaluation):|
|The contents are introduced and exposed in the theoretical-practical classes (TP), typically using simple and illustrative examples of application to concrete and realistic problems. This methodology is complemented by the proposal of practical exercises, either for classroom resolution or for individual homework resolution. The laboratory-practical classes (PL) follow the pace of TP classes with the proposal and resolution of exercises appropriate to each module, complementing the effort of TP classes.|
Students typically install one of the most commonly used IDEs in the C development community (e.g. CodeBlocks, CLion, Xcode) and in which they create a project that is organized to accompany the entire course unit and within which they create and integrate the exercises they develop.
The evaluation comprises two components TP and PL with the following percentages:
TP (25% Test 1 + 45% Test 2) + PL (30% Project)
|Demonstration of the Coherence between the Teaching Methodologies and the Learning Outcomes:|
|The teaching methodology focuses on understanding the syntax and semantics of the programming language applied to solving concrete and real problems. The examples of proposed exercises are directed to the understanding of the mechanisms available in the programming language, applied in the structuring and implementation of programming solutions. The recurrent exercise resolution aims to stimulate the application of knowledge about programming mechanisms. This practice also aims to consolidate mastery over the entire development process, i.e. the design, implementation and testing of functional structures applied to concrete problems.|
|1. L. Damas, Linguagem C, 10ª Edição, FCA, 1999.|
2. B. Kernighan & D. Ritchie, The C Programming Language, Prentice-Hall International, 1988.