Topic 1: Introduction to Computers and Programming

Download Report

Transcript Topic 1: Introduction to Computers and Programming

Administrative details




Project #1 due Tuesday
Lab #6 on Tuesday
Midterm exam next week
Content for exam:








General computer knowledge
Unix commands
C language
Chapters 1-5 Afzal
Chapters 1-4 Deitel
Class slides
Lab work
Homework
CISC 105 – Topic 1
1
Topic 1: Introduction to
Computers and Programming
“A journey of a thousand miles must begin
with a single step.” - Lao Tzu
Binary Math
A binary digit or bit for short is the smallest unit of
computer information. Just as our familiar decimal
number system has 10 digits,(0,1,2,3,4,5,6,7,8,9) the
binary number system has only 2 digits (0,1). This is
the perfect number system for computers since we
can store a binary digit by making an electrical or
magnetic field either on or off, positive or negative, 1
or 0. In the decimal system we can count 10 (we
start counting with 0) items with one decimal place,
100 with two decimal places, 1000 with three decimal
places and so on.
CISC 105 – Topic 1
3
Binary Math
The binary number system works the same way except
since we only have 0s and1s our base is 2.
So we can count 2 permutations of 1 bit: 0 1
4 permutations of 2 bits: 00 01 10 11
8 permutations of 3 bits: 000 001 010 011 100 101 110
111
16 permutations of 4 bits: 0000 0001 0010 0011 0100
0101 0110 0111 1000 1001 1010 1011 1100 1101
1110 1111
...and so on.
CISC 105 – Topic 1
4
Binary Math
So in an eight bit byte, the numbers are represented this way:
Bit:
Value:
128 64
Example: 1
Values:
0
32
16
8
4
2
1
1
1
0
1
1
0
128 + 0 + 32 +16 + 0 + 4 + 2 + 0 = 182
The minimum number is 0 (all 0s) and the maximum number is
255 (all 1s), so you can represent 256 numbers (0-255) with
one byte.
CISC 105 – Topic 1
5
Hardware Components

Hardware consists of many types of
components:





Primary Storage
Secondary Storage
The Central Processing Unit (CPU)
Input Devices
Output Devices
CISC 105 – Topic 1
6
Primary Storage and
Secondary Storage

There are two primary types of storage
in a computer:


Primary Storage – often referred to as
main memory, or just memory. This
storage is very quickly accessed by the
various hardware components.
Secondary Storage – includes such devices
as a hard disk, floppy disk, CD-ROM, DVDROM, etc…
CISC 105 – Topic 1
7
Computer Software


All major computers run an operating
system.
An operating system is a special type of
program which controls the interaction
between all hardware components and
the user.
CISC 105 – Topic 1
8
Operating Systems Tasks

Responsibilities of the OS include:






Communicating with the user(s)
Managing resources including memory and
processor time among programs
Collecting data from input devices
Providing data to output devices
Accessing data from secondary storage
Writing data to secondary storage
CISC 105 – Topic 1
9
Computer Programming Machine Language


Computer programs were originally written in
machine language. Machine language is a
sequence of binary numbers, each number
being an instruction.
Each instruction is computer-understandable.
00000000
00010101
00010110
CISC 105 – Topic 1
10
Computer Programming Assembly Language



To make machine language more abstract, assembly
language was introduced.
Assembly language provides a one-to-one mapping
between a machine instruction and a simple humanreadable instruction.
Assembly language is converted to computerunderstandable machine language by an assembler.
CLR
ADD
ADD
A
A
B
00000000
00010101
00010110
CISC 105 – Topic 1
11
Computer Programming –
High-Level Languages



In order to get around these obstacles, highlevel languages were introduced.
High-level languages provide a one-to-many
mapping between one high-level statement
and multiple assembly language instructions.
High-level language is converted to assembly
instructions by a compiler, which creates
object files. Modern compilers perform the
assembler function as well.
CISC 105 – Topic 1
12
Modern Software
Development



Programmers often use library functions,
which are pre-written functions provided as
part of the compiler/development toolset.
A library is an object file.
After the source code is compiled into
machine code, a linker resolves crossreferences among these object files, including
libraries. The object files are linked into an
executable file.
CISC 105 – Topic 1
13
Modern Software
Development
Source Code File
Compiler
Object File
Other Object Files
(perhaps libraries)
Linker
Executable File
Loader
CISC 105 – Topic 1
14
The Software
Development Method






Specify the problem.
Analyze the problem.
Design an algorithm to solve the
problem.
Implement the algorithm.
Test and verify the program.
Maintain and update the program.
CISC 105 – Topic 1
15
Review




Name the principle components of a
computer.
What are three responsibilities of the
operating system?
What advantages does assembly language
have over machine language?
What advantages do high-level languages
have over assembly language?
CISC 105 – Topic 1
16
Review




