22
http://www.comp.nus.edu.sg/~cs 1010/ WEEK 4 Class Activities Lecturer’s slide

Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

Embed Size (px)

Citation preview

Page 1: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

http://www.comp.nus.edu.sg/~cs1010/

WEEK 4

Class Activities

Lect

urer

’s sl

ides

Page 2: Http://cs1010/ 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

Page 3: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 4: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 5: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 6: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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?

Page 7: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 8: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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;}

Page 9: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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");

Page 10: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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");

Page 11: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 12: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 13: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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 *?

Page 14: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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;

Page 15: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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.

Page 16: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 17: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 18: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 19: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 20: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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.

Page 21: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

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

Page 22: Http://cs1010/ WEEK 4 Class Activities Lecturer’s slides

End of File

CS1010 (AY2015/6 Semester 1) Week4 - 22© NUS