0% found this document useful (0 votes)
12 views48 pages

Chapter5 Loops Nva

Uploaded by

adrian.mohanta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views48 pages

Chapter5 Loops Nva

Uploaded by

adrian.mohanta
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 48

CS1010: Programming Methodology

http://www.comp.nus.edu.sg/~cs1010/
Week 5: Repetition Statements
Objectives:
 Understand the program control structure called
loops
 Compare the different types of repetition structure

References:
 Chapter 4 Lessons 4.7 – 4.11

CS1010 (AY2012/3 Semester 1) Week5 - 2


Week 5: Outline (1/2)
1. Week 4 Exercise #3: NRIC Check Code
2. Loops!
3. The while Loop
3.1 Demo
3.2 Loop condition
3.3 Tracing
4. The do-while Loop
5. The for Loop
5.1 Odd Integers
6. Exercise #1: Sum of Multiples of 3
7. Exercise #2: Asterisks

CS1010 (AY2012/3 Semester 1) Week5 - 3


Week 5: Outline (2/2)
8. Common Errors
9. Some Notes of Caution
10. Exercise #3: Tracing Nested Loops
11. Using break in Loop
12. Using continue in Loop
13. Exercise #4: Prime Number (take-home)

CS1010 (AY2012/3 Semester 1) Week5 - 4


1. Week 4 Ex3: NRIC Check
Code (1/3)
 Algorithm for NRIC check code
 NRIC consists of 7 digits.
 Eg: 8730215
 Step 1: Multiply the digits with corresponding
weights 2,7,6,5,4,3,2 and add them up.
 Eg: 82 + 77 + 36 + 05 + 24 + 13 + 52 =
16+49+18+0+8+3+10 = 104
 Step 2: Divide step 1 result by 11 to obtain the
remainder.
 Eg: 104 % 11 = 5

CS1010 (AY2012/3 Semester 1) Week5 - 5


1. Week 4 Ex3: NRIC Check
Code (2/3)
 Algorithm for NRIC check code (cont…)
 Step 3: Subtract step 2 result from 11
 Eg: 11 – 5 = 6
 Step 4: Match step 3 result in this table for the check
code
1 2 3 4 5 6 7 8 9 10 11
A B C D E F G H I Z J
 Eg: The check code corresponding to 6 is ‘F’.
 Therefore, the check code for 8730215 is ‘F’.
 Sample run: Enter 7-digit NRIC number: 8730215
Check code is F

CS1010 (AY2012/3 Semester 1) Week5 - 6


1. Week 4 Ex3: NRIC Check
Code (3/3)
 Write a program Week4_NRIC.c to generate the check code given
a 7-digit NRIC number.
 Your program should include a function char generateCode(int) that
takes in a single integer (the NRIC number) and returns a character
(which is the check code).
 You need to use the char type. (Explore this on your own.)
 A character constant is enclosed in single quotes (eg: 'A', 'Z').
 The format specifier for char type is %c (to be used in a printf()
statement).
 Do not use techniques that are not covered in class, such as array.
Your program may be long now. You can write an improved version
later.
 This is your take-home exercise.
 This exercise is mounted on CodeCrunch.
CS1010 (AY2012/3 Semester 1) Week5 - 7
Recall: Control Structures

Sequence

Selection if-else, switch

Repetition

CS1010 (AY2012/3 Semester 1) Week5 - 8


2. LOOPS! (1/2)

“A program without a loop and a


structure variable isn’t worth writing.”
Alan J.Perlis
Yale University
The first recipient of ACM Turing Award

 A loop is a statement whose job is to


repeatedly execute some other statement(s).

CS1010 (AY2012/3 Semester 1) Week5 - 9


2. LOOPS! (2/2)
Each round of the
loop is called an
Loop
condition
iteration.

cond? false

true
loop body
Some
statement(s)

CS1010 (AY2012/3 Semester 1) Week5 - 10


2. Loop: Demo (1/3)
 Keep prompting the Enter a number: 12
user to input a non- You entered: 12
negative integer, and Enter a number: 0
output that integer. You entered: 0
 Halt the loop when Enter a number: 26
the input is negative. You entered: 26
Enter a number: 5
You entered: 5
 Key observations: Enter a number: -1
 You keep repeating a task while certain condition is met,
or alternatively, you repeat until the condition is not met.
 You do not know beforehand how many iterations there