What computer program translates a source
code file into an object file?
What program combines object files and
produces an executable file?
What part of the operating system is
responsible for the loading and scheduling of
programs?
What are the steps in the software
development method?
CISC 105 – Topic 1
17
Topic 2 – Introduction to the C
Programming Language
Preprocessor Directives



A preprocessor directive is a command given
to the C preprocessor, which is a part of the
compilation process that modifies a C source
code file before it is compiled.
Preprocessor directives always begin with a
“#” character.
In the example program, there are two
preprocessor directives used, #include and
#define.
CISC 105 – Topic 1
19
#include


The #include directive tells the C
preprocessor to give a program access to a
library. By putting a #include in a program,
the preprocessor loads a header file, which
tells the compiler what functions and other
information is provided in the library.
In this program, #include <stdio.h>
indicates that this program uses the stdio
library which contains functions such as
printf(). Page 542 of Deitel lists standard
libraries.
CISC 105 – Topic 1
20
#define



The #define directive specifies a constant
macro.
This tells the preprocessor that every time it
encounters the first text, it should replace it
with the second text.
In this program, #define KMS_PER_MILE 1.609
tells the preprocessor to replace
KMS_PER_MILE with 1.609 every place
KMS_PER_MILE appears in the program.
CISC 105 – Topic 1
21
Preprocessor Directives
/* Converts distances from miles to kilometers */
#include <stdio.h>
#define KMS_PER_MILE 1.609
int main(void)
{
double
miles,
/* distance in miles */
kms;
/* equiv. distance in kms */
/* Get the distance in miles */
printf(“Enter the distance in miles>”);
scanf (“%lf”, &miles);
/* Convert the distance to kilometers */
kms = KMS_PER_MILE * miles;
/* Display the distance in kilometers */
printf (“That equals %f kilometers.\n”,kms);
return(0);
}
CISC 105 – Topic 1
22
Preprocessor Directives
/* Converts distances from miles to kilometers */
#include directive –
#include <stdio.h>
Tells the preprocessor to
#define KMS_PER_MILE 1.609
include the stdio.h header file.
int main(void)
{
This file describes the functions
double
miles,
/* distance in miles */
other
information
included
kms;
/* equiv. and
distance
in kms
*/
/* Get the distance in miles */
in the stdio library.
printf(“Enter the distance in miles>”);
scanf (“%lf”, &miles);
/* Convert the distance to kilometers */
kms = KMS_PER_MILE * miles;
/* Display the distance in kilometers */
printf (“That equals %f kilometers.\n”,kms);
return(0);
}
CISC 105 – Topic 1
23
Preprocessor Directives
/* Converts distances from miles to kilometers */
#include directive –
#include <stdio.h>
Tells the preprocessor to
#define KMS_PER_MILE 1.609
include the stdio.h header file.
int main(void)
{
This file describes the functions
double
miles,
/* distance in miles */
other
information
included
kms;
/* equiv. and
distance
in kms
*/
#define directive –
/* Get the distance in miles */
in the
stdio library.
printf(“Enter the distance
Tells in
themiles>”);
preprocessor to
scanf (“%lf”, &miles);
replace every occurrence of
/* Convert the distance to kilometers */
in the program
kms = KMS_PER_MILE * KMS_PER_MILE
miles;
with 1.609.
/* Display the distance in kilometers */
printf (“That equals %f kilometers.\n”,kms);
return(0);
}
CISC 105 – Topic 1
24
What is a valid identifier?





Identifiers can only be composed of
letters, digits, and underscores.
Identifiers cannot begin with a digit.
Reserved words cannot be identifiers.
Identifiers can be as long as you want.
Upper and lower case letters are
different (i.e. kms and Kms are not
considered to be the same identifier).
CISC 105 – Topic 1
25
Review

Which of the following are valid identifiers?
For each that is not valid, why is it not?
This_is_a_long_identifier_but_is_it_valid?
8timesTheRadius
miles
Phil’s variable
kilometers_per_hour
x
“radius”
CISC 105 – Topic 1
26
Variables




A variable is a memory cell that is used to
hold data acted upon by the program.
A variable declaration tells the C compiler the
name and type of a variable used in a
program.
A variable declaration consists of a data type
and an identifier which is the name of that
variable.
Every variable that will be used in a program
must be declared.
CISC 105 – Topic 1
27
Variable Declarations
double
int


mile;
counter;
The first line declares a variable named
mile of the double data type.
The second line declares a variable
named counter of the int data type.
CISC 105 – Topic 1
28
Data Types



There are a large number of data types.
These are some of the most popular ones.
void – this keyword means “no data type”.
int – An integer (a whole number). This
data type can represent an integer in a
specific range, at least –32767 through
32767.
CISC 105 – Topic 1
29
Data Types



