WEEK 4 Class Activities Lecturer’s slides
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) 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
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:
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 > 0 void 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 > 0 void print_digits(int n) { int digit; while (n > 0) { digit = n%10; printf("%d\n", digit); n /= 10; } Week4_PrintDigits.c n initially28943 point point***34982 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=1 i=2, sum=3 i=4, sum=7 i=8, sum=15 i=16, sum=31 Final i=32 Final 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 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: 50 Sum = 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 0 i n while (i > 0) if i is a multiple of 3 sum sum + i i i - 1 return 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: -2 Done! 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 n print_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 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 = 4 a = 1, b = 7 a = 1, b = 10 a = 2, b = 5 a = 2, b = 8 a = 3, b = 6 a = 3, b = 9 a = 4, b = 7 a = 4, b = 10
Tracing Nested Loops (3/5) CS1010 (AY2015/6 Semester 1)Week4 - 17© NUS #include 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 = 10 x = 10, y = 5 x = 15, y = 15 x = 15, y = 7 x = 20, y = 20 x = 20, y = 10 x = 20, y = 5 x = 25, y = 25 x = 25, y = 12 x = 25, y = 6
Tracing Nested Loops (4/5) CS1010 (AY2015/6 Semester 1)Week4 - 18© NUS #include 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 = 4 p = 0, q = 3 p = 0, q = 2 p = 0, q = 1 p = 1, q = 1 p = 1, q = 6 p = 1, q = 11 p = 1, q = 16 p = 2, q = 4 p = 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 = 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: is a prime. Enter a positive integer: is not a prime.
Things-To-Do CS1010 (AY2015/6 Semester 1)Week 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