Intro to C++ Language
Scalar Variables, Operators
and
Control Structures
C++ Spring 2000 C++ Intro 1
Structure of a C++ Program
• A C++ program is a collection of definitions
and declarations:
– data type definitions
– global data declarations
– function definitions (subroutines)
– class definitions
– a special function called main()
(where the action starts).
C++ Spring 2000 C++ Intro 2
Procedural vs. Object Oriented
• Procedural languages express programs as a
collection of procedures (subroutines).
• Object Oriented languages express programs as
a collection of object types (classes).
• C++ is both!
• We will start with procedural and build up to
Object Oriented
C++ Spring 2000 C++ Intro 3
Hello World++
// Hello World program comment
#include <iostream.h> Allows access to
an I/O library
int main() { Starts definition of special
function main()
cout << "Hello World\n"; output (print) a
string
return 0;
} Program returns a
status code (0 means
OK)
C++ Spring 2000 C++ Intro 4
Comments
• Comments contain text that is not converted
to machine language (it's just there for
humans).
• Everything after "//" is ignored by the
compiler.
• Everything between "/*" and "*/" is
ignored.
C++ Spring 2000 C++ Intro 5
Comment Example
// Dave's Homework #1
// This program is awesome!
#include <iostream.h>
/* This program computes the
coefficient of expansion of the
universe to 27 decimal places.
*/
int main() {
cout << 1.0000000000000000000001;
}
C++ Spring 2000 C++ Intro 6
Includes
• The statement: #include <foo.h>
inserts the contents of the file foo.h inside
your file before the compiler starts.
• Definitions that allow your program to use
the functions and classes that make up the
standard C++ library are in these files.
• You can include your own file(s):
#include "myfile.h"
C++ Spring 2000 C++ Intro 7
C++ Preprocessor
• C++ Compilers automatically invoke a
preprocessor that takes care of #include
statements and some other special
directives.
• You don't need to do anything special to run
the preprocessor - it happens automatically.
C++ Spring 2000 C++ Intro 8
Preprocessing
Temporary file
C++ (C++ program) C++
Preprocessor Compiler
Executable
C++ Program Program
C++ Spring 2000 C++ Intro 9
The Preprocessor
• Lines that start with the character '#' are
special to instructions to a preprocessor.
• The preprocessor can replace the line with
something else:
– include: replaced with contents of a file
• Other directives tell the preprocessor to
look for patterns in the program and do
some fancy processing.
C++ Spring 2000 C++ Intro 10
#define (macro) Example
#define square(a) (a * a)
y = square(x);
becomes y = (x * x);
z = square(y*x);
becomes z = (y*x * y*x);
C++ Spring 2000 C++ Intro 11
Some common includes
• Basic I/O: iostream.h
• I/O manipulation: iomanip.h
• Standard Library: stdlib.h
• Time and Date support: time.h
C++ Spring 2000 C++ Intro 12
Another C++ Program
// C++ Addition of integers
#include <iostream.h>
int main() {
int integer1, integer2, sum;
cout << "Enter first integer\n";
cin >> integer1;
cout << "Enter second integer\n";
cin >> integer2;
sum = integer1 + integer2;
cout << "Sum is " << sum << endl;
return 0;
}
C++ Spring 2000 C++ Intro 13
Variables
• The program now uses variables:
int integer1, integer2, sum;
• Variables are just names for locations in
memory.
• In C++ all variables must have a type (not
all languages require this).
• In C++ all variables must be declared
before they can be used.
C++ Spring 2000 C++ Intro 14
Variables (cont.)
• C++ variables are declared like this:
type var_name;
• type indicates what kind of variable.
• C++ built in types include:
int char float double bool
• You can also create new types!
C++ Spring 2000 C++ Intro 15
Variable Names
• C++ variable names:
– made up of letters, digits and underscore.
– Must start with a non-digit.
– Case sensitive
• foo is not the same name as Foo
• Can be any length
• Good variable names tell the reader what
the variable is used for!
C++ Spring 2000 C++ Intro 16
Literals (Constants)
• Literals are fixed values used by a program.
• Some examples of literals:
22 3.14159 0x2A
false "Hi Dave" 'c'
• You can initialize a variable in the
declaration by assigning it a value:
int foo = 17;
double PI = 3.14159;
char newline = '\n';
C++ Spring 2000 C++ Intro 17
Expressions
• C++ expressions are used to express
computation.
• Expressions include operations and the
operands on which the operations are
applied.
• Operands can be variables, literals or
function calls.
C++ Spring 2000 C++ Intro 18
Math Expressions
• Mathematical expressions have numeric
values when evaluated.
• Some examples:
1+2
(fahr - 32)*(5/9)
1*(2*(3*(4*5)))
C++ Spring 2000 C++ Intro 19
Mathematical Operators
+ - * / %
• Operators have rules of precedence and
associativity that control how expressions
are evaluated.
• What is the value of this C++ expression ?:
2 / 3 / 4 + 5
• Answer: You can't tell unless you know the
rules.
C++ Spring 2000 C++ Intro 20
Associativity
• The associativity of an operator control the order
of evaluation of expressions involving the same
operator, for example:
3 / 4 / 5
• Associativity can be:
– left-to-right: the leftmost operator is applied first.
– Right-to-left: the rightmost operator is applied first.
C++ Spring 2000 C++ Intro 21
Precedence
• Precedence controls the order of evaluation
of operators.
– A high precedence means an operator is
evaluated (applied) before any lower
precedence operators.
• Operators that have the same precedence
can happen in either order, but in C++ the
one on the left is evaluated first.
C++ Spring 2000 C++ Intro 22
C++ Math Operator Rules
Operator Associativity Precedence
() left to right high
* / % left to right middle
+ - left to right low
• Now - what is the value of this?:
2 / 3 / 4 + 5
• How about this: (7*3/4-2)*5
C++ Spring 2000 C++ Intro 23
Relational and Equality Operators
• Relational and Equality operators are used
to compare values:
• Relational Operators:
> Greater than
>= Greater than or equal
< Less than
<= Less than or equal
• Equality Operators:
== Equal to
!= Not Equal to
C++ Spring 2000 C++ Intro 24
Relational and Equality
Operators (cont.)
• The relational operators have very low
precedence and associate left-to-right.
• The equality operators have very-very low
precedence and associate left-to-right.
• Some examples:
17 < x foo == 3.14
age != 21 x+1 >= 4*y-z
C++ Spring 2000 C++ Intro 25
Another Operator
• The assignment operator "=" is used to
assign a value to a variable.
x = 13 - y;
• Assignment has very low precedence and
associates from right to left.
• You can do this:
x = y = z + 15;
C++ Spring 2000 C++ Intro 26
Precedence
Operators Precedence
() highest (applied first)
* / %
+ -
< <= > >=
== !=
= lowest (applied last)
C++ Spring 2000 C++ Intro 27
Another Program
#include <iostream.h>
int main()
{
double fahr,celcius;
cout << "Enter Temperature in Fahrenheit\n";
cin >> fahr;
celcius = (fahr - 32.0)*5/9;
cout << fahr << " fahrenheit is " << celcius
<< " Celcius" << endl;
return 0;
}
C++ Spring 2000 C++ Intro 28
const
• You can add the const modifier to the
declaration of a variable to tell the compiler
that the value cannot be changed:
const double factor = 5.0/9.0;
const double offset = 32.0;
celcius = (fahr - offset)*factor;
C++ Spring 2000 C++ Intro 29
What if you try to change a const?
• The compiler will complain if your code
tries to modify a const variable:
const foo = 100;
…
foo = 21;
Error: l-value specifies const object
C++ Spring 2000 C++ Intro 30
Why use const?
• Const tells the compiler that a variable
should never be changed.
• You already know the variable should never
be changed!
• But - let the compiler save you from
yourself (you might forget that it shouldn't
be changed).
C++ Spring 2000 C++ Intro 31
Integer vs. floating point math
• How does C++ know whether to use
floating point or integer math operators?
• If either operand is floating point, a floating
point operation is done (the result is a
floating point value).
• If both operand are integer the result is an
integer (even division).
C++ Spring 2000 C++ Intro 32
Math Operator Quiz
What are the values printed?
const int five = 5;
int i = 7;
float x = 7.0;
cout << five + i/2 << endl;
cout << five + x/2 << endl;
C++ Spring 2000 C++ Intro 33
Control Structures
• Unless something special happens a
program is executed sequentially.
• When we want something special to happen
we need to use a control structure.
• Control Structures provide two basic
functions: selection and repetition
C++ Spring 2000 C++ Intro 34
Selection
• A Selection control structure is used to
choose among alternative courses of action.
• There must be some condition that
determines whether or not an action occurs.
• C++ has a number of selection control
structures:
if if/else switch
C++ Spring 2000 C++ Intro 35
Repetition Control Structures
• Repetition control structures allow us to
repeat a sequence of actions (statements).
• C++ supports a number of repetition control
structures:
while for do/while
C++ Spring 2000 C++ Intro 36
if
• The if control structure allows us to state
that an action (sequence of statements)
should happen only when some condition is
true:
if (condition)
action;
C++ Spring 2000 C++ Intro 37
Conditions
• The condition used in an if (and other
control structures) is a Boolean value -
either true or false.
• In C++:
– the value 0 is false
– anything else is true
C++ Spring 2000 C++ Intro 38
if examples
if (1)
cout << "I am true!\n";
if (1-1)
cout << "I am false!\n";
C++ Spring 2000 C++ Intro 39
Relational and Equality
Operators and Conditions
• Typically a condition is built using the C++
relational and equality operators.
• These operators have the values true (1) and
false (0).
• So the expression x==x has the value true.
• and 7 <= 3 has the value false.
C++ Spring 2000 C++ Intro 40
More ifs
if (foo)
cout << "foo is not zero\n";
if (grade>=90)
lettergrade = 'A';
if (lettergrade == 'F')
cout << "The system has failed you\n"
C++ Spring 2000 C++ Intro 41
Common Mistake
• It is easy to mix up the assignment operator
"=" with the equality operator "==".
• What's wrong with this:
if (grade=100)
cout << "your grade is perfect -
RPI has decided to give you your
degree today!\n";
C++ Spring 2000 C++ Intro 42
Compound Statements
• Inside an if you can put a single statement or
a compound statement.
• A compound statement starts with "{", ends
with "}" and can contain a sequence of
statements (or control structures)
if (grade>=90) {
cout << "Nice job - you get an A\n";
acnt = acnt+1;
}
C++ Spring 2000 C++ Intro 43
A word about style
• C++ doesn't care about whitespace
(including newlines), so you can arrange
your code in many ways.
• There are a couple of often-used styles.
• All that is important is that the code is easy
to understand and change!
C++ Spring 2000 C++ Intro 44
Some common styles
if (foo>10) { if (foo>10)
x=y+100; {
cout << x; x=y+100;
} cout << x;
}
if(foo>10){x=y+100;cout<<x;}
C++ Spring 2000 C++ Intro 45
if else Control Structure
• The if else control structure allows you
to specify an alternative action:
if ( condition )
action if true
else
action if false
C++ Spring 2000 C++ Intro 46
if else example
if (grade >= 90)
lettergrade = 'A';
else
lettergrade = 'F';
C++ Spring 2000 C++ Intro 47
Another example
if (grade >= 99)
lettergrade = 'A';
else if (grade >= 98)
lettergrade = 'B';
else if (grade >= 97)
lettergrade = 'C';
else if (grade >= 96)
lettergrade = 'D';
else
lettergrade = 'F';
C++ Spring 2000 C++ Intro 48
while Control Structure
• The while control structure supports
repetition - the same statement (or
compound statement) is repeated until the
condition is false.
a l le d
e is c o p"
s id e lo
while (condition) the in ody of th
b
do something; the "
C++ Spring 2000 C++ Intro 49
while dangers
• The body of the loop must change
something that effects the condition!
• if not - the loop could never end
– or the loop would never end
• or the loop would never end
– or the loop would never end
» or the loop would never end
…….
C++ Spring 2000 C++ Intro 50
while example
lettergrade = 'A';
cutoff = 90;
while (grade < cutoff) {
lettergrade = lettergrade + 1;
cutoff = cutoff - 10;
}
if (lettergrade > 'F')
lettergrade = 'F';
C++ Spring 2000 C++ Intro 51
Off topic - increment and
decrement operators
• You can increment an integer variable like this:
// same as lettergrade = lettergrade + 1;
lettergrade++;
• You can also decrement:
// same as lettergrade = lettergrade - 1;
lettergrade--;
C++ Spring 2000 C++ Intro 52
More off topic - special
assignment operators
• This C++ statement:
foo += 17;
– is shorthand for this:
foo = foo + 17;
• You can also use:
-= *= /=
C++ Spring 2000 C++ Intro 53
while example modified
lettergrade = 'A';
cutoff = 90;
while (grade < cutoff) {
lettergrade++;
cutoff -= 10;
}
if (lettergrade > 'F')
lettergrade = 'F';
C++ Spring 2000 C++ Intro 54
do while
• The do while control structure also
provides repetition, this time the condition
is at the bottom of the loop.
– the body is always executed at least once
do
somestuff;
while ( condition );
C++ Spring 2000 C++ Intro 55
do example
i=1;
do
cout << "i is " << i++ << endl;
while (i <= 10);
C++ Spring 2000 C++ Intro 56
for loops
• The for control structure is often used for
loops that involve counting.
• You can write any for loop as a while
(and any while as a for).
for (initialization; condition; update)
dosomething;
C++ Spring 2000 C++ Intro 57
for (initialization; condition; update)
• initialization is a statement that is executed
at the beginning of the loop (and never
again).
• the body of the loop is executed as long as
the condition is true.
• the update statement is executed each time
the body of the loop has been executed (and
before the condition is checked)
C++ Spring 2000 C++ Intro 58
for example
for (i=1; i<10; i++)
cout << "i is " << i << endl;
for (i=10; i>=0; i--)
cout << "i is " << i << endl;
C++ Spring 2000 C++ Intro 59
initi
another for
aliza
tion
for (lettergrade = 'A', cutoff = 90;
on
grade < cutoff; lettergrade++;)
diti
cutoff -= 10;
con
update
if (lettergrade > 'F')
lettergrade = 'F';
C++ Spring 2000 C++ Intro 60
Yet another odd example
for (i=1; i<100;i++) {
cout << "Checking " << i << endl;
if ( i%2 )
cout << i << " is odd" << endl;
else
cout << i << " is even" << endl;
}
C++ Spring 2000 C++ Intro 61
More about for
• You can leave the initialization, condition or
update statements blank.
• If the condition is blank the loop never ends!
for (i=0; ;i++)
cout << i << endl;
C++ Spring 2000 C++ Intro 62
Complex Conditions
• You can build complex conditions that
involve more than one relational or equality
operator.
• The && (means "and") and ||(means "or")
operators are used to create complex
conditions.
• More operators means another precedence
table...
C++ Spring 2000 C++ Intro 63
Updated Precedence Table
Operators Precedence
() highest (applied first)
++ --
* / %
+ -
< <= > >=
== !=
&&
||
= lowest (applied last)
C++ Spring 2000 C++ Intro 64
&& Operator
• && is a boolean operator, so the value of an
expression is true or false.
( cond1 && cond2 )
is true only if both cond1 and cond2 are true.
C++ Spring 2000 C++ Intro 65
&& Example
lettergrade = 'A';
cutoff = 90;
while ((grade<cutoff) && (lettergrade!='F')) {
lettergrade++;
cutoff -= 10;
}
C++ Spring 2000 C++ Intro 66
|| Operator
• || is a boolean operator, so the value of an
expression is true or false.
( cond1 || cond2 )
is true if either of cond1 or cond2 is true.
C++ Spring 2000 C++ Intro 67
|| Example
if ((test1==0) || (test2==0))
cout << "You missed a test!\n";
if ((hw1==0) || (hw2==0))
cout << "You missed a homework!\n";
C++ Spring 2000 C++ Intro 68
The ! operator
• The ! operator is a unary boolean operator
– unary means it has only 1 operand.
• ! negates it's operand.
• ! means "not".
(! condition)
is true only when condition is false
C++ Spring 2000 C++ Intro 69
! example
bool done = false;
int i=1;
while (! done) {
cout << "i is " << i << endl;
i++;
if (i==100) done=true;
}
C++ Spring 2000 C++ Intro 70
Exercises
(informal - not to hand in)
• Try exercises 2.12 a,d and e.
• Don't just do on paper - create programs!
• Make sure you can create, compile and run
a C++ program.
• Send Dave email if you have problems:
hollingd@cs.rpi.edu
C++ Spring 2000 C++ Intro 71