CSC 161 Grinnell College Spring, 2009 Imperative Problem Solving and Data Structures

# Laboratory Exercise on Loops in C

## Goals

This laboratory exercise provides practice with basic elements of the C programming language. Specifically, the lab emphasizes conditional (if) and looping (for, while) constructs.

## Steps for this Lab

1. Use loops to print each of the following patterns:

```   6   5   4   3   2   1   0  -1  -2  -3

6   8  10  12  14  16  18

Hello!  Hello!  Hello!  Hello!  Hello!

Hello!  Hello!!  Hello!!!  Hello!!!!  Hello!!!!!

*
**
***
****
*****
******
*******
********
*********

*
**
***
****
*****
******
*******
********
*********
```
2. Write a program that prints a table in which each row contains a number N together with its square, square root, cube, and cube root. The table should include 1 ≤ N ≤ 50. Label each of the columns in the table appropriately.

3. Experiment with each of the following code segments in a program, and explain why the code probably does not do what the programming intended. (In each case, assume j and sum have type int.)

```   for (j = 1; j <= 10; j++);
printf ("%4d", j);

sum = 0;
for (j = 1; j <= 10; j++) {
sum = sum + j;
j = j + 1;
}
```
4. An integer is prime if it is greater than 1 and if it is divisible only by 1 and by itself. Thus 7 and 23 are prime, while 22 and 30 are not (both 22 and 30 are divisible by 2).

1. Write a program that reads a number N and determines whether or not N is prime.

2. (Optional) Write a program that will find the first 100 prime numbers.

5. In program darts.c in today's reading, C's random function was used to help simulate the throwing of a dart. A similar approach can be used for many simulations. (For example, to simulate tossing a fair coin, one could generate a random number between 0 and 1 and then test if the number were less than 1/2. If so, consider a "head" is tossed; if not, consider the result a "tail".)

Consider the following situation: A couple decides that they want to raise at least one boy and one girl. They decide to keep having children until they have one child of each gender, and then stop having children. Assume that having a boy or a girl is equally likely, and assume that the gender of one child has no influence on the gender of the next.

Write a program that simulates the family size for 20 couples and prints the results in a table:

```   Couple    Boys     Girls    Total
1
2
3
...
20
```
6. Suppose you charge \$497.60 on a credit card. The company will require you to make a minimum payment each month, say \$15.00. They will also charge interest at the end of each month, say at a monthly rate of 1.5% of the outstanding balance. The balance for the next month is computed by the formula:

```   new balance = old balance + interest - payment
```
This problem asks you to investigate the "cost" of making only the minimum monthly payment.

Write a program that reads the amount borrowed, the monthly interest rate, and the constant monthly payment. Have the program print a labeled table showing the month number and the balance at the beginning of that month (the balance at the beginning of month 1 is the amount borrowed). Continue printing until a payment would cause the balance to drop below zero. Also print the final payment necessary to close the loan, the total amount made in payments, and the "cost" of the loan (total payments - loan).

7. Computing the Greatest Common Divisor (Euclidean Algorithm):
[The following is an edited and abridged version of Section 4.1 from Problems for Computer Solutions Using FORTRAN by Henry M. Walker, Winthrop Publishers, 1980 and is used with permission of the copyright holder.]

Let N and M be two positive integers. The greatest common divisor of N and M, denoted gcd (M, N), is defined to be the positive integer D such that

1. D divides N and M, and
2. D is the largest integer dividing both N and M; i.e., every integer E that divides both N and M also divides D.

For example, 2 = gcd (6, 8); 4 = gcd (4, 12); 1 = gcd (8, 9); 6 = gcd (66, 24).

Algorithm: The algorithm proceeds by long division -- keeping track of subsequent remainders:

• Step 1: Determine the remainder R1, when N is divided by M.
• Step 2: Determine the remainder R2, when M is divided by R1.
• Step 3: Determine the remainder R3, when R1 is divided by R2.
• Step i: Determine the remainder Ri, when Ri-2 is divided by Ri-1.
• Step i+1: Determine the remainder Ri+1, when Ri-1 is divided by Ri.

This process continues until we find a remainder Ri+1 which is 0. Then Ri = gcd (M, N).

Example:

1. Divide 66 by 24: remainder is 18.
2. Divide 24 by 18: remainder is 6
3. Divide 18 by 6: remainder is 0, so we can stop.

Thus, 6 = gcd (66, 24).

Write a C program that reads two positive integers from the keyboard and computes and prints their greatest common divisor -- using the Euclidean Algorithm.

## Work to be Turned in

• Code for each part
• Sample output for each part
• For parts 4-7, brief comments (handwritten ok) regarding why the output allows you to conclude the programs work correctly. (E.g., what circumstances should the program cover, and how does your testing cover all of those circumstances.)

This document is available on the World Wide Web as

```     http://www.walker.cs.grinnell.edu/courses/161.sp09/lab-loops-c.html
```

 created 31 August 1998 last revised 3 February 2009  For more information, please contact Henry M. Walker at walker@cs.grinnell.edu.