Week 4 Class activities

advertisement
Lecturer’s slides
http://www.comp.nus.edu.sg/~cs1010/
WEEK 4
Class Activities
© NUS
CS1010 (AY2014/5 Semester 1)
Week 4: Repetition Statements
 Tracing while Loop
 Tracing for Loop
 Warm-up: List a Range of Integers
 Exercise #1: Sum of Multiples of 3
 Exercise #2: Asterisks
 Tracing Nested Loop
 Exercise #3: Prime Number
 Testing and Debugging (running theme)
Week4 - 2
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 3
Tracing while Loop (1/4)
 Trace the following codes manually and write out their
outputs
(a)
(b)
int a = 1;
while (a*a < 100) {
printf("%d ", a);
a *= 2;
}
printf("\n");
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=4
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);
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 4
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
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 5
Tracing while Loop (3/4)
 Example: Given a positive integer n, print out
its digits from least significant to most
significant.
Week4_PrintDigits.c
// Precond: n > 0
void print_digits(int n)
int digit;
{
while (n > 0) {
digit = n%10;
printf("%d\n", digit);
n /= 10;
}
}
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 6
Tracing while Loop (4/4)
Week4_PrintDigits.c
// Precond: n > 0
void print_digits(int n)
int digit;
{
What are the values
of n and digit after
exiting the loop?
while (n > 0) {
digit = n%10;
printf("%d\n", digit);
n /= 10;
}
}
n initially
28943
n @ point
28943 2894
digit @ point
***
3
289
28
2
0
4
9
8
2
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 7
Tracing for Loop
 Trace the following codes manually and write out their
outputs
(a)
(b)
int i, sum = 0;
for (i=0; i <= 10; i+=2) {
sum += i;
}
printf("sum = %d\n", sum);
sum = 30
i=1, sum=1
i=2, sum=3
i=4, sum=7
i=8, sum=15
i=16, sum=31
int i, sum = 0;
Final i=32
for (i=1; sum < 20; i*=2) {
Final sum=31
sum += i;
printf("i=%d, sum=%d\n", i, sum);
}
printf("Final i=%d\n", i);
printf("Final sum=%d\n", sum);
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 8
Warm-up: List a Range of Integers (1/3)
 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;
}
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 9
Warm-up: List a Range of Integers (2/3)
 What should be the pre-condition of list_integer()?
// List integers in the range [lower, upper]
// Precond: lower <= upper
void list_integers(int lower, int upper) {
int num;
...
for (num=lower; num<=upper; num++) {
printf("%d ", num);
}
printf("\n");
}
 Use a for loop to implement the function
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 10
Warm-up: List a Range of Integers (3/3)
 Now, use a while loop to implement the function, without
using any local variables
// List integers in the range [lower, upper]
// Precond: lower <= upper
void list_integers(int lower, int upper) {
while (lower <= upper) {
... printf("%d ", lower);
lower++;
}
printf("\n");
}
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 11
Exercise #1: Sum of Multiples of 3 (1/2)
 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.c
 Sample run:
Enter a positive integer: 50
Sum = 408
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 12
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 a multiple of 3
sum  sum + i
i  i - 1
return sum
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 13
Exercise #2: Asterisks (1/2)
 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:
Think! What is
Enter n: 3
*****
Done!
Enter n: 6
***********
Done!
Enter n: 10
*******************
Done!
the relationship
between n and
the number of *?
Enter n: -2
Done!
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 14
Exercise #2: Asterisks (2/2)
 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 n
print_asterisks(m)
end program;
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 15
Tracing Nested Loops (1/5)

Given the following 3 programs, hand trace each
of them and write out the output without running
the program.
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 16
Tracing Nested Loops (2/5)
#include <stdio.h>
int main(void) {
int a, b;
Week4_NestedLoop1.c
a = 1;
while (a <= 4) {
b = a + 3;
while (b <= 10) {
printf("a = %d, b = %d\n",
a, b);
b += 3;
}
a++;
}
return 0;
}
a
a
a
a
a
a
a
a
a
=
=
=
=
=
=
=
=
=
1,
1,
1,
2,
2,
3,
3,
4,
4,
b
b
b
b
b
b
b
b
b
=
=
=
=
=
=
=
=
=
4
7
10
5
8
6
9
7
10
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 17
Tracing Nested Loops (3/5)
#include <stdio.h>
int main(void) {
int x, y;
Week4_NestedLoop2.c
for (x=10; x<30; x+=5)
for (y=x; y>4; y/=2)
printf("x = %d, y = %d\n", x, y);
return 0;
}
x
x
x
x
x
x
x
x
x
x
=
=
=
=
=
=
=
=
=
=
10,
10,
15,
15,
20,
20,
20,
25,
25,
25,
y
y
y
y
y
y
y
y
y
y
=
=
=
=
=
=
=
=
=
=
10
5
15
7
20
10
5
25
12
6
© NUS
CS1010 (AY2014/5 Semester 1)
Tracing Nested Loops (4/5)
#include <stdio.h>
int main(void) {
int p, q;
Week4_NestedLoop3.c
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 - 18
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 19
Tracing Nested Loops (5/5)
Week4_NestedLoop3.c
for (p=0; p<6; p++) {
if (p%2 == 0) {
p
for (q=4; q>0; q--)
p
printf("p = %d, q = %d\n", p, q);
}
p
else {
p
for (q=p; q<20; q+=5)
p
printf("p = %d, q = %d\n", p, q);
p
}
}
p
p
p
p
p
p
p
p
=
=
=
=
=
=
=
4,
4,
4,
4,
5,
5,
5,
q
q
q
q
q
q
q
=
=
=
=
=
=
=
4
3
2
1
5
10
15
p
p
p
p
p
p
p
p
p
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0,
0,
0,
0,
1,
1,
1,
1,
2,
2,
2,
2,
3,
3,
3,
3,
q
q
q
q
q
q
q
q
q
q
q
q
q
q
q
q
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
4
3
2
1
1
6
11
16
4
3
2
1
3
8
13
18
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 20
Exercise #3: Prime Number

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.
© NUS
CS1010 (AY2014/5 Semester 1)
Week4 - 21
Things-To-Do

Revise


Deadline for Lab #1


Deadline: 13 September 2014, Saturday, 9am
Preparation for next week


Deadline: 6 September 2014, Saturday, 9am
Lab #2 released


Chapter 4 Lessons 4.1 – 4.6, Beginning Decision
Making
Chapter 6: Numeric Arrays
Continue to do practice exercises on
CodeCrunch
© NUS
CS1010 (AY2014/5 Semester 1)
End of File
Week4 - 22
Download