0
Introduction to Programming CS201 book HANDOUTS in pdf

Handouts | Lectures | Contents | Books



CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
3
Lecture No. 1
Summary
o What is programming
o Why programming is important
o What skills are needed
o Develop a basic recipe for writing programs
o Points to remember
What is programming
As this course is titled “Introduction to programming”, therefore it is most essential
and appropriate to understand what programming really means. Let us first see a
widely known definition of programming.
Definition: "A program is a precise sequence of steps to solve a particular problem.”
It means that when we say that we have a program, it actually means that we know
about a complete set activities to be performed in a particular order. The purpose of
these activities is to solve a given problem.
Alan Perlis, a professor at Yale University, says:
"It goes against the grain of modern education to teach children to program. What fun
is there in making plans, acquiring discipline in organizing thoughts, devoting
attention to detail and learning to be self-critical? "
It is a sarcastic statement about modern education, and it means that the modern
education is not developing critical skills like planning, organizing and paying
attention to detail. Practically, in our day to day lives we are constantly planning,
organizing and paying attention to fine details (if we want our plans to succeed). And
it is also fun to do these activities. For example, for a picnic trip we plan where to go,
what to wear, what to take for lunch, organize travel details and have a good time
while doing so.
When we talk about computer programming then as Mr. Steve Summit puts it
“At its most basic level, programming a computer simply means telling it what to do,
and this vapid-sounding definition is not even a joke. There are no other truly
fundamental aspects of computer programming; everything else we talk about will
simply be the details of a particular, usually artificial, mechanism for telling a
computer what to do. Sometimes these mechanisms are chosen because they have
been found to be convenient for programmers (people) to use; other times they have
been chosen because they're easy for the computer to understand. The first hard thing
about programming is to learn, become comfortable with, and accept these artificial
mechanisms, whether they make ``sense'' to you or not. “
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
4
Why Programming is important
The question most of the people ask is why should we learn to program when there
are so many application software and code generators available to do the task for us.
Well the answer is as give by the Matthias Felleisen in the book ‘How to design
programs’
“The answer consists of two parts. First, it is indeed true that traditional forms of
programming are useful for just a few people. But, programming as we the authors
understand it is useful for everyone: the administrative secretary who uses
spreadsheets as well as the high-tech programmer. In other words, we have a broader
notion of programming in mind than the traditional one. We explain our notion in a
moment. Second, we teach our idea of programming with a technology that is based
on the principle of minimal intrusion. Hence, our notion of programming teaches
problem-analysis and problem-solving skills without imposing the overhead of
traditional programming notations and tools.”
Hence learning to program is important because it develops analytical and problem
solving abilities. It is a creative activity and provides us a mean to express abstract
ideas. Thus programming is fun and is much more than a vocational skill. By
designing programs, we learn many skills that are important for all professions. These
skills can be summarized as:
o Critical reading
o Analytical thinking
o Creative synthesis
What skills are needed
Programming is an important activity as people life and living depends on the
programs one make. Hence while programming one should
o Paying attention to detail
o Think about the reusability.
o Think about user interface
o Understand the fact the computers are stupid
o Comment the code liberally
Paying attention to detail
In programming, the details matter. This is a very important skill. A good programmer
always analyzes the problem statement very carefully and in detail. You should pay
attention to all the aspects of the problem. You can't be vague. You can't describe
your program 3/4th of the way, then say, "You know what I mean?'', and have the
compiler figure out the rest.
Furthermore you should pay attention to the calculations involved in the program, its
flow, and most importantly, the logic of the program. Sometimes, a grammatically
correct sentence does not make any sense. For example, here is a verse from poem
"Through the Looking Glass" written by Lewis Carol:
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
5
“Twas brillig, and the slithy toves
Did gyre and gimble in the wabe “
The grammar is correct but there is no meaning. Similarly, the sentence, "Mr. ABC
sleeps thirty hours every day", is grammatically correct but it is illogical.
So it may happen that a program is grammatically correct. It compiles and runs but
produces incorrect or absurd results and does not solve the problem. It is very
important to pay attention to the logic of the program.
Think about the reusability
When ever you are writing a program, always keep in mind that it could be reused at
some other time. Also, try to write in a way that it can be used to solve some other
related problem. A classic example of this is:
Suppose we have to calculate the area of a given circle. We know the area of a circle
is (Pi * r2). Now we have written a program which calculates the area of a circle with
given radius. At some later time we are given a problem to find out the area of a ring.
The area of the ring can be calculated by subtracting the area of outer circle from the
area of the inner circle. Hence we can use the program that calculates the area of a
circle to calculate the area of the ring.
Think about Good user interface
As programmers, we assume that computer users know a lot of things, this is a big
mistake. So never assume that the user of your program is computer literate. Always
provide an easy to understand and easy to use interface that is self explanatory.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
6
Understand the fact that computers are stupid
Computers are incredibly stupid. They do exactly what you tell them to do: no more,
no less-- unlike human beings. Computers can't think by themselves. In this sense,
they differ from human beings. For example, if someone asks you, “What is the
time?”, “Time please?” or just, “Time?” you understand anyway that he is asking the
time but computer is different. Instructions to the computer should be explicitly
stated. Computer will tell you the time only if you ask it in the way you have
programmed it.
When you're programming, it helps to be able to "think'' as stupidly as the computer
does, so that you are in the right frame of mind for specifying everything in minute
detail, and not assuming that the right thing will happen by itself.
Comment the code liberally
Always comment the code liberally. The comment statements do not affect the
performance of the program as these are ignored by the compiler and do not take any
memory in the computer. Comments are used to explain the functioning of the
programs. It helps the other programmers as well as the creator of the program to
understand the code.
Program design recipe
In order to design a program effectively and properly we must have a recipe to follow.
In the book name ‘How to design programs’ by Matthias Felleisen.and the co-worker,
the idea of design recipe has been stated very elegenlty as
“Learning to design programs is like learning to play soccer. A player must learn to
trap a ball, to dribble with a ball, to pass, and to shoot a ball. Once the player knows
those basic skills, the next goals are to learn to play a position, to play certain
strategies, to choose among feasible strategies, and, on occasion, to create variations
of a strategy because none fits. “
The author then continue to say that:
“A programmer is also very much like an architect, a composers, or a writer. They are
creative people who start with ideas in their heads and blank pieces of paper. They
conceive of an idea, form a mental outline, and refine it on paper until their writings
reflect their mental image as much as possible. As they bring their ideas to paper, they
employ basic drawing, writing, and playing music to express certain style elements of
a building, to describe a person's character, or to formulate portions of a melody. They
can practice their trade because they have honed their basic skills for a long time and
can use them on an instinctive level.
Programmers also form outlines, translate them into first designs, and iteratively
refine them until they truly match the initial idea. Indeed, the best programmers edit
and rewrite their programs many times until they meet certain aesthetic standards.
And just like soccer players, architects, composers, or writers, programmers must
practice the basic skills of their trade for a long time before they can be truly creative.
Design recipes are the equivalent of soccer ball handling techniques, writing
techniques, arrangements, and drawing skills. “
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
7
Hence to design a program properly, we must:
o Analyze a problem statement, typically expressed as a word problem.
o Express its essence, abstractly and with examples.
o Formulate statements and comments in a precise language.
o Evaluate and revise the activities in light of checks and tests and
o Pay attention to detail.
All of these are activities that are useful, not only for a programmer but also for a
businessman, a lawyer, a journalist, a scientist, an engineer, and many others.
Let us take an example to demonstrate the use of design recipe:
Suppose we have to develop a payroll system of a company. The company has
permanent staff, contractual staff, hourly based employees and per unit making
employees. Moreover, there are different deductions and benefits for permanent
employees and there is a bonus for per unit making employees and overtime for
contractual employees.
We need to analyze the above problem statement. The company has four categories of
employees; i.e.; Permanent staff, Contractual staff, hourly based employees and per
unit making employees. Further, permanent staff has benefits and deductions
depending upon their designation. Bonus will be given to per unit making employees
if they make more than 10 pieces a day. Contractual employee will get overtime if
they stay after office hours.