char – A character. One letter, digit, or
symbol. This is enclosed in single quotes.
float – A real number (an integer part and
a decimal part).
double – A real number. Note that this data
type is a memory cell double the size of a
float data type. This allows a bigger
number to be represented, or a specific
number to be represented more precisely.
This is referred to as a double-precision
floating point number.
CISC 105 – Topic 1
30
Review of Variables

Write a #define preprocessor declaration for a
constant macro of STUDENTS_PER_SECTION to 22
and variable declarations of num_students as an
integer, GPA and class_GPA as double-precision
floating point numbers, and letter_grade as a
character data type.
#define STUDENTS_PER_SECTION 22
int
double
char
num_students;
GPA, class_GPA;
letter_grade;
CISC 105 – Topic 1
31
Assignment Statements


An assignment statement is one type of
executable statement.
An assignment statement uses the “=“
operator, and follows the form:
variable = expression;

This statement first evaluates the
expression on the right and stores the
result in the variable on the left.
CISC 105 – Topic 1
32
Assignment Statements

Here are some examples of assignment
statements:





x = 12;
negative_x = -x;
x = y + 12 + z * 5;
result = y;
Note that any variables in the right-side
expression are not modified by an assignment
statement.
CISC 105 – Topic 1
33
Function Calls




A function is a piece of code which performs
a specific task.
Functions can be created by programmers or
supplied as part of the C compiler toolset.
A function is called, which causes it to
execute.
A function call is composed of the function
name, an open paren, a set of function
arguments separated by commas, and a close
paren.
CISC 105 – Topic 1
34
Function Calls

A function call looks like this:
function_name(argument1, argument2, argument3);
function name
open paren
function arguments
close paren
CISC 105 – Topic 1
35
The printf Function


The C function for displaying output on
the screen to the user is printf.
printf is called in the following manner:
printf(“The final GPA of student number %d is %f.\n”,student_num, GPA);
format string
print list
function arguments
CISC 105 – Topic 1
36
The Format String
and Print List



The format string is the text that is to be
displayed on the screen.
The “%” characters are called placeholders.
They indicate the display position for
variables whose values are to be displayed.
The variable names to be displayed are
specified in the print list and appear in the
same order as their placeholders.
CISC 105 – Topic 1
37
Placeholders
printf(“The final GPA of student number %d is %f.\n”,student_num, GPA);
This pair specifies the location in the print
string to display the student_num value.
This pair specifies the location in the print
string to display the GPA value.
CISC 105 – Topic 1
38
Placeholders


All placeholders begin with a “%”.
The text after the “%” symbol indicates
how to format the output, i.e. what kind
of variable it is.



%d – decimal number (int)
%f – floating-point number (float or
double)
%c – character (char)
CISC 105 – Topic 1
39
Escape Sequences




All escape-sequences begin with a backslash,
“\”.
A letter after the “\” character denotes an
escape sequence, which has special meaning.
The “\n” sequence indicates a new-line
character, which cause any following text to
appear on the next line on the display.
In order to display a “\”, the format string
must contain a “\\”.
CISC 105 – Topic 1
40
Placeholders and the
Newline Escape Sequence
printf(“The final GPA of student number %d is %f.\n”,student_num, GPA);
Specifies to display student_num,
which is an integer.
Specifies to display GPA,
which is an floating-point number.
CISC 105 – Topic 1
41
Placeholders and the
Newline Escape Sequence
printf(“The final GPA of student number %d is %f.\n”,student_num, GPA);
Therefore, if the student_num variable was set to
10 and the GPA variable was set to 3.03
this to
printf
function
call would cause:
Specifies
display
student_num,
which is an integer.
The final GPA of student number 10 is 3.03.
to be displayed
on the
screenGPA,
and any
Specifies
to display
subsequent
output
begin on thenumber.
next line.
which
is anto
floating-point
CISC 105 – Topic 1
42
The scanf Function

The C function for reading input from
the user is scanf.
scanf(“%d %f”,&student_num, &GPA);
format string input list
function arguments
CISC 105 – Topic 1
43
The Format String


The format string is the set of placeholders
which specify what type of data is being
input.
The same placeholders are used as for printf,
except for when inputting a floating-point
number. A float type still uses the “%f”,
however the double type uses the “%lf”
placeholder.
CISC 105 – Topic 1
44
The Input List




The variables to store the inputted data are
specified in the input list. They must be in
the same order as their corresponding
placeholders.
Notice that each variable name is preceded
by a “&”.
The “&” is an operator which means “the
address of”.
Therefore, “&student_num” tells the scanf
function to store what it reads from the user
at the memory address of student_num.
CISC 105 – Topic 1
45
Placeholders and
the Input List
scanf(“%d %f”,&student_num, &GPA);
This pair specifies to read
in an integer and store it
at the memory address of
student_num, thus setting
the student_num variable
to the inputted value.
CISC 105 – Topic 1
46
Placeholders and
the Input List
scanf(“%d %f”,&student_num, &GPA);
This pair specifies to read
in a single-precision floating
point number and store it
at the memory address of
GPA, thus setting the GPA
variable to the inputted value.
CISC 105 – Topic 1
47
Placeholders and
the Input List
scanf(“%d %f”,&student_num, &GPA);
Therefore, if the input into this
scanf function call was:
9 3.560 <ENTER>
the student_num variable would be
set to 9 and the GPA variable would be
set to 3.560
CISC 105 – Topic 1
48
Review of printf and scanf