will be.
CS1010 (AY2012/3 Semester 1) Week5 - 11
2. Loop: Demo (2/3)
Loop Enter a number: 12
int main(void) {
condition You entered: 12
int num;
printf("Enter a number: "); Enter a number: 0
scanf("%d", &num); You entered: 0
if (num < 0) return 0;
printf("You entered: %d\n",
Enter a number: 26
num); You entered: 26
printf("Enter a number: "); Enter a number: 5
scanf("%d", &num);
if (num < 0) return 0;
You entered: 5
printf("You entered: %d\n", Enter a number: -1
num);
printf("Enter a number: ");
scanf("%d", &num); Loop body
....
}
CS1010 (AY2012/3 Semester 1) Week5 - 12
2. Loop: Demo (3/3)
Week5_Read_print.c
int main(void) {
int num;

false
num >= 0? printf("Enter a number: ");
scanf("%d", &num);
true while (num >= 0) {
printf("You entered: %d\
n", num);
printf …
printf("Enter a number:
printf …
");
scanf …
scanf("%d", &num);
}

return 0;
}
CS1010 (AY2012/3 Semester 1) Week5 - 13
3. The while Loop
false
while ( condition ) cond?

{ true
// loop body
Loop
} body

If condition is true,
execute loop body;
otherwise, terminate
loop.

CS1010 (AY2012/3 Semester 1) Week5 - 14


3.1 The while Loop: Demo
(1/3)
 Keep prompting the
user to input a non- Enter a number: 12
negative integer, and Enter a number: 0
output that integer.
Enter a number: 26
 Halt the loop when Enter a number: 5
the input is negative,
Enter a number: -1
and output the
maximum integer The maximum number is 26
input so far.

CS1010 (AY2012/3 Semester 1) Week5 - 15


3.1 The while Loop: Demo
(2/3)
maxi = 0;
maxi = 0;
num  input;
if (num < 0) {
num  input;
print maxi; while (num >= 0) {
stop; if (maxi < num)
} maxi = num;
if (maxi < num) num  input;
maxi = num ; }
num  input;
if (num < 0) { print maxi;
print maxi;
stop;
}
if (maxi < num)
maxi = num;
num  input;
...
CS1010 (AY2012/3 Semester 1) Week5 - 16
3.1 The while Loop: Demo
(3/3)
int main(void) { Week5_Find_max.c
int num, maxi = 0;

printf("Enter a number: ");


scanf("%d", &num);
while (num >= 0) {
if (maxi < num) {
maxi = num;
}
printf("Enter a number: ");
scanf("%d", &num);
}
prinf("The maximum number is %d\n",
maxi);
return 0;
}
CS1010 (AY2012/3 Semester 1) Week5 - 17
3.2 while Loop Condition (1/2)

a = 2; Output: ?
b = 7;
while (a == b) {
print a;
a = a + 2;
}

 When the loop condition is always false, the loop body is


not executed.

CS1010 (AY2012/3 Semester 1) Week5 - 18


3.2 while Loop Condition (2/2)

a = 2; Output: ?
b = 7;
while (a != b) {
print a;
a = a + 2;
}

 CS1010 (AY2012/3 Semester 1) Week5 - 19


3.3 Tracing while Loop (1/4)
 Trace the following codes manually and write out their
outputs (assume all variables are of type int)
(a) a = 1;
while (a*a < 100) {
printf("%d ", a);
a *= 2;
}
printf("\n");

(b) b = 0; c = 9;
while (b < c) {
printf("b=%d, c=%d\n", b, c);
b++; c--;
}
printf("outside: b=%d, c=%d\n", b, c);
 CS1010 (AY2012/3 Semester 1) Week5 - 20
3.3 Tracing while Loop (2/4)
 Example: Given a positive integer n, print out
its digits from least significant to most
significant.
 Sample run:

Enter a positive integer: 28943


3
4
9
8
2

CS1010 (AY2012/3 Semester 1) Week5 - 21


3.3 Tracing while Loop (3/4)
 Example: Given a positive integer n, print out
its digits from least significant to most
significant.
Week5_Print_digits.c
// Precond: n > 0
void print_digits(int n) {
int digit;

while (n > 0) {
digit = n%10;
printf("%d\n",
digit);
n /= 10;
}
}
CS1010 (AY2012/3 Semester 1) Week5 - 22
3.3 Tracing while Loop (4/4)
Week5_Print_digits.c
// Precond: n > 0
void print_digits(int n) {
int digit;
What are the values
while (n > 0) { of n and digit after
digit = n%10; exiting the loop?
printf("%d\n",
digit);
n /= 10;
}
}
n initially 28943
n @ point 28943
digit @ point ***

 CS1010 (AY2012/3 Semester 1) Week5 - 23


Class Work

CS1010 (AY2012/3 Semester 1) Week5 - 24


4. The do-while Loop (1/2)
do
{ Execute loop body
// loop body at least once.
} while ( condition );

Loop
body

cond?
true
false

CS1010 (AY2012/3 Semester 1) Week5 - 25


4. The do-while Loop (2/2)
do
 Example: Count the number {
of digits in an integer. // loop body
} while ( condition );
Week5_Count_digits.c
// Precond: n > 0
int count_digits(int n) {
int counter = 0;

do {
counter++;
n /= 10;
} while (n > 0);

return counter;
}
CS1010 (AY2012/3 Semester 1) Week5 - 26
5. The for Loop (1/2)
for ( initialization; condition; update )
{
// loop body
}

Initialization:
initialize the Condition: repeat loop
loop variable while the condition on
loop variable is true Update: change
value of loop
variable
CS1010 (AY2012/3 Semester 1) Week5 - 27
5. The for Loop (2/2)
 Example: Print numbers 1 to 10
int n; Steps:
for (n=1; n<=10; n++) { 1.n=1;
printf("%3d", n);
2.if (n<=10) {
}
printf(…);
n++;
Go to step
2
}
3. Exit the loop

CS1010 (AY2012/3 Semester 1) Week5 - 28


5.1 The for Loop: Odd Integers
(1/2) Week5_OddIntegers_v1.c
#include <stdio.h>
void print_odd_integers(int);
int main(void) {
int num;
printf("Enter a positive integer:
");
scanf("%d", &num);
print_odd_integers(num);
return 0;
}
// Precond: n > 0
void print_odd_integers(int n) {
int i;
for (i=1; i<=n; i+=2)
printf("%d ", i);
printf("\n");
} Semester 1)
CS1010 (AY2012/3 Week5 - 29
5.1 The for Loop: Odd Integers
(2/2) Week5_OddIntegers_v2.c
// Precond: n > 0
void print_odd_integers(int n) {
int i;
for (i=1; i<=n; i++)
if (i%2 != 0)
printf("%d ", i);
printf("\n");
}
Week5_OddIntegers_v3.c
// Precond: n > 0
void print_odd_integers(int n) {
for ( ; n > 0; n--)
if (n%2 != 0)
Values
printf("%d ", printed
n); from
Empty largest to smallest.
statement printf("\n");
}

CS1010 (AY2012/3 Semester 1) Week5 - 30


6. Exercise #1: Sum of Multiples
of 3 (1/2)
 Modify the program Week5_OddIntegers_v1.c to read
a positive integer n and then compute the sum of all
integers which are multiples of 3 between 1 and n
using a ‘for’ loop. Write a function called
sum_multiples_of_3(int).
 This problem can be solved with a formula, but we will use
the ‘for’ loop just for exercise.
 Call this program Week5_SumMultiples3.c
 Sample run:
Enter a positive integer: 50
Sum = 408

CS1010 (AY2012/3 Semester 1) Week5 - 31


6. Exercise #1: Sum of Multiples
of 3 (2/2)
 How about using a ‘while’ loop instead?
 Pseudo-code using a ‘while’ loop:

precondition: n > 0
sum  0
i  n
while i > 0
if i is multiple of 3 then
sum  sum + i
i  i - 1
return sum

CS1010 (AY2012/3 Semester 1) Week5 - 32


7. Exercise #2: Asterisks (1/2)
 Write a program Week5_Asterisks.c to read an
integer n and print a certain number of asterisks on a
single line. Write a function print_asterisks(int).
 If n is non-positive, then no asterisk should be printed.
 Sample runs: Think! What is
the relationship
Enter n: 3 Enter n: 6 between n and
***** *********** the number of *?
Done! Done!

Enter n: 10 Enter n: -2
******************* Done!
Done!

CS1010 (AY2012/3 Semester 1) Week5 - 33


7. Exercise #2: Asterisks (2/2)
 Write a program Week5_Asterisks.c to read an
integer n and print a certain number of asterisks on a
single line. Write a function print_asterisks(int).

Pseudo-code:
read input n ;
if n is non-positive
print “done” and end program ;
m  compute the number of asterisks given n
print_asterisks(m)
end program;

CS1010 (AY2012/3 Semester 1) Week5 - 34


8. Common Errors (1/2)
 What are the outputs for the following programs? (Do
not code and run them. Trace the programs manually.)
int i;

for (i=0; i<10; i++);


printf("%d\n", i);

Week5_CommonErrors1.c
int i = 0;

while (i<10);
{
printf("%d\n", i);
i++;
} Week5_CommonErrors2.c
 CS1010 (AY2012/3 Semester 1) Week5 - 35
8. Common Errors (2/2)
int z = 3;
while (z = 1) {
printf("z = %d\n", z);
z = 99;
}
Week5_CommonErrors3.c

 Off-by-one error; make sure the loop repeats exactly


the correct number of iterations.
 Make sure the loop body contains a statement that
will eventually cause the loop to terminate.
 Using ‘=’ where it should be ‘==’
 Putting ‘;’ where it should not be (just like for the ‘if’
statement)
 CS1010 (AY2012/3 Semester 1) Week5 - 36
9. Some Notes of Caution (1/2)
 Involving real numbers
 Trace the program manually without running it.

double one_seventh = 1.0/7.0;


double f = 0.0;

while (f != 1.0) {
printf("%f\n", f);
f += one_seventh;
}
Week5_Caution1.c

 CS1010 (AY2012/3 Semester 1) Week5 - 37


9. Some Notes of Caution (2/2)
 Involving ‘wrap-around’
 Trace the program manually without running it.

int a = 2147483646;
int i;

for (i=1; i<=5; i++) {


printf("%d\n", a);
a++;
}
Week5_Caution2.c

 CS1010 (AY2012/3 Semester 1) Week5 - 38


10. Exercise #3: Tracing
Nested Loops
 You are given Week5_NestedLoop1.c,
Week5_NestedLoop2.c and Week5_NestedLoop3.c
 Hand trace the programs and write out the outputs
without running the programs
 Verify your answers by running the programs

CS1010 (AY2012/3 Semester 1) Week5 - 39


11. Using break in Loop (1/2)
 You have seen ‘break’ in switch statement
 ‘break’ can also be used in a loop
 Test out Week5_BreakInLoop.c

CS1010 (AY2012/3 Semester 1) Week5 - 40


11. Using break in Loop (2/2)
 Use ‘break’ sparingly, because it violates the one-entry-
one-exit control flow.
 A loop with ‘break’ can be rewritten into one without ‘break’.
// without break
// with break int n, i = 1, sum = 0;
int n, i = 1, sum = 0; int isValid = 1;
while ((i <= 5) && isValid){
while (i <= 5) { scanf("%d", &n);
scanf("%d", &n); if (n < 0)
if (n < 0) isValid = 0;
break; else {
sum += n; sum += n;
i++; i++;
} }
}
CS1010 (AY2012/3 Semester 1) Week5 - 41
12. Using continue in Loop
 Test out Week5_ContinueInLoop.c
 ‘continue’ is used even less often than ‘break’

CS1010 (AY2012/3 Semester 1) Week5 - 42


13. Exercise #4: Prime
Number (1/2)
 Primality test is a classic programming problem
 Given a positive integer, determine whether it is a prime
 A prime number has two distinct factors (divisors): 1 and
itself. Examples: 2, 3, 5, 7, 11, ... (Note: 1 is not a prime!)

 Write a program Week5_PrimeTest.c. You should


include a function is_prime(int). (What does it return?)
 Sample runs:
Enter a positive integer: 131
131 is a prime.

Enter a positive integer: 713


713 is not a prime.

CS1010 (AY2012/3 Semester 1) Week5 - 43


13. Exercise #4: Prime
Number (2/2)
 This is your take-home exercise.
 This exercise is mounted on CodeCrunch.
 We will discuss this in the next lecture.

CS1010 (AY2012/3 Semester 1) Week5 - 44


Summary for Today (1/2)
 Repetition statements (loops)
 for, while, do-while
 Nested loops
 break and continue

CS1010 (AY2012/3 Semester 1) Week5 - 45


Summary for Today (2/2)
 You have learned the 3 control structures:
 Sequence, Selection, Repetition
 With these, you are able to solve just any
computing problem!
 However, writing good programs is more than
just learning the syntax:
 Logic should be clear
 Variables should be descriptive
 Algorithm should be efficient

CS1010 (AY2012/3 Semester 1) Week5 - 46


Announcements/Things-to-do
 Revise Chapter 4 (Lessons 4.7 – 4.11)
 Deadline for Lab #2
 Deadline: 15th September 2012, Saturday, 12noon
 Practical Exam 1 (PE1)
 22nd September 2012, Saturday
 See web page for details:
http://www.comp.nus.edu.sg/~cs1010/3_ca/pe.html
 To prepare for next week’s lecture:
 Read Chapter 5 Functions
 Bring along your Week5_PrimeTest.c program

CS1010 (AY2012/3 Semester 1) Week5 - 47


End of File

You might also like