http://cs1010/ week 4 class activities lecturer’s slides
TRANSCRIPT
http://www.comp.nus.edu.sg/~cs1010/
WEEK 4
Class Activities
Lect
urer
’s sl
ides
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)
CS1010 (AY2015/6 Semester 1) Week4 - 2© NUS
Tracing while Loop (1/4)
CS1010 (AY2015/6 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=9b=1, c=8b=2, c=7b=3, c=6b=4, c=5outside:b=5, c=4
Tracing while Loop (2/4)
CS1010 (AY2015/6 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: 2894334982
Tracing while Loop (3/4)
CS1010 (AY2015/6 Semester 1) Week4 - 5© NUS
Example: Given a positive integer n, print out its digits from least significant to most significant.
// Precond: n > 0void print_digits(int n) {
int digit;
while (n > 0) {digit = n%10;printf("%d\n",
digit);n /= 10;
}}
Week4_PrintDigits.c
Tracing while Loop (4/4)
CS1010 (AY2015/6 Semester 1) Week4 - 6© NUS
// Precond: n > 0void print_digits(int n) {
int digit;
while (n > 0) {digit = n%10;printf("%d\n",
digit);n /= 10;
}}
Week4_PrintDigits.c
n initially 28943
n @ point 28943 2894 289 28 2 0
digit @ point *** 3 4 9 8 2
What are the values of n and digit after exiting the loop?
Tracing for Loop
CS1010 (AY2015/6 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 = 30
i=1, sum=1i=2, sum=3i=4, sum=7i=8, sum=15i=16, sum=31Final i=32Final sum=31
Trace the following codes manually and write out their outputs
Warm-up: List a Range of Integers (1/3)
CS1010 (AY2015/6 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;}
Warm-up: List a Range of Integers (2/3)
CS1010 (AY2015/6 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");
Warm-up: List a Range of Integers (3/3)
CS1010 (AY2015/6 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");
Exercise #1: Sum of Multiples of 3 (1/2)
CS1010 (AY2015/6 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.c
Sample run:
Enter a positive integer: 50Sum = 408
Exercise #1: Sum of Multiples of 3 (2/2)
CS1010 (AY2015/6 Semester 1) Week4 - 12© NUS
How about using a while loop instead? Pseudo-code using a while loop:
precondition: n > 0 sum 0i n while (i > 0)
if i is a multiple of 3sum sum + i
i i - 1return sum
Exercise #2: Asterisks (1/2)
CS1010 (AY2015/6 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 *?
Exercise #2: Asterisks (2/2)
CS1010 (AY2015/6 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;
Tracing Nested Loops (1/5)
CS1010 (AY2015/6 Semester 1) Week4 - 15© NUS
Given the following 3 programs, hand trace each of them and write out the output without running the program.
Tracing Nested Loops (2/5)
CS1010 (AY2015/6 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.c
a = 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 = 10
Tracing Nested Loops (3/5)
CS1010 (AY2015/6 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 = 6
Tracing Nested Loops (4/5)
CS1010 (AY2015/6 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.c
Tracing Nested Loops (5/5)
CS1010 (AY2015/6 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.c
p = 0, q = 4p = 0, q = 3p = 0, q = 2p = 0, q = 1p = 1, q = 1p = 1, q = 6p = 1, q = 11p = 1, q = 16p = 2, q = 4p = 2, q = 3p = 2, q = 2p = 2, q = 1p = 3, q = 3p = 3, q = 8p = 3, q = 13p = 3, q = 18
p = 4, q = 4p = 4, q = 3p = 4, q = 2p = 4, q = 1p = 5, q = 5p = 5, q = 10p = 5, q = 15
Exercise #3: Prime Number
CS1010 (AY2015/6 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: 131131 is a prime.
Enter a positive integer: 713713 is not a prime.
Things-To-Do
CS1010 (AY2015/6 Semester 1) Week4 - 21
Revise Chapter 4 Lessons 4.1 – 4.6, Beginning Decision
Making
Deadline for Lab #1 Deadline: 5 September 2015, Saturday, 9am
Lab #2 released Deadline: 12 September 2015, Saturday, 9am
Preparation for next week Chapter 6: Numeric Arrays
Continue to do practice exercises on CodeCrunch
© NUS
End of File
CS1010 (AY2015/6 Semester 1) Week4 - 22© NUS