int
What is the displayed output when the
following code fragment is run and the
inputs are 8 and 12?
x, y;
My name is Phil Viscito.
printf(“My name is”);
Enter two integers> 8 12
printf(“ Phil Viscito”);
printf(“\nEnter two integers> ”); Thanks! The answer is 22.
scanf(“%d%d”,&x, &y);
Bye now!
x = x + 2;
y = x + y;
printf(“Thanks! The answer is %d.\nBye now!”,y);
CISC 105 – Topic 1
49
Customizing Integer Output



The “%d” placeholder, used to display an
integer variable, can be altered to format how
the number is displayed.
Instead of “%d”, use a “%Xd” where the X is
an integer that is the field width, the number
of digits to display.
For example, “%4d” displays four digits of the
result. The negative sign (for negative
integers) is also considered a digit here.
CISC 105 – Topic 1
50
Customizing Integer Output


When there are more places (the field
width) than digits to be displayed, the
output is right-justified.
When there are more digits than places,
the field width is ignored, and the entire
integer is displayed.
CISC 105 – Topic 1
51
Customizing Integer Output

As an example:
Value
Placeholder
Output
643
%1d
643
643
%4d
643
%5d
-643
%2d
-643
%6d
CISC 105 – Topic 1
643
643
-643
-643
52
Customizing
Floating-Point Output




Floating point output (float and double)
can be formatted in the same manner, using
“%X.Yf”).
Here, X is the total number of digits to display
(the field width) and Y is the number of digits
to display to the right of the decimal point.
The same rules for field width apply as for
integer formatting.
The specified number of decimal digits is
always displayed.
CISC 105 – Topic 1
53
Customizing
Floating-Point Output

As an example:
Value
Placeholder
3.14159
%5.2f
3.14159
%3.2f
3.14
3.14159
%5.3f
3.142
0.1234
%4.2f
0.12
-0.006
%8.5f
-0.00600
CISC 105 – Topic 1
Output
3.14
54
Arithmetic Expressions



Arithmetic expressions are executable
statements that manipulate data.
Arithmetic expressions operate on both
integer (int) and floating-point (float and
double) numbers.
Arithmetic operators can operate on mixed
types (i.e. one int and one float). The
resulting type of such an expression is the
“highest” data type present.
CISC 105 – Topic 1
55
Resulting Data Types

The “highest” data type is always
considered to be a floating point
number, with double-precision floating
point numbers taking precedence over
single-precision floating point numbers.
int
int
int
float
+
+
+
+
int
float
double
double
=
=
=
=
CISC 105 – Topic 1
int
float
double
double
56
Arithmetic Expressions

All of the common arithmetic operators
are present in C:





+
*
/
%
(addition)
(subtraction)
(multiplication)
(division)
(modulus – or “remainder”)
CISC 105 – Topic 1
57
Note: Integer Division



If two integer values are divided, the
resulting data type is also an integer, as
previously described.
Therefore, only the integer portion of
the actual result will be the returned
result.
For example, 9 / 4 = 2
9 / 10
=0
CISC 105 – Topic 1
58
The Modulus Operator


The “%” operator is a modulus
operator, which also means the
remainder of the division.
For example,
9%3 =0
10 % 6 = 4
90 % 8 = 2
CISC 105 – Topic 1
59
Review of Basic
Arithmetic Expressions

int
float
What is the resulting output of this
program segment?
x, y, z;
a;
x=4
a=4.5
y=0
z=1
x = 9 * 0.5;
a = 9 * 0.5;
y = 15 % 15;
z = 15 % 2;
printf(“x=%d\n, a=%f\n, y=%d\n, z=%d\n”,x,a,y,z)
CISC 105 – Topic 1
60
More Complex
Arithmetic Expressions

C evaluates arithmetic expressions in
the same order rules as normal
mathematics.



Parentheses take priority over everything
else.
Then, multiplication, division, and modulus
operations from left to right.
Then, addition and subtraction from left to
right.
CISC 105 – Topic 1
61
More Complex
Arithmetic Expressions
x2 + 2xy + 4y2
(x * x) + (2 * x * y) +
(4 * y * y)
a+b
-------c2 * 4d
a * (4x % y2)
(a + b) / (c * c * 4 *
d)
x + y(x2 + y)
x + y * (x * x + y)
a * (4 * x % (y * y))
CISC 105 – Topic 1
62
Review

What is the resulting output of this
program segment?
#define PI 3.14159
int
float
x, y, z;
a, b;
x=5, y=10, z=4008
a=4008.14, b=4008.14159
x = 5;
y = 10;
z = x + (4 * y * y * y) + PI;
a = x + (4 * y * y * y) + PI;
b = (x / y) + a;
Since x and y are both
integers, this evaluates
to 0!
printf(“x=%d, y=%d, z=%d\na=%7.2f, b=%f\n”,x,y,z,a,b);
CISC 105 – Topic 1
63
Another Special Case:
Increment and Decrement


Incrementing (adding one) and
decrementing (subtracting one) are two
very common operations.
C has a special syntax for increment
and decrement operations that follows
this form:
x++; OR ++x;
Increment
x--; OR --x;
Decrement
CISC 105 – Topic 1
64
Another Special Case:
Increment and Decrement




Notice that the increment operator expression
x++ is the same as saying: x += 1;
So, why are there two forms of each operator?
The answer lies in when the increment (or
decrement) operation is actually performed.
This distinction only occurs when the ++ (or --)
operator is used on a variable in the same
expression in which the value of the variable is
used.
CISC 105 – Topic 1
65
Another Special Case:
Increment and Decrement

For example,
int x = 20, y;
int x = 20, y;
y = x++;
printf(“x=%d, y=%d\n”,x,y);
y = ++x;
printf(“x=%d, y=%d\n”,x,y);
x=21, y=20
x=21, y=21
y = x;
x += 1;
printf(“x=%d, y=%d\n”,x,y);
x += 1;
y = x;
printf(“x=%d, y=%d\n”,x,y);
CISC 105 – Topic 1
66
Another Special Case:
Increment and Decrement



The difference lies in when the expression
(x++ or ++x) gets evaluated in relation to
when the operator (++) gets performed.
The x++ expression is equal to the value of x
and the ++ operator is performed after the
evaluation is over.
The ++x expression indicates that the ++
operator is performed first (before ++x is
evaluated) and thus, is equal to the value of x
+ 1.
CISC 105 – Topic 1
67
Review

int
What is the output of the following
program fragment?
x, y, z;
x=7, y=10, z=55
x = 5;
y = 10;
z = x++ * y – 2;
z += ++x;
printf(“x=%d, y=%d, z=%d\n”,x,y,z);
CISC 105 – Topic 1
68
Topic 2A –
Library Functions and Casting
Casting




Although each of the functions above
take (and return) double data types,
they can be used with float data types.
This is done with a cast.
A cast is the conversion of one data
type to another data type.
This can be done explicitly or implicitly.
CISC 105 – Topic 1
70
Implicit Casting


When evaluating mixed type expressions, an
implicit cast is performed, as mixed type
expression cannot be directly evaluated.
For instance, in the code fragment:
float x = 1.0, y;
int z = 2;
y = x + z;

The variable z is casted to a float (2.0) in
order to add it to the float-type x.
CISC 105 – Topic 1
71
Review

What is the result of the following code
fragment:
int w, z, q;
float x = 4.0, y;
y
w
z
q
=
=
=
=
sqrt(x);
y;
x – w;
sqrt(3);
y=2.0, w=2, z=2, q=1
printf(“y=%f,w=%d,z=%d,q=%d”,y,w,z,q);
CISC 105 – Topic 1
72
Explicit Casting

Casting can also be performed explicitly.
This is done with the following form.
What is the result of the following code
fragment?
int a=9, b=4;
float c,d;
c=2.00, d=2.25
c = a/b;
d = (float)a / (float)b;
printf(“c=%.2f,d=%.2f”,c,d);
CISC 105 – Topic 1
73
Topic 3 – The General Form
of a C Program
The main Function Header

Thus, a general C program looks like:
Preprocessor directives
int main()
{
variable declarations
executable statements
}
return(0);
CISC 105 – Topic 1
75
Review (Problem #1)

Write a complete C program that asks
the user for a floating-point number,
multiplies the number by 4 * PI (with PI
set to 3.14159 in a constant macro) and
then outputs the result.
CISC 105 – Topic 1
76
Review
(Problem
#1)
#include <stdio.h>
#define PI 3.14159
Write a complete C program that asks
user for a floating-point number,
int the
main()
{ multiplies the number by 4 * PI (with PI
float number, answer;
set to 3.14159 in a constant macro) and
then
outputs the result.
printf(“Number?”);

scanf(“%f”,&number);
answer = number * 4 * PI;
printf(“The answer is:%f\n”,answer);
return (0);
}
CISC 105 – Topic 1
77
Topic 5 – Control Structures
The if statement



In order to use a condition to make a decision
about program control flow, C uses an if
statement.
The if statement first evaluates the specified
condition.
If the condition is true, the statement
immediately following the if statement
executes. If the condition is false, the
statement immediately following the if
statement is skipped.
CISC 105 – Topic 1
79
The if/else Statement



In addition, C supports the use of an else
statement.
This statement can follow the optional
statement (the one that may or may not
execute depending on the condition).
If there is an else statement, the statement
immediately following the else statement will
execute if the original condition (in the if
statement) is false.
CISC 105 – Topic 1
80
The if/else Statement

Therefore, if there is an else statement,
either the statement immediately
following the if statement is run (if the
condition is true) OR the statement
immediately following the else
statement is run (if the condition is
false).
CISC 105 – Topic 1
81
The if/else Statement
statement1;
if (condition)
statement2;
else
statement3;
statement4;

In this program fragment, statement1
executes. Then, either statement2 or
statement3 executes, depending on the
condition. Then, statement4 executes.
Note that only 3 statements execute.
CISC 105 – Topic 1
82
Compound Statements



Sometimes, we wish to perform more than
one thing as the result of an if statement.
In this case, we can make use of a compound
statement.
A compound statement is a group of C
language statements that run sequentially. A
compound statement is enclosed with curly
braces (“{” and “}”), in the same way a
function body is.
CISC 105 – Topic 1
83
Compound Statements

When used as the statement
immediately following an if or else
statement, a compound statement is
treated like one statement (all of the
statements enclosed by the braces are
run, sequentially.)
CISC 105 – Topic 1
84
Compound Statements

In this program fragment,
statement1 executes. Then,
either statement2 and
statement3 execute or
statement4 and statement5
execute, depending on the
condition. Then, statement6
executes. Note that only 4
statements execute.
CISC 105 – Topic 1
statement1;
if (condition)
{
statement2;
statement3;
}
else
{
statement4;
statement5;
}
statement6;
85
Cascading if/else Statements


We can also cascade if/else
statements. Here, condition1 is first
evaluated. If it is true, statements 2 &
3 run and then statement7. If
condition1 is false and condition2 is
true, statements 4 and 5 run and then
statement 7. If both conditions are
false, statement 6 runs and then
statement 7.
Note that if condition1 is true,
condition2 is never evaluated!
CISC 105 – Topic 1
statement1;
if (condition1)
{
statement2;
statement3;
}
else if(condition2)
{
statement4;
statement5;
}
else
statement6;
statement7;
86
Conditions


So, now the structure of if/else statements
are known. So, how do we write the
conditions?
When an if statement is encountered, the
program will first evaluate the condition in the
if statement. Anything that evaluates to a
nonzero value is true. Anything that
evaluates to zero is false.
CISC 105 – Topic 1
87
Conditions

Thus, an if statement that was written
as:
if (x)
statement1;
would cause statement1 to run if x was
equal to any value other than zero. If
x was zero, statement1 would be
skipped.
CISC 105 – Topic 1
88
Relational and
Equality Operators


In order to write conditions effectively,
C provides a number of relational and
equality operators.
For these operators, if the condition
they specify is true, they evaluate to 1.
If the condition they specify is false,
they evaluate to 0.
CISC 105 – Topic 1
89
Operators

The following relational and equality
operators are used:






<
>
<=
>=
==
!=
less than
greater than
less than or equal to
greater than or equal to
equal to
not equal to
CISC 105 – Topic 1
90
Conditions & Operators

Some examples of the use of these
operators include:






x <= 0
number > MAX_NUMBER_ALLOWED
male_or_female == ‘M’
num != flag_number
y < 12.0
q <= p
CISC 105 – Topic 1
91
A VERY Common Error

An assignment statement evaluates to
the value being assigned. For example,
x = 6;
evaluates to 6. So…what would happen
if we wrote
if (x = 6)
{
…
}
CISC 105 – Topic 1
92
A VERY Common Error

An assignment statement evaluates to
the value being
assigned. For example,
First, 6 would be assigned to x!
overwrites whatever was previously
xThis
= 6;
stored in x. Also, x=6 evaluates to 6.
evaluates
to 6. So…what
would
happen
As anything
nonzero is true,
this condition
is ALWAYS true.
if we wrote
if (x = 6) BOTTOM LINE:
{
…
} Remember to use == for conditions!
CISC 105 – Topic 1
93
Compound Conditions


More than one condition can be
combined to create a compound
condition.
A logical operator is used to combine
conditions. These include:


&&
||
AND
OR (shift-\)
CISC 105 – Topic 1
94
Logical AND (&&)

The logical AND operator works as
follows:
Condition 1
Condition 2
Overall Result
TRUE (nonzero) TRUE (nonzero) TRUE (1)
TRUE (nonzero) FALSE (0)
FALSE (0)
FALSE (0)
TRUE (nonzero) FALSE (0)
FALSE (0)
FALSE (0)
CISC 105 – Topic 1
FALSE (0)
95
Logical OR (||)

The logical OR operator works as
follows:
Condition 1
Condition 2
Overall Result
TRUE (nonzero) TRUE (nonzero) TRUE (1)
TRUE (nonzero) FALSE (0)
TRUE (1)
FALSE (0)
TRUE (nonzero) TRUE (1)
FALSE (0)
FALSE (0)
CISC 105 – Topic 1
FALSE (0)
96
Logical NOT (!)

The last logical operator is the NOT
operator. It behaves as follows:
Condition
!(Condition)
TRUE (nonzero)
FALSE (0)
FALSE (0)
TRUE (1)
CISC 105 – Topic 1
97
Examples

Write a condition that is true if both x is
greater than 19.75 and number is equal
to 3 OR big_letter is not equal to ‘Q’.
(X > 19.75 && number == 3) || big_letter != ‘Q’
CISC 105 – Topic 1
98
The switch Statement



When one variable (type int or char ONLY)
is used to make a control decision, where
different statements are run if the variable is
equal to different values, the switch
statement can be used.
Note that this statement does not allow less
than, greater than, etc. ONLY the equality
operator (==) is used with a switch
statement.
The switch statement is composed of a
control variable and a series of case clauses.
CISC 105 – Topic 1
99
The switch Statement

The switch
statement takes
this form:
switch(control variable)
{
case (value1):
. . .
. . .
break;
case (value2):
. . .
. . .
break;
default:
. . .
. . .
break;
}
CISC 105 – Topic 1
100
The switch Statement

When the switch
statement is
encountered, the
control variable is
evaluated. Then, if
that evaluated value is
equal to any of the
values specified in a
case clause, the
statements
immediately following
the colon (“:”) begin to
run.
switch(control variable)
{
case (value1):
. . .
. . .
break;
case (value2):
. . .
. . .
break;
default:
. . .
. . .
break;
}
CISC 105 – Topic 1
101
The switch Statement

These statements
then continue to
run until a break
statement is
encountered.
Control then flows
to the statement
immediately
following the
closing brace (“}”).
switch(control variable)
{
case (value1):
. . .
. . .
break;
case (value2):
. . .
. . .
break;
default:
. . .
. . .
break;
}
CISC 105 – Topic 1
102
The switch Statement

It is important to
remember that
control will pass
into the next case
clause if a break
statement is not
encountered.
switch(control variable)
{
case (value1):
. . .
. . .
break;
case (value2):
. . .
. . .
break;
default:
. . .
. . .
break;
}
CISC 105 – Topic 1
103
The switch Statement


So, what happens if
the control variable
is not equal to any
of the values
specified in the
case clauses?
The default case
clause runs.
switch(control variable)
{
case (value1):
. . .
. . .
break;
case (value2):
. . .
. . .
break;
default:
. . .
. . .
break;
}
CISC 105 – Topic 1
104
switch Statement Example
statement1;
switch(x)
{
case (3):
statement2;
statement3;
case (27):
case (1):
statement4;
case (2):
statement5;
break;
default:
statement6:
statement7:
break;
}
statement8;
Which statements run if:
x
x
x
x
x
=
=
=
=
=
1?
2?
3?
10?
27?
CISC 105 – Topic 1
105
Topic 6 –
Repetition and Loops
The while Statement

In order to create loops in the C
language, the while statement can be
used. This statement follows the form:
while (condition)
{
statement1;
statement2;
. . .
}
CISC 105 – Topic 1
107
The while Statement

When the while statement is
first encountered, the
condition is evaluated. If it is
true (nonzero), the loop body
executes sequentially. If the
condition is false, the loop
body is skipped. Notice that
this behavior is exactly the
same as a simple if
statement.
CISC 105 – Topic 1
while (condition)
{
statement1;
statement2;
. . .
}
108
The while Statement

At the end of the loop body
(when the closing brace “}” is
encountered) the condition is
evaluated again. If it is true,
the loop body begins to
execute again, beginning with
the first statement in the body
(immediately following the
open brace “{”) and continuing
to the end sequentially.
CISC 105 – Topic 1
while (condition)
{
statement1;
statement2;
. . .
}
109
Counting Loops
and while Statements

As we have seen, counting loops have
three principle components when
created with a while statement:



Initialization – set the initial value of the
loop control variable (usually to zero)
Testing – Test the value of the loop
control variable according to the condition
Updating – Update the loop control
variable as the last statement in the loop
CISC 105 – Topic 1
110
A Common Loop Error

What happens if, when writing a
counting loop, the programmer does
not update the loop control variable?
The condition will always be true
(assuming it starts off as true). Thus,
the loop with execute forever. This
is referred to as an infinite loop.
CISC 105 – Topic 1
111
The for Statement

As we have seen, many loops have
three components in addition to the
loop body:



Initialization – set the initial value of the
loop control variable
Testing – Test the value of the loop
control variable according to the condition
Updating – Update the loop control
variable
CISC 105 – Topic 1
112
The for Statement

The for statement offers a designed
place for each of these three
components. It follows the form:
for (counter = 0;
counter < high_value;
counter++)
{
statement1;
statement2;
. . .
}
CISC 105 – Topic 1
113
The for Statement

Thus, the for
statement consists of
an initialization, a
semicolon, the
condition, a
semicolon, and the
an update
statement.
for (counter = 0;
counter < high_value;
counter++)
{
statement1;
statement2;
. . .
}
CISC 105 – Topic 1
114
The for Statement


Notice that the update
statement does NOT
have a semicolon.
Also, the initialization
and update statements
can actually be
composed of more than
one statement.
for (counter = 0;
counter < high_value;
counter++)
{
statement1;
statement2;
. . .
}
CISC 105 – Topic 1
115
The for Statement

If more than one
statement is to be
used for initialization
or update, these
statements are
separated by
commas.
for (counter = 0, x = 0;
counter < high_value;
counter++, x += 2)
{
statement1;
statement2;
. . .
}
CISC 105 – Topic 1
116
for / while Loop Equivalence


Notice that any for loop can be
rewritten into a while loop.
The for loop is simply a special case of
the while loop, with provisions for
initialization and updating build into the
loop statement itself.
CISC 105 – Topic 1
117
for / while Loop Equivalence


To convert from a for loop to a while
loop, simply move the initialization
statement(s) before the loop statement
and move the update statement(s)
inside the loop body.
We can rewrite the payroll example
using a for loop instead of a while
loop.
CISC 105 – Topic 1
118
The Payroll Example
with a for Loop
printf(“How many employees do you have?”);
scanf(“%d”,&number_employees);
total_pay = 0.0;
for (counter = 0; counter < number_employees;
counter++)
{
printf(“Hours?”);
scanf(“%d”,&hours);
printf(“Pay rate?”);
scanf(“%lf”,&rate);
pay = hours * rate;
printf(“The pay is %f.\n”,pay);
total_pay += pay;
}
printf(“Total pay = %f.\n”,total_pay);
CISC 105 – Topic 1
119
The do-while Statement



Both of the loop statements we have seen
evaluate the condition before the first loop
iteration.
Sometimes, we wish to check the condition at
the end of the loop iteration, instead of at the
beginning of the loop iteration.
This has the effect of ALWAYS executing the
loop the first time, then testing the condition
at the end of the loop iteration.
CISC 105 – Topic 1
120
The do-while Statement


In order to create such loops, C offers
the do-while statement.
This loop follows the format:
do
{
statement1;
statement2;
. . .
} while (condition);
CISC 105 – Topic 1
121
The do-while Statement



When the do statement
is first encountered, the
loop body begins to
execute immediately.
When the loop body
completes, the while
statement is reached.
The condition is then
evaluated.
CISC 105 – Topic 1
statement1;
do
{
statement2;
statement3;
. . .
} while (condition);
statement4;
122
The do-while Statement

Notice that the
while statement has
a semicolon at the
end of the condition.
CISC 105 – Topic 1
statement1;
do
{
statement2;
statement3;
. . .
} while (condition);
statement4;
123
The do-while Statement


So…the do-while loop
statement is the same
as the while statement
except the condition is
tested at the end of the
loop iteration rather
than the beginning.
Thus, a do-while loop
ALWAYS executes at
least once.
CISC 105 – Topic 1
statement1;
do
{
statement2;
statement3;
. . .
} while (condition);
statement4;
124
do-while and
while Comparison

Do the following loops do the same thing?
scanf(“%d”, &num);
while (num != SENTINEL)
{
/* do something
with num */
scanf(“%d”, &num);
}
do {
scanf(“%d”, &num);
if (num != SENTINEL)
{
/* do something
with num */
}
} while (num != SENTINEL)
Yes,#1
the loops do the same
thing.
Loop
Loop
#2
Is one better than the other? Why?
CISC 105 – Topic 1
125
Common Loop Errors

Find the error(s) in the following code:
#include <stdio.h>
/* This program asks for a number and displays that
many lines of stars on the screen. */
int main()
{
int count, num_lines;
printf (“How many lines would you like?”);
scanf(“%d”,&num_lines);
for (count = 0; count <= num_lines; count++)
printf (“********************\n”);
return 0;
}
CISC 105 – Topic 1
126
Common Loop Errors

Find the error(s) in the following code:
#include <stdio.h>
/* This program asks for numbers and keeps a running
sum. It terminates when –99 is entered. */
int main()
{
int sum, number;
do {
printf(“Enter a number (-99 to quit)>”);
scanf(“%d”,&number);
sum += number;
} while (number != -99);
printf (“The sum is %d.\n”,sum);
return 0;
}
CISC 105 – Topic 1
127