WEEK 4 Class Activities Lecturers slides Week 4 Repetition Statements Tracing while Loop Tracing for Loop Warmup List a Range of Integers Exercise 1 Sum of Multiples of 3 ID: 216177
Download Presentation The PPT/PDF document "http://www.comp.nus.edu.sg/~cs1010/" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
http://www.comp.nus.edu.sg/~cs1010/
WEEK 4
Class Activities
Lecturer’s slidesSlide2
Week 4: Repetition Statements
Tracing
while Loop
Tracing for LoopWarm-up: List a Range of
IntegersExercise #1: Sum of Multiples of 3
Exercise #2: Asterisks
Tracing
Nested LoopExercise #3: Prime NumberTesting and Debugging (running theme)
CS1010 (AY2014/5 Semester 1)
Week4 - 2
© NUSSlide3
Tracing while
Loop (1/4)CS1010 (AY2014/5 Semester 1)
Week4 -
3© NUS
Trace the following codes manually and write out their outputs
int
a
=
1
;
while
(a*a <
100
) {
printf
(
"%d ", a); a *= 2;}printf("\n");
(a)
int
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);
(b)
1 2 4 8
b=0,
c=9
b=1,
c=8
b=2,
c=7
b=3, c=6
b=4, c=5
outside:b
=5, c=4Slide4
Tracing while
Loop (2/4)CS1010 (AY2014/5 Semester 1)
Week4 -
4© NUS
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
2Slide5
Tracing while
Loop (3/4)CS1010 (AY2014/5 Semester 1)
Week4 -
5© NUS
Example: Given a positive integer
n
, print out its digits from least significant to most
significant.
//
Precond
: n > 0
void
print_digits
(
int
n
) { int digit; while (n > 0) { digit = n%10; printf
("
%d\n
", digit); n /= 10; }}Week4_PrintDigits.cSlide6
Tracing while
Loop (4/4)
CS1010 (AY2014/5 Semester 1)Week4 -
6© NUS
//
Precond
: n > 0
void
print_digits(
int n
) {
int
digit;
while
(n >
0) { digit = n%10; printf("%d\n", digit); n /= 10; }}Week4_PrintDigits.cn initially28943
n @ point
28943
28942892820digit @ point***34982What are the values of n and digit after exiting the loop?Slide7
Tracing for
LoopCS1010 (AY2014/5 Semester 1)
Week4 -
7© NUS
int
i, sum
=
0;
for (i=
0; i <=
10
; i+=
2
)
{
sum += i;
}printf("sum = %d\n", sum);(a)int i, sum = 0;for (i=1; sum < 20; i*=2) {
sum += i;
printf(
"i=%d, sum=%d\n", i, sum);}printf("Final i=%d\n", i); printf("Final sum=%d\n", sum); (b)sum = 30i=1, sum=1i=2, sum=3
i=4, sum=7
i=8, sum=15i=16, sum=31F
inal i=32
Final sum=31
Trace the following codes manually and write out their outputsSlide8
Warm-up: List a Range of Integers (1/3)
CS1010 (AY2014/5 Semester 1)
Week4 - 8
© NUS
Ask the user for 2 integers:
a
(the lower limit), and
b
(the upper limit), and print the list of integers from
a
to
b
.
Write a function
list_integers(int lower, int upper)
Main function given:
#
include <stdio.h>void list_integers(int, int);int main(void) { int a, b;
printf(
"Enter 2 integers a and b (a<=b): "
); scanf("%d %d", &a, &b); list_integers(a, b); return 0;}Slide9
Warm-up: List a Range of Integers (2/3)
CS1010 (AY2014/5 Semester 1)
Week4 - 9
© NUS
What should be the pre-condition of
list_integer()
?
// List integers in the range [lower, upper]
// Precond:
void
list_integers(
int
lower,
int
upper) {
...
}lower <= upper
Use a
for
loop to implement the function int num;for (num=lower; num<=upper; num++) { printf("%d ", num);}printf("\n
");Slide10
Warm-up: List a Range of Integers (3/3)
CS1010 (AY2014/5 Semester 1)
Week4 - 10
© NUS
Now, use a
while
loop to implement the function, without using any local variables
// List integers in the range [lower, upper]
// Precond:
void
list_integers(
int
lower,
int
upper) {
...
}lower <= upper
while
(lower <= upper) {
printf("%d ", lower); lower++;}printf("\n");Slide11
Exercise #1: Sum of Multiples of 3 (1/2)
CS1010 (AY2014/5 Semester 1)
Week4 - 11
© NUS
Modify the program
Unit6_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
inclusive 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 SumMultiples3.cSample run:Enter a positive integer: 50Sum = 408Slide12
Exercise #1: Sum of Multiples of 3 (2/2)
CS1010 (AY2014/5 Semester 1)
Week4 - 12
© NUS
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 a multiple of 3 sum sum + i i i - 1 return sumSlide13
Exercise #2: Asterisks (1/2)
CS1010 (AY2014/5 Semester 1)
Week4 - 13
© NUS
Write a program
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:
Enter n: 3*****Done!Enter n: 6***********Done!Enter n: 10*******************Done!Enter n: -2Done!
Think! What is the relationship between n
and the number of *?Slide14
Exercise #2: Asterisks (2/2)
CS1010 (AY2014/5 Semester 1)
Week4 - 14
© NUS
Write a program
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 nprint_asterisks(m)end program;Slide15
Tracing Nested Loops (1/5)
CS1010 (AY2014/5 Semester 1)
Week4 - 15
© NUS
Given the following 3 programs, hand trace each of them and write out the output without running the program.Slide16
Tracing Nested Loops (2/5)
CS1010 (AY2014/5 Semester 1)
Week4 - 16
© NUS
#include
<stdio.h
>
int main(
void) {
int
a, b;
a =
1
;
while
(a <=
4) { b = a + 3; while (b <= 10) { printf("a = %d, b = %d\n", a, b); b += 3;
} a++;
} return 0;}Week4_NestedLoop1.ca = 1, b = 4a = 1, b = 7a = 1, b = 10a = 2, b = 5a = 2, b = 8a = 3, b = 6a = 3, b = 9a = 4, b = 7a = 4, b = 10Slide17
Tracing Nested Loops (3/5)
CS1010 (AY2014/5 Semester 1)
Week4 - 17
© NUS
#include
<stdio.h
>
int main(
void) {
int
x, y;
for
(x=
10
; x<
30
; x+=5) for (y=x; y>4; y/=2) printf("x = %d, y = %d\n", x, y); return 0;}
Week4_NestedLoop2.c
x = 10,
y = 10x = 10, y = 5x = 15, y = 15x = 15, y = 7x = 20, y = 20x = 20, y = 10x = 20, y = 5x = 25, y = 25x = 25, y = 12x = 25, y = 6Slide18
Tracing Nested Loops (4/5)
CS1010 (AY2014/5 Semester 1)
Week4 - 18
© NUS
#include
<stdio.h
>
int main(
void
) {
int
p,
q
;
for
(p=0; p<10; p++) { if (p%2 == 0) { for (q=4; q>0; q--) printf("p = %d, q = %d\n"
, p, q); }
else { for (q=p; q<20; q+=5) printf("p = %d, q = %d\n", p, q); } } return 0;}Week4_NestedLoop3.cSlide19
Tracing Nested Loops (5/5)
CS1010 (AY2014/5 Semester 1)
Week4 - 19
© NUS
for (p=
0
;
p<6; p++) {
if (p%
2
==
0
) {
for
(q=
4; q>0; q--) printf("p = %d, q = %d\n", p, q); } else { for (q=p; q<20; q+=5)
printf
(
"p = %d, q = %d\n", p, q); }}Week4_NestedLoop3.cp = 0, q = 4p = 0, q = 3p = 0, q = 2p = 0, q = 1p = 1, q = 1p = 1, q = 6p = 1, q = 11p = 1,
q = 16
p = 2, q = 4p = 2,
q = 3
p =
2,
q = 2
p =
2,
q = 1
p =
3,
q =
3
p =
3,
q =
8
p =
3,
q =
13
p =
3,
q =
18
p = 4, q = 4
p =
4,
q =
3
p =
4,
q =
2
p =
4,
q =
1
p = 5
,
q =
5
p = 5
,
q =
10
p = 5
,
q =
15Slide20
Exercise #3: Prime Number
CS1010 (AY2014/5 Semester 1)
Week4 - 20
© NUS
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
PrimeTest.c. You should include a function is_prime(int)
. (What value should the function return?)This exercise is mounted on CodeCrunch.
Sample runs:
Enter a positive integer:
131
131 is a prime.
Enter a positive integer:
713
713 is not a prime.Slide21
Things-To-Do
CS1010 (AY2014/5 Semester 1)
Week4 - 21
Revise
Chapter 4 Lessons 4.1 – 4.6, Beginning Decision Making
Deadline for Lab #1
Deadline: 6 September 2014, Saturday, 9am
Lab #2 releasedDeadline: 13 September 2014, Saturday, 9am
Preparation for next week
Chapter 6: Numeric Arrays
Continue to do
practice exercises on
CodeCrunch
© NUSSlide22
End of File
CS1010 (AY2014/5 Semester 1)
Week4 - 22
© NUS