Chapter Two - Computer Programming
Chapter Two - Computer Programming
Basics of C++
The parts of a C++ Program
To understand the basic parts of a simple program in C++, let’s have a look at
the following code:
#include<iostream.h>
#include<conio.h>
void main()
{
cout<<”\n Hello World!”;
getch();
}
Any C++ program file should be saved with file name extension “ .CPP ”
Type the program directly into the editor, and save the file as hello.cpp,
compile it and then run it. It will print the words Hello World! on the computer
screen.
The first character is the #. This character is a signal to the preprocessor. Each
time you start your compiler, the preprocessor runs through the program and
looks for the pound (#) symbols and act on those lines before the compiler
runs.
The include instruction is a preprocessor instruction that directs the compiler to
include a copy of the file specified in the angle brackets in the source code.
If the path of the file is not specified, the preprocessor looks for the file under
c:\tc\include\ folder or in include folder of the location where the editor is
stored.
The effects of line 1, i.e. include<iostream.h> is to include the file iostream.h
into the program as if the programmer had actually typed it.
When the program starts, main() is called automatically.
Every C++ program has a main() function.
The return value type for main() here is void, which means main function will
not return a value to the caller (which is the operating system).
The main function can be made to return a value to the operating system.
The Left French brace “{“signals the beginning of the main function body and
the corresponding Right French Brace “}” signals the end of the main function
body. Every Left French Brace needs to have a corresponding Right French
Brace.
The lines we find between the braces are statements or said to be the body of
the function.
A statement is a computation step which may produce a value or interact with
input and output streams.
The end of a single statement ends with semicolon (;).
1
The statement in the above example causes the sting “Hello World!” to be sent
to the “cout” stream which will display it on the computer screen.
1
2 // my second program in C++
3
4 #include <iostream.h>
5
6 int main ()
Hello World! I'm a C++ program
7 {
8 cout << "Hello World! ";
9 cout << "I'm a C++ program";
10 return 0;
11 }
12
In this case, we performed two insertions into cout in two different statements. Once again, the
separation in different lines of code has been done just to give greater readability to the program,
since main could have been perfectly valid defined this way:
int main () { cout << " Hello World! "; cout << " I'm a C++ program ";
return 0; }
We were also free to divide the code into more lines if we considered it more convenient:
1 int main ()
2{
3 cout <<
4 "Hello World!";
5 cout
6 << "I'm a C++ program";
7 return 0;
8}
And the result would again have been exactly the same as in the previous examples.
Preprocessor directives (those that begin by #) are out of this general rule since they are not
statements. They are lines read and processed by the preprocessor and do not produce any code
by themselves. Preprocessor directives must be specified in their own line and do not have to end
with a semicolon (;).
Basic Input/Output
Until now, the example programs of previous sections provided very little interaction with the user, if any
at all. Using the standard input and output library, we will be able to interact with the user by printing
messages on the screen and getting the user's input from the keyboard. C++ uses a convenient abstraction
2
called streams to perform input and output operations in sequential media such as the screen or the
keyboard. A stream is an object where a program can either insert or extract characters to/from it. We do
not really need to care about many specifications about the physical media associated with the stream -
we only need to know it will accept or provide character sequentially. The standard C++ library includes
the header file iostream, where the standard input and output stream objects are declared.
3
It is important to notice that cout does not add a line break after its output unless we explicitly
indicate it, therefore, the following statements:
cout<< "This is a sentence.";
cout<< "This is another sentence.";
will be shown on the screen one following the other without any line break between them:
This is a sentence. This is another sentence. Even though we had written them in two different
insertions into cout. In order to perform a line break on the output we must explicitly insert a
new-line character into cout. In C++ a new-line character can be specified as \n (backslash, n):
cout<< "First sentence.\n ";
cout<< "Second sentence.\nThird sentence.";
This produces the following output:
First sentence.
Second sentence.
Third sentence.
Additionally, to add a new-line, you may also use the endl manipulator. For example:
cout<< "First sentence." <<endl;
cout<< "Second sentence." <<endl;
would print out:
First sentence.
Second sentence.
The endl manipulator produces a newline character, exactly as the insertion of '\n' does, but it
also has an additional behavior when it is used with buffered streams: the buffer is flushed.
Anyway, cout will be an unbuffered stream in most cases, so you can generally use both the \n
escape character and the endl manipulator in order to specify a new line without any difference
in its behavior.
Standard Input (cin).
4
The first statement declares a variable of type int called age, and the second one waits for an
input from cin (the keyboard) in order to store it in this integer variable. cin can only process the
input from the keyboard once the RETURN key has been pressed. Therefore, even if you request
a single character, the extraction from cin will not process the input until the user presses
RETURN after the character has been introduced. You must always consider the type of the
variable that you are using as a container with cin extractions. If you request an integer you will
get an integer, if you request a character you will get a character and if you request a string of
characters you will get a string of characters. // i/o example
#include <iostream.h> The user of a program may be one of the factors
int main () that generate errors even in the simplest programs
{ that use cin (like the one we have just seen). Since
inti; if you request an integer value and the user
cout<< "Please enter an integer value: "; introduces a name (which generally is a string of
cin>>i; characters), the result may cause your program to
cout<< "The value you entered is " <<i; misoperate since it is not what we were expecting
cout<< " and its double is " <<i*2 << ".\n"; from the user. So when you use the data input
return 0; provided by cin extractions you will have to trust
} that the user of your program will be cooperative
and that he/she will not introduce his/her name or
something similar when an integer value is
requested. A little ahead, when we see the
stringstream class we will see a possible solution for the errors that can be caused by this type of
user input.
You can also use cin to request more than one datum input from the user:
cin>> a >> b;
is equivalent to:
cin>> a;
cin>> b;
In both cases the user must give two data, one for variable a and another one for variable b that
may be separated by any valid blank separator: a space, a tab character or a newline.
5
Single Line Comment: Anything after // {double forward slash} (until the
end of the line on which it appears) is considered a comment.
o Eg:
cout<<var1; //this line prints the value of var1
Multiple Line Comment: Anything enclosed by the pair /* and */ is
considered a comment.
o Eg:
/*this is a kind of comment where
Multiple lines can be enclosed in
one C++ program */
Variables
A variable is a reserved place in memory to store information in.
A variable will have three components:
Variables are used for holding data values so that they can be used in various
computations in a program.
All variables have three important properties:
• Data Type: a type which is established when the variable is defined.
(e.g. integer, real, character etc). Data type describes the property of
the data and the size of the reserved memory
• Name: a name which will be used to refer to the value in the variable.
A unique identifier for the reserved memory location
• Value: a value which can be changed by assigning a new value to the
variable.
Fundamental Variable types
Several other variable types are built into C++. They can be conveniently
classified as integer, floating-point or character variables.
Floating-point variable types can be expressed as fraction i.e. they are
“real numbers”.
6
Character variables hold a single byte. They are used to hold 256
different characters and symbols of the ASCII and extended ASCII
character sets.
The type of variables used in C++ program are described in the next
table, which lists the variable type, how much room
Data Types
Identifiers
A valid identifier is a sequence of one or more letters, digits or underscores symbols.
The length of an identifier is not limited.
Neither space nor marked letters can be part of an identifier.
Only letters, digits and underscore characters are valid.
Variable identifiers should always begin with a letter or an underscore. By any
means they should not begin with a digit.
Key words should not be used as names for identifiers.
C++ is case sensitive. Small letter and capital letters are different for C++. Eg:
variable Age is not identical with variable age
Another rule that you have to consider when inventing your own identifiers is that they cannot
match any keyword of the C++ language nor your compiler's specific ones, which are reserved
7
keywords. The standard reserved keywords are:
asm, auto, bool, break, case, catch, char, class, const, const_cast,
continue, default, delete, do, double, dynamic_cast, else, enum, explicit,
export, extern, false, float, for, friend, goto, if, inline, int, long,
mutable, namespace, new, operator, private, protected, public, register,
reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct,
switch, template, this, throw, true, try, typedef, typeid, typename, union,
unsigned, using, virtual, void, volatile, wchar_t, while
Additionally, alternative representations for some operators cannot be used as identifiers since
they are reserved words under some circumstances:
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
Your compiler may also include some additional specific reserved keywords.
Very important: The C++ language is a "case sensitive" language. That means that an identifier
written in capital letters is not equivalent to another one with the same name but written in small
letters. Thus, for example, the RESULT variable is not the same as the result variable or the
Result variable. These are three different variable identifiers.
Declaration of variables
In order to use a variable in C++, we must first declare it specifying which data type we want it
to be. The syntax to declare a new variable is to write the specifier of the desired data type (like
int, bool, float...) followed by a valid variable identifier. For example:
1 int a;
2 float mynumber;
These are two valid declarations of variables. The first one declares a variable of type int with
the identifier a. The second one declares a variable of type float with the identifier mynumber.
Once declared, the variables a and mynumber can be used within the rest of their scope in the
program.
If you are going to declare more than one variable of the same type, you can declare all of them
in a single statement by separating their identifiers with commas. For example:
int a, b, c;
This declares three variables (a, b and c), all of them of type int, and has exactly the same
meaning as:
1 int a;
2 int b;
8
3 int c;
The integer data types char, short, long and int can be either signed or unsigned depending on
the range of numbers needed to be represented. Signed types can represent both positive and
negative values, whereas unsigned types can only represent positive values (and zero). This can
be specified by using either the specifier signed or the specifier unsigned before the type name.
For example:
By default, if we do not specify either signed or unsigned most compiler settings will assume the
type to be signed, therefore instead of the second declaration above we could have written:
int MyAccountBalance;
with exactly the same meaning (with or without the keyword signed)
An exception to this general rule is the char type, which exists by itself and is considered a
different fundamental data type from signed char and unsigned char, thought to store characters.
You should use either signed or unsigned if you intend to store numerical values in a char-
sized variable.
short and long can be used alone as type specifiers. In this case, they refer to their respective
integer fundamental types: short is equivalent to short int and long is equivalent to long
int. The following two variable declarations are equivalent:
1 short Year;
2 short int Year;
Finally, signed and unsigned may also be used as standalone type specifiers, meaning the same
as signed int and unsigned int respectively. The following two declarations are equivalent:
1 unsigned NextYear;
2 unsigned int NextYear;
To see what variable declarations look like in action within a program, we are going to see the
C++ code of the example about your mental memory proposed at the beginning of this section:
9
11 a = 5;
12 b = 2;
13 a = a + 1;
14 result = a - b;
15
16 // print out the result:
17 cout << result;
18
19 // terminate the program:
20 return 0;
21 }
22
Initializing Variables
When a variable is assigned a value at the time of declaration, it is called
variable initialization.
This is identical with declaring a variable and then assigning a value to
the variable immediately after declaration.
The syntax: DataType variable name = initial value;
e.g. int a = 0;
or: int a;
a=0;
Scope of Variables
Scope of a variable is the boundary or block in a program where a
variable can be accessed. The boundary or block is identified by the left
and right French brackets.
In C++, we can declare variables anywhere in the source code. But we
should declare a variable before using it no matter where it is written.
Global variables: are variables that can be referred/accessed anywhere
in the code, within any function, as long as it is declared first. A variable
declared before any function immediately after the include statements
are global variables.
Local Variables: the scope of the local variable is limited to the code
level or block within which they are declared.
In the following example, the integer data type num1 is accessible
everywhere whereas z and is only accessible in the add function and
num2 is accessible in main function. This means cout<<z; or any
statement involving z is only valid in add function.
e.g:
#include<iostream.h>
int num1;
int add( int x, int y)
{
int z;
….
}
void main()
10
{
unsigned short age;
float num2;
cout<<”\n Enter your age:”;
…
}
In C++ the scope of a local variable is given by the block in which it is
declared.
If it is declared within a function, it will be a variable with a function
scope. If it is declared in a loop, its scope will be only in the loop, etc.
Characters
Characters variables (type char) are typically one byte in size, enough to
hold 256 different values. A char can be represented as a small number
(0 - 255).
Char in C++ are represented as any value inside a single quote.
E.g.: ‘x’, ‘A’, ‘5’, ‘a’, etc.
When the compiler finds such values (characters), it translates back the
value to the ASCII values. E.g. ‘a’ has a value 97 in ASCII.
You can define your own names for constants that you use very often without having to resort to
memory-consuming variables, simply by using the #define preprocessor directive. Its format is:
#define identifier value
For example:
1 #define PI 3.14159
2 #define NEWLINE '\n'
This defines two new constants: PI and NEWLINE. Once they are defined, you can use them in
the rest of the code as if they were any other regular constant, for example:
1
// defined constants: calculate circumference
2
3
#include <iostream.h>
4
5
#define PI 3.14159
6
#define NEWLINE '\n'
7
8
int main ()
9
{
10 31.4159
double r=5.0; // radius
11
double circle;
12
13
circle = 2 * PI * r;
14
cout << circle;
15
cout << NEWLINE;
16
17
return 0;
18
}
19
In fact the only thing that the compiler preprocessor does when it encounters #define directives is
to literally replace any occurrence of their identifier (in the previous example, these were PI and
12
NEWLINE) by the code to which they have been defined (3.14159 and '\n' respectively).
The #define directive is not a C++ statement but a directive for the preprocessor; therefore it
assumes the entire line as the directive and does not require a semicolon (;) at its end. If you
append a semicolon character (;) at the end, it will also be appended in all occurrences of the
identifier within the body of the program that the preprocessor replaces.
With the const prefix you can declare constants with a specific type in the same way as you
would do with a variable:
13
Operators
1 // assignment operator
2
3 #include <iostream.h>
4
5 int main ()
6 {
7 int a, b; // a:?, b:?
8 a = 10; // a:10, b:?
9 b = 4; // a:10, b:4 a:4 b:7
10 a = b; // a:4, b:4
11 b = 7; // a:4, b:7
12 cout << "a:";
13 cout << a;
14 cout << " b:";
15 cout << b;
16 return 0;
17 }
14
This code will give us as result that the value contained in a is 4 and the one contained in b is 7.
Notice how a was not affected by the final modification of b, even though we declared a = b
earlier (that is because of the right-to-left rule).
A property that C++ has over other programming languages is that the assignment operation can
be used as the rvalue (or part of an rvalue) for another assignment operation. For example:
a = 2 + (b = 5);
is equivalent to:
1 b = 5;
2 a = 2 + b;
that means: first assign 5 to variable b and then assign to a the value 2 plus the result of the
previous assignment of b (i.e. 5), leaving a with a final value of 7.
a = b = c = 5;
2. Compound assignment operators (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=).
Compound assignment operator is the combination of the assignment
operator with other operators like arithmetic and bit wise operators.
The assignment operator has a number of variants, obtained by
combining it with other operators.
E.g.:
value += increase; is equivalent to value = value + increase;
a -= 5; is equivalent to a = a – 5;
a /= b; is equivalent to a = a / b;
price *= units + 1 is equivalent to price = price * (units + 1);
And the same is true for the rest.
For example:
15
3. Arithmetic operators (+, -, *, /, %)
Except for remainder or modulo (%), all other arithmetic operators can accept a mix of
integers and real operands. Generally, if both operands are integers then, the result will be
an integer. However, if one or both operands are real then the result will be real.
When both operands of the division operator (/) are integers, then the division is
performed as an integer division and not the normal division we are used to.
Integer division always results in an integer outcome.
Division of integer by integer will not round off to the next integer
E.g.:
9/2 gives 4 not 4.5
-9/2 gives -4 not -4.5
To obtain a real division when both operands are integers, you should cast one of the
operands to be real.
E.g.:
int cost = 100;
a is 2
In order to evaluate a comparison between two expressions, we can use the relational
operator.
The result of a relational operator is a bool value that can only be true or false according
to the result of the comparison.
E.g.:
(7 = = 5) would return false or returns 0
(5 > 4) would return true or returns 1
The operands of a relational operator must evaluate to a number. Characters are valid
operands since they are represented by numeric values. For E.g.:
‘A’ < ‘F’ would return true or 1. it is like (65 < 70)
16
5. Logical Operators (!, &&, ||):
Logical negation (!) is a unary operator, which negates the logical value of its operand. If
its operand is non zero, it produces 0, and if it is 0 it produce 1.
Logical AND (&&) produces 0 if one or both of its operands evaluate to 0 otherwise it
produces 1.
Logical OR (||) produces 0 if both of its operands evaluate to 0 otherwise, it produces 1.
E.g.:
!20 //gives 0
10 && 5 //gives 1
10 || 5.5 //gives 1
10 && 0 // gives 0
N.B. In general, any non-zero value can be used to represent the logical true, whereas only
zero represents the logical false.
&& OPERATOR
A b a && b
True true True
True false False
False true False
False false False
The operator || corresponds with Boolean logical operation OR. This operation results true if
either one of its two operands is true, thus being false only when both operands are false
themselves. Here are the possible results of a || b:
|| OPERATOR
A b a || b
True true true
True false true
False true true
False false false
For example:
The auto increment (++) and auto decrement (--) operators provide a convenient way
of, respectively, adding and subtracting 1 from a numeric variable.
17
E.g.:
if a was 10 and if a++ is executed then a will automatically changed to 11.
E.g.
int k = 5;
(auto increment prefix) y= ++k + 10; //gives 16 for y
(auto increment postfix) y= k++ + 10; //gives 15 for y
(auto decrement prefix) y= --k + 10; //gives 14 for y
(auto decrement postfix) y= k-- + 10; //gives 15 for y
The conditional operator takes three operands. It has the general form:
Syntax:
operand1 ? operand2 : operand3
First operand1 is a relational expression and will be evaluated. If the result of the
evaluation is non zero (which means TRUE), then operand2 will be the final result.
Otherwise, operand3 is the final result.
E.g.: General Example
Z=(X<Y? X : Y)
This expression means that if X is less than Y the value of X will be assigned to Z otherwise (if
X>=Y) the value of Y will be assigned to Z.
E.g.:
int m=1,n=2,min;
min = (m < n ? m : n);
The value stored in min is 1.
E.g.: (7 = = 5 ? 4: 3) returns 3 since 7 is not equal to 5
18
8. Comma Operator (,).
Multiple expressions can be combined into one expression using the comma operator.
The comma operator takes two operands. Operand1, Operand2
The comma operator can be used during multiple declaration, for the condition
operator and for function declaration, etc
It the first evaluates the left operand and then the right operand, and returns the value
of the latter as the final outcome.
E.g.
int m,n,min;
int mCount = 0, nCount = 0;
min = (m < n ? (mCount++ , m) : (nCount++ , n));
Here, when m is less than n, mCount++ is evaluated and the value of m is stored in
min. otherwise, nCount++ is evaluated and the value of n is stored in min.
a = (b=3, b+2);
Would first assign the value 3 to b, and then assign b+2 to variable a. So, at the end, variable a
would contain the value 5 while variable b would contain value 3.
This operator is used for calculating the size of any data item or type.
It takes a single operand (e.g. 100) and returns the size of the specified entity in bytes.
The outcome is totally machine dependent.
E.g.:
a = sizeof(char)
b = sizeof(int)
c = sizeof(1.55) etc
19
Operator Precedence
E.g.
a==b+c*d
c * d is evaluated first because * has a higher precedence than + and = =.
The result is then added to b because + has a higher precedence than = =
And then == is evaluated.
Precedence rules can be overridden by using brackets.
E.g. rewriting the above expression as:
a = = (b + c) * d causes + to be evaluated before *.
Operators with the same precedence level are evaluated in the order specified by the
column on the table of precedence rule.
E.g. a = b += c the evaluation order is right to left, so the first b += c is evaluated
followed by a = b.
20
Worksheet 2
For each of the problems write a C++ code to perform the required task. Your program
should be based on the flow chart you drawn in the first worksheet.
1) Receive a number and determine whether it is odd or even.
2) Obtain two numbers from the keyboard, and determine and display which (if either)
is the larger of the two numbers.
3) Receive 3 numbers and display them in ascending order from smallest to largest
4) Add the numbers from 1 to 100 and display the sum
5) Add the even numbers between 0 and any positive integer number given by the user.
6) Find the average of two numbers given by the user.
7) Find the average, maximum, minimum, and sum of three numbers given by the user.
8) Find the area of a circle where the radius is provided by the user.
9) Swap the contents of two variables using a third variable.
10) Swap the content of two variables without using a third variable.
11) Read an integer value from the keyboard and display a message indicating if this
number is odd or even.
12) Read 10 integers from the keyboard in the range 0 - 100, and count how many of
them are larger than 50, and display this result.
13) Take an integer from the user and display the factorial of that number.
14. A Program to accept radius of circle and produce area.
15. A program to find area of triangle.
16. A program to read temperature in Celsius & display in F.
21