|Subject Area||Software and Information System Engineering|
|Semester||Semester 1 – Fall|
- Introduction to computers and programming.
- Data storage in main memory, the concept of variables.
- Introduction to C and the development environment.
- Programming mistakes and their manifestation.
- Main C data types.
- Basic input / output (I/O).
- Operators & operator priority.
- Literals, type casting, ASCII coding and character arithmetic.
- Control and loop structures.
- Using libraries.
- Arrays (one- and multi-dimensional), equivalence of 1D and multi-dimensional arrays (array layout in memory).
- Strings, string manipulation functions.
- Functions, function calling, parameters, local variables, variable scope and lifetime, function call mechanism and stack frames.
- Algorithmic topics: Array sorting and searching.
- Pointers and pointer operators, pointer arithmetic, pointer hazards.
- Relation of pointers and arrays, arrays of pointers, command-line parameters, sorting with pointers.
- Pointers as function parameters, pointers as function return values.
- Structured and custom data types (struct, union, enum, typedef), comparisons in custom data type variables, arrays of structs, type/object size (sizeof), pointers to structs, the -> operand.
- Dynamic memory management (malloc/free).
- Linked data structures, searching, insertion, deletion, traversal on various list types (linear, circular, with and without sentinel, simply or doubly linked, etc).
- Introduction to recursion, using recursion for problem solving.
Lab Topics (weekly)
- Introduction to the lab environment.
- Introduction to C and the development environment, familiarization with homework submission procedures.
- Familiarization with common mistakes and compiler messages.
- Literals, expressions.
- Conditional execution, loop structures.
- Structs, strings.
- Dynamic memory management, structs, strings.
The course exposes 1st year students to the main concepts of programming and problem solving with computers. We introduce C, a classic, powerful procedural programming language. The course includes a mandatory lab in which participants apply in practice – in a series of exercises – the material taught in class in order to familiarize themselves with the concepts and techniques.
After successfully fulfilling the requirements of the course, the student is capable of:
- Analyzing the requirements of problems which are to be solved with a computer and synthesizing a solution.
- Producing solutions which strictly comply with given specifications.
- Knowing the main characteristics and structures of the C programming language and applying the most appropriate on a case-by-case basis to implement his/her algorithmic solutions.
- Applying the basic principles of software engineering in order to organize his/her code efficiently (structure, readability, design).
- Verifying the correctness of programs and identifying errors.
- Using program development and debugging tools.
- Working both individually and synergistically in small groups, with specific time limitations.