Structured Programming
Structured Programming
DEPARTMENT OF ICT
COURSE NAME:
BACHELOR OF SCIENCE IN INFORMATION
TECHNOLOGY
UNIT NAME:
STRUCTURED PROGRAMMING
Table of contents
Contents
Table of contents.....................................................................................................................................................i
Course Outline and Schedule..............................................................................................................................1
Unit Code: BIT 113...........................................................................................................................................1
Unit Title: Structured Programming................................................................................................................1
Unit Introduction.............................................................................................................................................1
Unit Prerequisite.............................................................................................................................................1
Required Materials/ Equipment......................................................................................................................1
General Objectives..........................................................................................................................................1
Assessment......................................................................................................................................................1
Unit Schedule..................................................................................................................................................1
References/Reading List..................................................................................................................................2
Course Journals...............................................................................................................................................3
Topic 1: An overview of programming languages.......................................................................................................4
Introduction........................................................................................................................................................4
Objectives.........................................................................................................................................................4
Learning activities...............................................................................................................................................4
Learning Activity 1.1: Reading..............................................................................................................................4
Learning Activity 1.2: Journal...............................................................................................................................4
Learning Activity 1.3: Discussion..........................................................................................................................4
Assessment.......................................................................................................................................................4
Topic 1 Notes.....................................................................................................................................................5
Topic 2: Program development cycle........................................................................................................................9
Add topic title here..................................................................................................................................................9
Introduction........................................................................................................................................................9
Objectives.........................................................................................................................................................9
Learning activities...............................................................................................................................................9
Learning Activity 2.1: Reading..............................................................................................................................9
Learning Activity 2.2: Submitted Assignment.........................................................................................................9
Assessment.......................................................................................................................................................9
Topic Resources................................................................................................................................................9
Topic 2 Notes...................................................................................................................................................10
Topic 3: Algorithmic Problem solving......................................................................................................................12
Page i of 96
Introduction......................................................................................................................................................12
Objectives........................................................................................................................................................12
Learning activities.............................................................................................................................................12
Learning Activity 3.1: Reading............................................................................................................................12
Learning Activity 3.2: Exercise...........................................................................................................................12
Learning Activity 3.3: QUIZ................................................................................................................................12
Assessment.....................................................................................................................................................13
Topic Resources..............................................................................................................................................13
Topic 3 Notes...................................................................................................................................................14
Examples of keywords.......................................................................................................................................17
Sample Program............................................................................................................................................17
Example: Basic C program features...............................................................................................................18
Escape sequence Meaning....................................................................................................................21
Topic 4: C programming Concepts of Variables and Operators..................................................................................22
Introduction......................................................................................................................................................22
Objectives........................................................................................................................................................22
Learning activities.............................................................................................................................................22
Learning Activity 4.1: Reading............................................................................................................................22
Learning Activity 4.2: Practical Exercise..............................................................................................................22
Learning Activity 3.3: QUIZ................................................................................................................................22
Assessment.....................................................................................................................................................22
Topic 4 Notes...................................................................................................................................................23
Topic 5: Decision Control Structures.......................................................................................................................36
Introduction......................................................................................................................................................36
Objectives........................................................................................................................................................36
Learning activities.............................................................................................................................................36
Learning Activity 5.1: Reading............................................................................................................................36
Learning Activity 5.2: Journal.............................................................................................................................36
Learning Activity 5.3: Quiz.................................................................................................................................36
Assessment.....................................................................................................................................................36
Topic Resources..............................................................................................................................................36
Topic 5 Notes...................................................................................................................................................37
Topic 6: Looping Control Structures........................................................................................................................43
Introduction......................................................................................................................................................43
Objectives........................................................................................................................................................43
Learning activities.............................................................................................................................................43
Page ii of 96
Learning Activity 6.1: Reading............................................................................................................................43
Learning Activity 6.2: Journal.............................................................................................................................43
Learning Activity 6.3: QUIZ................................................................................................................................43
Assessment.....................................................................................................................................................43
Topic Resources..............................................................................................................................................43
Topic 6 Notes...................................................................................................................................................44
Topic 7: Arrays.....................................................................................................................................................49
Introduction......................................................................................................................................................49
Objectives........................................................................................................................................................49
Learning activities.............................................................................................................................................49
Learning Activity 7.1: Reading............................................................................................................................49
Learning Activity 7.2: Practical exercise...............................................................................................................49
Learning Activity 7.3: Discussion........................................................................................................................49
Assessment.....................................................................................................................................................50
Topic Resources..............................................................................................................................................50
Topic 7 Notes...................................................................................................................................................51
Topic 8: Functions................................................................................................................................................64
Introduction......................................................................................................................................................64
Objectives........................................................................................................................................................64
Learning activities.............................................................................................................................................64
Learning Activity 8.1: Reading............................................................................................................................64
Learning Activity 8.2: Journal.............................................................................................................................64
Learning Activity 8.3: quiz..................................................................................................................................64
Assessment.....................................................................................................................................................65
Topic Resources..............................................................................................................................................66
Topic 8 Notes...................................................................................................................................................66
Topic 9: Pointers, Unions and Structures.................................................................................................................75
Introduction......................................................................................................................................................75
Objectives........................................................................................................................................................75
Learning activities.............................................................................................................................................75
Learning Activity 9.1: Reading............................................................................................................................75
Learning Activity 9.2: Practical Exercise..............................................................................................................75
Learning Activity 9.3: Quiz.................................................................................................................................75
Assessment.....................................................................................................................................................76
Topic Resources..............................................................................................................................................76
Topic 9 Notes...................................................................................................................................................77
Page iii of 96
Topic 10: File Input and Output..............................................................................................................................88
Introduction......................................................................................................................................................88
Objectives........................................................................................................................................................88
Learning activities.............................................................................................................................................88
Learning Activity 10.1: Reading..........................................................................................................................88
Learning Activity 10.2: Journal...........................................................................................................................88
Learning Activity 10.3: Discussion......................................................................................................................88
Assessment.....................................................................................................................................................88
Topic Resources..............................................................................................................................................88
Topic 10 Notes.................................................................................................................................................89
Page iv of 96
Course Outline and Schedule
Unit Code: BIT 113
Unit Introduction
This course provides an introduction to programming techniques to understand the concepts and principles
of procedural programming language, formulate basic problem solving techniques, analyze problems and
implement basic algorithms for their solution. The unit also aims to show ability in testing and debugging of
programs.
Unit Prerequisite
None
Required Materials/ Equipment
Instructor designed handouts, Power point Slides, Computer, Code Blocs software,
General Objectives
Assessment
Tests 10%
Assignment 10%
Practical 10%
Final Exam 70%
Total 100%
Unit Schedule
Arrays
7 3 Declaring an array
Using arrays
Functions
Declaring functions
8 3
Function paramters/arguments
Function calls
9 3 Pointers, unions and Structures
File Input and Output
Declaring FILE variables
10 3 Opening a Disk File for I/O
Reading and Writing to Disk Files
Closing a Disk File
References/Reading List
Page 2 of 96
Structured Programming/Introduction to programming and Algorithm
5. Bjarne Stroustrup (2008). Programming: Principles and Practice Using C++ Prentice Hall
ISBN 341-6780027
6. B.Kernighan's .D.M. Ritchie's (1988). C Programming Language, 2nd Edition, ISBN 345-
895840
Course Journals
1. Acta Informatics ISSN 0001-5903
2. Advances in Computational Mathematics ISSN 1019-7168
3. Advances in data Analysis and Classification ISSN1 1862-5347
4. Annals Of software Engineering ISSN 1022-7091
Page 3 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 1: An overview of programming languages
Introduction
A program is a set of instructions that tell the computer to do various things; sometimes the instruction it
has to perform depends on what happened when it performed a previous instruction. This section gives an
overview of the basic concepts of computer programming and the ways in which you can give instructions
or “commands” as they are usually called to a computer.
Objectives
Objectives by the end of this topic you should be able to:
Describe the various components of a program.
Explain the C program Features
Differentiate between the various types and levels of programming.
Learning activities
Page 4 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 1 Notes
Definitions
Program
This is a complete set of step-by-step instructions that control and direct the computer hardware in
carrying out a given task. Tasks may vary from very simple e.g. computing surface area to complex ones
like statistical analysis.
Programs are usually written to solve user problems on a computer.
Software
This term refers to all programs together with their associated
Programming Language
This is a set of symbols and the rules that are employed in the construction of a computer program.
Programmer
This is a person who is trained and/or specializes in the technique of creating, maintaining and
modifying computer programs.
Programming Languages
Programming languages provide the basic building block for all software. They are the means by which
people can tell the computer how to carry out a task.
A program can be written ina variety of programming languages. The languages can broadly be
classified into two categories:
Low-level language – which refers to the machine language and assembly language.
High-Level languages: - which refers to languages such as COBOL, FORTRAN, BASIC
Low Level Languages
Machine Language (First Generation Language)
Digital computers represent and process data and instructions as binary numbers. This representation
of instructions and data is called machine language. Program instructions were written as a series of
binary digits (0’s and 1’s). When the program was entered into the computer execution was direct since
machine language needs no translation. The binary combination allowed the program to have full
access to and control the computer’s internal circuitry and memory addresses.
Advantages
Program translation was fast because no translation was required.
The program could directly address and control the internal circuitry meaning that these
programs were more effective in hardware usage and control.
Disadvantages
Writing programs was time consuming
Tracing errors in a program was extremely difficult.
Difficult to learn and use.
Program modification was cumbersome.
They were machine dependent i.e. a program created for one type of machine would not work
on a different type of machine.
To write an effective program the programmer had to have expert knowledge on the computer’s
internal workings.
Assembly Language (Second Generation)
Page 5 of 96
Structured Programming/Introduction to programming and Algorithm
This language was more user oriented than machine language. Instructions are represented using
mnemonic code and symbolic addresses. Words like add, sum etc could be used in programs. An
assembler translated these codes into machine language.
Advantages
Much easier to learn compared to machine language.
Coding took less time than coding using machine language.
Error correction was less cumbersome.
Disadvantages
Were also machine specific
Execution took longer than machine language programs due to the translation process.
High Level Languages
These languages are user friendly and problem oriented compared to the low level languages. Programs
written in high level languages are shorter than the machine language programs.
They have an extensive vocabulary of words and symbols therefore program instructions are written
using familiar English-like statements and mathematical statements.
A single high-level language program is translated into multiple machine code instructions.
Advantages
They are portable i.e. they can be used on more than one type of machine.
Creating program and error correction takes less time.
Are relatively easy to learn and use.
The programmer does not have to be an expert on the internal workings of the machine.
Disadvantages
Program execution takes more time due to the translation process.
They do not address the internal circuitry of computers as effectively as the low level languages.
A translated program will occupy more space.
Assemblers
Compilers
Interpreters
Assembler
This is a program that translates a source program written in assembly language into its equivalent
machine code (object code).
Compiler
During compilation both the high level source program and the compiler are loaded into the RAM. The
compiler reads through the source program statement by statement, converting each correct statement
into multiple machine code instructions. The process continues until the compiler has read through the
entire source program or it encounters an error. An erroneous statement is not translated but is placed
on the source program error listing, which will be displayed to the programmer at the end of the
translation process. Where there are no errors the compiler will generate a machine code object
program which is stored for subsequent execution.
Compilation can be divided into three stages including
a) Lexical Analysis which involves
Checking for valid words like data names or operator symbols
Checking for reserved words (keywords). These are words that have a special meaning for the
compiler. These are then replaced with non-alphanumeric character codes known as tokens.
b) Syntax analysis which involves
Checking the program statements for correct grammatical form.
Breaking down the complex statements in the program into simpler equivalents and more
manageable forms.
The first two stages of compilation are carried out by a part of the compiler known as the parser and
can be referred to as parsing.
c) Code Generation involves
Translation of each statement into its equivalent machine code. This is done using tables.
Page 7 of 96
Structured Programming/Introduction to programming and Algorithm
Setting up linkages that allow the object program to communicate or work with various
operating systems and hardware.
Fetching of subroutines from the system library, to optimize the code and make it execute faster
and use less storage space.
The optimized code is then used to generate the object program which is stored on media such as disk
to await subsequent execution.
Interpreter
It is similar to the compiler in that it translates high level language programs into machine code for
execution but no object code is generated. An interpreter translates the program one statement at a
time and if it is error free it executes the statement. This continues till the last statement in the program
has translated and executed. Thus an interpreter translates and executes a statement before it goes to
the next statement. When it encounters an error it will immediately stop the execution of the program.
Page 8 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 2: Program development cycle
Add topic title here
Introduction
Program development: The process of creating application programs. Program development life cycle (PDLC) The
process containing the seven phases of program development: planning, analyzing, designing, coding, debugging
and testing, and implementing and maintaining application software.
Objectives
Objectives by the end of this topic you should be able to:
Describe the stages of program development.
Explain the advantages and disadvantages of c .
Learning activities
Page 9 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 2 Notes
Program Development
The Steps in Program Development
1. Design program objectives
It involves forming a clear idea in terms of the information you want to include in the program,
computations needed and the output. At this stage, the programmer should think in general terms, not
in terms of some specific computer language.
2. Design program
The programmer decides how the program will go about its implementation, what should the user
interface be like, how should the program be organized, how to represent the data and what methods
to use during processing. At this point, you should also be thinking generally although some of your
decisions may be based on some general characteristics of the C language.
3. Write the Code
It is the design Implementation by writing the (C) code i.e. translating your program design into C
language instructions. You will use C’s text editor or any other editor such as notepad. Using another
editor such as notepad requires you to save your program with the extension .c.
4. Compile the code
A compiler converts the source code into object code. Object code are instructions in machine
language. Computers have different machine languages. C compilers also incorporate code for
C libraries into the final program. The libraries contain standard routines. The end result is an
executable file that the computer can understand.
The compiler also checks errors in your program and reports the error to you for correction.
The object code can never be produced if the source code contains syntax errors.
5. Run the program
This is the actual execution of the final code, usually preceded by linking #. Once the executable
code is complete and working, it can be invoked in future by typing its name in a ‘run’
command.
6. Test the program
This involves checking whether the system does what it is supposed to do. Programs may have
bugs (errors). Debugging involves the finding and fixing of program mistakes.
7. Maintain and modify the program
Occasionally, changes become necessary to make to a given program. You may think of a better way to
do something in a program, a clever feature or you may want to adapt the program to run in a different
machine. These tasks are simplified greatly if you document the program clearly and follow good
program design practices.
Structured Program Design
Structuring a program breaks it down into understandable chunks.
Modular Programming
This is a technique that involves breaking down the entire problem into smaller, more manageable units.
Features
#
Combining all object code segments from different modules and libraries functions.
Page 10 of 96
Structured Programming/Introduction to programming and Algorithm
i. Each module within the application carries out a singular task.
ii. Each module runs independently of the other modules.
iii. Since each module is independent, a breakdown in any module does not greatly affect the
running of the application.
iv. Debugging is easier since errors can be traces to individual modules.
Advantages of modular programming
Modules can be reused thus saving development time.
Testing of individual modules in isolation makes tracing mistakes easier.
Amendments to a single module does not affect the rest of the program.
Ability to create libraries of often used routines which are reliable and can go into other
programs.
Top-Down Approach
In this approach an outline program is designed first, showing the main tasks and components of the
program, and the order in which they are to be executed. Each main component is then reduced to a
number of smaller, simple and more manageable components and this process continues at each level
until there is sufficient detail to allow the coding stage to proceed.
The process of reducing components into sequences of smaller components is often referred to a
stepwise refinement and forms the basis of structured programming.
Bottom-up Approach
In this design approach, the application is developed starting at the bottom of the hierarchy i.e. the
single task modules. As each category of programs is completed on the hierarchy, the controlling
program for that category is created.
a) Program Coding – A readable program
b) Data names – Meaningful names make a program code easier to read.
c) Comments – Make the program more understandable.
d) Indentation – Code should be laid out neatly, with proper use of indentation to reflect the logic
structure of the code.
e) Modularization- makes the program easy to understand.
Page 11 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 3: Algorithmic Problem solving
Introduction
Add some introductory information here
Objectives
Objectives by the end of this topic you should be able to:
Describe the various ways of solving algorithms
Learning activities
Assessment
Activity 3.2 and activity 3.3 will be graded
Topic Resources
Page 13 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 3 Notes
This is a symbolic representation of an algorithm sequence. A flow chart uses predefined symbols to
represent the various actions in an algorithm. The arrangement of the symbols indicate the flow of logic
in the algorithm.
Flow chart symbols
Start or end – They are used in a flow chart to mark the beginning and the end.
Process – used to represent operations on data e.g. Computations. Details are written in a rectangular
box.
Input/Output – Input/output operations are represented in a parallelogram.
Decision – This symbol is used to indicate decision making and branching. The criteria is shown inside
the symbol and the lines(paths) out show the results.
Connectors – A small circle containing a number or letter that is used to split a large flow chart into
smaller parts.
Testing and Debugging
Testing is part of the procedures that ensure that corresponds with original specification and that it
works in its intended environment. It is the process of running software to find errors (or bugs), though
it is possible that some errors will get through the testing process without being found.
Types of Errors
There are three types of errors: Syntax, Semantic and Logic errors.
Syntax errors
Page 14 of 96
Structured Programming/Introduction to programming and Algorithm
They result from the incorrect use of the rules of programming. The compiler detects such
errors as soon as you start compiling. A program that has syntax errors can produce no results.
You should look for the error in the line suggested by the compiler. Syntax errors include;
Missing semi colon at the end of a statement e.g. Area = Base * Length
Use of an undeclared variable in an expression
Illegal declaration e.g. int x, int y, int z;
Use of a keyword in uppercase e.g. FLOAT, WHILE
Misspelling keywords e.g. init instead of int
Note:
The compiler may suggest that other program line statements have errors when they may not.
This will be the case when a syntax error in one line affects directly the execution of other
statements, for example multiple use of an undeclared variable. Declaring the variable will
remove all the errors in the other statements.
Logic Errors
These occur from the incorrect use of control structures, incorrect calculation, or omission of a
procedure. Examples include: An indefinite loop in a program, generation of negative values
instead of positive values. The compiler will not detect such errors since it has no way of
knowing your intentions. The programmer must try to run the program so that he/she can
compare the program’s results with already known results.
Semantic errors
They are caused by illegal expressions that the computer cannot make meaning of. Usually no
results will come out of them and the programmer will find it difficult to debug such errors.
Examples include a data overflow caused by an attempt to assign a value to a field or memory
space smaller than the value requires, division by zero, etc.
Structured Programming defined
Structured programming is an approach to writing programs that are easier to read, test, debug
and modify. The approach assists in the development of large programs through stepwise
refinement and modularity. Programs designed this way can be developed faster. When
modules are used to develop large programs, several programmers can work on different
modules, thereby reducing program development time.
Page 15 of 96
Structured Programming/Introduction to programming and Algorithm
Source Code files
When you write a program in C language, your instructions form the source code (or simply source file).
C filenames have an extension .c. The part of the name before the period is called the base name and
the part after the period is called the extension.
Object code, Executable code and Libraries
An executable file is a file containing ready to run machine code. C accomplishes this in two steps.
Compiling – The compiler converts the source code to produce the intermediate object
code.
The linker combines the intermediate code with other code to produce the
executable file. C does this in a modular manner.
You can compile individual modules, and then combine the compiled modules later.
Therefore, if you need to alter one module, you don’t have to recompile the others.
Linking is the process where the object code, the startup code *, and the code for library routines used in
the program (all in machine language) are combined into a single file - the executable file.
Advantages of C over Other Languages
C Supports structured programming design features.
It allows programmers to break down their programs into functions. Further it supports the use
of comments, making programs readable and easily maintainable.
Efficiency
C is a concise language that allows you to say what you mean in a few words.
The final code tends to be more compact and runs quickly.
Portability
C programs written for one system can be run with little or no modification on other
systems.
Power and flexibility
C has been used to write operating systems such as Unix, Windows.
It has (and still is) been used to solve problems in areas such as physics and engineering.
Programmer orientation
C is oriented towards the programmer’s needs.
It gives access to the hardware. It lets you manipulate individual bits of memory.
It also has a rich selection of operators that allow you to expand programming
capability.
C Programs’ Components
Keywords
These are reserved words that have special meaning in a language. The compiler recognizes a keyword
as part of the language’s built – in syntax and therefore it cannot be used for any other purpose such as
a variable or a function name. C keywords must be used in lowercase otherwise they will not be
recognized.
Examples of keywords
auto break case else int void
default do double if sizeof long
*
Code that acts as interface between the program and the operating system.
Page 16 of 96
Structured Programming/Introduction to programming and Algorithm
float for goto signed unsigned
register return short union continue
struct switch typedef const extern
volatile while char enum static
A typical C program is made of the following components:
Preprocessor directives
Functions
Declaration statements
Comments
Expressions
Input and output statements
Sample Program
This program will print out the message: This is a C program.
#include<stdio.h>
main()
{
printf("This is a C program \n");
return 0;
}
Every C program contains a function called main. This is the start point of the program.
#include<stdio.h> allows the program to interact with the screen, keyboard and file system of
your computer. You will find it at the beginning of almost every C program.
main()declares the start of the function, while the two curly brackets show the start and finish
of the function. Curly brackets in C are used to group statements together as in a function, or in
the body of a loop. Such a grouping is known as a compound statement or a block.
printf("This is a C program \n");prints the words on the screen. The text to be printed is enclosed
in double quotes. The \n at the end of the text tells the program to print a new line as part of
the output.
Most C programs are in lower case letters. You will usually find upper case letters used in
preprocessor definitions (which will be discussed later) or inside quotes as parts of character
strings.
C is case sensitive, that is, it recognises a lower case letter and it's upper case equivalent as
being different.
/ Sample Program/
#include<stdio.h>
main()
Page 17 of 96
Structured Programming/Introduction to programming and Algorithm
{
int num; / define a variable called num */
num = 1; / assignment /
printf(“ This is a simple program ”);
printf(“to display a message. \n”);
printf (“My favorite number is %d because ”, num);
printf(“ it is first.\n ”);
return 0;
}
On running the above program, you get the following output.
The double quotes are not displayed on the screen. In C, one or more characters enclosed between
double quotes is called a string. The quoted string between printf( )’s parenthesis is called an argument
to printf( ). In general, information passed to a function is called an argument. In C, calling a library
function such as printf( ) is a statement; therefore it must end with a semicolon.
Page 18 of 96
Structured Programming/Introduction to programming and Algorithm
To call a function, you specify its name followed by a parenthesized list of arguments that you
will be passing to it. If the function does not require any arguments, no arguments will be
specified, and the parenthesized list will be empty. If there is more than one argument, the
arguments must be separated by commas.
In the above program, line 7 causes the message enclosed in speech marks “ ” to be printed on
the screen. Line 8 does the same thing.
The \n tells the computer to insert a new line after printing the message. \n is an example of an
escape sequence.
Line 9 prints the value of the variable num (1) embedded in the phrase. The %d instructs the
computer where and in what form to print the value. %d is a type specifier used to specify the
output format for integer numbers.
Line 10 has the same effect as line 8.
Line11 indicates the value to be returned by the function main( ) when it is executed. By
default any function used in a C program returns an integer value (when it is called to execute).
Therefore, line 3 could also be written int main( ). If the int keyword is omitted, still an integer
is returned.
Then, why return (0); ? Since all functions are subordinate to main( ), the function does not
return any value.
Note:
(i) Since the main function does not return any value, line 3 can alternatively be written
as : void main( ) – void means valueless. In this case, the statement return 0; is not
necessary.
(ii) While omitting the keyword int to imply the return type of the main( ) functiondoes
not disqualify the fact that an integer is returned (since int is default), you should
explicitly write it in other functions, especially if another value other than zero is to
be returned by the function.
Preprocessor directives and header files
A preprocessor directive performs various manipulations on your source file before it is actually
compiled. Preprocessor directives are not actually part of the C language, but rather instructions from
you to the compiler
The pre-processor directive #include is an instruction to read in the contents of another file and
include it within your program. This is generally used to read in header files for library
functions.
Header files contain details of functions and types used within the library. They must be
included before the program can make use of the library functions.
Library header file names are enclosed in angle brackets, <>. These tell the preprocessor to look
for the header file in the standard location for library definitions.
Comments
Page 19 of 96
Structured Programming/Introduction to programming and Algorithm
Comments are non – executable program statements meant to enhance program readability and allow
easier program maintenance, i.e. they document the program. They can be used in the same line as the
material they explain (see lines 4, 6, 7 in sample program).
A long comment can be put on its own line or even spread on more than one line. Comments are
however optional in a program. The need to use too many comments can be avoided by good
programming practices such as use of sensible variable names, indenting program statements, and good
logic design. Everything between the opening /* and closing */ is ignored by the compiler.
Declaration statements
In C, all variables must be declared before they are used. Variable declarations ensure that appropriate
memory space is reserved for the variables, depending on the data types of the variables. Line 6 is a
declaration for an integer variable called num.
Assignment and Expression statements
An assignment statement uses the assignment operator “=” to give a variable on the operator’s left side
the value to the operator’s right or the result of the expression on the right. The statement num =1;
(Line 6) is an assignment statement.
Escape sequences
Escape sequences (also called back slash codes) are character combinations that begin with a backslash
symbol (\) used to format output and represent difficult-to-type characters.
One of the most important escape sequences is \n, which is often referred to as the new line character.
When the C compiler encounters \n, it translates it into a carriage return.
For example, this program:
#include<stdio.h>
main()
{
printf(“This is line one \n”);
printf(“This is line two \n”);
printf(“This is line three”);
return 0;
}
displays the following output on the screen.
Page 20 of 96
Structured Programming/Introduction to programming and Algorithm
return 0;
}
Remember that the escape sequences are character constants. Therefore to assign one to a character
variable, you must enclose the escape sequence within single quotes, as shown in this fragment.
Char ch;
ch = ‘\t ’ /*assign ch the tab character */
Page 21 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 4: C programming Concepts of Variables and Operators
Introduction
Add some introductory information here
Objectives
Objectives by the end of this topic you should be able to:
Describe the components of a c program.
Explain the importance of comments in a c Program.
Demonstrate how to use variables and data types.
Learning activities
Page 22 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 4 Notes
Variables
A variable is a memory location whose value can change during program execution. In C, a
variable must be declared before it can be used. Variables can be declared at the start of any
block of code.
A declaration begins with the type, followed by the name of one or more variables. For
example,
int high, low, results[20];
Declarations can be spread out, allowing space for an explanatory comment. Variables can also
be initialized when they are declared. This is done by adding an equals sign and the required
value after the declaration.
int high = 250; /* Maximum Temperature */
int low = -40; /* Minimum Temperature */
int results[20]; /* Series of temperature readings */
Variable Names
Every variable has a name and a value. The name identifies the variable and the value stores
data. There is a limitation on what these names can be. Every variable name in C must start
with a letter; the rest of the name can consist of letters, numbers and underscore characters.
C recognizes upper and lower case characters as being different (C is case- sensitive). Finally,
you cannot use any of C's keywords like main, while, switch etc as variable names.
Examples of legal variable names
x result outfile bestyet
x1 x2 out_file best_yet
power impetus gamma hi_score
It is conventional to avoid the use of capital letters in variable names. These are used for names of
constants. Some old implementations of C only use the first 8 characters of a variable name. Most
modern ones don't apply this limit though. The rules governing variable names also apply to the names
of functions.
Basic Data Types
C supports five basic data types. The table below shows the five types, along with the C keywords that
represent them. Don’t be confused by void. This is a special purpose data type used to explicitly declare
functions that return no value.
Type Keyword
Meaning
Character Character data char
Integer Signed whole number int
Float floating-point numbers float
Double double precision floating-point double
numbers
Void Valueless void
Page 23 of 96
Structured Programming/Introduction to programming and Algorithm
The ‘int’ specifier
It is a type specifier used to declare integer variables. For example, to declare count as an integer you
would write:
int count;
Integer variables may hold signed whole numbers (numbers with no fractional part). Typically, an
integer variable may hold values in the range –32,768 to 32,767 and are 2 bytes long.
The ‘char’ specifier
A variable of type char is 1 byte long and is mostly used to hold a single character. For example to
declare ch to be a character type, you would write:
char ch;
The ‘float’ specifier
It is a type specifier used to declare floating-point variables. These are numbers that have a
whole number part and a fractional or decimal part for example 234.936. To declare f to be of
type float, you would write:
float f;
Floating point variables typically occupy 4 bytes.
The ‘double’ specifier
It is a type specifier used to declare double-precision floating point variables. These are
variables that store float point numbers with a precision twice the size of a normal float value.
To declare d to be of type double you would write:
double d;
Double-type variables typically occupy 8 bytes.
displays This prints the number 99 on the screen. As you can see, this call to the printf( ) function
contains two arguments. The first one is the quoted string and the other is the constant 99. Notice that
the arguments are separated from each other by a comma.
In general, when there is more than one argument to a function, the arguments are separated from
each other by commas. The first argument is a quoted string that may contain either normal characters
or formal specifiers that begin with a percent (%) sign.
Normal characters are simply displayed as is on the screen in the order in which they are encountered in
the string (reading left to right). A format specifier, on the other hand informs printf( ) that a different
type item is being displayed. In this case, the %d, means that an integer, is to be output in decimal
format. The value to be displayed is to be found in the second argument. This value is then output at the
position at which the format specifier is found on the string.
Page 24 of 96
Structured Programming/Introduction to programming and Algorithm
If you want to specify a character value, the format specifier is %c. To specify a floating-point value, use
%f. The %f works for both float and double. Keep in mind that the values matched with the format
specifier need not be constants, they may be variables too.
Code Format
%c Character
%d Signed decimal integers
%i Signed decimal integers
%e Scientific notation (lowercase ‘e’)
%E Scientific notation (lowercase ‘E’)
%f Decimal floating point
%s String of characters
%u Unsigned decimal integers
%x Unsigned hexadecimal (lowercase letters)
%X Unsigned hexadecimal (Uppercase letters)
Examples
1. The program shown below illustrates the above concepts. First, it declares a variable called num.
Second, it assigns this variable the value 100. Finally, it uses printf( ) to display the value is 100 on the
screen. Examine it closely.
#include<stdio.h>
main()
{
int num;
num = 100;
printf(“ The value is %d “, num);
return 0;
}
2. This program creates variables of types char, float, and double assigns each a value and outputs
these values to the screen.
#include<stdio.h>
main()
{
char ch;
float f;
double d;
ch = ‘X’;
f = 100.123;
d = 123.009;
printf(“ ch is %c “, ch);
printf(“ f is %f “, f);
printf(“ d is %f “, d);
Page 25 of 96
Structured Programming/Introduction to programming and Algorithm
return 0;
}
Exercises
1. Enter, compile, and run the two programs above.
2. Write a program that declares one integer variable called num. Give this variable the 1000 and then,
using one printf ( ) statement, display the value on the screen like this:
1000 is the value of num
Inputting Numbers From The Keyboard Usingscanf( )
There are several ways to input values through the keyboard. One of the easiest is to use another of C’s
standard library functions called scanf( ).
To use scanf( ) to read an integer value from the keyboard, call it using the general form:
scanf(“%d”, &int-var-name);
Where int-var-name is the name of the integer variable you wish to receive the value. The first
argument to scanf( ) is a string that determines how the second argument will be treated. In this case
the %d specifies that the second argument will be receiving an integer value entered in decimal format.
The fragment below, for example, reads an integer entered from the keyboard.
int num;
scanf(“%d”, &num);
The & preceding the variable name means ‘address of’. The values you enter are put into variables using
the variables’ location in memory. It allows the function to place a value into one of its arguments.
When you enter a number at the keyboard, you are simply typing a string of digits. The scanf( ) function
waits until you have pressed <ENTER> before it converts the string into the internal format used by the
computer.
The table below shows format specifiers or codes used in the scanf() function and their meaning.
Code Meaning
%c Read a single character
%d Read a decimal integer
%i Read a decimal integer
%e Read a floating point number
%f Read a floating point number
%lf Read a double
%s Read a string
%u Reads an unsigned integer
Examples
1. This program asks you to input an integer and a floating-point number and displays the value.
#include<stdio.h>
Page 26 of 96
Structured Programming/Introduction to programming and Algorithm
main()
{
int num;
float f;
printf(“ \nEnter an integer: “);
scanf( “%d “, &num);
printf(“\n Enter a floating point number: “);
scanf( “%f “, &f);
printf( “%d ”, num);
printf( “\n %f ”, f);
return 0;
}
2. This program computes the area of a rectangle, given its dimensions. It first prompts the user
for the length and width of the rectangle and then displays the area.
#include<stdio.h>
main()
{
int len, width;
printf(“\n Enter length: “);
scanf (“%d “, &len);
printf(“\n Enter width : ” );
scanf( “ %d “, &width);
printf(“\n The area is %d “, len * width);
return 0;
}
Exercises
1. Enter, compile and run the example programs.
2. Write a program that inputs two floating-point numbers (use type float) and then displays their
sum.
3. Write a program that computes the volume of a cube. Have the program prompt the user
for each dimension.
Types of Variables
There are two places where variables are declared: inside a function or outside all functions.
Variables declared outside all functions are called global variables and they may be accessed by any
function in your program. Global variables exist the entire time your program is executing.
Variables declared inside a function are called local variables. A local variable is known to and may be
accessed by only the function in which it is declared. You need to be aware of two important points
about local variables.
(i) The local variables in one function have no relationship to the local variables in another
function. That is, if a variable called count is declared in one function, another variable called count
may also be declared in a second function – the two variables are completely separate from and
unrelated to one another.
Page 27 of 96
Structured Programming/Introduction to programming and Algorithm
(ii) Local variables are created when a function is called, and they are destroyed when the
function is exited. Therefore local variables do not maintain their values between function
calls.
Constants
A constant is a value that does not change during program execution. In other words, constants
are fixed values that may not be altered by the program.
Integer constants are specified as numbers without fractional components. For example –10,
1000 are integer constants.
Floating - point constants require the use of the decimal point followed by the number’s
fractional component. For example, 11.123 is a floating point constant. C allows you to use
scientific notation for floating point numbers. Constants using scientific notation must follow
this general form:
number E sign exponent
The number is optional. Although the general form is shown with spaces between the component parts
for clarity, there may be no spaces between parts in an actual number . For example, the following
defines the value 1234.56 using scientific notation.
123.456E1
Character constants are usually just the character enclosed in single quotes; 'a', 'b', 'c'.
ch = ‘z’;
Note:
There is nothing in C that prevents you from assigning a character variable a value using a
numeric constant. For example the ASCII Code for ‘A ‘ is 65. Therefore, these two assignments
are equivalent.
char ch;
ch = “A’;
ch = 65;
Types of Constants
Constants can be used in C expressions in two ways:
Directly
Here the constant value is inserted in the expression, as it should typically be.
For example:
Area = 3.14 * Radius * Radius;
The value 3.14 is used directly to represent the value of PI which never requires changes in the
computation of the area of a circle
Using a Symbolic Constant
This involves the use of another C preprocessor, #define.
For example, #define SIZE 10
A symbolic constant is an identifier that is replaced with replacement text by the C preprocessor before
the program is compiled. For example, all occurrences of the symbolic constant SIZE are replaced with
the replacement text 10.
This process is generally referred to as macro substitution. The general form of the #define statement is;
#definemacro-name string
Page 28 of 96
Structured Programming/Introduction to programming and Algorithm
Notice that this line does not end in a semi colon. Each time the macro - name is encountered in the
program, the associated string is substituted for it. For example, consider the following program.
#include<stdio.h>
#define PI 3.14
main()
{
float radius, area;
printf(“Enter the radius of the circle \n”);
scanf(“%f”, &radius);
area = PI * radius * radius; /* PI is a symbolic constant */
printf(“Area is %.2f cm squared“,area);
return 0;
}
Note:
At the time of the substitution, the text such as 3.14 is simply a string of characters composed
of 3, ., 1 and 4. The preprocessor does not convert a number into any sort of internal format.
This is left to the compiler.
Revision Exercises
1. Discuss four fundamental data types supported by C, stating how each type is stored in memory.
2. Distinguish between a variable and a constant.
3. Suggest, with examples two ways in which constant values can be used in C expression
statements.
4. Give the meaning of the following declarations;
(i) char name[20]; (ii) int num_emp;
(iii) double tax, basicpay;
(iv) char response;
5. What is the difference between a local and a global variable?
6. Write a program that computes the number of seconds in a year.
The mass of a single molecule of water is about 3.0 x 10 -23 grams. A quart of water is about 950
grams. Write a program that requests an amount of water in quarts and displays the number of
water molecules in that amount.
OPERATORS
Operators And Operands
An operator is a component of any expression that joins individual constants, variables, array elements
and function references.
An operand is a data item that is acted upon by an operator. Some operators act upon two operands
(binary operators) while others act upon only one operand (unary operators).
An operand can be a constant value, a variable name or a symbolic constant.
Note: An expression is a combination of operators and operands.
Examples
(i) x + y ; x, y are operands, + is an addition operator.
Page 29 of 96
Structured Programming/Introduction to programming and Algorithm
(ii) 3 * 5; 3, 5 are constant operands, * is a multiplication operator.
(iii) x % 2.5; x, 5 are operands, % is a modulus (remainder) operator.
(iv) sizeof (int); sizeof is an operator (unary), int is an operand.
Arithmetic Operators
There are five arithmetic operators in C.
Operator Purpose
+ Addition
- Subtraction
* Multiplication
/ Division
% Remainder after integer division
Note:
(i) There exists no exponential operators in C.
(ii) The operands acted upon by arithmetic operators must represent numeric
values, that is operands may be integers, floating point quantities or characters
(since character constants represent integer values).
(iii) The % (remainder operator) requires that both operands be integers.
Thus;
5%3
int x = 8;
int y = 6 ; x % y are valid while;
8.5 % 2.0 and
float p = 6.3, int w = 7 ; 5 %p , p % w are invalid.
(iv) Division of one integer quantity by another is known as an integer division. If the
quotient (result of division) has a decimal part, it is truncated.
(v) Dividing a floating point number with another floating point number, or a
floating point number with an integer results to a floating point quotient .
Exercise
Suppose a = 10, b = 3, v1 = 12.5, v2 = 2.0, c1 =’P’, c2 = ‘T’. Compute the result of the following
expressions.
a+b v1 * v2
a-b v1 / v2
a*b c1
a/b c1 + c2 +5
a%b c1 + c2 +’9’
Note:
(i) c1 and c2 are character constants
(ii) ASCII codes for 9 is 57, P = 80,T = 84.
If one or both operands represent negative values, then the addition, subtraction, multiplication, and
division operators will result in values whose signs are determined by their usual rules of algebra. Thus if
a b, and c are 11, -3 and –11 respectively, then
a+b =8
Page 30 of 96
Structured Programming/Introduction to programming and Algorithm
a – b = 14
a * b = -33
a / b = -3
a % b = -2
c % b = -2
c/b=3
(i) i+f
(ii) i+c
(iii) i + c-‘w’
(iv) ( i + c) - ( 2 * f / 5)
Note:Whichever type of result an expression evaluates to, a programmer can convert the result to a
different data type if desired. The general syntax of doing this is:
Exercise
The roots of a quadratic equation ax2 + bx + c = 0 can be evaluated as:
x1 = (-b + (b2 - 4ac))/2a
x2 = (-b + (b2 - 4ac))/2a
where a, b ,c are double type variables and b 2 = b * b , 4ac = 4 * a * c, 2a = 2 * a.
Write a program that calculates the two roots x 1 x2 with double precision, and displays the roots on the
screen.
Page 32 of 96
Structured Programming/Introduction to programming and Algorithm
Example: Converting seconds to minutes and seconds using the % operator
#include<stdio.h >
#define SEC_PER_MIN 60
main()
{
int sec, min, sec_left;
printf(“ Converting seconds to minute and seconds \n “) ;
printf( “Enter number of seconds you wish to convert \n “) ;
scanf(“% d” , &sec ) ; /* Read in number of seconds */
min = sec / SEC_PER_MIN ; / * Truncate number of seconds */
sec_left = sec % SEC_PER_MIN ;
printf(“% d seconds is % d minutes,% seconds\n “ ,sec,min,sec_left);
return 0;
}
The sizeof operator
sizeof returns the size in bytes, of its operand. The operand can be a data type e.g. sizeof (int), or a
specific data object e.g. sizeof n.
If it is a name type such as int, float etc. The operand should be enclosed in parenthesis.
Example : Demonstrating ‘sizeof’ operator
#include <stdio.h>
main()
{
int n;
printf(“n has % d bytes; all ints have % d bytes \n”,
sizeof n, sizeof(int)) ;
return 0;
}
The Assignment Operator
The Assignment operator ( = ) is a value assigning operator. There are several other assignment
operators in C. All of them assign the value of an expression to an identifier.
Assignment expressions that make use of the assignment operator (=) take the form;
identifier = expression;
where identifier generally represents a variable, constant or a larger expression.
Examples of assignment;
a=3;
x=y;
pi = 3.14;
sum = a + b ;
area_circle = pi * radius * radius;
Note
(i) You cannot assign a variable to a constant such as 3 = a ;
(ii) The assignment operator = and equality operator (= =) are distinctively different. The
= operator assigns a value to an identifier. The equality operator (= =) tests whether
two expressions have the same value.
Page 33 of 96
Structured Programming/Introduction to programming and Algorithm
(iii) Multiple assignments are possible e.g. a =b = 5 ; assigns the integer value 5 to both a
and b.
(iv) Assignment can be combined with +, -, /, *, and %
The Conditional Operator
Conditional tests can be carried out with the conditional operator (?). A conditional expression takes the
form:
expression1 ? expression2 : expression3 and implies;
evaluate expression1. If expression1 evaluates to true ( value is 1 or non zero) then evaluate
expression 2, otherwise (i.e. if expression 1 is false or zero ) , evaluate expression3.
Consider the statement (i < 0) ? 0 :100
Assuming i is an integer, the expression (i < 0) is evaluated and if it is true, then the result of the entire
conditional expression is zero (0), otherwise, the result will be 100.
Unary Operators
These are operators that act on a singe operand to produce a value. The operators may precede the
operand or are after an operand.
Examples
(i) Unary minus e.g. - 700 or –x
(ii) Incrementation operator e.g. c++
(iii) Decrementation operator e.g. f - -
(iv) sizeof operator e.g. sizeof( float)
Relational Operators
There are four relational operators in C.
< Less than
<= Less than or equal to
> Greater than
>= Greater than or equal to
A logical expression represents conditions that are either true (represented by integer 1) or
false (represented by 0).
Example
Consider a, b, c to be integers with values 1, 2,3 respectively. Note their results with relational operators
below.
Expression Result
a<b 1 (true)
Page 34 of 96
Structured Programming/Introduction to programming and Algorithm
(a+ b) > = c 1 (true)
(b + c) > (a+5) 0 (false)
c:=3 0 (false)
b==2 1 (true)
Logical operators
The two operators act upon operands that are themselves logical expressions to produce more complex
conditions that are either true or false.
Example
Suppose i is an integer whose value is 7, f is a floating point variable whose value is 5.5 and C is a
character that represents the character ‘w’, then;
Page 35 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 5: Decision Control Structures
Introduction
Control structures represent the forms by which statements in a program are executed.
Three structures control program execution:
o Sequence
o Selection or decision structure
o Iteration or looping structure
Objectives
Objectives by the end of this topic you should be able to:
Describe the various concept of controlled structures.
Demonstrate how to implement contoll structures
Demonstrate how to implement nested contoll structures
Learning activities
Learning Activity 5.1: Reading
Read the provided topic notes on Decision control structures.
Learning Activity 5.2: Journal
Assessment
activity 5.2. the quiz will be graded
Topic Resources
Page 36 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 5 Notes
CONTROL STRUCTURES
Introduction
Control structures represent the forms by which statements in a program are executed.
Three structures control program execution:
o Sequence
o Selection or decision structure
o Iteration or looping structure
Sequence Control Structure
This is the simplest control structure. It dictates the order of execution from one statement to the next
within the program. In the absence of repetition or branching, the program instructions will be
executed in the order in which they were coded.
Basically, program statements are executed in the sequence in which they appear in the program.
Selection Control Structure
The structure is used for decision making within a program. It allows alternative actions to be taken
according to conditions that exist at particular stages within a program.
The structure uses a test condition statement, which upon evaluation by the computer gives rise to
certain conditions which may evaluate to a Boolean true or false. Based on the outcome of the test
condition, the computer may execute one or more statements.
In reality, a logical test using logical and relational operators may require to be used in order to
determine which actions to take (subsequent statements to be executed) depending on the outcome of
the test. This is selection. For example:
if (score >= 50)
printf(“Pass”);
else
printf(“Fail”);
In addition, a group of statements in a program may have to be executed repeatedly until some
condition is satisfied. This is known as looping. For example, the following code prints digits from 1 to 5.
for(digit = 1; digit < = 5; digit++)
printf(“\n %d”, digit)
Selection Structure
The if statement
The if statement provides a junction at which the program has to select which path to follow. The
general form is :
if(expression)
statement;
If expression is true (i.e. non zero) , the statement is executed, otherwise it is skipped. Normally the
expression is a relational expression that compares the magnitude of two quantities ( For example x > y
or c = = 6)
Examples
(i) if (x<y)
Page 37 of 96
Structured Programming/Introduction to programming and Algorithm
printf(“x is less that y”);
if - else statement
The if else statement lets the programmer choose between two statements as opposed to the simple if
statement which gives you the choice of executing a statement (possibly compound) or skipping it.
The general form is:
if (expression)
statement;1
else
statement2;
If expression is true, statement1 is executed. If expression is false, the single statement following the
else (statement2) is executed. The statements can be simple or compound.
Note: Indentation is not required but it is a standard style of programming.
Example:
if(x >=0)
{
printf(“let us increment x:\n”);
x++;
}
else
printf(“x < 0 \n”);
Page 40 of 96
Structured Programming/Introduction to programming and Algorithm
Explanation
The expression in the parenthesis following the switch is evaluated. In the example above, it has
whatever value we entered as our choice.
Then the program scans a list of labels (case 1, case 2,…. case 4) until it finds one that matches the one
that is in parenthesis following the switch statement.
If there is no match, the program moves to the line labeled default, otherwise the program proceeds to
the statements following the switch.
The break statement causes the program to break out of the switch and skip to the next statement after
the switch. Without the break statement, every statement from the matched label to the end of the
switch will be processed.
For example if we remove all the break statements from the program and then run the program using
the number 3 we will have the following exchange.
Enter a number of your choice 3
You typed 3
You typed 4
There is no match in your choice
The structure of a switch is as follows:
switch (integer expression)
{
case constant 1:
statement; optional
case constant 2:
statement; optional
…………
default: (optional)
statement; (optional)
}
Note:
(i) The switch labels (case labels) must be type int (including char) constants or constant
expression.
(ii) You cannot use a variable for an expression for a label expression.
(iii) The expressions in the parenthesis should be one with an integer value. (again including type
char)
Example: Demonstrating the ‘switch’ structure
#include<stdio.h>
main()
{
char ch;
printf(“Give me a letter of the alphabet \n”);
printf(“An animal beginning with letter”);
printf (“is displayed \n “);
scanf(“%c”, &ch);
if (ch>=’a’ && ch<=’z’) /*lowercase letters only */
Page 41 of 96
Structured Programming/Introduction to programming and Algorithm
switch (ch)
{ /*begin of switch*/
case `a`:
printf(“Alligator , Australian aquatic animal \n”):
break;
case ‘b’:
printf(“Barbirusa, a wild pig of Malaysia \n”);
break;
case ‘c’:
printf(“Coati, baboon like animal \n”);
break;
case ‘d’:
printf(“Desman, aquatic mole-like creature \n”);
break;
default:
printf(“ That is a stumper! \n”)
}
else
printf(“I only recognize lowercase letters.\n”);
return 0;
} /* End of main */
The ‘continue’ statement
Like the break statement the continue statement is a jump that interrupts the flow of a program. It is
used in loops to cause the rest of an iteration to be skipped and the next iteration to be started.
If a break is used in a loop it quits the entire loop.
The ‘goto’ statement
It takes the form goto labelname;
Example
goto part2;
part2: printf(“programming in c”\n”;)
In principle you never need to use goto in a C statement. The if construct can be used in its place as
shown below.
Alternative 1 Alternative 2
if (a>14) if (a>14)
goto a; sheds=3;
sheds=2; else
goto b; sheds=2;
a: sheds=3; k=2*sheds;
b: k=2 * sheds;
Page 42 of 96
Structured Programming/Introduction to programming and Algorithm
control structure is used to control this. In a finite loop the number of iterations is determined and set
by the programmer. In an infinite loop the number of repetitions is dictated by a user or other factors.
Objectives
Objectives by the end of this topic you should be able to:
Describe the concepts of looping structures.
Demonstrate how to use the various looping structures.
.Demonstrate how to use nested looping structures
Learning activities
Purchase Amount >= Ksh. 10,000 - Give 10% discount on the amount.
Ksh. 5, 000 <= Purchase Amount < Ksh. 10,000 - Give 5% discount on the amount.
Ksh. 3, 000 <= Purchase Amount < Ksh. 5,000 - Give 3% discount on the amount.
0 > Purchase Amount < Ksh. 3,000 - Pay full amount.
Write a program that asks for the customer’s purchase amount, then uses if statements to recommend
the appropriate payable amount. The program should cater for negative purchase amounts and display
the payable amount in each case.
Page 43 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 6 Notes
Looping/Repetition Control Structure
In many programming problems a sequence of statements or in some cases the entire program may
need to be executed repeatedly a definite or indefinite number of times. The repetition or iteration
control structure is used to control this. In a finite loop the number of iterations is determined and set
by the programmer. In an infinite loop the number of repetitions is dictated by a user or other factors.
C supports three loop versions:
while loop
do while loop
for loop.
The ‘while’ loop
The while statement is used to carry out looping instructions where a group of instructions executed
repeatedly until some conditions are satisfied. This is a pretest loop in that the test condition is placed
before the statement block that is to be repeatedly executed. The computer evaluates the test
condition statement and as long as it returns the Boolean value of true the statement block is executed
then control returns to the test condition statement for re-evaluation. Repetition will terminate when
the test condition statement returns false.
General form:
while (expression)
statement;
The statement will be executed as long as the expression is true, the statement can be a single or
compound
/* counter.c */
/* Displays the digits 1 through 9 */
main()
{
int digit=0; /* Initialisation */
while (digit<=9)
{
printf(“%d \n”, digit);
digit++;
}
return 0;
}
Example: Calculating the average of n numbers using a ‘while’ loop
Algorithm:
(i) Initialise an integer count variable to 1. It will be used as a loop counter.
(ii) Assign a value of 0 to the floating-point sum.
(iii) Read in the variable for n (number of values)
(iv) Carry out the following repeatedly (as long as the count is less or equal to n).
(v) Read in a number, say x.
(vi) Add the value of x to current value of sum.
(vii) Increase the value of count by 1.
Page 44 of 96
Structured Programming/Introduction to programming and Algorithm
(viii) Calculate the average: Divide the value of sum by n.
(ix) Write out the calculated value of average.
Solution
/* To add numbers and compute the average */
#include<stdio.h>
main()
{
int n, count = 1;
float x, average, sum=0.0;
/* initialise and read in a value of n */
printf(“How many numbers? “);
scanf(“%d”, &n);
/*Read in the number */
while (count<=n)
{
printf(“x = “);
scanf(“%f”, &x);
sum+=x;
count++;
}
/* Calculate the average and display the answer */
average = sum/n;
printf(“\n The average is %f \n”, average);
return 0;
}
(Note that using the while loop, the loop test is carried out at the beginning of each loop pass).
The ‘do .. while’ loop (Post-Test)
In this structure the test condition is placed after the block of code that is to be repeatedly executed.
The computer first executes the block of code then evaluates the test condition statement.
General form:
do
statement;
while(expression);
The statement (simple or compound) will be executed repeatedly as long as the value of the expression
is true. (i.e. non zero).
Notice that since the test comes at the end, the loop body (statement) must be executed at least once.
Rewriting the program that counts from 0 to 9, using the do while loop:
/* counter1.c */
/* Displays the digits 1 through 9 */
main()
{
int digit=0; /* Initialisation */
do
{
printf(“%d \n”, digit);
digit++;
Page 45 of 96
Structured Programming/Introduction to programming and Algorithm
} while (digit<=9);
return 0;
}
Exercise: Rewrite the program that computes the average of n numbers using the do while
loop.
The ‘for’ loop
This is the most commonly used looping statement in C.
General form:
for (expression1;expression2;expression3)
statement;
where:
expression1 is used to initialize some parameter (called an index). The index controls the loop action. It
is usually an assignment operator.
expression2 is a test expression, usually comparing the initialised index in expression1 to some maximum
or minimum value.
expression3 is used to alter the value of the parameter index initially assigned by expression and
is usually a unary expression or assignment operator);
Example
for (int k=0 k<=5; k++)
printf(k = %d \n”, k);
Output
0
1
2
3
4
5
Example: Counting 0 to 9 using a ‘for’ loop
/* Displays the digits 1 through 9 */
#include<stdio.h>
main()
{
int digit;
for(digit=0;digit<=9; digit++)
printf(“%d \n” , digit);
return 0;
}
Nesting statements
It is possible to embed (place one inside another) control structures, particularly the if and for
statements.
Page 47 of 96
Structured Programming/Introduction to programming and Algorithm
Example
if (number>6)
if (number<12)
printf(“You are very close to the target!”);
else
printf(“Sorry, you lose!”);
Page 48 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 7: Arrays
Introduction
Arrays a kind of data structure that can store a fixed-size sequential collection of elements of the same
type. An array is used to store a collection of data, but it is often more useful to think of an array as a
collection of variables of the same type.
Instead of declaring individual variables, such as number0, number1, ..., and number99, you declare one
array variable such as numbers and use numbers[0], numbers[1], and ..., numbers[99] to represent
individual variables. A specific element in an array is accessed by an index.
Objectives
Objectives by the end of this topic you should be able to:
Describe the concept of Arrays.
Demonstrate how to use arrays in a program.
Differentiate between the various types of arrays.
Learning activities
Learning Activity 7.1: Reading
Read the provided topic notes on Arrays.
Learning Activity 7.2: Practical exercise
Write a program that defines a 3 by 3 three dimensional array, and load it with the numbers 1 to 27.and
display the sum of the elements.
Post your answer in the provided assignment box
Learning Activity 7.3: Discussion
Attempt the quiz below. Post your discussion in the provided discussion forum
Revision Exercises
Page 49 of 96
Structured Programming/Introduction to programming and Algorithm
(a) Write a statement that would create the above table and initialize it with the given
scores.
(b) Suppose the name of the above table was SCORES.
(i) What is the value of SCORES[2][3]?
(ii) What is the result of: (SCORES[3][3] % 11) *3?
(iii) Write a complete program that initializes the above values in the table,
computes and displays the total mark and average scored by each student.
4. Show how to initialise an integer array called items with the values 1 through 10.
Assessment
Activity 7.2 and activity 7.3 will be graded
Topic Resources
Page 50 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 7 Notes
Introduction
It is often necessary to store data items that have common characteristics in a form that supports
convenient access and processing e.g. a set of marks for a known number of students, a list of prices,
stock quantities, etc. Arrays provide this facility.
What Is An Array?
An array is a homogeneous ordered set of elements or a series of data objects of the same type stored
sequentially. That is to say that an array has the following characteristics;
Other examples;
int emp_no[15]; /*An array to hold 15 integer employee numbers */
char alpha [26]; /*an array to hold 26 characters */
Declaring Arrays
An array definition comprises;
(i) Storage class (optional)
(ii) Data type
(iii) Array name
(iv) Arraysize expression (usually a positive integer or symbolic constant). This is enclosed in square
brackets.
Examples:
Page 51 of 96
Structured Programming/Introduction to programming and Algorithm
(ii) staticchar message[20]; A 20 character-type array called message. The individual array values persist
within function calls (static).
Array Dimensions
An array’s dimension is the number of indices required to manipulate the elements of the array.
(ii) A one-dimensional array requires a single index e.g. int numbers [10];
Resembles a single list of values and therefore requires a single index to vary between 0 to (array size -1).
(ii) Multi dimensional arrays
They are defined the same way as a one-dimensional array except that a separate pair of square
brackets is required for each subscript. Thus a two-dimensional array will require two pairs of
brackets, a three dimensional array will require three pairs of square brackets, etc.
Two – dimensional array
An m by n two-dimensional array can be thought of as a table of values having m rows and n columns.
The number of elements can be known by the product of m (rows) and n(columns).
Examples of two-dimensional array declarations
float table[50][50];
char page[24][80];
Static double records[100][60][255];
Example
Two-dimensional array representing sales ( ‘000 tonnes for a product in four months for five years).
Yr1 Yr2 Yr3 Yr4 Yr5
23 21 27 23 22
Month 1
Month 2 24 20 19 18 20
Month 3 26 23 26 29 24
Month 4 27 25 24 23 25
Arrays, like simple variables can be automatic, external or static.
An automatic array is one defined inside a function including formal arguments. C allows us to initialise
automatic array variables as follows.
main()
{
(ii) Persist (retain values) as long as the program runs. Because they are not defined in any
particular function, they don’t expire when a particular function terminates.
Page 52 of 96
Structured Programming/Introduction to programming and Algorithm
Have a look at the following example.
int SOWS [5] = {12, 100, 8, 9 ,6};
main()
{
----------
----------
}
int feed(int n)
{
---------
---------
}
(iii) A static array is local to the function in which it is declared but like an external array, it retains its
values between function calls and is inititialised to zero by default.
Example
int account(int n, int m)
{
static int k[2] = {343, 332};
---------
---------
}
Initialising Arrays
Like other types of variables, you can give the elements of arrays initial values. This is accomplished by
specifying a list of values the array elements will have. The general form of array initialisation for a one-
dimensional array is shown below.
type array_name[size] = { value list };
The value list is a comma separated list of constants that are type compatible with the base
type of the array. The first constant will be placed in the first position of the array, the second
constant in the second position and so on. Note that a semi colon follows the }.
In the following example, a five – element integer array is initialised with the squares of the number 1
though 5.
int i[5] = {1, 4, 9, 16, 25};
This means that i[0] will have the value 1 and i[4] will have the value 25.
You can initialise character arrays in two ways. First, if the array is not holding a
null -terminated string, you simply specify each character using a comma separated list. For example,
this initialises a with the letters ‘A’, ‘B’, and ‘C’.
char a[3] = { ‘A’, ‘B’, ‘C’};
If the character array is going to hold a string, you can initialise the array using a quoted string, as
shown here.
Page 53 of 96
Structured Programming/Introduction to programming and Algorithm
Notice that no curly braces surround the string. They are not used in this form of initialisation. Because
strings in C must end with a null, you must make sure that the array you declare is long enough to
include the null. This is why name is 6 characters long, even though “Peter” is only 5 characters. When
a string constant is used, the compiler automatically supplies the null terminator.
Multidimensional arrays are initialised the same way as one-dimensional ones.
For example, here the array sqr is initialised with the values 1 though 9, using row order.
This initialisation causes sqr[0][0] to have the value 1, sqr[0][1] to contain 2, sqr[0][2] to contain 3,
and so forth.
If you are initialising a one-dimensional array, you need not specify the size of the array, simply put
nothing inside the square brackets. If you don’t specify the size, the compiler simply counts the number
of initialisation constants and uses that that value as the size of the array.
For example int p[] = {1,2,4,8,16,32,64,128}; causes the compiler to create an initialised array eight
elements long.
Arrays that don’t have their dimensions explicitly specified are called unsized arrays. An unsized array is
useful because it is easier for you to change the size of the initialisation list without having to count it
and then change the array dimension dimension. This helps avoid counting errors on long lists, which is
especially important when initialising strings.
Here an unsized array is used to hold a prompting message.
char prompt[ ] = “Enter your name: “;
If at a later date, you wanted to change the prompt to “Enter your last name: “ , you would not have to
count the characters and then change the array size.
For multi dimensional arrays, you must specify all but the left dimension to allow C to index the array
properly. In this way you may build tables of varying lengths with the compiler allocating enough storage
for them automatically.
For example, the declaration of sqr as an unsized array is shown here.
int sqr[][3] = {
1, 2, 3,
4, 5, 6,
7, 8, 9
};
The advantage to this declaration over the sized version is that tables may be lengthened or shortened
without changing the array dimensions.
Page 54 of 96
Structured Programming/Introduction to programming and Algorithm
#include<stdio.h>
#define MONTHS 12
int days [MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
main()
{
int index;
extern int days[ ];
for (index=0; index <MONTHS; index + + )
printf( “Month %d has %d days. \n ”, index+1, days [index]);
return 0;
}
Explanation
By defining days [ ] outside the function, we make it external. We initialise it with a list
enclosed in braces, commas are used to separate the members of the list.
Inside the function the optional declaration extern int days [ ]; uses the keyword extern to
remind us that days array is defined elsewhere in the program as an external array. Because it
is defined elsewhere we need not give its size here. (ommitting it has no effect on how the
program works)
Note:
The number of items in the list should match the size of the array.
Processing an array
Single operations which involve entire arrays are not permitted in C. Operations such as
assignment, comparison operators, sorting etc must be carried out on an element-by-element
basis. This is usually accomplished within a loop where each pass through the loop is used to
process one array element. The number of passes through the loops will therefore be equal to
the number of array elements to be processed.
#include<stdio.h>
Page 55 of 96
Structured Programming/Introduction to programming and Algorithm
main()
{
int n, count;
float avg, d, sum =0.0;
float list[100];
/* Read in a value of n */
printf(“ \n How many numbers will be averaged ? “);
scanf(“ %d “, &n);
printf(“ \n”);
/* Read in the numbers */
for (count = 0; count < n; count++)
{
printf(“ i = %d x = ”, count+1);
scanf(“ %f “, &list[count]);
sum+=list[count];
}
/* Calculate the average */
avg = sum/n;
printf(“\n The average is %5.2f \n\n “, avg);
/* Calculate deviations from the average */
for (count =0; count < n; count ++)
{
d = list[count] – avg;
printf(“ I = %d x = %5.2f , d = %5.2f “, count + 1, list[count], d);
}
return 0;
} /* End of program */
Output
The average is 2
Page 56 of 96
Structured Programming/Introduction to programming and Algorithm
Exercise
Assuming that the number of values in the list is already known to be 3, and that the list values
are 5, 6, 8, rewrite the above program without having to request input from the keyboard.
Arrays are especially useful when you want to sort information. For example, this program lets
the user enter up to 100 numbers and then sorts them. The sorting algorithm is the bubble
sort. The general concept of the bubble sort is the repeated comparisons and, if necessary
exchanges of adjacent elements. This is a little, like bubbles in a tank of water with each bubble,
in turn, seeking its own level.
#include<stdio.h>
main()
{
int item[100];
int a, b, t;
int count;
/ * Read in the numbers */
printf(“ How many numbers? “);
scanf(“ %d “, &count);
for (a = 0; a < count; a ++)
scanf(“ %d”, &item[a]);
/* Now sort them using a bubble sort */
for(a = 1; a < count; + + a)
for(b = count –1; b > =a; - - b)
{
/* Compare adjacent items */
if (item[b –1] > item[b])
/* exchange the elements */
{
Page 57 of 96
Structured Programming/Introduction to programming and Algorithm
t = item[b – 1];
item[b –1] = item[b];
item[b] = t;
}
}
/* Display sorted list */
for(t = 0; t < count; t++)
printf(“ %d “, item[t]);
return 0;
}
#include<stdio.h>
#define STUDENT 5 /* Set maximum number of students */
#define CATS 4 /* Set maximum number of cats */
main()
{
/* Declare and initialize required variables and array */
int rows, cols, SCORES[STUDENT][CATS];
float cats_sum , stud_average, total_sum=0.0, average;
printf(“Entering the marks ...............\n\n”);
/* Read in scores into the array */
for(rows=0;rows<STUDENT; rows++) /* Outer student
loop */
{
printf(“\n Student % d\n”, rows+1);
cats_sum=0.0; /* Initializes sum of a student’s marks */
for(cols=0;cols<CATS;cols++) /* Inner loop for cats */
{
printf(“CAT %d\n”,cols+1);
scanf(“ %d”, &SCORES[rows][cols]);
cats_sum + =SCORES[rows][cols]; /* Adjust sum of marks */
Page 58 of 96
Structured Programming/Introduction to programming and Algorithm
}
stud_average=cats_sum/CATS; /*Calculate the average of each student */
printf(“\n Total marks for student %d is %3.2f “,rows+1, cats_sum);
printf(“\n Average score for the student is %3.2f “,stud_average);
total_sum+=cats_sum; /* Adjust the class total marks */
}
average=total_sum/(STUDENT*CATS); /* Compute the class average */
printf(“\n Total sum of marks for the class is %3.2f\n “, total_sum);
printf(“\n The class average is %3.2f\n “,average);
/*Printing the array elements */
for(rows=0;rows<STUDENT; rows++)
for(cols=0;cols<CATS;cols++)
{
printf(“\n Student %d, Cat %d “,rows+1, cols+1);
printf(“\n\t %d \n”, SCORES[rows][cols]);
}
return 0;
}
Strings
In C, one or more characters enclosed between double quotes is called a string. C has no
built-in string data type. Instead, C supports strings using one dimensional character arrays.
A string is defined as a null terminated character array. In C, a null is 0. This fact means that
you must define the array is going to hold a string to be one byte larger then the largest string
it is going to hold, to make room for the null.
To read a string from the keyboard you must use another of C’s standard library functions, gets( ),
which requires the STDIO.H header file. To use gets( ), call it using the name of a character array
without any index. The gets( ) function reads characters until you press <ENTER>. The carriage return is
not stored, but it is replaced by a null, which terminates the string. For example, this program reads and
writes a string entered at the keyboard.
#include<stdio.h>
main()
Page 59 of 96
Structured Programming/Introduction to programming and Algorithm
{
char str[80];
int i;
printf( “ Enter a string (less than 80 characters): \n”);
gets(str);
for( i = 0 ; str[i]; i++)
printf(“ %c”, str[i]);
return 0;
}
The gets( ) function performs no bounds checking, so it is possible for the user to enter more characters
that gets( ) is called with can hold. Therefore be sure to call it with an array large enough to hold the
expected input.
In the previous program, the string that was entered by the user was output to the screen a character at
a time. There is however a much easier way to display a string, using printf( ). Here is the previous
program rewritten..
#include<stdio.h>
main()
{
char str[80];
printf( “ Enter a string (less than 80 characters): \n”);
gets(str);
printf(str);
return 0;
}
If you wanted to output a new line, you could output str like this:
This method uses the %s format specifier followed by the new line character and uses the array as a
second argument to be matched by the %s specifier.
The C standard library supplies many string-related functions. The four most important are strcpy( ),
strcat( ),strcmp( ) and strlen( ). These functions require the header file STRING.H.
Page 60 of 96
Structured Programming/Introduction to programming and Algorithm
The strcpy( ) function has this general form.
strcpy( to, from);
It copies the contents of from to to. The contents of from are unchanged. For example, this fragment
copies the string “hello’ into str and displays it on the screen.
char str[80];
strcpy(str, “hello”);
printf(“%s”, str);
The strcpy( ) function performs no bounds checking, so you just make sure that the array on the
receiving end is large enough to hold what is being copied, including the null terminator.
The strcat( ) function adds the contents of one string to another. This is called concatenation. Its general
form is
It adds the contents of from to to. It performs no bounds checking, so you must make sure to is large
enough to hold its current contents plus what it will be receiving. This fragment displays hello there.
char str[80];
strcpy(str, “hello”);
strcat(str, “there”);
printf(str);
The strcmp( ) function compares two strings. It takes this general form.
strcmp(s1, s2);
It returns 0 if the strings are the same. It returns less than 0 if s1 is less than s2 and greater than 0 if s1 is
greater than s2. The strings are compared lexicographically; that is in dictionary order. Therefore, a
string is less than another when it would appear before the other in a dictionary. A string is greater than
another when it would appear after the other. The comparison is not based upon the length of the
string. Also, the comparison is case-sensitive, lowercase characters being greater than uppercase. This
fragment prints 0, because the strings are the same.
The strlen( ) function returns the length , in characters, of a string. Its general form is
strlen(str);
Page 61 of 96
Structured Programming/Introduction to programming and Algorithm
The strlen( ) function does not count the null terminator.
#include<string.h>
#include<stdio.h>
main()
{
char str1[80], str2[80];
int i;
printf(“ Enter the first string: “);
gets(str1);
printf(“ Enter the second string: “);
gets(str2);
/* See how long the strings are */
printf( “ %s is %d characters long \n “, str1, strlen(str1));
printf( “ %s is %d characters long \n “, str2, strlen(str2));
/* Compare the strings */
i = strcmp(str1, str2);
if ( ! i)
printf(“The strings are equal. \n”);
else if (i < 0)
printf(“%s is less than %s \n“, str1,str2);
else
printf(“%s is greater than %s \n“, str1,str2);
/* Concatenate str2 to end of str1 if there is enough room */
if (strlen(str1) + strlen(str2) < 80)
{
strcat(str1, str2);
printf( “%s \n”, str1);
}
/* copy str2 to str1 */
Page 62 of 96
Structured Programming/Introduction to programming and Algorithm
strcpy(str1, str2);
printf( “%s %s \n”, str1, str2);
return 0;
}
Note:
You can use scanf( ) to read a string using the %s specifier, but you probably won’t need to.
Why? This is because when scanf( ) inputs a string, it stops reading that string when the first
white space character is encountered. A white space character is a space, a tab, or a new line.
This means that you cannot use scanf() to read input like the following string.
Because there is a space after the word This, scanf( ) will stop inputting the string at that point. That is
why gets( ) is generally used to input strings.
Page 63 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 8: Functions
Introduction
A function is a group of statements that together perform a task. Every C program has at least one function,
which is main(), and all the most trivial programs can define additional functions.
You can divide up your code into separate functions. How you divide up your code among different
functions is up to you, but logically the division is such that each function performs a specific task.
A function declaration tells the compiler about a function's name, return type, and parameters. A
function definition provides the actual body of the function.
Objectives
Objectives by the end of this topic you should be able to:
Describe the concepts of functions in prigramming
Demonstrate how to use functions in a program.
Demonstrate how recursive functions work.
Learning activities
Page 64 of 96
Structured Programming/Introduction to programming and Algorithm
……
}
int fucntion1(int x, int y)
{
int z;
……
z = ……
return(z);
}
(b) main()
{
int a;
float b;
long int c;
……
c = funct1(a,b);
……
}
int func1(int x, float y)
{
long int z;
……
……
z = ……
return (z);
}
4. Describe the output generated by the followed program.
#include<stdio.h>
int func(int count);
main()
{
int a,count;
for (count=1; count< = 10; count + +)
{
a = func(count);
printf(“%d”,a);
}
return 0;
}
int func(int x)
{
int y;
y = x * x;
return(y);
}
5. (a) What is a recursive function?.
Page 65 of 96
Structured Programming/Introduction to programming and Algorithm
(b) State two conditions that must be satisfied in order to solve a problem using recursion.
Assessment
Activity 8.2 and activity 8.3 will be graded
Topic Resources
Topic 8 Notes
FUNCTIONS
Introduction
A function is a self-contained program segment that carries out some specific well - defined task. Every
C program consists of one or more functions. One of these functions must be called main. Execution of
the program will always begin by carrying out the instructions in main. Additional functions will be
subordinate to main, and perhaps to one another.
If a program contains multiple functions, their definitions may appear in any order, though they must be
independent of one another. That is, one function definition cannot be embedded within another. A
function will carry out its intended action whenever it is accessed (whenever the function is called) from
some other portion of the program. The same function can be accessed from several different places
within a program. Once the function has carried out its intended action, control will be returned to the
point from which the function was accessed.
Generally the function will process information that is passed to it from the calling portion of the
program and return a single value. Information is passed to the function via special identifiers called
arguments (also called parameters), and returned via the return statement. Some functions however,
accept information but do not return anything.
The use of programmer-defined functions allows a large program to be broken down to a number of
smaller, self-contained components each of which has some unique identifiable purpose. Thus a C
program can be modularized through the intelligent use of functions.
There are several advantages to this modular approach to program development; for example many
programs require that a particular group of instructions be accessed repeatedly from several different
places in the program. The repeated instructions can be placed within a single function which can then
be accessed whenever it is needed. Moreover a different set of data can be transferred to the function
each time it is accessed . Thus the use of a function eliminates the need for redundant programming of
the same instructions.
Page 66 of 96
Structured Programming/Introduction to programming and Algorithm
Equally important is the logical clarity resulting from the decomposition of a program into several
concise functions where each function represents some well-defined part of the overall problem. Such
programs are easier to write and easier to debug and their logical structure is more apparent than
programs which lack this type of structure. This is especially true of lengthy, complicated programs.
Most C programs are therefore modularised in this manner, even though they may not involve repeated
execution of some task. In fact the decomposition of a program into individual program modules is
generally considered to be good programming practice.
This use of functions also enables a programmer to build a customized library of frequently used
routines or of routines containing system-dependent features. Each routine can be programmed as a
separate function and stored within a special library file. If a program requires a particular routine, the
corresponding library function can be accessed and attached to the program during the compilation
process. Hence a single function can be utilised by many different programs.
Defining A Function
A function definition has two principle components; the first line (including the argument declaration),
and the body of a function. The first line of a function definition contains the value returned by the
function, followed by the function name, and (optionally) a set of arguments separated by commas and
enclosed in parenthesis. Each argument is preceded by its associated type declaration. Any empty pair
of parenthesis must follow the function name if the function definition does not include any arguments.
Where data-type represents the data type of the item that is returned by the function. functionname
represents the function name , and type 1 , type 2 ,…….., type n represents the data types of the
arguments, argument 1, argument 2 ,……..argument n .
The data types are assumed to be of type int if they are not shown explicitly. However, the omission of
the data type is considered poor programming practice, even if the data items are integers.
The arguments are called formal arguments because they represent the names of data items that are
transferred into the function from the calling portion of the program. They are also known as
parameters or formal parameters. (The corresponding arguments in the function reference are called
actual arguments since they define the data items that are actually transferred). The names of the
formal arguments need not be the same as the names of the actual arguments in the calling portion of
the program. Each formal argument must be of the same data type, however, as the data item it
receives from the calling portion of the program.
The remainder of the function definition is a compound statement that defines the action to be taken by
the function. This compound statement is sometimes referred to as the body of the function. Like any
other compound statement, this statement can contain expressions statements, other compound
statements, control statements and so on. It should include one or more return statements in order to
Page 67 of 96
Structured Programming/Introduction to programming and Algorithm
return a value to the calling portion of the program. A function can access other functions. In fact it can
access itself (a process known as recursion).
Information is returned from the function to the calling portion of the program via a return statement.
The return statement also causes the program logic to return to the point from which the function was
accessed.
return (expression);
Only one expression can be included in the return statement. Thus, a function can return only one value
to the calling portion via return.
The function shown below calculates the functional of a given positive integer n. The factorial is
returned as a long integer quantity, since factorials grow in magnitude very rapidly as n increases.
Notice the long int specification that is included in the first line of the function definition. The local
variableprodis declared to be a long integer within the function. It is assigned an initial value of 1 though
its value is recalculated within a for loop. The final value of prod which is returned by the function
represents the desired value of n factorial (n!).
If the data type specified in the first line is inconsistent with the expression appearing in the return
statement, the compiler will attempt to convert the quantity represented by the expression to the data
Page 68 of 96
Structured Programming/Introduction to programming and Algorithm
type specified in the first line. This could result in a compilation error or it may involve a partial loss in
data (due to truncation). Inconsistency of this type should be avoided at all costs.
The following definition is identical to that in Example 1 except that the first line does not include a type
specification for the value that is returned by the function.
The function expects to return an ordinary integer quantity since there is no explicit type
declaration in the first line of the function definition. However the quantity being returned is
declared as a long integer within the function. This inconsistency can result in an error (some
compilers will generate a diagnostic error and then stop without completing the compilation).
The problem can be avoided however by adding a long int type declaration to the first line of
the function definition as Example 1 shows.
The keyword void can be used as a type specifier when defining a function that does not return anything
or when the function definition does not include any arguments. The presence of this keyword is not
mandatory but it is good programming practice to make use of this feature.
Consider a function that accepts two integer quantities, determines the larger of the two and displays it
(the larger one). This function does not return anything to the calling portion. Therefore the function can
be written as;
Page 69 of 96
Structured Programming/Introduction to programming and Algorithm
}
The keyword void added to the first line indicates that the function does not return anything.
Accessing A Function
A function can be accessed by specifying its name followed by a list of arguments enclosed in
parenthesis and separated by commas. If the function call does not require any arguments an empty
pair of parenthesis must follow the name of the function. The function call may be part of a simple
expression (such as an assignment statement), or it may be one of the operands within an expression.
The arguments appearing in the function are referred to as actual arguments in contrast to the formal
arguments that appear in the first line of the function definition. (They are also known as actual
parameters or arguments). In a normal function call, there will be one actual argument for each formal
argument. Each actual argument must be of the same data type as its corresponding formal argument.
Remember that it is the value of each actual argument that is transferred into the function and assigned
into the corresponding formal argument.
There may be several different calls to the same function from various places within a program. The
actual arguments may differ from one function call to another. Within each function call however the
actual arguments must correspond to the formal arguments in the functions definition; i.e. the number
of actual arguments must be the same as the number of formal arguments and each actual argument
must be of the same data type as its corresponding formal argument.
The following program determines the largest of three integers quantities. The program makes use of a
function that determines the larger of two integer quantities. The overall strategy is to determine the
larger of the first two quantities and then compare the value with the third quantity. The largest
quantity is then displayed by the main part of the program.
Page 70 of 96
Structured Programming/Introduction to programming and Algorithm
{
int a , b , c ,d;
/*read the integer quantities*/
printf(“\n a = ”);
scanf(“%d”, &a);
printf(“\n b = ” );
scanf(“%d”, &b);
printf(“\n c = ”);
scanf(“%d”, &c);
/* Calculate and display the maximum value */
d = maximum (a, b);
printf (“\n \n maximum = % d ”, maximum (c ,d));
return 0;
}
The function maximum is accessed from two different places in main. In the first call to maximum, the
actual arguments are the variables a and b whereas in the second call, the arguments are c and d. (d is a
temporary variable representing the maximum value of a and b).
In this statement, we see that one of the calls to maximum is an argument for the other call. Thus the
calls are embedded one within the other and the intermediary variable d is not required. Such
embedded functions calls are permissible though their logic may be unclear. Hence they should
generally be avoided by beginning programmers.
Function Prototypes
In the previous function examples, the programmer -defined function has always preceded main. Thus
when the programs are compiled, the programmer-defined function will have been defined before the
first function access. However many programmers prefer a top drawn approach in which main appears
ahead of the programmer-defined function definition. In such a situation, the function access (within
main) will precede the function definition. This can be confusing to the compiler unless the compiler is
Page 71 of 96
Structured Programming/Introduction to programming and Algorithm
first alerted to the fact that the function being accessed will be defined later in the program. A function
prototype is used for this purpose
Function prototypes are usually written at the beginning of a program ahead of any programmer-
defined function (including main) The general form of a function prototype is;
Where data_type represents the type of the item that is returned by the function, function_name
represents the name of the function, type 1, type 2, … …., type n represent the types of the arguments 1
to n.
Note that a function prototype resembles the first line of a function definition (although a
definition prototype ends with a semicolon).
The names of the argument within the function prototype need not be declared else where in the
program since these are “dummy” argument names that are recognised only within the prototype. In
fact, the argument names can be omitted (though it is not a good idea to do so). However the
arguments data types are essential.
In practice, the argument names usually included are often the same as the names of the actual
arguments appearing in one of the function calls. The data types of the actual arguments must conform
to the data types of the arguments within the prototype.
Function prototypes are not mandatory in C. They are desirable however because they further facilitate
error checking between the calls to a function and the corresponding function definition.
Here is a complete program to calculate the factorial of a positive integer quantity. The program utilises
the function factorial defined in example 1 and 2. Note that the function definition precedes main.
Page 72 of 96
Structured Programming/Introduction to programming and Algorithm
scanf (“%d “, &n);
/* Calculate and display the factorial*/
printf (“\n n =%\d”, factorial (n));
return 0;
}
/*Calculate the factorial of n*/
long int factorial (int n)
{
int i;
long int prod=1;
if (n >1)
for( i=2; i<=n; i ++)
prod *= i;
return (prod);
}
The programmer-defined function makes use of an integer argument (n) and two local variables (an
ordinary integer and a long integer). Since the function returns a long integer, the type declaration long
int appears in the first line of the function definition.
Recursion
Recursion is the process by which a function calls itself repeatedly until a special condition is satisfied.
Example
Page 73 of 96
Structured Programming/Introduction to programming and Algorithm
Or generally,
This is to say that in the factorial example, the calculation of n is expressed in form of a previous result
(condition (i) is satisfied).
Page 74 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 9: Pointers, Unions and Structures
Introduction
A pointer is a variable whose value is the address of another variable, i.e., direct address of the memory
location. Like any variable or constant, you must declare a pointer before using it to store any variable
address
A union is a special data type available in C that allows to store different data types in the same memory
location. You can define a union with many members, but only one member can contain a value at any
given time. Unions provide an efficient way of using the same memory location for multiple-purpose.
structure is another user defined data type available in C that allows to combine data items of different
kinds.
Objectives
Objectives by the end of this topic you should be able to:
Describe the concepts of structures, unions and pointers.
Demonstrate how to implement structures and Uions
Demonstrate how to implement pointers
Learning activities
Page 75 of 96
Structured Programming/Introduction to programming and Algorithm
Element Type
Invoice number integer
Customer number integer
Invoice date structure
(with three integer elements; day, month, year)
Customer address string (20 characters)
Item structure
[with product code (integer), unit price (float)
quantity (float) , amount (double)]
Invoice Total double
6. How is a structure different from a union?
Assessment
activity 9.2. and activity 9.3 will be graded
Topic Resources
Page 76 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 9 Notes
POINTERS
What Is A Pointer?
A pointer is a variable that holds the memory address of another variable. For example, if a
variable called p contains the address of another variable called q, then p is said to point to q.
Therefore if q were at location 100 in memory, then p would have the value 100.
Pointer Declaration
Here, type is the base type of the pointer. The base type specifies the type of the object that the
pointer can point to. Notice that an asterisk precedes the variable name. This tells the computer
that a pointer variable is being created. For example, the following statement creates a pointer
to an integer.
int *p;
Pointer Operators
C contains two special pointer operators: * and&. The & operator returns the address of the
variable it precedes. The * operator returns the value stored at the address that it precedes.
The * pointer operator has no relationship to the multiplication operator, which uses the same
symbol). For example, examine this short program.
#include<stdio.h>
main()
{
int *p, q;
q = 100; /* assign q 100 */
p = &q; /* assign p the address of q*/
printf(“%d”, *p);/* display q’s value using pointer*/
return 0;
Page 77 of 96
Structured Programming/Introduction to programming and Algorithm
}
First, the line int *p, q; defines two variables: p, which is declared as an integer pointer, and q,
which is an integer. Next, q is assigned the value 100.
In the next line, p is assigned the address of q. You can verbalize the & operator as “address of.“
Therefore, this line can be read as: assign p the address of q. Finally, the value is displayed
using the * operator applied to p. The * operator can be verbalized as “at address”.
Therefore the printf( ) statement can be read as “print the value at address q,” which is 100.
When a variable value is referenced through a pointer, the process is called indirection. It is
possible to use the * operator on the left side of an assignment statement in order to assign a
variable a new value using a pointer to it. For example, this program assigns a value q indirectly
using the pointer p.
#include<stdio.h>
main()
{
int *p, q;
p = &q; /* get q’s address */
*p = 199; /* assign q a value using a pointer */
printf(“q’s value is %d”, q);
return 0;
}
Note: The type of the variable and type of pointer must match.
(a) Assignment
One can assign an address to a pointer by:
(i) Using an array name or
(ii) Using the address operator
From the previous example, p1 is assigned the address of the beginning of the array which is cell
234.
Page 78 of 96
Structured Programming/Introduction to programming and Algorithm
Dereferencing (value – finding)
The * operator gives the value pointed to.
From the previous example, p1 = 100 which is the value stored in location 234.
From the previous example, p1 is stored in address 3606 whose value is 234.
Program that uses a for loop that counts from 0 to 9. It puts in the numbers using a pointer.
#include<stdio.h>
main()
{
int i,*p;
p = &i;
for ( i =0; i <10; i++)
printf (“ %d ”, *p);
return 0;
}
#include<stdio.h>
main()
{
int u1, u2;
int v = 3;
int *pv;
u1 = 2 * ( v + 5 );
pv = &v;
u2 = 2 * (*pv + 5 );
printf(“ \n u1 = %d u2 = %d ”, u1, u2);
Page 79 of 96
Structured Programming/Introduction to programming and Algorithm
return 0;
}
Output
u1 = 16, u2 = 16.
Explain why.
Note
Never use a pointer of one type to point to an object of a different type.
For example:
int q;
float *fp;
fp = &q; /* pointer fp assigned the address of an integer */
fp = 100.23; / address used for assignment */
Do not use a pointer before it has been assigned the address of a variable. May cause
program to crash.
For example:
main()
{
int *p;
*p =10;*/Incorrect since p is not pointing to anything */
…
}
The above is meaningless and dangerous.
Page 80 of 96
Structured Programming/Introduction to programming and Algorithm
STRUCTURES
Introduction
Suppose you want to write a program that keeps tracks of students [Name, Marks] i.e. a variety of
information to be stored about each student. This requires;
An array of strings (for the Names).
Marks in an array of integers.
Keeping track of many related arrays can be problematic, for example in operations such as sorting all of
the arrays using a certain format.
A data form or type containing both the strings and integers and somehow keep the information
separate is required. Such a data type is called a structure.
What Is A Structure?
A structure is an aggregate data type that is composed of two or more related elements.
Unlike arrays, each element of a structure can have its own type, which may differ from the types of any
other elements.
Setting Up A Structure
struct student
{
char name[SIZE];
int marks;
};
The above describes a structure made up of a character array name, and int variable marks.
Explanation
The keyword struct announces to the computer that what follows is a structure data type
Page 81 of 96
Structured Programming/Introduction to programming and Algorithm
template.
The tag follows: which is a shorthand label that can be used later to refer to this structure.
In the above example, the tag name is student.
A list of structure members enclosed in a pair of braces. Each member is described by its
own declaration. For example; the name portion is a character array of SIZE elements.
Note:Members of a structure can be any data types including other structures.
The computer creates a variable mystudent following the structure template. It allocates space for a
character array of SIZE elements and for an integer variable.
One can declare as many variables of type student as possible. For example,
struct student mystudent, student1, x, y, z; etc.
Note: One can combine the process of defining the structure template and the process of
defining a structure variable as follows;
struct student
{
char name;
int marks;
Page 82 of 96
Structured Programming/Introduction to programming and Algorithm
}mystudent;
A general form of a structure can be given as follows;
struct tagname{
type1 element1;
type2 element2;
.
.
typeN elementN;
}variable list;
Initializing A Structure
A structure can be initialized like any other variable - external, static or automatic. This will depend on
where the structure is defined.
Example
static struct student mystudent =
{
“Fred Otieno”,25;
};
Each member is given its own line of initialization and a comma separator, one member initialization
from the next.
Individual structure members are accessed using a period (.) - structure member operator.
Note: You can use mystudent.marks exactly the way you use other integer variables.
For example, you can use gets(mystudent.name);
or
scanf(“%d”, &mystudent.marks);
Note: Although mystudent is a structure, mystudent.marks is an int type and is like any other integer
variable. Therefore;
Page 83 of 96
Structured Programming/Introduction to programming and Algorithm
If stud1 is another student structure declared as follows;
struct student stud1;, then it is possible to read the name and marks into the variable using the
statements;
gets(stud1.name)
scanf(“%d”, &stud1.marks);
#include<stdio.h>
#define SIZE 40
struct student
{
char name[SIZE];
int marks;
};
main()
{
struct student mystudent; /* declare mystudent as a student type */
printf(“Please enter the name of the student \n”);
scanf(“%s”, mystudent.name);
printf(“Enter the marks obtained \n”);
scanf(“%d”, &mystudent.marks);
printf(“%s: got %d “, mystudent.name, mystudent.marks);
return 0;
}
Use of Structures
Where are structures useful?
The immediate application that comes to mind is database management. For example, to maintain data
about employees in an organization, books in a library, items in a store, financial transactions in a
company, etc.
Page 84 of 96
Structured Programming/Introduction to programming and Algorithm
Their use however, stretches beyond database management. They can be used for a variety of
applications like:
Checking the memory size of the computer.
Hiding a file from a directory
Displaying the directory of a disk.
Interacting with the mouse
Formatting a floppy
Drawing any graphics shape on the screen.
Changing the size of the cursor.
To program the above applications, you need thorough knowledge of internal details of the operating
system
Unions
A union is a single memory location that stores two or more variables. Members within a union
all share the same storage area, whereas each member within a structure is assigned its own
unique storage area.
Thus, unions are used to conserve memory. They are useful for applications involving multiple
members, where values need not be assigned to all members at a time.
The similarity between structures and unions is that both contain members whose individual
data types may differ from one another.
Format of a union
uniontag
{
member 1;
member 2;
…..
…..
member n;
};
Or
uniontag
{
member 1;
member 2;
…..
…..
member n;
}variable list;
Consider that a C program contains the following union declaration:
union id{
char color[12];
Page 85 of 96
Structured Programming/Introduction to programming and Algorithm
int size;
}shirt, blouse;
Explanation
(i) There are two union variables shirt and blouse. Each variable can represent either a 2
character string (colour) or a integer quantity (size) at any one time. The 12-character string
will require more storage area within the computer’s memory than the integer quantity.
Therefore a block of memory large enough for the 12-character string will be allocated to
each union variable.
(ii) A union may be a member of a structure and a structure may be a member of a union and
may be freely mixed with arrays.
Also consider the following example.
union id{
char color[12];
int size;
};
struct clothes
{
char manufact[20];
float cost;
union id descr;
}shirt,blouse;
Explanation
shirt and blouse are structure variables of type clothes
Each variable will contain the following members;
A string manufact
A floating point quantity cost
A union descr. The union may represent either a string (color) or an integer quantity (size).
Page 86 of 96
Structured Programming/Introduction to programming and Algorithm
int size;
}descr;
};shirt, blouse;
Page 87 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 10: File Input and Output
Introduction
When we say Input, it means to feed some data into a program. An input can be given in the form of a file
or from the command line. C programming provides a set of built-in functions to read the given input and
feed it to the program as per requirement.
When we say Output, it means to display some data on screen, printer, or in any file. C programming
provides a set of built-in functions to output the data on the computer screen as well as to save it in text or
binary files.
Objectives
Objectives by the end of this topic you should be able to:
Describe the various ways of implementing file input.
Explain the various ways of implementing file outputs.
Differentate between the file input and file output.
Learning activities
Page 88 of 96
Structured Programming/Introduction to programming and Algorithm
Topic 10 Notes
Introduction to File Input and Output
So far, all the output (formatted or not) in this course has been written out towhat is called standard output (which is
usually the monitor). Similarly all input has come from standard input (usually associated with the keyboard). The C
programmer can also read data directly from files and write directly to files. To work with files, the following steps
must be taken:
1. Declare variables to be of type FILE.
2. Connect the internal FILE variable with an actual data file on your hard disk. This association of a FILE
variable with a file name is done with the fopen() function.
3. Perform I/O with the actual files using fprint() and fscanf() functions.
4. Break the connection between the internal FILE variable and actual disk file. This disassociation is done
with the fclose() function.
Declaring FILE variables
• Declarations of the file functions highlighted on the previous page must be included into your program. This is done
in the standard manner by having
#include <stdio.h>
• as the first statement in your program.
• The first step is using files in C programs is to declare a file variable. This variable must be of type FILE (which is a
predefined type in C) and it is a pointer variable. For example, the following statement
FILE *in_file;
• declares the variable in_file to be a “pointer to type FILE”.
Opening a Disk File for I/O
• Before using a FILE variable, it must be associated with a specific file name. The fopen() function performs this
association and takes two arguments: 1) the pathname of the disk file, and 2) the access mode which indicates how
the file is to be used. The following statement
in_file = fopen("myfile.dat"," r");
• connects the variable in_file to the disk file myfile.dat for read access. Thus, myfile.dat will only be read from. Two
other access modes can be used:
“w” indicating write-mode
“a” indicating append_mode
Reading and Writing to Disk Files
• The functions fprintf and fscanf are provided by C to perform the analogous operations for the printf and scanf
functions but on a file.
• These functions take an additional (first) argument which is the FILE pointer that identifies the file to which data is to
be written to or read from. Thus the statement,
fscanf(in_file,"%f %d",&x,&m);
• will input -- from the file myfile.dat -- real and integer values into the variables x and m respectively.
Closing a Disk File
• The fclose function in a sense does the opposite of what the fopen does: it tells the system that we no longer need
access to the file. This allows the operating system to cleanup any resources or buffers associated with the file.
• The syntax for file closing is simply
fclose(in_file);
Additional File I/O Functions
• Many of the specialized I/O functions for characters and strings that we have described in this course have analogs
which can be used for file I/O. Here is a list of these functions
Page 89 of 96
Structured Programming/Introduction to programming and Algorithm
• Another useful function for file I/O is feof() which tests for the end-of-file condition. feof takes one argument -- the
FILE pointer -- and returns a nonzero integer value (TRUE) if an attempt has been made to read past the end of a
file. It returns zero (FALSE) otherwise. A sample use:
if (feof(in_file))
printf ("No more data \n");
Sample File I/O Program: main
#include <stdio.h>
#include <ctype.h>
#include <string.h>
struct goods {
char name[20];
float price;
int quantity;
int reorder;
};
FILE *input_file;
void processfile(void);
void getrecord(struct goods *recptr);
void printrecord(struct goods record);
main() {
char filename[40];
printf("Example Goods Re-Order File Program\n");
printf("Enter database file \n");
scanf("%s",filename);
input_file = fopen(filename, "r");
processfile();
}
void processfile(void) {
struct goods record;
while (!feof(input_file)) {
getrecord(&record);
if (record.quantity <= record.reorder)
printrecord(record);
}
}
Page 90 of 96
Structured Programming/Introduction to programming and Algorithm