Coronavirus (Covid-19) Information

Module ICP-1029:
Imperative Programming in C

Module Facts

Run by School of Computer Science and Electronic Engineering

10 Credits or 5 ECTS Credits

Semester 2

Organiser: Dr Llyr Ap Cenydd

Overall aims and purpose

To present the C programming language and to present underpinning theories and practical experience of imperative programming and especially on memory management and memory structures.

Course content

• The concept of structured programming including Dijkstra and others (Sequences, no jumps, no goto, constructs having predictable logic).

• History: Fortran, Algol 60, COBOL, Pascal, C, C++.

• Types, Program state, memory, Turing completeness, Arithmetic operations, assignment, sequencing, looping and branching.

• Understand the purpose and use of pointers and how they can be manipulated.

• Concepts of stack and heap. Strategic use of memory using malloc, free, new, delete and delete[].

• Understand multi-dimensional arrays, and how they are stored. Demonstrate ability to find index of an element such as an array.

• Understand passing of parameters by value, reference and pointer.

• Understand the structure of declarations and definitions in C++ (ie .cpp and .h files). Demonstrate class, struct and iostream.

• Use linked lists to represent graphs and solve problems that need to be represented on a graph.

• Implement sorting and search algorithms.

Learning outcomes mapped to assessment criteria







Imperative programming principles and history.

A basic understanding of the principles of imperative programming, and its history. A good understanding of the principles of imperative programming and a comprehensive understanding of the history and the main commands. An excellent understanding of imperative programming and concepts such as Turing completeness and state etc.

Pointers and pointer arithmetic

A basic understanding of pointerss and what they are used for. A good understanding of pointers and pointer arithmetic and how to use it. An excellent grasp of pointers and comprehensive understanding of their manipulation.

Memory Management

A basic understanding of stack, heap and memory management such as malloc. A good knowledge and understanding of memory manipulation and management. A comprehensive knowledge of the concepts, and an excellent ability to demonstrate their use.

Multidimensional arrays

A basic knowledge of arrays and indexing. A good ability of indexing. Excellent ability to manipulate multi-dim arrays.

Parameter Passing and returning values

Basic idea of parameter passing. Good idea of parameters and by value and by ref. Excellent manipulation and control over parameters.

Principles of C++

Basic understanding of declarations and defs in C++. A good knowledge of include files etc and structures in C++. An excellent understanding and manipulation of include, and structures such as class, struct, isostream.

Implementing Algorithms

Basic idea of key algorithms and what they do. Good understanding of linked algorithms and knowledge of suitable manipulation methods. Excellent understanding and manipulation of linked lists (etc) and to construct them in C/C++.

Assessment Methods

Type Name Description Weight
Practical Exam 40
Assignment 30
Laboratory 2 10
Laboratory 4 10
Laboratory 6 10

Teaching and Learning Strategy


Laboratory preparation and reports


24 hours over 12 weeks

Private study 30

12 hours over 12 weeks.

8 Core lectures. 4 Tutorials.


ASSESSED assignments, including tutorial questions, problems, essays etc.


Transferable skills

  • Computer Literacy - Proficiency in using a varied range of computer software
  • Self-Management - Able to work unsupervised in an efficient, punctual and structured manner. To examine the outcomes of tasks and events, and judge levels of quality and importance
  • Information retrieval - Able to access different and multiple sources of information
  • Critical analysis & Problem Solving - Able to deconstruct and analyse problems or complex situations. To find solutions to problems through analyses and exploration of all possibilities using appropriate methods, rescources and creativity.
  • Self-awareness & Reflectivity - Having an awareness of your own strengths, weaknesses, aims and objectives. Able to regularly review, evaluate and reflect upon the performance of yourself and others

Subject specific skills

  • Use of such knowledge in modelling and design
  • Problem solving strategies
  • Deploy theory in design, implementation and evaluation of systems
  • Specify, design or construct computer-based systems
  • Deploy tools effectively
  • Development of general transferable skills
  • Knowledge of systems architecture
  • Defining problems, managing design process and evaluating outcomes
  • Knowledge and/or understanding of appropriate scientific and engineering principles
  • Knowledge and understanding of computational modelling
  • Principles of appropriate supporting engineering and scientific disciplines

Pre- and Co-requisite Modules

Courses including this module

Compulsory in courses: