Transcript Document

BIL104E: Introduction to Scientific and
Engineering Computing, Spring 2005.
Lecture 3
Outline
3.1 Introduction
3.2 Algorithms
3.3 Pseudocode
3.4 Control Structures
3.5 Decision Making: Equality and Relational Operators
3.6 The if Selection Structure
3.7 The if/else Selection Structure
3.8 Nested control structures
3.9 Switch-Case (and break)
3.10 Assignment Operators
3.11 Increment and Decrement Operators
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 1
3.1
Introduction
• Before writing a program:
– Have a thorough understanding of the problem
– Carefully plan an approach for solving it
• While writing a program:
– Know what “building blocks” are available
– Use good programming principles
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 2
3.2
Algorithms
• Computing problems
– All can be solved by executing a series of actions in a
specific order
• Algorithm: procedure in terms of
– Actions to be executed
– The order in which these actions are to be executed
• Program control
– Specify order in which statements are to executed
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 3
3.3
Pseudocode
• Pseudocode
– Artificial, informal language that helps us develop
algorithms
– Similar to everyday English
– Not actually executed on computers
– Helps us “think out” a program before writing it
• Easy to convert into a corresponding C program
• Consists only of executable statements
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 4
3.4
Control Structures
• Sequential execution
– Statements executed one after the other in the order written
• Transfer of control
– When the next statement executed is not the next one in
sequence
• Bohm and Jacopini
– All programs written in terms of 3 control structures
• Sequence structures: Built into C. Programs executed
sequentially by default
• Selection structures: C has three types: if, if/else, and
switch (this week’s materail)
• Repetition structures: C has three types: while, do/while
and for (next week’s materail)
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 5
3.4
Control Structures
• Flowchart
– Graphical representation of an algorithm
– Drawn using certain special-purpose symbols connected by
arrows called flowlines
– Rectangle symbol (action symbol):
• Indicates any type of action
– Oval symbol:
• Indicates the beginning or end of a program or a section of code
• Single-entry/single-exit control structures
– Connect exit point of one control structure to entry point of
the next (control-structure stacking)
– Makes programs easy to build
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 6
3.5
Decision Making: Equality and
Relational Operators
• Executable statements
– Perform actions (calculations, input/output of data)
– Perform decisions
• May want to print "pass" or "fail" given the value of a
test grade
• if control structure
– If a condition is true, then the body of the if statement
executed
• 0 is false, non-zero is true
– Control always resumes after the if structure
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 7
3.5
Decision Making: Equality and
Relational Operators
Standard algebraic
equality operator or
relational operator
C equality or
relational
operator
Example of C Meaning of C
condition
condition
=
==
x == y
x is equal to y
not =
!=
x != y
x is not equal to y
>
>
x > y
x is greater than y
<
x < y
x is less than y
>=
<
>=
x >= y
x is greater than or
equal to y
<=
<=
x <= y
x is less than or
equal to y
Equality Operators
Relational Operators
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 8
1
/* Fig. 2.13: fig02_13.c
Outline
2
Using if statements, relational
3
operators, and equality operators */
4
#include <stdio.h>
1. Declare variables
5
6
int main()
7
{
8
2. Input
int num1, num2;
9
10
printf( "Enter two integers, and I will tell you\n" );
11
printf( "the relationships they satisfy: " );
12
scanf( "%d", &num1, &num2
);
/* read two integers */
2.1 if statements
3. Print
13
14
15
if ( num1 == num2 )
printf( "%d is equal to %d\n", num1, num2 );
16
17
18
if ( num1 != num2 )
printf( "%d is not equal to %d\n", num1, num2 );
19
20
21
if ( num1 < num2 )
printf( "%d is less than %d\n", num1, num2 );
22
23
24
if ( num1 > num2 )
printf( "%d is greater than %d\n", num1, num2 );
25
26
27
28
if ( num1 <= num2 )
printf( "%d is less than or equal to %d\n",
num1, num2 );
Fall 2003, Gülcihan Özdemir Dağ
Lecture 3, Page 9
29
30
31
if ( num1 >= num2 )
Outline
printf( "%d is greater than or equal to %d\n",
32
num1, num2 );
3.1 Exit main
33
34
return 0;
/* indicate program ended successfully */
35 }
Enter two integers, and I will tell you
the relationships they satisfy: 3 7
3 is not equal to 7
3 is less than 7
3 is less than or equal to 7
Program Output
Enter two integers, and I will tell you
the relationships they satisfy: 22 12
22 is not equal to 12
22 is greater than 12
22 is greater than or equal to 12
Fall 2003, Gülcihan Özdemir Dağ
Lecture 3, Page 10
3.6
The if Selection Structure
• Selection structure:
– Used to choose among alternative courses of action
– Pseudocode:
If student’s grade is greater than or equal to 60
Print “Passed”
• If condition true
– Print statement executed and program goes on to next
statement
– If false, print statement is ignored and the program goes
onto the next statement
– Indenting makes programs easier to read
• C ignores whitespace characters
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 11
3.6
The if Selection Structure
• Pseudocode statement in C:
if ( grade >= 60 )
printf( "Passed\n" );
– C code corresponds closely to the pseudocode
• Diamond symbol (decision symbol)
– Indicates decision is to be made
– Contains an expression that can be true or false
– Test the condition, follow appropriate path
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 12
3.6
The if Selection Structure
• if structure is a single-entry/single-exit structure
A decision can be made on
any expression.
grade >= 60
true
zero - false
print “Passed”
nonzero - true
Example:
false
Spring 2005, Gülcihan Özdemir Dağ
3 - 4 is true
Lecture 3, Page 13
3.7
The if/else Selection Structure
• if
– Only performs an action if the condition is true
• if/else
– Specifies an action to be performed both when the condition
is true and when it is false
• Psuedocode:
If student’s grade is greater than or equal to 60
Print “Passed”
else
Print “Failed”
– Note spacing/indentation conventions
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 14
3.7
The if/else Selection Structure
• C code:
if ( grade >= 60 )
printf( "Passed\n");
else
printf( "Failed\n");
• Ternary conditional operator (?:)
– Takes three arguments (condition, value if true, value if
false)
– Our pseudocode could be written:
printf( "%s\n", grade >= 60 ? "Passed" :
"Failed" );
– Or it could have been written:
grade >= 60 ? printf( “Passed\n” ) :
printf( “Failed\n” );
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 15
3.7
The if/else Selection Structure
• Flow chart of the if/else selection structure
false
grade >= 60
true
print “Failed”
print “Passed”
• Nested if/else structures
– Test for multiple cases by placing if/else selection
structures inside if/else selection structures
– Once condition is met, rest of statements skipped
– Deep indentation usually not used in practice
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 16
3.7
The if/else Selection Structure
– Pseudocode for a nested if/else structure
If student’s grade is greater than or equal to 90
Print “A”
else
If student’s grade is greater than or equal to 80
Print “B”
else
If student’s grade is greater than or equal to 70
Print “C”
else
If student’s grade is greater than or equal to 60
Print “D”
else
Print “F”
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 17
3.7
The if/else Selection Structure
• Compound statement:
– Set of statements within a pair of braces
– Example:
if ( grade >= 60 )
printf( "Passed.\n" );
else {
printf( "Failed.\n" );
printf( "You must take this course
again.\n" );
}
– Without the braces, the statement
printf( "You must take this course
again.\n" );
would be executed automatically
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 18
3.7
The if/else Selection Structure
• Block:
– Compound statements with declarations
• Syntax errors
– Caught by compiler
• Logic errors:
– Have their effect at execution time
– Non-fatal: program runs, but has incorrect output
– Fatal: program exits prematurely
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 19
3.8 Nested control structures
1: /* 10L03.c Using nested if statements */
2: #include <stdio.h>
3:
4: main() {
5:
int i;
6: printf(“Enter an integer number \n”);
7: scanf(“%d”,&i);
9:
if (i > 0)
10:
if (i%2 == 0)
11:
printf("%d is an even number.\n", i);
12:
else
13:
printf("%d is an odd number.\n", i);
14:
else if (i == 0)
15:
printf("The number is zero.\n");
16:
else
17:
printf("Negative number: %d\n", i);
19: return 0;
20: }
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 20
3.9 Switch-Case
• The nested if statements will become very complex if there are many
decisions that need to be made, however. Sometimes, the programmer
will have problems following the complex if statements.
• Fortunately there is another statement in C, the switch statement, that
you can use to make unlimited decisions or choices based on the value
of a conditional expression and specified cases.
• The general form of the switch statement is
switch (expression) {
case expression1: statement1;
case expression2: statement2;
...
default: statement-default;
}
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 21
Example: Using the switch statement
#include <stdio.h>
main(){
int day;
printf("Please enter a single digit for a day\n");
printf("(within the range of 1 to 3):\n");
day = getchar();
switch (day){
case `1':
printf("Day 1\n");
case `2':
printf("Day 2\n");
case `3':
printf("Day 3\n");
default:
;
}
return 0;
} /* End of main */
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 22
Use the switch-break statement
#include <stdio.h>
main(){
int day;
printf("Please enter a single digit for a day\n");
printf("(within the range of 1 to 7):\n");
day = getchar();
switch (day){
case '1':
printf("Day 1 is Sunday.\n"); break;
case '2':
printf("Day 2 is Monday.\n"); break;
case '3':
printf("Day 3 is Tuesday.\n"); break;
case '4':
printf("Day 4 is Wednesday.\n"); break;
case '5':
printf("Day 5 is Thursday.\n"); break;
case '6':
printf("Day 6 is Friday.\n");
break;
case '7':
printf("Day 7 is Saturday.\n"); break;
default:
printf("The digit is not within the range of 1 to 7.\n");
break;
}
return 0;
}
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 23
3.10 Assignment Operators
• Assignment operators abbreviate assignment
expressions
c = c + 3;
can be abbreviated as c += 3; using the addition assignment
operator
• Statements of the form
variable = variable operator expression;
can be rewritten as
variable operator= expression;
• Examples of other assignment operators:
d
e
f
g
-=
*=
/=
%=
Spring 2005, Gülcihan Özdemir Dağ
4
5
3
9
(d
(e
(f
(g
=
=
=
=
d
e
f
g
*
/
%
4)
5)
3)
9)
Lecture 3, Page 24
3.11 Increment and Decrement Operators
• Increment operator (++)
– Can be used instead of c+=1
• Decrement operator (--)
– Can be used instead of c-=1
• Preincrement
– Operator is used before the variable (++c or --c)
– Variable is changed before the expression it is in is evaluated
• Postincrement
– Operator is used after the variable (c++ or c--)
– Expression executes before the variable is changed
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 25
3.11 Increment and Decrement Operators
• If c equals 5, then
printf( "%d", ++c );
– Prints 6
printf( "%d", c++ );
– Prints 5
– In either case, c now has the value of 6
• When variable not in an expression
– Pre-incrementing and post-incrementing have the same effect
++c;
printf( “%d”, c );
– Has the same effect as
c++;
printf( “%d”, c );
Spring 2005, Gülcihan Özdemir Dağ
Lecture 3, Page 26