Now divide the problem into small segments and calculations. Also include examples
in all segments. In this problem, we should take an employee with his details from
each category. Let’s say, Mr. Ahmad is a permanent employee working as Finance
Manager. His salary is Rs.20000 and benefits of medical, car allowance and house
rent are Rs.4000 and there is a deduction of Rs.1200. Similarly, we should consider
employees from other categories. This will help us in checking and testing the
program later on.
The next step is to formulate these statements in a precise language, i.e. we can use
the pseudo code and flowcharting. which will be then used to develop the program
using computer language.
Then the program should be evaluated by testing and checking. If there are some
changes identified, we revise the activities and repeat the process. Thus repeating the
cycle, we achieve a refined solution.
Points to remember
Hence the major points to keep in mind are:
o Don’t assume on the part of the users
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
8
o User Interface should be friendly
o Don’t forget to comment the code
o PAY ATTENTION TO DETAIL
o Program, program and program, not just writing code, but the whole
process of design and development
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
9
Lecture No. 2
Reading Material
Deitel & Deitel – C++ How to Program chapter 1
1.2, 1.3, 1.4, 1.6,
1.7
1.11, 1.12, 1.13
Summary
o Software Categories
o System Software
o Application Software
o History of C language
o Development Environment of ‘C’
Software Categories
Software is categorized into two main categories
o System Software
o Application Software
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
10
System Software
The system software controls the computer. It communicates with computer’s
hardware (key board, mouse, modem, sound card etc) and controls different aspects of
operations. Sub categories of system software are:
o Operating system
o Device drivers
o Utilities
Operating system
An operating system (sometimes abbreviated as "OS") is the program that manages all
the other programs in a computer. It is a integrated collection of routines that service
the sequencing and processing of programs by a computer. Note: An operating system
may provide many services, such as resource allocation, scheduling, input/output
control, and data management.
Definition
“Operating system is the software responsible for controlling the allocation and usage of hardware
resources such as memory, central processing unit (CPU) time, disk space, and peripheral devices. The
operating system is the foundation on which applications, such as word processing and spreadsheet
programs, are built. (Microsoft)”
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
11
Device drivers
The device driver software is used to communicate between the devices and the
computer. We have monitor, keyboard and mouse attached to almost all PC’s; if we
look at the properties of these devices we will see that the operating system has
installed special software to control these devices. This piece of software is called
device driver software. When we attach a new device with the computer, we need
software to communicate with this device. These kinds of software are known as
device drivers e.g. CD Rom driver, Sound Card driver and Modem driver. Normally
manufacturer of the device provide the device driver software with the device. For
scanners to work properly with the computers we install the device driver of the
scanner. Nowadays if you have seen a scanner, it comes with TWAIN Drivers.
TWAIN stands for Technology Without An Interesting Name.
Utility Software
Utility software is a program that performs a very specific task, usually related to
managing system resources. You would have noticed a utility of Disk Compression.
Whenever you write a file and save it to the disk, Compression Utility compresses the
file (reduce the file size) and write it to the disk and when you request this file from
the disk, the compression utility uncompressed the file and shows its contents.
Similarly there is another utility, Disk Defragmentation which is used to defragment
the disk. The data is stored on the disks in chunks, so if we are using several files and
are making changes to these files then the different portions of file are saved on
different locations on the disk. These chunks are linked and the operating system
knows how to read the contents of file from the disk combining all the chunks.
Similarly when we delete a file then the place where that file was stored on the disk is
emptied and is available now to store other files. As the time goes on, we have a lot of
empty and used pieces on the disk. In such situation we say that the disk is
fragmented now. If we remove this fragmentation the chunks of data on the disk will
be stored close to each other and thus reading of data will be faster. For the purpose of
removing fragmentation on the disk the Defragmentation utility is used.
The compilers and interpreters also belong to the System Software category.
Application software
A program or group of programs designed for end users. For example a program for
Accounting, Payroll, Inventory Control System, and guided system for planes. GPS
(global positioning system), another application software, is being used in vehicles,
which through satellite determines the geographical position of the vehicle
History of C language
The C language was developed in late 60’s and early 70’s, in Bell Laboratories. In
those days BCPL and B languages were developed there. The BCPL language was
developed in 1967 by Martin Richards as a language for writing operating systems
software and compilers. In 1970 Ken Thompson used B language to create early
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
12
versions of the UNIX operating system at Bell Laboratories. Thus both the languages
were being used to develop various system software even compilers. Both BCPL and
B were ‘type less’ languages, every data item occupied one ‘word’ in memory and the
burden of treating a data item as a whole number or real number, for example was the
responsibility of the programmer.
Dennis Ritchie developed a general purpose language, called C language, by using
different features of BCPL and B languages. C uses many important concepts of
BCPL and B while adding data typing and other features. In the start C became
widely known as the development language of the UNIX operating system, and the
UNIX operating system was written by using this C language. The C language is so
powerful that the compiler of C and other various operating systems are written in C.
C language has almost unlimited powers to do with computers. You can program to
turn on or off any device of computer. You can do a lot to hard disk and other
peripherals. It is very easy to write a program in C that stops the running of computer.
So be careful while programming in C.
The C language and UNIX operating system widely spread in educational and
research institutions. There was C and UNIX everywhere. Due to the wide spread of
C, different researchers started to add their features in the language. And thus
different variations in C came into existence. Many universities developed their own
C by adding different features to the C language developed by Ritchie. These
variations led to the need of a standard version of C. In 1983 a technical committee
was created under the American National Standards Committee on Computer and
Information Processing to provide an unambiguous and machine-independent
definition of the language. In 1989 the standard was approved. ANSI cooperated with
the International Standard Organization (ISO) to standardize C worldwide.
Tools of the trade
As programmer we need different tools to develop a program. These tools are needed
for the life cycle of programs
Editors
First of all we need a tool for writing the code of a program. For this purpose we used
Editors in which we write our code. We can use word processor too for this, but word
processors have many other features like bold the text, italic, coloring the text etc, so
when we save a file written in a word processor, lot of other information including the
text is saved on the disk. For programming purposes we don’t need these things we
only need simple text. Text editors are such editors which save only the text which we
type. So for programming we will be using a text editor
Compiler and Interpreter
As we write the code in English and we know that computers can understand only 0s
and 1s. So we need a translator which translates the code of our program into machine
language. There are two kinds of translators which are known as Interpreter and
Compilers. These translators translate our program which is written in C-Language
into Machine language. Interpreters translates the program line by line meaning it
reads one line of program and translates it, then it reads second line, translate it and so
on. The benefit of it is that we get the errors as we go along and it is very easy to
correct the errors. The drawback of the interpreter is that the program executes slowly
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
13
as the interpreter translates the program line by line. Another drawback is that as
interpreters are reading the program line by line so they cannot get the overall picture
of the program hence cannot optimize the program making it efficient.
Compilers also translate the English like language (Code written in C) into a language
(Machine language) which computers can understand. The Compiler read the whole
program and translates it into machine language completely. The difference between
interpreter and compiler is that compiler will stop translating if it finds an error and
there will be no executable code generated whereas Interpreter will execute all the
lines before error and will stop at the line which contains the error. So Compiler needs
syntactically correct program to produce an executable code. We will be using
compiler in our course
Debugger
Another important tool is Debugger. Every programmer should be familiar with it.
Debugger is used to debug the program i.e. to correct the logical errors. Using
debugger we can control our program while it is running. We can stop the execution
of our program at some point and can check the values in different variables, can
change these values etc. In this way we can trace the logical errors in our program and
can see whether our program is producing the correct results. This tool is very
powerful, so it is complex too
Linker
Most of the time our program is using different routines and functions that are located
in different files, hence it needs the executable code of those routines/functions.
Linker is a tool which performs this job, it checks our program and includes all those
routines or functions which we are using in our program to make a standalone
executable code and this process is called Linking
Loader
After a executable program is linked and saved on the disk and it is ready for
execution. We need another process which loads the program into memory and then
instruct the processor to start the execution of the program from the first instruction
(the starting point of every C program is from the main function). This processor is
known as loader. Linker and loaders are the part of development environment. These
are part of system software.
The following figure represents a graphical explanation of all the steps involved in
writing and executing a program.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
14
Preprocessor program
processes the code.
Loader puts program
in memory.
CPU takes each
instruction and
executes it, possibly
storing new data
values as the
program executes.
Compiler creates object
code and stores
it on disk.
Linker links the object
code with the libraries
Loader
Primary Memory
Compiler
Editor
Preprocessor
Linker
Primary Memory
...
...
...
...
Disk
Disk
Disk
CPU
Disk
Disk
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
15
Lecture No. 3
Reading Material
Deitel & Deitel – C++ How to Program chapter 1
1.19, 1.20, 1.21,
1.22
Summary
First C program
Variables
Data Types
Arithmetic Operators
Precedence of Operators
Tips
First C program
The best way to learn C is to start coding right away. So here is our very first program
in C.
# include <iostream.h>
main()
{
cout << "Welcome to Virtual University of Pakistan";
}
We will look at this code line by line and try to understand them.
# include <iostream.h>
#include: This is a pre-processor directive. It is not part of our program; it is an
instruction to the compiler. It tells the C compiler to include the contents of a file, in
this case the system file iostream.h. The compiler knows that it is a system file, and
therefore looks for it in a special place. The features of preprocessor will be discussed
later. For the time being take this line on faith. You have to write this line. The sign #
is known as HASH and also called SHARP.
<iostream.h>
This is the name of the library definition file for all Input Output Streams. Your
program will almost certainly want to send stuff to the screen and read things from the
keyboard. iostream.h is the name of the file in which has code to do that work for you
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
16
main()
The name main is special, in that the main is actually the one which is run when your
program is used. A C program is made up of a large number of functions. Each of
these is given a name by the programmer and they refer to each other as the program
runs. C regards the name "main" as a special case and will run this function first. If
you forget to have a main function, or mistype the name, the compiler will give you
an error.
Notice that there are parentheses (“( )”, normal brackets) with main. Here the
parentheses contain nothing. There may be something written inside the parentheses.
It will be discussed in next lectures.
{ }
Next, there is a curly bracket also called braces("{ }"). For every open brace there
must be a matching close. Braces allows to group together pieces of a program. The
body of main is enclosed in braces. Braces are very important in C; they enclose the
blocks of the program.
cout << “ Welcome to Virtual University of Pakistan”
cout:
This is known as out put stream in C and C++. Stream is a complicated thing, you will
learn about it later. Think a stream as a door. The data is transferred through stream,
cout takes data from computer and sends it to the output. For the moment it is a
screen of the monitor. hence we use cout for output.
<<
The sign << indicates the direction of data. Here it is towards cout and the function of
cout is to show data on the screen.
“ Welcome to Virtual University of Pakistan”
The thing between the double quotes (“ ”) is known as character string. In C
programming character strings are written in double quotes. Whatever is written after
<< and within quotation marks will be direct it to cout, cout will display it on the
screen.
;
There is a semicolon (;) at the end of the above statement. This is very important. All
C statements end with semicolon (;). Missing of a semicolon (;) at the end of
statement is a syntax error and compiler will report an error during compilation. If
there is only a semicolon (;) on a line than it will be called a null statement. i.e. it does
nothing. The extra semicolons may be put at the end but are useless and aimless. Do
not put semicolon (;) at a wrong place, it may cause a problem during the execution of
the program or may cause a logical error.
In this program we give a fixed character string to cout and the program prints it to
the screen as:
Variables
During programming we need to store data. This data is stored in variables. Variables
are locations in memory for storing data. The memory is divided into blocks. It can be
viewed as pigeon-holes. You can also think of it as PO Boxes. In post offices there are
different boxes and each has an address. Similarly in memory, there is a numerical
address for each location of memory (block). It is difficult for us to handle these
numerical addresses in our programs. So we give a name to these locations. These
names are variables. We call them variables because they can contain different values
at different times.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
17
The variable names in C may be started with a character or an underscore ( _ ). But
avoid starting a name with underscore ( _ ). C has many libraries which contain
variables and function names normally starting with underscore ( _ ). So your variable
name starting with underscore ( _ ) may conflict with these variables or function
names.
In a program every variable has
Name
Type
Size
Value
The variables having a name, type and size (type and size will be discussed later) are
just empty boxes. They are useless until we put some value in them. To put some
value in these boxes is known as assigning values to variables. In C language, we use
assignment operator for this purpose.
Assignment Operator
In C language equal-to-sign (=) is used as assignment operator. Do not confuse the
algebraic equal-to with the assignment operator. In Algebra X = 2 means the value of
X is 2, whereas in C language X = 2 (where X is a variable name) means take the
value 2 and put it in the memory location labeled as X, afterwards you can assign
some other value to X, for example you can write X = 10, that means now the
memory location X contains the value 10 and the previous value 2 is no more there.
Assignment operator is a binary operator (a binary operator has two operands). It must
have variable on left hand side and expression (that evaluates to a single value) on
right hand side. This operator takes the value on right hand side and stores it to the
location labeled as the variable on left hand side, e.g. X = 5, X = 10 + 5, and X = X
+1.
In C language the statement X = X + 1 means that add 1 to the value of X and then
store the result in X variable. If the value of X is 10 then after the execution of this
statement the value of X becomes 11. This is a common practice for incrementing the
value of the variable by ‘one in C language. Similarly you can use the statement X =
X - 1 for decrementing the value of the variable by one. The statement X = X + 1 in
algebra is not valid except when X is infinity. So do not confuse assignment operator
(=) with equal sign (=) in algebra. Remember that assignment operator must have a
variable name on left hand side unlike algebra in which you can use expression on
both sides of equal sign (=). For example, in algebra, X +5 = Y + 7 is correct but
incorrect in C language. The compiler will not understand it and will give error.
Data Types
A variable must have a data type associated with it, for example it can have data types
like integer, decimal numbers, characters etc. The variable of type Integer stores
integer values and a character type variable stores character value. The primary
difference between various data types is their size in memory. Different data types
have different size in memory depending on the machine and compilers. These also
affect the way they are displayed. The ‘cout’ knows how to display a digit and a
character. There are few data types in C language. These data types are reserved
words of C language. The reserve words can not be used as a variable name.
Let’s take a look into different data types that the C language provides us to deal with
whole numbers, real numbers and character data.
Whole Numbers
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
18
The C language provides three data types to handle whole numbers.
int
short
long
int Data Type
The data type int is used to store whole numbers (integers). The integer type has a
space of 4 bytes (32 bits for windows operating system) in memory. And it is
mentioned as ‘int’ which is a reserved word of C, so we can not use it as a variable
name.
In programming before using any variable name we have to declare that variable with
its data type. If we are using an integer variable named as ‘i’, we have to declare it as
int i ;
The above line is known as declaration statement. When we declare a variable in this
way, it reserves some space in memory depending on the size of data type and labels
it with the variable name. The declaration statement int i ; reserves 4 bytes of memory
and labels it as ‘i’. This happens at the execution time.
Sample Program 1
Let’s consider a simple example to explain int data type. In this example we take two
integers, add them and display the answer on the screen.
The code of the program is written below.
#include <iostream.h>
main()
{
int x;
int y;
int z;
x = 5;
y = 10;
z = x + y;
cout << “x = “;
cout << x;
cout << “ y=“;
cout << y;
cout << “ z = x + y = “;
cout << z;
}
The first three lines declare three variables x, y and z as following.
int x;
int y;
int z;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
19
These three declarations can also be written on one line. C provides us the comma
separator (,). The above three lines can be written in a single line as below
int x, y, z;
As we know that semicolon (;) indicates the end of the statement. So we can write
many statements on a single line. In this way we can also write the above declarations
in the following form
int x; int y; int z;
For good programming practice, write a single statement on a single line.
Now we assign values to variables x and y by using assignment operator. The lines x
= 5; and y = 10 assign the values 5 and 10 to the variables x and y, respectively. These
statements put the values 5 and 10 to the memory locations labeled as x and y.
The next statement z = x + y; evaluates the expression on right hand side. It takes
values stored in variables x and y (which are 5 and 10 respectively), adds them and by
using the assignment operator (=), puts the value of the result, which is 15 in this case,
to the memory location labeled as z.
Here a thing to be noted is that the values of x and y remains the same after this
operation. In arithmetic operations the values of variables used in expression on the
right hand side are not affected. They remain the same. But a statement like x = x + 1;
is an exceptional case. In this case the value of x is changed.
The next line cout << “ x = “ ; is simple it just displays ‘ x = ‘ on the screen.
Now we want to display the value of x after ‘x =’. For this we write the statement
cout << x ;
Here comes the affect of data type on cout. The previous statement cout << “x = “ ;
has a character string after << sign and cout simply displays the string. In the
statement cout << x; there is a variable name x. Now cout will not display ‘x’ but the
value of x. The cout interprets that x is a variable of integer type, it goes to the
location x in the memory and takes its value and displays it in integer form, on the
screen. The next line cout << ”y =”; displays ‘ y = ‘ on the screen. And line cout << y;
displays the value of y on the screen. Thus we see that when we write something in
quotation marks it is displayed as it is but when we use a variable name it displays the
value of the variable not name of the variable. The next two lines cout << “z = x + y =
”; and cout << z; are written to display ‘z = x + y = ’ and the value of z that is 15.
Now when we execute the program after compiling, we get the following output.
x = 5 y = 10 z = x + y = 15
short Data type
We noted that the integer occupies four bytes in memory. So if we have to store a
small integer like 5, 10 or 20 four bytes would be used. The C provides another data
type for storing small whole numbers which is called short. The size of short is two
bytes and it can store numbers in range of -32768 to 32767. So if we are going to use
a variable for which we know that it will not increase from 32767, for example the
age of different people, then we use the data type short for age. We can write the
above sample program by using short instead of int.
/*This program uses short data type to store values */
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
20
#include <iostream.h>
main()
{
short x;
short y;
short z;
x = 5;
y = 10;
z = x + y;
cout << “x = “;
cout << x;
cout << “ y=“;
cout << y;
cout << “ z = x + y = “;
cout << z;
}
long Data Type
On the other side if we have a very large whole number that can not be stored in an int
then we use the data type long provided by C. So when we are going to deal with very
big whole numbers in our program, we use long data type. We use it in program as:
long x = 300500200;
Real Numbers
The C language provides two data types to deal with real numbers (numbers with
decimal points e.g. 1.35, 735.251). The real numbers are also known as floating point
numbers.
float
double
float Data Type
To store real numbers, float data type is used. The float data type uses four bytes to
store a real number. Here is program that uses float data types.
/*This program uses short data type to store values */
#include <iostream.h>
main()
{
float x;
float y;
float z;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
21
x = 12.35;
y = 25.57;
z = x + y;
cout << “ x = “;
cout << x;
cout << “ y = “;
cout << y;
cout << “ z = x + y = “;
cout << z;
}
double Data Type
If we need to store a large real number which cannot be store in four bytes, then we
use double data type. Normally the size of double is twice the size of float. In
program we use it as:
double x = 345624.769123;
char Data Type
So far we have been looking on data types to store numbers, In programming we do
need to store characters like a,b,c etc. For storing the character data C language
provides char data type. By using char data type we can store characters in variables.
While assigning a character value to a char type variable single quotes are used
around the character as ‘a’.
/* This program uses short data type to store values */
#include <iostream.h>
main()
{
char x;
x = ’a’;
cout << “The character value in x = “;
cout << x;
}
Arithmetic Operators
In C language we have the usual arithmetic operators for addition, subtraction,
multiplication and division. C also provides a special arithmetic operator which is
called modulus. All these operators are binary operators which means they operate on
two operands. So we need two values for addition, subtraction, multiplication,
division and modulus.
ARITHMETIC
OPERATION
ARITHMETIC
OPERATOR
ALGEBRAIC
EXPRESSION
C
EXPRESSION
Addition + x + y x + y
Subtraction - x – y x - y
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
22
Multiplication * Xy x * y
Division / x ÷ y, x / y x / y
Modulus % x mod y x % y
Addition, subtraction and multiplication are same as we use in algebra.
There is one thing to note in division that when we use integer division (i.e. both
operands are integers) yields an integer result. This means that if, for example, you
are dividing 5 by 2 (5 / 2) it will give integer result as 2 instead of actual result 2.5.
Thus in integer division the result is truncated to the whole number, the fractional part
(after decimal) is ignored. If we want to get the correct result, then we should use float
data type.
The modulus operator returns the remainder after division. This operator can only be
used with integer operands. The expression x % y returns the remainder after x is
divided by y. For example, the result of 5 % 2 will be 1, 23 % 5 will be 3 and 107%10
will be 7.
Precedence of Operators
The arithmetic operators in an expression are evaluated according to their precedence.
The precedence means which operator will be evaluated first and which will be
evaluated after that and so on. In an expression, the parentheses ( ) are used to force
the evaluation order. The operators in the parentheses ( ) are evaluated first. If there
are nested parentheses then the inner most is evaluated first.
The expressions are always evaluated from left to right. The operators *, / and % have
the highest precedence after parentheses. These operators are evaluated before + and –
operators. Thus + and – operators has the lowest precedence. It means that if there are
* and + operators in an expression then first the * will be evaluated and then its result
will be added to other operand. If there are * and / operators in an expression (both
have the same precedence) then the operator which occurs first from left will be
evaluated first and then the next, except you force any operator to evaluate by putting
parentheses around it.
The following table explains the precedence of the arithmetic operators:
OPERATORS OPERATIONS PRECEDENCE (ORDER OF
EVALUATION)
( ) Parentheses Evaluated first
*, /, or % Multiplication,
Division, Modulus
Evaluated second. If there are
several, they are evaluated from
left to right
+ or - Addition, Subtraction Evaluated last. If there are several,
they are evaluated from left to
right
Lets look some examples.
What is the result of 10 + 10 * 5 ?
The answer is 60 not 100. As * has higher precedence than + so 10 * 5 is evaluated
first and then the answer 50 is added to 10 and we get the result 60. The answer will
be 100 if we force the addition operation to be done first by putting 10 + 10 in
parentheses. Thus the same expression rewritten as (10 + 10) * 5 will give the result
100. Note that how the parentheses affect the evaluation of an expression.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
23
Similarly the expression 5 * 3 + 6 / 3 gives the answer 17, and not 7. The evaluation
of this expression can be clarified by writing it with the use of parentheses as (5 * 3) +
(6 / 3) which gives 15 + 2 = 17. Thus you should be careful while writing arithmetic
expressions.
Tips
Use spaces in the coding to make it easy to read and understand
Reserved words can not be used as variable names
There is always a main( ) in a C program that is the starting point of execution
Write one statement per line
Type parentheses ’( )’ and braces ‘{ }’ in pairs
Use parentheses for clarification in arithmetic expressions
Don’t forget semicolon at the end of each statement
C Language is case sensitive so variable names x and X are two different variables
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
24
Lecture No. 4
Reading Material
Deitel & Deitel – C++ How to Program chapter 1
1.22
Summary
o Sample Program
o Examples of Expressions
o Use of Operators
o Tips
Sample Program
Problem statement:
Calculate the average age of a class of ten students. Prompt the user to enter the age of
each student.
Solution:
Lets first sort out the problem. In the problem we will take the ages of ten students
from the user. To store these ages we will use ten variables, one variable for each
student’s age. We will take the ages of students in whole numbers (in years only, like
10, 12, 15 etc), so we will use the variables of data type int. The variables declaration
statement in our program will be as follow:
int age1, age2, age3, age4, age5, age6, age7, age8, age9, age10;
We have declared all the ten variables in a single line by using comma separator ( , ).
This is a short method to declare a number of variables of the same data type.
After this we will add all the ages to get the total age and store this total age in a
variable. Then we will get the average age of the ten students by dividing this total
age by 10. For the storage of total and average ages we need variables. For this
purpose we use variable TotalAge for the total of ages and AverageAge for average of
ages respectively.
int TotalAge, AverageAge;
We have declared AverageAge as int data type so it can store only whole numbers.
The average age of the class can be in real numbers with decimal point (for example if
total age is 173 then average age will be 17.3). But the division of integers will
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
25
produce integer result only and the decimal portion is truncated. If we need the actual
result then we should use real numbers (float or double) in our program.
Now we have declared variables for storing different values. In the next step we
prompt the user to enter the age of first student. We simply show a text line on the
screen by using the statement:
cout << “Please enter the age of first student : ” ;
So on the screen the sentence “Please enter the age of first student:” will appear.
Whenever we are requesting user to enter some information we need to be very clear
i.e. write such sentences that are self explanatory and user understands them
thoroughly and correctly. Now with the above sentence everyone can understand that
age would be entered for the first student. As we are expecting only whole numbers
i.e. age in years only i.e. 10, 12 etc, our program is not to expect ages as 13.5 or 12.3
or 12 years and 3 months etc. We can refine our sentence such, that the user
understands precisely that the age would be entered in whole number only.
After this we allow the user to enter the age. To, get the age entered by the user into a
variable, we use the statement:
cin >> age1;
Lets have a look on the statement cin >> age1; cin is the counter part of the cout.
Here cin is the input stream that gets data from the user and assigns it to the variable
on its right side. We know that the sign >> indicates the direction of the flow of data.
In our statement it means that data comes from user and is assigned to the variable
age1, where age1 is a variable used for storing the age entered for student1. Similarly
we get the ages of all the ten students and store them into respective variables. That
means the age of first student in age1, the age of second student in age2 and so on up
to 10 students. When cin statement is reached in a program, the program stops
execution and expects some input from the user. So when cin >> age1; is executed,
the program expects from the user to type the age of the student1. After entering the
age, the user has to press the 'enter key'. Pressing 'enter key' conveys to the program
that user has finished entering the input and cin assigns the input value to the variable
on the right hand side which is age1 in this case. As we have seen earlier that in an
assignment statement, we can have only one variable on left hand side of the
assignment operator and on right hand side we can have an expression that evaluates
to a single value. If we have an expression on the left hand side of assignment
operator we get an error i.e. x = 2 + 4; is a correct statement but x + y = 3+ 5; is an
incorrect statement as we can not have an expression on the left hand side. Similarly
we can not have an expression after the >> sign with cin. So we can have one and
only one variable after >> sign i.e. cin >> x; is a correct statement and cin >> x + y;
is an incorrect statement.
Next, we add all these values and store the result to the variable TotalAge. We use
assignment operator for this purpose. On the right hand side of the assignment
operator, we write the expression to add the ages and store the result in the variable,
TotalAge on left hand side. For this purpose we write the statement as follow:
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
26
TotalAge = age1 + age2 + age3 + age4 + age5 + age6 + age7 + age8 +
age9 + age10 ;
The expression on the right hand side uses many addition operators ( + ). As these
operators have the same precedence, the expression is evaluated from left to right.
Thus first age1 is added to age2 and then the result of this is added to age3 and then
this result is added to age4 and so on.
Now we divide this TotalAge by 10 and get the average age. We store this average
age in the variable i.e. AverageAge by writing the statement:
AverageAge = TotalAge / 10;
And at the end we display this average age on the screen by using the following
statement:
cout << “ The average age of the students is : “ << AverageAge;
Here the string enclosed in the quotation marks, will be printed on the screen as it is
and the value of AverageAge will be printed on the screen.
The complete coding of the program is given below:
/* This program calculates the average age of a class of ten students after prompting
the user to enter the age of each student. */
#include <iostream.h>
main ()
{
// declaration of variables, the age will be in whole numbers
int age1, age2, age3, age4, age5, age6, age7, age8, age9, age10;
int TotalAge, AverageAge;
// take ages of the students from the user
cout << “Please enter the age of student 1: ”;
cin >> age1;
cout << “Please enter the age of student 2: ”;
cin >> age2;
cout << “Please enter the age of student 3: ”;
cin >> age3;
cout << “Please enter the age of student 4: ”;
cin >> age4;
cout << “Please enter the age of student 5: ”;
cin >> age5;
cout << “Please enter the age of student 6: ”;
cin >> age6;
cout << “Please enter the age of student 7: ”;
cin >> age7;
cout << “Please enter the age of student 8: ”;
cin >> age8;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
27
cout << “Please enter the age of student 9: ”;
cin >> age9;
cout << “Please enter the age of student 10: ”;
cin >> age10;
// calculate the total age and average age
TotalAge = age1 + age2 + age3 + age4 + age5 + age6 + age7 + age8 + age9 +
age10;
AverageAge = TotalAge / 10;
// Display the result ( average age )
cout << “Average age of class is: “ << AverageAge;
}
A sample output of the above program is given below.
In the above output the total age of the students is 123 and the actual average should
be 12.3 but as we are using integer data types so the decimal part is truncated and the
whole number 12 is assigned to the variable AverageAge.
Examples of Expressions
We have already seen the precedence of arithmetic operators. We have expressions
for different calculations in algebraic form, and in our programs we write them in the
form of C statements. Let’s discuss some more examples to get a better
understanding.
We know about the quadratic equation in algebra, that is y = ax2 + bx + c. The
quadratic equation in C will be written as y = a * x * x + b * x + c. In C, it is not an
equation but an assignment statement. We can use parentheses in this statement, this
Please enter the age of student 1: 12
Please enter the age of student 2: 13
Please enter the age of student 3: 11
Please enter the age of student 4: 14
Please enter the age of student 5: 13
Please enter the age of student 6: 15
Please enter the age of student 7: 12
Please enter the age of student 8: 13
Please enter the age of student 9: 14
Please enter the age of student 10: 11
Average age of class is: 12
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
28
will make the expression statement easy to read and understand. Thus we can rewrite
it as y = a * (x * x) + (b * y) + c.
Note that we have no power operator in C, just use * to multiply the same value.
Here is another expression in algebra: x = ax + by + cz2. In C the above expression
will be as:
x = a * x + b * y + c * z * z
The * operator will be evaluated before the + operator. We can rewrite the above
statement with the use of parentheses. The same expressions can be written as:
x = (a * x) + (b * y) + c * ( z * z)
Lets have an other expression in algebra as x = a(x + b(y + cz2)). The parentheses in
this equation force the order of evaluation. This expression will be written in C as:
x = a * (x + b * (y + c * z * z))
While writing expressions in C we should keep in mind the precedence of the
operators and the order of evaluation of the expressions (expressions are evaluated
from left to right). Parentheses are used in complicated expressions. In algebra, there
may be curly brackets { } and square brackets [ ] in an expression but in C we have
only parentheses
( ). Using parentheses, we can make a complex expression easy to read and
understand and can force the order of evaluation. We have to be very careful while
using parentheses, as parentheses at wrong place can cause an incorrect result. For
example, a statement x = 2 + 4 * 3 results x = 14. As * operator is of higher
precedence, 4 * 3 is evaluated first and then result 12 is added to 4 which gives the
result 14. We can rewrite this statement, with the use of parentheses to show it clearly,
that multiplication is performed first. Thus we can write it as x = 2 + (4 * 3). But the
same statement with different parentheses like x = (2 + 4) * 3 will give the result 18,
so we have to be careful while using parenthesis and the evaluation order of the
expression.
Similarly the equation (b2 – 4ac)/2a can be written as ( b * b – 4 * a * c) / ( 2 * a ).
The same statement without using parentheses will be as b * b – 4 * a * c / 2 * a. This
is wrong as it evaluates to b2 – 4ac/2a (i.e. 4ac is divided by 2a instead of (b2-4ac)).
Use of Operators
Here are sample programs which will further explain the use of operators in
programming.
Problem Statement:
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
29
Write a program that takes a four digits integer from user and shows the digits on the
screen separately i.e. if user enters 7531, it displays 1,3,5,7 separately.
Solution:
Let’s first analyze the problem and find out the way how to program it.
Analysis:
First of all, we will sort the problem and find out how we can find digits of an integer.
We know that when we divide a number by 10, we get the last digit of the number as
remainder. For example when we divide 2415 by 10 we get 5 as remainder. Similarly
3476 divided by 10 gives the remainder 6. We will use this logic in our problem to get
the digits of the number. First of all, we declare two variables for storing number and
the digit. Let’s say that we have a number 1234 to show its digits separately. In our
program we will use modulus operator ( % ) to get the remainder. So we get the first
digit of the number 1234 by taking its modulus with 10 (i.e. 1234 % 10). This will
give us the digit 4. We will show this digit on the screen by using cout statement.
After this we have to find the next digit. For this we will divide the number by 10 to
remove its last digit. Here for example the answer of 1234 divided by 10 is 123.4, we
need only three digits and not the decimal part. In C we know that the integer division
truncates the decimal part to give the result in whole number only. We will use integer
division in our program and declare our variable for storing the number as int data
type. We will divide the number 1234 by 10 (i.e. 1234 / 10). Thus we will get the
number with remaining three digits i.e. 123. Here is a point to be noted that how can
we deal with this new number (123)?
There are two ways, one is that we declare a new variable of type int and assign the
value of this new number to it. In this way we have to declare more variables that
mean more memory will be used. The second way is to reuse the same variable
(where number was already stored). As we have seen earlier that we can reassign
values to variables like in the statement x = x + 1, which means, add 1 to the value of
x and assign this resultant value again to x. In this way we are reusing the variable x.
We will do the same but use the division operator instead of addition operator
according to our need. For this purpose we will write number = number / 10. After
this statement we have value 123 in the variable number.
Again we will get the remainder of this number with the use of modulus operator,
dividing the number by 10 (i.e. 123 % 10). Now we will get 3 and display it on the
screen. To get the new number with two digits, divide the number by 10. Once again,
we get the next digit of the number (i.e. 12) by using the modulus operator with 10,
get the digit 2 and display it on the screen. Again get the new number by dividing it
by 10
(i.e. 1). We can show it directly, as it is the last digit, or take remainder by using
modulus operator with 10. In this way, we get all the digits of the number.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
30
Now let’s write the program in C by following the analysis we have made. The
complete C program for the above problem is given below. It is easy to understand as
we are already familiar with the statements used in it.
/* A program that takes a four digits integer from user and shows the digits on the
screen separately i.e. if user enters 7531, it displays 7,5,3,1 separately. */
#include <iostream.h>
main()
{
// declare variables
int number, digit;
// prompt the user for input
cout << "Please enter 4-digit number:";
cin >> number;
// get the first digit and display it on screen
digit = number % 10;
cout << "The digits are: ";
cout << digit << ", ";
// get the remaining three digits number
number = number / 10;
// get the next digit and display it
digit = number % 10;
cout << digit << ", ";
// get the remaining two digits number
number = number / 10;
// get the next digit and display it
digit = number % 10;
cout << digit << ", ";
// get the remaining one digit number
number = number / 10;
// get the next digit and display it
digit = number % 10;
cout << digit;
}
A sample output of the above program is given below.
Please enter 4-digit number: 5678
The digits are: 8, 7, 6, 5
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
31
Problem Statement:
Write a program that takes radius of a circle from the user and calculates the diameter,
circumference and area of the circle and display the result.
Solution:
In this problem we take the input (radius of a circle) from the user. For that we can
use cin statement to prompt the user to enter the radius of a circle. We store this radius
in a variable. We also need other variables to store diameter, circumference and area
of the circle. To obtain the correct result, we declare these variables of type float,
instead of int data type, as we know that the int data type stores the whole numbers
only. Here in our problem the area or circumference of the circle can be in decimal
values. After getting the radius we use the formulae to find the diameter,
circumference and area of the circle and then display these results on the screen. The
solution of this program in coding form is given below.
/* Following program takes the radius of a circle from the user and calculates the
diameter, circumference and area of the circle and displays the result. */
#include <iostream.h>
main ()
{
// declare variables
float radius, diameter, circumference, area;
// prompt the user for radius of a circle
cout << "Please enter the radius of the circle " ;
cin >> radius ;
// calculate the diameter, circumference and area of the circle
// implementing formula i.e. diameter = 2 r circumference = 2 ח r and area = ח r2
diameter = radius * 2 ;
circumference = 2 * 3.14 * radius ; // 3.14 is the value of ח (Pi)
area = 3.14 * radius * radius ;
// display the results
cout << "The diameter of the circle is : " << diameter ;
cout << "The circumference of the circle is : " << circumference ;
cout << "The area of the circle is : " << area ;
}
A sample output of the above program is given below.
Please enter the radius of the circle 5
The diameter of the circle is : 10
The circumference of the circle is : 31.4
The area of the circle is : 78.5
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
32
Tips
o Use descriptive names for variables
o Indent the code for better readability and understanding
o Use parenthesis for clarity and to force the order of evaluation in an
expression
o Reuse the variables for better usage of memory
o Take care of division by zero
o Analyze the problem properly, and then start coding (i.e. first think and then
write)
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
33
Lecture No. 5
Reading Material
Deitel & Deitel – C++ How to Program chapter 2
2.4, 2.5, 2.6, 2.19,
2.20
Summary
o Conditional Statements
o Flow Charting
• Sample Program 1
o if/else structure
o Logical Operators
• Sample Program 2
o Tips
Conditional Statements (Decision Making)
In every day life, we are often making decisions. We perform different tasks while
taking decisions. For example, the statement ‘if the milk shop is open, bring one liter
of milk while returning home from college’, involves this phenomenon.
In this statement, there is an element of decision making. We bring one litre of milk if
the shop is open. And if the shop is closed, we come back to home without milk.
Thus we are making a decision on the condition that the shop is open. The decisionmaking
process is everywhere in our daily life. We see that the college gives
admission to a student if he has the required percentage in his previous examination
and/or in the entry test. Similarly administration of a basketball team of the college
decides that the students having height more than six feet can be members of the
team.
In the previous lectures, we have written simple elementary programs. For writing
interesting and useful programs, we have to introduce the decision making power in
them. Now we will see what kind of decisions are there in programming and how
these can be used.
Every programming language provides a structure for decision making.
'C' also provides this structure. The statement used for decisions in 'C' language is
known as the 'if statement'. The if statement has a simple structure. That is
if ( condition )
Statement (or group of statements)
The above statements mean, If condition is true, then execute the statement or a group
of statements. Here the condition is a statement which explains the condition on
which a decision will be made. We can understand it from the example that Ali can
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
34
become the member of the basket ball team if he has a height more than six feet .In
this case, the condition will be
if (Ali’s height is greater than six feet)
Ali can be a member of team
We have written the condition in English language. Now let's see how we can
implement this in terms of variables, operators and C statements. In the program, we
will write the condition in parentheses, followed by a statement or group of statements
to be executed.
Now here is the concept of block of statements. We use braces { } to make a group
(block) of a number of statements. We put ‘{’ before first statement and ‘}’ after the
last statement. Thus if we have to do many things after the if statement. The structure
of if statement becomes as under
if (condition)
{
statement;
statement;
.
.
statement;
}
Note the indentation of the lines and semi-colon after each statement. Semi-colons are
necessary after every C statement. The indentation is only a matter of style. It makes
the code easy to read and understand from where a block starts, ends and what kind of
block it is. It does not affect the logic of the program. But the braces can affect the
logic. We can also write a comment line to state the purpose of code block.
Let's consider a simple example to explain the if statement. Suppose, we have ages of
two students (say for the time being we have got these ages in variables). These
variables are- age1 and age2. Now we say that if the age1 is greater than age2, then
display the statement ‘Student 1 is older than student 2’.
The coding for this program will be as below
#include <iostream.h>
main()
{
int age1, age2;
age1 = 12;
age2 = 10;
if(age1 > age2)
cout << “Student 1 is older than student 2”;
}
Here, in our code we see a new operator i.e. ‘ > ‘ (greater than) in the if statement. We
need such operators (like greater than, less than, equal to etc) while making decisions.
These operators are called 'relational operators'. These are almost the same relational
operators we use in algebra. Following table summarizes the relational operators.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
35
Algebraic In C
language
Example Meaning
Greater than > > x > y x is greater than y
Equal to = == x == y x is equal to y
Less than < < x < y x is less than y
Greater than or
equal to
> >= x >= y x is greater than or
equal to y
Less than or
equal to
< <= x <= y x is less than or equal
to y
Not equal to ≠ != x != y x is not equal to y
Note that there is no space between ==, >=, <= and !=.
These are considered as single operators.
The operator == (equal to) is different from the operator =. We know that operator =
is the assignment operator which is used in assignment statement to assign a value to
a variable.
Don't confuse the assignment operator (=) with equal to operator (==). If we write
single = in condition of if statement. For example, if we write if ( x = 2 ), the compiler
will not give error. This means that it is not a syntax error. The conditional expression
in if statement returns a value. In this case, x = 2 will also have some value but it will
not in the form of true or false. So it will create a logical error. So be careful while
using equal to condition in if statement.
Flow Charting
There are different techniques that are used to analyze and design a program. We will
use the flow chart technique. A flow chart is a pictorial representation of a program.
There are labeled geometrical symbols, together with the arrows connecting one
symbol with other.
A flow chart helps in correctly designing the program by visually showing the
sequence of instructions to be executed. A programmer can trace and rectify the
logical errors by first drawing a flow chart and then simulating it.
Flow Chart Symbols
Below are some of the main symbols used in the flow chart.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
36
The flow chart for the if structure is shown in the figure below.
Sample Program 1
Now let’s see the usage of relational operators by an example. There are two students
Amer and Amara. We take their ages from the user, compare them and tell who is
older?
As there are two students to be compared in terms of age, we need to declare two
variables to store their ages. We declare two variables AmerAge and AmaraAge of
type int. The variable names are one continuous word as we can’t use spaces in a
variable name.
Here is an important point about variables declaration. We should assign an initial
value (preferably 0 for integers) to variables when we declare them. This is called
initialization of variables.
We can do this in one line while declaring a variable like int x = 0; This statement
will declare a variable of name x with data type int and will assign a value 0 to this
variable. Initializing a variable in this way is just a matter of style. You can initialize a
variable on a separate line after declaring it. It is a good programming practice to
initialize a variable.
Now we prompt the user to enter Amer’s age and store it into variable AmerAge.
Then similarly we get Amara’s age from the user in the variable AmaraAge.
While comparing the ages, we will use the if statement to see whether Amer’s age is
greater than Amara’s. We will use > (greater than) operator to compare the ages. This
can be written as if ( AmerAge > AmaraAge) .
With this if statement, we write the statement cout << "Amer is greater than Amara" ;
It’s a simple one line test i.e. ‘if Amer’s age is greater than Amara's’, then display the
message ‘Amer is older than Amara’.
The flow chart for the above problem is as under.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
37
The complete code of the program is given below.
/* This program test that if the age of Amer is greater than Amara’s age and displays the result.
*/
# include <iostream.h>
main ( )
{
int AmerAge, AmaraAge;
//prompt the user to enter Amer’s age
cout << “Please enter Amer’s age “ ;
cin >> AmerAge;
//prompt the user to enter Amara’s age
cout << “Please enter Amara’s age “ ;
cin >> AmaraAge;
//perform the test
if(AmerAge > AmaraAge )
cout << “ Amer is older than Amara”;
}
In our program, we write a single statement with the if condition. This statement
executes if the condition is true. If we want to execute more than one statements, then
we have to enclose all these statements in curly brackets { }. This comprises a block
of statements which will execute depending upon the condition. This block may
contain a single statement just like in our problem. So we can write the if statement as
follow.
if (AmerAge > AmaraAge )
{
cout << " Amer is older than Amara";
}
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
38
A sample execution of the program provides the following output.
Please enter Amer’s age 16
Please enter Amara’s age 14
Amer is older than Amara
Now think what happens if the condition in the if statement is not true i.e. Amer’s age
is not greater than Amara’s. In this case, if the user enters Amer’s age less than
Amara’s, then our program does nothing. So to check this condition, another if
statement after the first if statement is required. Then our program will be as:
/* This program checks the age of Amer and Amara’s and
displays the appropriate the message. The program is using
two if statements.*/
# include <iostream.h>
main ( )
{
int AmerAge, AmaraAge;
//prompt the user to enter Amer’s age
cout << “Please enter Amer’s age “ ;
cin >> AmerAge;
//prompt the user to enter Amara’s age
cout << “Please enter Amara’s age “ ;
cin >> AmaraAge;
//perform the test
if (AmerAge > AmaraAge )
{
cout << “ Amer is older than Amara”;
}
if (AmerAge < AmaraAge )
{
cout << “ Amer is younger than Amara”;
}
}
Now our program decides properly about the ages entered by the user.
After getting ages from the user, the if statements are tested and if statement will be
executed if the condition evaluates to true.
If/else Structure
We have seen that the if structure executes its block of statement(s) only when the
condition is true, otherwise the statements are skipped. The if/else structure allows the
programmer to specify that a different block of statement(s) is to be executed when
the condition is false. The structure of if/else selection is as follows.
if ( condition)
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
39
{
statement(s);
}
else
{
statement(s);
}
Thus using this structure we can write the construct of our program as
if (AmerAge > AmaraAge )
{
cout << " Amer is older than Amara";
}
else
{
cout << " Amer is younger than Amara";
}
In this construct, the program checks the condition in if statement .If the condition is
true, then the line "Amer is greater than Amara" is printed. Otherwise (if condition is
not true), the statement related to else is executed and the message "Amer is younger
than Amara" is printed. Here in if/else structure an important thing is that the else part
is executed for all the cases (conditions) other than the case which is stated in the if
condition.
And in the comparison, we know that there are three conditions i.e. first value is
greater than the second value, first value is less than the second value and first value
is equal to the second value. Here in the above program construct the else part
competes the greater than conditions and covers both less than and equal to
conditions.
Thus in the above program construct, the message "Amer is younger than Amara" is
displayed even if Amer’s age is the same as Amara’s age. This is logically incorrect
and so to make this correct, we should display the message "Amer is younger than or
is of the same age as Amara". Now this statement describes both the cases other than
the one ‘Amer is greater than Amara'.
The use of else saves us from writing different if statements to compare different
conditions, in this way it cover the range of checks to complete the comparison.
If we want to state the condition "Amer is greater than or is of the same age as
Amara’s" then we use the greater than or equal to operator (i.e. >=) in the if statement
and less than operator ( < ) in the else statement to complete the comparison.
It is very important to check all the conditions while making decisions for good,
complete and logical results. Make sure that all cases are covered and there is no such
case in which the program does not respond.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
40
Logical Operators
There are many occasions when we face complex conditions to make a decision. This
means that a decision depends upon more than one condition in different ways. Here
we combine the conditions with AND or OR. For example, a boy can be selected in
basket ball team only if he is more than 18 years old and has a height of 6 feet. In this
statement a boy who wants to be selected in the basket ball team must have both the
conditions fulfilled. This means that AND forces both the conditions to be true.
Similarly we say that a person can be admitted to the university if he has a BCS
degree OR BSC degree. In this statement, it is clear that a person will be admitted to
the university if he has any one of the two degrees.
In programming we use logical operators ( && and || ) for AND and OR respectively
with relational operators. These are binary operators and take two operands. These
operators use logical expressions as operands, which return TRUE or FALSE.
The following table (called truth table) can be used to get the result of the &&
operator and || operator with possible values of their operands. It is used to explain the
result obtained by the && and || operators.
Expression 1 Expression 2 Expression 1 &&
Expression 2
Expression 1 ||
Expression 2
True False false True
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
41
True True true True
False False false False
False True false True
The && operator has a higher precedence than the || operator. Both operators
associate from left to right. An expressions containing && or || is evaluated only until
truth or falsehood is known. Thus evaluation of the expression (age > 18) && (height
> 6) will stop immediately if age > 18 is false (i.e. the entire expression is false) and
continue if age > 18 is true (i.e. the entire expression could still be true if the
condition height > 6 is true ).
There is another logical operator that is called logical negation. The sign ! is used for
this operator. This operand enables a programmer to ‘reverse’ the meaning of a
condition. This is a unary operator that has only a single condition as an operand. The
operator ! is placed before a condition. If the original condition (without the !
operator) is false then the ! operator before it converts it to true and the statements
attached to this are executed.
Look at the following expression
if ( ! (age > 18 ))
cout << “ The age is less than 18”;
Here the cout statement will be executed if the original condition (age > 18) is false
because the ! operator before it reverses this false to true.
The truth table for the logical negation operator ( ! ) is given below.
Expression ! Expression
True False
False True
Sample Program 2
Problem statement
A shopkeeper announces a package for customers that he will give 10 % discount on
all bills and if a bill amount is greater than 5000 then a discount of 15 %. Write a C
program which takes amount of the bill from user and calculates the payable amount
by applying the above discount criteria and display it on the screen.
Solution
In this problem we are going to make decision on the basis of the bill amount, so we
will be using if statement. We declare three variables amount, discount and
netPayable and initialize them. Next we prompt the user to enter the amount of the
bill. After this we implement the if statement to test the amount entered by the user.
As we see in the problem statement that if the amount is greater than 5000 then the
discount rate is 15 % otherwise (i.e. the amount is less than or equal to 5000) the
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
42
discount rate is 10 %. So we check the amount in if statement. If it is greater than
5000 then the condition is true then the if block is executed otherwise if amount is not
greater than 5000 then the else block is executed.
The analysis and the flow of the program is shown by the following flow chart.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
43
The complete program code is given below:
/* This program calculates the discount amount for a customer. As different discount
percentage applies on different amount so program is using if statement for deciding
which discount is applicable and display the result. */
# include <iostream.h>
main ( )
{
double amount, discount, netPayable ;
amount = 0 ;
netPayable = 0 ;
discount = 0 ;
// prompt the user to enter the bill amount
cout << "Please enter the amount of the bill " ;
cin >> amount ;
//test the conditions and calculate net payable
if ( amount > 5000 )
{
//calculate amount at 15 % discount
discount = amount * (15.0 / 100);
netPayable = amount - discount;
cout << "The discount at the rate 15 % is Rupees " << discount << endl;
cout << "The payable amount is Rupees " << netPayable ;
}
else
{
// calculate amount at 10 % discount
discount = amount * (10.0 / 100);
netPayable = amount - discount;
cout << "The discount at the rate 10 % is Rupees " << discount << endl ;
cout << "The payable amount is Rupees " << netPayable ;
}
}
In the program we declared the variables as double. We do this to get the correct
results (results may be in decimal points) of the calculations. Look at the statement
which calculates the discount. The statement is
discount = amount * (15.0 / 100) ;
Here in the above statement we write 15.0 instead of 15. If we write here 15 then the
division 15 / 100 will be evaluated as integer division and the result of division (0.15)
will be truncated and we get 0 and this will result the whole calculation to zero. So it
is necessary to write at least one operand in decimal form to get the correct result by
division and we should also declare the variables as float or double. We do the same
in the line discount = amount * (10.0 / 100);
A sample execution of the program is given below
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
44
Please enter the amount of the bill 6500
The discount at the rate 15 % is Rupees 975
The payable amount is Rupees 5525
Tips
• Always put the braces in an if/else structure
• Type the beginning and ending braces before typing inside them
• Indent both body statements of an if and else structure
• Be careful while combining the conditions with logical operators
• Use if/else structure instead of a number of single selection if
statements
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
45
Lecture No. 6
Reading Material
Deitel & Deitel – C++ How to Program chapter 2
2.7, 2.8, 2.9, 2.20
Summary
Repetition Structure (Loop)
Overflow Condition
Sample Program 1
Sample Program 2
Infinite Loop
Properties of While loop
Flow Chart
Sample Program 3
Tips
Repetition Structure (Loop)
In our day to day life, most of the things are repeated. Days and nights repeat
themselves 30 times a month. Four seasons replace each other every year. We can see
similar phenomenon in the practical life. For example, in the payroll system, some
procedures are same for all the employees. These are repeatedly applied while dealing
with the employees. So repetition is very useful structure in the programming.
Let’s discuss a problem to understand it thoroughly. We have to calculate the sum of
first 10 whole numbers i.e. add the numbers from 1 to 10. Following statement may
be one way to do it.
cout << “Sum of first 10 numbers is = “ << 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +
10;
This method is perfectly fine as the syntax is right. The answer is also correct. This
procedure can also be adopted while calculating the sum of numbers from 1 to 100.
We can write the above statement adding all the digits from 1 to 100. But this method
will not be suitable for computing the sum of numbers from 1 to 1000.The addition of
a very big number of digits will result in a very ugly and boring statement. Let’s
analyze it carefully. Our first integer is 1, is there any other way to find out what is the
next integer? Yes, we can add 1 to the integer and get the next integer which is 2. To
find the next integer (i.e. 3) we add 1 to the previous integer (i.e. 2) and get the next
integer which is 3. So whenever we have to find out the next integer, we have to add 1
to the previous integer.
We have to calculate the sum of first 1000 integers by taking a variable sum of type
int. It is a good programming practice to initialize the variable before using it. Here,
we initialize the variable sum with zero.
int sum = 0;
Now we get the first integer i.e. 1. We add this to the sum (sum becomes 0 + 1 = 1).
Now get the next integer which can be obtained by adding 1 to the previous integer
i.e. 2 and add it to the sum (sum becomes 1 + 2 = 3). Get the next integer by adding 1
to the previous integer and add it to the sum (sum becomes 3 + 3 = 6) and so on.
This way, we get the next integer by adding 1 to the previous integer and the
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
46
new integer to the sum. It is obvious that we are repeating this procedure again and
again i.e. adding 1 to the previous integer and add this new integer to the sum. So we
need some repetition structure in the programming language. There are many looping
constructs in C Language. The repetition structure we are discussing in this lecture is
'while loop structure'. ‘while’ is also a key word of 'C' so it cannot be used as a
variable name.
While means, 'do it until the condition is true'. The use of while construct can be
helpful in repeating a set of instructions under some condition. We can also use curly
braces with while just like we used with if. If we omit to use the braces with while
construct, then only one statement after while will be repeatedly executed. For good
programming practices, always use braces with while irrespective of the number of
statements in while block. The code will also be indented inside the while block as
Indentation makes the code easy to understand.
The syntax of while construct is as under:
while ( Logical Expression ) {
statement1;
statement2;
………….
}
The logical expression contains a logical or relational operator. While this logical
expression is true, the statements will be executed repeatedly. When this logical
expression becomes false, the statements within the while block, will not be executed.
Rather the next statement in the program after while block, will be executed.
Let’s discuss again the same problem i.e. calculation of the sum of first 1000 integers
starting from 1. For this purpose, we need a variable to store the sum of integers and
declare a variable named sum. Always use the self explanatory variable names. The
declaration of the variable sum in this case is:
int sum = 0;
The above statement has performed two tasks i.e. it declared the variable sum of type
int and also initialized it with zero. As it is good programming practice to initialize all
the variables when declared, the above statement can be written as:
int sum;
sum = 0;
Here we need a variable to store numbers. So we declare a variable number of type
int. This variable will be used to store integers.
int number;
As we have declared another variable of int data type, so the variables of same data
type can be declared in one line.
int sum, number;
Going back to our problem, we need to sum up all the integers from 1 to 1000. Our
first integer is 1. The variable number is to be used to store integers, so we will
initialize it by 1 as our first integer is 1:
number = 1;
Now we have two variables- sum and number. That means we have two memory
locations labeled as sum and number which will be used to store sum of integers and
integers respectively. In the variable sum, we have to add all the integers from 1 to
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
47
1000. So we will add the value of variable number into variable sum, till the time the
value of number becomes 1000. So when the value of number becomes 1000, we will
stop adding integers into sum. It will become the condition of our while loop. We can
say sum the integers until integer becomes 1000. In C language, this condition can be
written as:
while ( number <= 1000 ) {
………Action ………
}
The above condition means, 'perform the action until the number is 1000 or less than
1000'. What will be the Action? Add the number, the value of number is 1 initially,
into sum. This is a very simple statement:
sum = sum + number;
Let’s analyze the above statement carefully. We did not write sum = number; as this
statement will replace the contents of sum and the previous value of sum will be
wasted as this is an assignment statement. What we did? We added the contents of
sum and contents of number first (i.e. 0 + 1) and then stored the result of this (i.e. 1) to
the sum.
Now we need to generate next integer and add it to the sum. How can we get the next
integer? Just by adding 1 to the integer, we will get the next integer. In ‘C’, we will
write it as:
number = number + 1;
Similarly in the above statement, we get the original contents of number (i.e. 1). Add
1 to them and then store the result (i.e. 2) into the number. Now we need to add this
new number into sum:
sum = sum + number;
We add the contents of sum (i.e. 1) to the contents of number (i.e. 1) and then store
the result (i.e. 2) to the sum. Again we need to get the next integer which can be
obtained by adding 1 to the number. In other words, our action consists of only two
statements i.e. add the number to the sum and get the next integer. So our action
statements will be:
sum = sum + number;
number = number + 1;
Putting the action statements in while construct:
while ( number <= 1000 ) {
sum = sum + number;
number = number + 1;
}
Let's analyze the above while loop. Initially the contents of number is 1. The
condition in while loop (i.e. number <= 1000) will be evaluated as true, contents of
sum and contents of number will be added and the result will be stored into sum. Now
1 will be added to the contents of number and number becomes 2. Again the condition
in while loop will be evaluated as true and the contents of sum will be added to the
contents of number .The result will be stored into sum. Next 1 will be added to the
contents of number and number becomes 3 and so on. When number becomes 1000,
the condition in while loop evaluates to be true, as we have used <= (less than or equal
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
48
to) in the condition. The contents of sum will be added to the contents of number (i.e.
1000) and the result will be stored into the sum. Next 1 will be added to the contents
of number and number becomes 1001. Now the condition in while loop is evaluated to
false, as number is no more less than or equal to 1000 (i.e. number has become 1001).
When the condition of while loop becomes false, loop is terminated. The control of
the program will go to the next statement following the ending brace of the while
construct. After the while construct, we can display the result using the cout
statement.
cout << “ The sum of first 1000 integers starting from 1 is “ << sum;
The complete code of the program is as follows:
/* This program calculate the sum of first 1000 integers */
#include <iostream.h>
main()
{
//declaration of variables
int sum, number;
//Initialization of the variables
sum = 0;
number = 1;
// using the while loop to find out the sum of first 1000 integers starting from 1
while(number <= 1000)
{
// Adding the integer to the contents of sum
sum = sum + number;
// Generate the next integer by adding 1 to the integer
number = number + 1;
}
cout << "The sum of first 1000 integers starting from 1 is " << sum;
}
The output of the program is:
The sum of first 1000 integers starting from 1 is 500500
While construct is a very elegant and powerful construct. We have seen that it is very
easy to sum first 1000 integers just with three statements. Suppose we have to
calculate the sum of first 20000 integers. How can we do that? We just have to change
the condition in the while loop (i.e. number <= 20000).
Overflow Condition:
We can change this condition to 10000 or even more. Just try some more numbers.
How far can you go with the limit? We know that integers are allocated a fixed space
in memory (i.e. 32 bits in most PCs) and we can not store a number which requires
more bits than integer, into a variable of data type, int. If the sum of integers becomes
larger than this limit (i.e. sum of integers becomes larger than 32 bits can store), two
things can happen here. The program will give an error during execution, compiler
can not detect such errors. These errors are known as run time errors. The second
thing is that 32 bits of the result will be stored and extra bits will be wasted, so our
result will not be correct as we have wasted the information. This is called overflow.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
49
When we try to store larger information in, than a data type can store, overflow
condition occurs. When overflow condition occurs either a run-time error is generated
or wrong value is stored.
Sample Program 1:
To calculate the sum of 2000 integers, we will change the program (i.e. the while
condition) in the editor and compile it and run it again. If we need to calculate the sum
of first 5000 integers, we will change the program again in the editor and compile and
run it again. We are doing this work again in a loop. Change the program in the editor,
compile, execute it, again change the program, compile and execute it and so on. Are
we doing this in a loop? We can make our program more intelligent so that we don’t
need to change the condition every time. We can modify the condition as:
int upperLimit;
while (number <= upperLimit)
where upperLimit is a variable of data type int. When the value of upperLimit is 1000,
the program will calculate the sum of first 1000 integers. When the value of
upperLimit is 5000, the program will calculate the sum of first 5000 integers. Now we
can make it re-usable and more effective by requesting the user to enter the value for
upper limit:
cout << “Please enter the upper limit for which you want the sum ”;
cin >> upperLimit;
We don’t have to change our program every time when the limit changes. For the sum
of integers, this program has become generic. We can calculate the sum of any
number of integers without changing the program. To make the display statement
more understandable, we can change our cout statement as:
cout << “ The sum of first “ << upperLimit << “ integers is “ << sum;
Sample Program 2:
Problem statement:
Calculate the sum of even numbers for a given upper limit of integers.
Solution:
We analyze the problem and know that while statement will be used. We need to sum
even numbers only. How can we decide that a number is even or not? We know that
the number that is divisible by 2 is an even number. How can we do this in C
language? We can say that if a number is divisible by 2, it means its remainder is
zero, when divided by 2. To get a remainder we can use C’s modulus operator i.e. %.
We can say that for a number if the expression (number % 2) results in zero, the
number is even. Putting this in a conditional statement:
If ( ( number % 2) == 0 )
The above conditional statement becomes true, when the number is even and false
when the number is odd (A number is either even or odd).
The complete code of the program is as follows:
/* This program calculates sum of even numbers for a given upper limit of
integers */
#include <iostream.h>
main()
{
//declaration of variables
int sum, number, upperLimit;
//Initialization of the variables
sum = 0;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
50
number = 1;
// Prompt the user to enter upper limit of integers
cout << “Please enter the upper limit for which you want the sum ” ;
cin >> upperLimit;
// using the while loop to find out the sum of first 1000 integers starting from 1
while(number <= upperLimit)
{
// Adding the even integer to the contents of sum
if ( ( number % 2 ) == 0 )
{
sum = sum + number;
}
// Generate the next integer by adding 1 to the integer
number = number + 1;
}
cout << "The sum of even numbers of first “ << upperLimit << “ integers starting
from 1 is " << sum;
}
The output of the program is:
Please enter the upper limit for which you want the sum 10
The sum of even numbers of first 10 integers starting from 1 is 30
Suppose if we don’t have modulus operator in the C language. Is there any other way
to find out the even numbers? We know that in C integer division gives the integer
result and the decimal portion is truncated. So the expression (2 * (number / 2)) gives
the number as a result, if the number is even only. So we can change our condition in
if statement as:
if ( ( 2 * ( number /2 ) ) == number )
Infinite Loop:
Consider the condition in the while structure that is (number <= upperLimit) and in
the while block the value of number is changing (number = number + 1) to ensure that
the condition is tested again next time. If it is true, the while block is executed and so
on. So in the while block statements, the variable used in condition must change its
value so that we have some definite number of repetitions. What will happen if we do
not write the statement number = number + 1; in our program? The value of number
will not change, so the condition in the while loop will be true always and the loop
will be executed forever. Such loops in which the condition is always true are known
as infinite loops as there are infinite repetitions in it.
Property of while loop:
In the above example, if the user enters 0, as the value for upper limit. In the while
condition we test (number <= upperLimit) i.e. number is less than or equal to
upperLimit ( 0 ), this test return false. The control of the program will go to the next
statement after the while block. The statements in while structure will not be executed
even for a single time. So the property of while loop is that it may execute zero or
more time.
The while loop is terminated, when the condition is tested as false. Make sure that the
loop test has an adequate exit. Always use braces for the loop structure. If you forget
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
51
to put the braces, only one statement after the while statement is considered in the
while block.
Flow Chart:
The basic structure of while loop in structured flow chart is:
At first, we will draw a rectangle and write while in it. Then draw a line to its right
and use the decision symbol i.e. diamond diagram. Write the loop condition in the
diamond and draw a line down to diamond which represents the flow when the
decision is true. All the repeated processes are drawn here using rectangles. Then a
line is drawn from the last process going back to the while and decision connection
line. We have a line on the right side of diamond which is the exit of while loop. The
while loop terminates, when the loop condition evaluates to false and the control gets
out of while structure.
Here is the flow chart for sample program 2:
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
52
So far, we have been drawing flow charts after coding the program but actually we
have to draw the flow chart first and then start coding.
Sample Program 3:
Problem statement:
Calculate the factorial of a given number.
Solution:
The factorial of a number N is defined as:
N(N-1)(N-2)………….3.2.1
By looking at the problem, we can see that there is a repetition of multiplication of
numbers. A loop is needed to write a program to solve a factorial of a number. Let's
think in terms of writing a generic program to calculate the factorial so that we can get
the factorial of any number. We have to multiply the number with the next
decremented number until the number becomes 1. So the value of number will
decrease by 1 in each repetition.
Here is the flow chart for the factorial.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
53
Here is the code of the program.
/*This program calculates the factorial of a given number.*/
#include <iostream.h>
main()
{
//declaration of variables
int factorial, number;
//Initialization of the variables
factorial = 1;
number = 1;
// Prompt the user to enter upper limit of integers
cout << “Please enter the number for factorial ” ;
cin >> number;
// using the while loop to find out the factorial
while(number > 1)
{
factorial = factorial * number;
number = number - 1;
}
cout << "The factorial is “ << factorial;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
54
}
Exercise:
Calculate the sum of odd integers for a given upper limit. Also draw flow chart of the
program.
Calculate the sum of even and odd integers separately for a given upper limit using
only one loop structure. Also draw flow chart of the program.
Tips
Always use the self explanatory variable names
Practice a lot. Practice makes a man perfect
While loop may execute zero or more time
Make sure that loop test (condition) has an acceptable exit.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
55
Lecture No. 7
Reading Material
Deitel & Deitel – C++ How to Program Chapter 2
2.11, 2.12, 2.14, 2.15, 2.17
Summary
Do-While Statement
Example
for Statement
Sample Program 1
Increment/decrement Operators
Sample Program 2
Tips
Do-While Statement
We have seen that there may be certain situations when the body of while loop does
not execute even a single time. This occurs when the condition in while is false. In
while loop, the condition is tested first and the statements in the body are executed
only when this condition is true. If the condition is false, then the control goes directly
to the statement after the closed brace of the while loop. So we can say that in while
structure, the loop can execute zero or more times. There may be situations where we
may need that some task must be performed at least once.
For example, a computer program has a character stored from a-z. It gives to
user five chances or tries to guess the character. In this case, the task of guessing the
character must be performed at least once. To ensure that a block of statements is
executed at least once, C provides a do-while structure. The syntax of do-while
structure is as under:
do
{
statement(s);
}
while ( condition ) ;
Here we see that the condition is tested after executing the statements of the loop
body. Thus, the loop body is executed at least once and then the condition in do while
statement is tested. If it is true, the execution of the loop body is repeated. In case, it
proves otherwise (i.e. false), then the control goes to the statement next to the do
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
56
while statement. This structure describes ‘execute the statements enclosed in braces in
do clause' when the condition in while clause is true.
Broadly speaking, in while loop, the condition is tested at the beginning of the loop
before the body of the loop is performed. Whereas in do-while loop, the condition is
tested after the loop body is performed.
Therefore, in do-while loop, the body of the loop is executed at least once.
The flow chart of do-while structure is as follow:
Example
Let’s consider the example of guessing a character. We have a character in the
program to be guessed by the user. Let’s call it ‘z’. The program allows five tries
(chances) to the user to guess the character. We declare a variable tryNum to store
the number of tries. The program prompts the user to enter a character for guessing.
We store this character in a variable c.
We declare the variable c of type char. The data type char is used to store a single
character. We assign a character to a variable of char type by putting the character in
single quotes. Thus the assignment statement to assign a value to a char variable will
be as c = ‘a’. Note that there should be a single character in single quotes. The
statement like c = ‘gh’ will be a syntax error.
Here we use the do-while construct. In the do clause we prompt the user to enter a
character.
After getting character in variable c from user, we compare it with our character i.e
‘z’. We use if\else structure for this comparison. If the character is the same as ours
then we display a message to congratulate the user else we add 1 to tryNum variable.
And then in while clause, we test the condition whether tryNum is less than or equal
to 5 (tryNum <= 5). If this condition is true, then the body of the do clause is repeated
again. We do this only when the condition (tryNum <= 5) remains true. If it is
otherwise, the control goes to the first statement after the do-while loop.
If guess is matched in first or second try, then we should exit the loop. We know that
the loop is terminated when the condition tryNum <= 5 becomes false, so we assign a
value which is greater than 5 to tryNum after displaying the message. Now the
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
57
condition in the while statement is checked. It proves false (as tryNum is greater than
5). So the control goes out of the loop. First look here the flow chart for the program.
The code of the program is given below.
//This program allows the user to guess a character from a to z
//do-while construct is used to allow five tries for guessing
# include <iostream.h>
main ( )
{
//declare & initialize variables
int tryNum = 0 ;
char c ;
// do-while construct
do
{
cout << “Please enter a character between a-z for guessing : “ ;
cin >> c ;
//check the entered character for equality
if ( c == ‘z’)
{
cout << “Congratulations, Your guess is correct” ;
tryNum = 6;
}
else
{
tryNum = tryNum + 1;
}
}
while ( tryNum <= 5);
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
58
}
There is an elegant way to exit the loop when the correct number is guessed. We
change the condition in while statement to a compound condition. This condition will
check whether the number of tries is less than or equal to 5 and the variable c is not
equal to ‘z’. So we will write the while clause as while (tryNum <= 5 && c != ‘z’ );
Thus when a single condition in this compound condition becomes false, then the
control will exit the loop. Thus we need not to assign a value greater than 5 to variable
tryNum. Thus the code of the program will be as:
//This program allows the user to guess a character from a to z
//do-while construct is used to allow five tries for guessing
# include <iostream.h>
main ( )
{
//declare & initialize variables
int tryNum = 0 ;
char c ;
// do-while construct, prompt the user to guess a number and compares it
do
{
cout << “Please enter a character between a-z for guessing : “ ;
cin >> c ;
//check the entered character for equality
if ( c == ‘z’)
{
cout << “Congratulations, Your guess is correct” ;
}
else
{
tryNum = tryNum + 1;
}
}
while ( tryNum <= 5 && c != ‘z’ );
}
The output of the program is given below.
Please enter a character between a-z for guessing : g
Please enter a character between a-z for guessing : z
Congratulations, Your guess is correct
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
59
for Loop
Let’s see what we do in a loop. In a loop, we initialize variable(s) at first. Then we set
a condition for the continuation/termination of the loop. To meet the condition to
terminate the loop, we affect the condition in the body of the loop. If there is a
variable in the condition, the value of that variable is changed within the body of the
loop. If the value of the variable is not changed, then the condition of termination of
the loop will not meet and loop will become an infinite one. So there are three things
in a loop structure i.e. (i) initialization, (ii) a continuation/termination condition and
(iii) changing the value of the condition variable, usually the increment of the variable
value.
To implement these things, C provides a loop structure known as for loop. This is the
most often used structure to perform repetition tasks for a known number of
repetitions. The syntax of for loop is given below.
for ( initialization condition ; continuation condition ; incrementing condition )
{
statement(s) ;
}
We see that a 'for statement' consists of three parts. In initialization condition, we
initialize some variable while in continuation condition, we set a condition for the
continuation of the loop. In third part, we increment the value of the variable for
which the termination condition is set.
Let's suppose, we have a variable counter of type int. We write for loop in our
program as
for ( counter = 0 ; counter < 10 ; counter = counter +1 )
{
cout << counter << endl;
}
This 'for loop' will print on the screen 0, 1, 2 …. 9 on separate lines (as we use endl in
our cout statement). In for loop, at first, we initialize the variable counter to 0. And in
the termination condition, we write counter < 10. This means that the loop will
continue till value of counter is less than 10. In other words, the loop will terminate
when the value of counter is equal to or greater than 10. In the third part of for
statement, we write counter = counter + 1 this means that we add 1 to the existing
value of counter. We call it incrementing the variable.
Now let's see how this loop executes. When the control goes to for statement first
time, it sets the value of variable counter to 0, tests the condition (i.e. counter < 10). If
it is true, then executes the body of the loop. In this case, it displays the value of
counter which is 0 for the first execution. Then it runs the incrementing statement (i.e.
counter = counter + 1 ). Thus the value of counter becomes 1. Now, the control goes
to for statement and tests the condition of continuation. If it is true, then the body of
the loop is again executed which displays 1 on the screen. The increment statement is
again executed and control goes to for statement. The same tasks are repeated. When
the value of counter becomes 10, the condition counter < 10 becomes false. Then the
loop is terminated and control goes out of for loop.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
60
The point to be noted is that, the increment statement (third part of for statement) is
executed after executing the body of the loop. Thus for structure is equivalent to a
while structure, in which, we write explicit statement to change
(increment/decrement) the value of the condition variable after the last statement of
the body. The for loop does this itself according to the increment statement in the for
structure. There may be a situation where the body of for loop, like while loop, may
not be executed even a single time. This may happen if the initialization value of the
variable makes the condition false. The statement in the following for loop will not be
executed even a single time as during first checking, the condition becomes false. So
the loop terminates without executing the body of the loop.
for ( counter = 5 ; counter < 5 ; counter ++)
{
cout << “The value of counter is “ << counter ;
}
Sample Program 1
Let’s take an example to explain for loop. We want to write a program that prints the
table of 2 on the screen.
In this program, we declare a variable counter of type int. We use this variable to
multiply it by 2 with values 1 to 10. For writing the table of 2, we multiply 2 by 1, 2,
3 .. upto 10 respectively and each time display the result on screen. So we use for loop
to perform the repeated multiplication.
Following is the code of the program that prints the table of 2.
//This program display the table of 2 up to multiplier 10
# include <iostream.h>
main ( )
{
int counter;
//the for loop
for ( counter = 1 ; counter <= 10 ; counter = counter + 1)
{
cout << “2 x “ << counter << “ = “ << 2 * counter << “\n” ;
}
}
This is a simple program. In the for statement, we initialize the variable counter to 1
as we want the multiplication of 2 starting from 1. In the condition clause, we set the
condition counter <= 10 as we want to repeat the loop for 10 times. And in the
incrementing clause, we increment the variable counter by 1.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
61
In the body of the for loop, we write a single statement with cout. This single
statement involves different tasks. The portion ‘<< “2 x “’ displays the string “2 x “
on the screen. After this, the next part ‘<< counter’ will print the value of counter.
The ‘<< “ = ”’ will display ‘ = ‘ and then the next part ‘<< 2 * counter’ will display
the result of 2 multiply by counter and the last <<”\n” ( the new line character) will
start a new line. Thus in the first iteration where the value of counter is 1, the cout
statement will display the following line
2 x 1 = 2
After the execution of cout statement, the for statement will increment the counter
variable by 1. Thus value of counter will be 2. Then condition will be checked which
is still true. Thus the body of for loop (here the cout statement) will be executed again
having the value of counter 2. So the following line will be printed.
2 x 2 = 4
The same action will be repeated 10 times with values of counter from 1 to 10. When
the value of counter is 11, the condition ( counter <= 10 ) will become false and the
loop will terminate.
The output of the above program is as the following.
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
Now what will we do, if some one says us to write a table of 3, or 4 or 8 or any other
number. Here comes the point of re-usability and that a program should be generic.
We write a program in which a variable is used instead of a hard code number. We
prompt the user to enter the number for which he wants a table. We store this number
in the variable and then use it to write a table. So in our previous example, we now
use a variable say number where we were using 2. We also can allow the user to
enter the number of multipliers up to which he wants a table. For this, we use a
variable maxMultiplier and execute the loop for maxMultiplier times by putting the
condition counter <= maxMultiplier. Thus our program becomes generic which can
display a table for any number and up to any multiplier.
Thus, the code of our program will be as below:
//This program takes an integer input from user and displays its table
//The table is displayed up to the multiplier entered by the user
# include <iostream.h>
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
62
main ( )
{
int counter, number, maxMultiplier ;
// Prompt the user for input
cout << “Please enter the number for which you want a table : “ ;
cin >> number ;
cout << “Please enter the multiplier up to which you want a table : “ ;
cin >> maxMultiplier ;
//the for loop
for ( counter = 1 ; counter <= maxMultiplier ; counter = counter + 1)
{
cout << number << “ x “ << counter << “ = “ << number * counter << “\n” ;
}
}
The output of the program is shown as follows:
Please enter the number for which you want a table : 7
Please enter the multiplier up to which you want a table : 8
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
Here is a guideline for programming style. We should avoid using constant values in
our calculations or in long routines. The disadvantage of this is that if we want to
change that constant value later, then we have to change every occurrence of that
value in the program. Thus we have to do a lot of work and there may be some places
in code where we do not change that value. To avoid such situations, we can use a
variable at the start and assign that constant value to it and then in the program use
that variable. Thus, if we need to change the constant value, we can assign the new
value to that variable and the remaining code will remain the same. So in our program
where we wrote the table of 2, we can use a variable (say number) and assign it the
value 2. And in cout statement we use this variable instead of constant 2. If we want
that the program should display a table of 5, then we just change the value of the
variable. So for good programming, use variables for constant values instead of
explicit constant values.
Increment Decrement Operators
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
63
We have seen that in while, do-while and for loop we write a statement to increase the
value of a variable. For example, we used the statements like counter = counter + 1;
which adds 1 to the variable counter. This increment statement is so common that it is
used almost in every repetition structure (i.e. in while, do-while and for loop). The C
language provides a unary operator that increases the value of its operator by 1. This
operator is called increment operator and sign ++ is used for this. The statement
counter = counter + 1; can be replaced with the statement
counter ++ ;
The statement counter++ adds 1 to the variable counter. Similarly the expressions i =
i + 1 ; and j = j + 1 ; are equivalent to i++ ; and j++; respectively. There is also an
operator -- called decrement operator. This operator decrements, the value of its
operand by 1. So the statements counter = counter - 1; and j = j - 1; are equivalent to
counter--; and j--; respectively.
The increment operator is further categorized as pre-increment and post-increment.
Similarly, the decrement operator, as pre-decrement and post-decrement.
In pre-increment, we write the sign before the operand like ++j while in postincrement,
the sign ++ is used after the operand like j++. If we are using only variable
increment, pre or post increment does not matter. In this case, j++ is equivalent to
++j. The difference of pre and post increment matters when the variable is used in an
expression where it is evaluated to assign a value to another variable. If we use preincrement
( ++j ), the value of j is first increased by 1. This new value is used in the
expression. If we use post increment ( j++ ),the value of j is used in the expression.
After that it is increased by 1. Same is the case in pre and post decrement.
If j = 5, and we write the expression
x = ++ j ;
After the evaluation of this expression, the value of x will be 6 (as j is incremented
first and then is assigned to x). The value of j will also be 6 as ++ operator increments
it by 1.
If j = 5, and we write the expression
x = j++ ;
Then after the evaluation of the expression, the value of x will be 5 (as the value of j
is used before increment) and the value of j will be 6.
The same phenomenon is true for the decrement operator with the difference that it
decreases the value by 1. The increment and decrement operators affect the variable
and update it to the new incremented or decremented value.
The operators ++ and -- are used to increment or decrement the variable by 1. There
may be cases when we are incrementing or decrementing the value of a variable by a
number other than 1. For example, we write counter = counter + 5; or j = j – 4;. Such
assignments are very common in loops, so C provides operators to perform this task
in short. These operators do two things they perform an action (addition, subtraction
etc) and do some assignment.
These operators are +=, -=, *=, /= and %=. These operators are compound assignment
operators. These operators assign a value to the left hand variable after performing an
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
64
action (i.e. +, -, *, / and %). The use of these operators is explained by the following
examples.
Let’s say we have an expression, counter = counter + 5;. The equivalent of this
expression is counter += 5;. The statement counter += 5; does two tasks. At first, it
adds 5 to the value of counter and then assigns this result to counter. Similarly the
following expressions
x = x + 4 ;
x = x - 3 ;
x = x * 2 ;
x = x / 2 ;
x = x % 3;
can be written in equivalent short statements using the operators ( +=, -=, *=, /=, %= )
as follows
x += 4 ;
x -= 3 ;
x *= 2;
x /= 2;
x %= 3 ;
Note that there is no space between these operators. These are treated as single signs.
Be careful about the operator %=. This operator assigns the remainder to the variable.
These operators are alternate in short hand for an assignment statement. The use of
these operators is not necessary. A programmer may use these or not. It is a matter of
style.
Example Program 2
Let’s write a program using for loop to find the sum of the squares of the integers
from 1 to n. Where n is a positive value entered by the user (i.e. Sum = 12 + 22 + 32 +
……+ n2)
The code of the program is given below:
//This program displays the sum of squares of integers from 1 to n
# include <iostream.h>
main ( )
{
//declare and initialize variables
int i, n, sum;
sum = 0 ;
//get input from user and construct a for loop
cout << “Please enter a positive number for sum of squares: ” ;
cin >> n;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
65
for ( i = 1 ; i <= n ; i ++)
{
sum += i * i ;
}
cout << “The sum of the first ” << n << “ squares is “ << sum << endl ;
}
In the program declared three variables i, n and sum. We prompted the user to enter a
positive number. We stored this number in the variable n. Then we wrote a for loop.
In the initialization part, we initialized variable i with value 1 to start the counting
from 1. In the condition statement we set the condition i less than or equal to n
(number entered by the user) as we want to execute the loop n times. In the increment
statement, we incremented the counter variable by 1. In the body of the for loop we
wrote a single statement sum += i * i ;. This statement takes the square of the counter
variable ( i )and adds it to the variable sum. This statement is equivalent to the
statement sum = sum + ( i * i ) ; Thus in each iteration the square of the counter
variable (which is increased by 1 in each iteration ) is added to the sum. Thus loop
runs n times and the squares of numbers from 1 to n are summed up. After
completing the for loop the cout statement is executed which displays the sum of the
squares of number from 1 to n.
Following is the output when the number 5 is entered.
Please enter a positive number for sum of squares: 5
The sum of the first 5 squares is 55
Tips
Comments should be meaningful, explaining the task
Don’t forget to affect the value of loop variable in while and do-while loops
Make sure that the loop is not an infinite loop
Don’t affect the value of loop variable in the body of for loop, the for loop does this
by itself in the for statement
Use pre and post increment/decrement operators cautiously in expressions
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
66
Lecture No. 8
Reading Material
Deitel & Deitel – C++ How to Program Chapter 2
2.16, 2.18
Summary
o Switch Statement
o Break Statement
o Continue Statement
o Guide Lines
o Rules for structured Programming/Flow Charting
o Sample Program
o Tips
Switch Statement
Sometimes, we have multiple conditions and take some action according to each
condition. For example, in the payroll of a company, there are many conditions to
deduct tax from the salary of an employee. If the salary is less than Rs. 10000, there is
no deduction. But if it falls in the slab Rs. 10000 - 20000, then the income tax is
deducted. If it exceeds the limit of Rs. 20000, some additional tax will be deducted.
So the appropriate deduction is made according to the category or slab of the salary.
We can also understand this from the example of grades secured by the students of a
class. Suppose we want to print description of the grade of a student. If the student has
grade ‘A’ we print ‘Excellent’ and 'Very good', 'good', 'poor' and 'fail' for grades B,
C, D, and F respectively. Now we have to see how this multi-condition situation can
be applied in a program. We have a tool for decision making i.e. 'if statement'. We can
use 'if statement' to decide what description for a grade should be displayed. So we
check the grade in if statement and display the appropriate description. We have five
categories of grades-- A, B, C, D, and F. We have to write five if statements to check
all the five possibilities (probabilities) of grade. So we write this in our program as
underif
( grade == ‘A’ )
cout << “Excellent” ;
if ( grade == ‘B’ )
cout << “Very Good” ;
if ( grade == ‘C’ )
cout << “Good” ;
if ( grade == ‘D’ )
cout << “Poor” ;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
67
if ( grade == ‘F’ )
cout << “Fail” ;
These statements are correct and perform the required task. But the 'if statement' is
computationally one of the most expensive statements in a program. We call it
expensive due to the fact that the processor has to go through many cycles to execute
an if statement to evaluate a single decision. So to make a program more efficient, try
to use the minimum number of if statements. This will make the performance of the
program better.
So if we have different conditions in which only one will be true as seen in the
example of student’s grades, the use of if statement is very expensive. To avoid this
expensiveness, an alternate of multiple if statements can be used that is if/else
statements. We can write an if statement in the body of an if statement which is
known as nested if. We can write the previous code of if statements in the following
nested if/else form.
If ( grade == ‘A’ )
cout << “Excellent” ;
else if ( grade == ‘B’ )
cout << “Very Good” ;
else if ( grade == ‘C’ )
cout << “Good” ;
else if ( grade == ‘D’ )
cout << “Poor” ;
else if ( grade == ‘F’ )
cout << “Fail” ;
In the code, there is single statement with each if statement. If there are more
statements with an if statement, then don’t forget the use of braces and make sure that
they match (i.e. there is a corresponding closing brace for an opening brace). Proper
indentation of the blocks should also be made.
In the above example, we see that there are two approaches for a multi way decision.
In the first approach, we use as many if statements as needed. This is an expensive
approach. The second is the use of nested if statements. The second is little more
efficient than the first one. In the 'nested if statements' the nested else is not executed
if the first if condition is true and the control goes out of the if block.
The C language provides us a stand-alone construct to handle these instances. This
construct is switch structure. The switch structure is a multiple-selection construct
that is used in such cases (multi way decisions) to make the code more efficient and
easy to read and understand.
The syntax of switch statement is as follows.
switch ( variable/expression )
{
case constant1 : statementLlist1 ;
case constant2 : statementLlist2 ;
:
:
case constantN : statementListN ;
default : statementList ;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
68
}
In the switch statement, there should be an integer variable (also include char) or an
expression which must evaluate an integer type (whole numbers only, the decimal
numbers 2.5, 14.3 etc are not allowed). We can’t use compound conditions (i.e. the
conditions that use logical operators && or ||) in switch statement and in case
statements. The constants also must be integer constants (which include char). We
can’t use a variable name with the case key word. The default statement is optional. If
there is no case which matches the value of the switch statement, then the statements
of default are executed.
The switch statement takes the value of the variable, if there is an expression then it
evaluates the expression and after that looks for its value among the case constants. If
the value is found among the constants listed in cases, the statements in that
statementList are executed. Otherwise, it does nothing. However if there is a default
(which is optional), the statements of default are executed.
Thus our previous grade example will be written in switch statement as below.
switch ( grade )
{
case ‘A’ : cout << “Excellent” ;
case ‘B’ : cout << “Very Good” ;
case ‘C’ : cout << “Good” ;
case ‘D’ : cout << “Poor” ;
case ‘F’ : cout << “Fail” ;
}
We know that C language is 'case sensitive'. In this language, ‘A’ is different from
‘a’. Every character has a numeric value which is stored by the computer.. The
numeric value of a character is known as ASCII code of the character. The ASCII
code of small letters (a, b, c etc ) are different from ASCII code of capital letters (A,
B, C etc). We can use characters in switch statement as the characters are represented
as whole numbers inside the computers.
Now we will see how the use of ' the letter a' instead of 'A' can affect our program.
We want our program to be user- friendly. We don’t want to restrict the user to enter
the grade in capital letters only. So we have to handle both small and capital letters in
our program. Here comes the limitations of switch statement. We can’t say in our
statement like
case ‘A’ or ‘a’ : statements ;
We have to make two separate cases so we write
case ‘A” :
case ‘a’ :
statements;
In the switch statement, the cases fall through the case which is true. All the
statements after that case will be executed right down to the end of the switch
statement. This is very important to understand it. Let's suppose that the user enters
grade ‘B’. Now the case ‘A’ is skipped. Next case ‘B’ matches and statement cout <<
“Very Good” ; is executed. After that, all the statements will be executed. So cout <<
“Good” ; cout << “Poor” ;and cout << “Fail” ; will be executed after one another.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
69
We don’t want this to happen. We want that when a case matches, then after
executing its statement, the control should jump out of the switch statement leaving
the other cases. For this purpose we use a key word break.
Break Statement
The break statement interrupts the flow of control. We have seen in switch statement
that when a true case is found, the flow of control goes through every statement down
ward. We want that only the statements of true case should be executed and the
remaining should be skipped. For this purpose, we use the break statement. We write
the break statement after the statements of a case. Thus, when a true case is found and
its statements are executed then the break statement interrupts the flow of control and
the control jumps out of the switch statement. If we want to do the same task for two
cases, like in previous example for ‘A’ and ‘a’, then we don't put break statement
after the first case. We write both the cases (or the cases may be more than two) line
by line then write the common statements to be executed for these cases. We write the
break statement after these common statements. We should use the break statement
necessarily after the statements of each case. The break statement is necessary in
switch structure, without it the switch structure becomes illogic. As without it all the
statement will execute after first match case is found.
The above code does nothing if the grade is other than these five categories (i.e. A, B,
C, D and F). To handle all the possibilities of grade input, we write a default
statement after the last case. The statement in this default case is executed if no case
matches the grade. So in our program, we can write the default statement after the
last case as under.
default : cout << “Please enter grade from A to D or F ” ;
The break statement is also used in decision structures other than switch structure. We
have seen that in while, do-while and for loops, we have to violate some condition
explicitly to terminate the loop before its complete repetitions. As in a program of
guessing a character, we make a variable tryNum greater than 5 to violate the while
condition and exit the loop if the correct character is guessed before five tries. In these
loops, we can use the break statement to exit a loop. When a break statement is
encountered in a loop, the loop terminates immediately. The control exits the inner
most loop if there are nested loops. The control passes to the statement after the loop.
In the guessing character example, we want that if the character is guessed in first or
second attempt,. then we print the message ‘Congratulations, You guess is correct’
and exit the loop. We can do this by using a break statement with an if statement. If
the character is guessed, we print the message. Afterwards, the break statement is
executed and the loop terminates. So we can write this as follows.
if ( c == ‘z’ ) // c is input from user
{
cout << “Great, Your guess is correct” ;
break;
}
Thus, break statement can be used to jump out of a loop very quickly.
The flow chart of the switch statement is similar to if statement and is given below.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
70
switch
(variable )
Process
Process
case const 1
case const2
break
break
The flow chart of switch statement
The number of case statement can vary from
1 to any number. Thus there are same
number of process blocks as cases.
Now we can write the complete code for the program that prints the description of the
grade entered by the user.
The flow chart of the program is given below.
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
71
Start
switch (grade)
Stop
Display "Excellent"
case 'A'
break
Display
"Very Good"
case 'B'
break
Display "Good"
case 'C'
break
Display "Poor"
case 'D'
break
Display "Fail"
case 'F'
break
Display " Please
enter grade A-D or
F"
default
break
The flow chart of a program that displays the description of a grade
using switch statement
The code of the program is given below.
//This program gets a grade from user and displays a description accordingly
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
72
# include <iostream.h>
main ( )
{
char grade ;
cout << “Please enter the student’s grade : ” ;
cin >> grade ;
switch ( grade )
{
case ‘A’ : // grade was upper case A
case ‘a’ : // grade was lower case a
cout << “Excellent” ;
break : // necessary to exit switch
case ‘B’ : // grade was upper case B
case ‘b’ : // grade was lower case b
cout << “Very Good” ;
break : // necessary to exit switch
case ‘C’ : // grade was upper case C
case ‘c’ : // grade was lower case c
cout << “Good” ;
break : // necessary to exit switch
case ‘D’ : // grade was upper case D
case ‘d’ : // grade was lower case d
cout << “Poor” ;
break : // necessary to exit switch
case ‘F’ : // grade was upper case F
case ‘f’ : // grade was lower case f
cout << “Fail” ;
break : // necessary to exit switch
default :
cout << “Please enter grade from A to D or F ” ;
}
}
A sample out put of the program is shown here.
Please enter the student’s grade : b
Very Good
continue Statement
There is another statement relating to loops. This is the continue statement.
Sometimes we have a lot of code in the body of a loop. The early part of this code is
common that is to be executed every time (i.e. in every iteration of loop) and the
remaining portion is to be executed in certain cases and may not be executed in other
cases. But the loop should be continuous. For this purpose, we use the continue
statement. Like the break statement, the continue statement is written in a single line.
We write it as
continue ;
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
73
The continue forces the immediate next iteration of the loop. So the statements of the
loop body after continue are not executed. The loop starts from the next iteration
when a continue statement is encountered in the body of a loop. One can witness very
subtle things while using continue.
Consider the while loop. In while loop, we change the value of the variable of while
condition so that it could make the condition false to exit the loop. Otherwise, the
loop will become an infinite one. We should be very careful about the logic of the
program while using continue in a loop. Before the continue statement, it is necessary
to change (increment/decrement) the value of the variable on which the while
condition depends. Similarly it is same with the do-while loop. Be careful to
increment or decrement the conditional variable before the continue statement.
In for loop, there is a difference. In a while loop when continue is encountered, the
control goes to the while statement and the condition is checked. If condition is true
the loop is executed again else the loop exits. In a for loop, the three things i.e.
initialization, condition and increment/decrement are enclosed together as we write
for ( counter = 0 ; counter <= 5 ; counter ++) . In the for loop when a continue is
encountered, the counter (i.e. loop variable) is incremented at first before the
execution of the loop condition. Thus, in 'for loop' the increment to the loop variable
is built in and after continue the next iteration of the loop is executed by incrementing
the loop variable. The condition is checked with the incremented value of the loop
variable. In while and do-while loop, it is our responsibility to increment the value of
the loop variable to test the condition. In a for loop, the continue automatically forces
this increment of value before going to check the condition.
goto Statement
Up to now we have covered the basic programming constructs. These include
sequences, decisions and repetition structures (i.e. loops). In sequences, we use the
simple statements in a sequence i.e. one after the other. In decisions construct we use
the if statement, if/else statement, the multi way decision construct (i.e. the switch
statement). And in repetition structures, we use the while, do-while and for loops.
Sometime ago, two computer scientists Gome and Jacopi proved that any program
can be written with the help of these three constructs (i.e. sequences, decisions and
loops).
There is a statement in the computer languages COBOL, FORTRON and C. This
statement is goto statement. The goto is an unconditional branch of execution. The
goto statement is used to jump the control anywhere (back and forth) in a program. In
legacy programming, the programs written in COBOL and FORTRAN languages
have many unconditional branches of execution. To understand and decode such
programs that contain unconditional branches is almost impossible. In such programs,
it is very difficult, for a programmer, to keep the track of execution as the control
jumps from one place to the other and from there to anywhere else. We call this kind
of traditional code as spagatti code. It is very difficult to trace out the way of
execution and figure out what the program is doing. And debugging and modifying
such programs is very difficult.
When structured programming was started, it was urged not to use the goto statement.
Though goto is there in C language but we will not use it in our programs. We will
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
74
adopt the structured approach. All of our programs will consist of sequences,
decisions and loops.
Guide Lines
In general, we should minimize the use of break statement in loops. The switch
statement is an exception in this regard where it is necessary to use the break
statement after every case. Otherwise, there may be a logical error. While writing
loops, we should try to execute the loops with the condition test and should try to
avoid the break statement. The same applies to the continue statement. The continue
statement executes some statements of the loop and then exits the loop without
executing some statements after it. We can use the if statement for this purpose
instead of continue. So never use the goto statement and minimize the usage of break
and continue statements in loops. This will make the code easy to understand for you
and for others. Moreover the additions and modifications to such code will be easy, as
the path of execution will be easy to trace.
Make a program modular. This means that divide a large program into small parts. It
will be easy to manage these small parts rather than a larger program. There should be
single entry and single exit in every module or construct. The use of break statement
in a construct violates this rule as a loop having a break statement can exit through
break statement or can terminate when the loop condition violates. As there are two
exit points, this should be avoided. The single entry- single exit approach makes the
execution flow simple.
Here is an example from daily life, which shows that single entry and single exit
makes things easy. You would have often seen at a bus stop, especially in rush hours,
that when a bus reaches the stop, everyone tries to jump into the bus without caring
for others. The passengers inside the bus try to get down from the vehicle. So you see
there a wrestling like situation at the door of the bus. Separate doors for entering or
exiting the bus can be the solution. In this way, the passengers will easily enter or exit
the bus.
We have applied this single entry and single exit rule in drawing our flow charts. In
the flow charts, we draw a vertical line from top to down. The point where the line
starts is our entry point and downward at the same line at the end is our exit point.
Our all other processes and loops are along or within these two points. Thus our flow
charts resemble with the code.
Rules for Structured Programming/Flow Charting
There are few simple rules for drawing structured flow charts of programs. One
should be familiar with these.
Rule No:1-Start with the simple flow chart. This means that draw a start symbol,
draw a rectangle and write in it whatsoever you want to do and then draw a stop
symbol. This is the simplest flow chart.
Rule No:2- Any rectangle ( a rectangle represents a process which could be input,
output or any other process) can be replaced by two rectangles.
This concept is the same as taking a complex problem and splitting it up into two
simpler problems. So we have ‘split it up’ method to move towards a modular
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
75
approach. So start with a block (rectangle) and then any rectangle can be replaced by
two rectangles (blocks).
Rule No:3- Any rectangle can be replaced with a structured flow charting construct.
These construct include decisions, loops or multi- way decision. This means that we
can put a structure of an if construct or switch construct in the place of a rectangle.
Here we come to know the advantage of single entry and single exit concept. This
single entry and single exit block can be replaced with a rectangle.
Rule No: 4- This rule states that rule number 2 and 3 can be repeated as many times
as you want.
By using these rules we are splitting a problem into simpler units so that each part can
be handled either by sequences (one rectangle, second rectangle and so on) or by a
decision (if, if/else, switch or by a loop). Through this approach, a large problem can
be solved easily.
The flow charts drawn with these rules and indented to the left side will have one to
one correspondence with our code. Thus it becomes very easy to identify the code that
is written for a specific part of the flow chart. In this way the code can easily be
debugged.
Sample Program
Let’s consider a problem. In a company, there are deductions from the salary of the
employees for a fund. The deductions rules are as follows:
If salary is less than 10,000 then no deduction
If salary is more than 10,000 and less than 20,000 then deduct Rs. 1,000 as fund
If salary is equal to or more than 20,000 then deduct 7 % of the salary for fund
Take salary input from user and after appropriate deduction show the net payable
amount.
Solution
As we see that there is multi way decision in this problem, so we use switch
statement. The salary is the switch variable upon which the different decisions
depend. We can use only a single constant in case statement. So we divide the salary
by 10000 to convert it into a single case constant. As we know that in integer division
we get the whole number as the answer. Thus if answer is 0 the salary is less than
10000, if answer is 1 then it is in range 10000 to 19999 ( as any amount between
10000 – 19999 divided by 10000 will result 1). If the answer is greater than 1, it
means the salary is equal to or more than 20000.
Following is the complete code of our program.
// This program gets salary input from user and calculates and displays the net payable
// amount after deduction according the conditions
# include <iostream.h>
main ( )
{
int salary ;
float deduction, netPayable ;
cout << “Please enter the salary : “ ;
cin >> salary ;
// here begins the switch statement
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
76
switch ( salary / 10000 ) // this will produce a single value
{
case 0 : // this means salary is less than 10,000
deduction = 0; // as deduction is zero in this case
netPayable = salary ;
cout << “Net Payable (salary – deduction) = “ ;
cout << salary << “ - ” << deduction << “ = “ << netPayable;
break; //necessary to exit switch
case 1 : // this means salary is in range 10,000 – 19,999
deduction = 1000 ;
netPayable = salary – deduction ;
cout << “Net Payable (salary – deduction) = “ ;
cout << salary << “ - ” << deduction << “ = “ << netPayable;
break; //necessary to exit switch
default : // this means the salary is 20,000 or more
deduction = salary * 7 /100 ;
netPayable = salary – deduction ;
cout << “Net Payable (salary – deduction) = “ ;
cout << salary << “ - ” << deduction << “ = “ << netPayable;
}
}
Here is the out put of the program.
Please enter the salary : 15000
Net Payable (salary – deduction) = 15000 – 1000 = 14000
Tips
Try to use the switch statement instead of multiple if statements
Missing a break statement in a switch statement may cause a logical error
Always provide a default case in switch statements
Never use goto statement in your programs
Minimize the use of break and continue statements
CS201 – Introduction to Programming
© Copyright Virtual University of Pakistan
77
Lecture No. 9
Reading Material
Deitel & Deitel – C++ How to Program chapter 2
3.1, 3.2, 3.3, 3.4,
3.5, 3.6
Summary
o Introduction
o Functions
o Structure of a Function
o Declaration and Definition of a Function
o Sample Program 1
o Sample Program 2
o Sample Program 3
o Summary
o Tips
Introduction
Now our toolkit is almost complete. The basic constructs of programming are
sequence, decision making and loops. You have learnt all these techniques. Now we
can write almost all kinds of programs. There are more techniques to further refine the
programs. One of the major programming constructs is Functions. C is a functionoriented
language. Every program is written in different functions.
In our daily life, we divide our tasks into sub tasks. Consider the making of a
laboratory stool.

Download Book

Post a Comment

 
Top