$30
Project [3]: Loops
Project Goals
The goals of this project are to:
1. Get students familiar with computing iteration using while and for loops
2. Show students how simple it can be to implement complicated-looking programs
Important Notes:
1. Formatting: Make sure that you follow the precise recommendations for the output content and
formatting: for example, do not change to text in the first problem from “Enter a number: ” to “Enter
number: ”. Your assignment will be auto-graded and any changes in formatting will result in a loss in the
grade.
2. Comments: Header comments are required on all files and recommended for the rest of the program.
Points will be deducted if no header comments are included.
3. Restriction: The use of goto statements anywhere within this program is prohibited. Points will be
deducted if goto is used.
Problem 1
Write a program to guess the square root of a number. It is possible to calculate the square root of a number (for
example 2) by starting with an initial guess and iteratively improving the guess with a simple mathematical
operation until the guess is “good enough.” In the case of the square root, the pseudocode to find the square root of a
number, n, is:
new_guess <- (old_guess + (n / old_guess)) / 2.0
For example, if we want to find the square root of two using this rule, we start with an initial guess of 1.0 and
repeatedly use the rule in a loop to produce the sequence:
1.0, 1.5, 1.41667, 1.41422
The last number in the sequence is very close to the square root of 2. The procedure stops when the square of the
guess is close enough to the number entered. How close is close enough? It depends on the application, but for our
purposes, if the absolute value of the difference between the input and the squared guess is smaller than 1e-5 then
we should consider the guess “good enough.” You should use double data type for all variables used in your
program.
Write a program that asks the user to enter a positive number. Using the procedure described in the previous
paragraph, your program should use a loop to compute the square root of the given number. Your program should
use a while loop to achieve this. The loops should stop when the absolute value of the difference between the
square of the guess and the input number is smaller than 1e-5, as described in the pseudocode below:
Loop ends when: |(guess)2 - n| < 1e-5
Your program should print the value of the guess at each iteration. When you print the guess, you should have a
minimum of 10 spaces in what you print, and you should print five numbers after the decimal point. For the final
answer, you should print five numbers after the decimal point.
The program should function as follows (items underlined are to be entered by the user):
Enter a number: 361
1.00000
181.00000
91.49724
47.72136
27.64305
20.35120
19.04486
19.00005
Estimated square root of 361.00000: 19.00000
Notes:
• For this program, in order to compute absolute values you must use the fabs()function from the math
library. To do this:
• Add #include <math.h in your sq_root.c file
• Add -lm to the compilation command: gcc -o sq_root sq_root.c -lm
• To read and print doubles with scanf and printf, you will need to use %lf
Save your program as sq_root.c
Challenge for problem 1 (10 extra credit points):
We had to use double-precision floating point numbers for this problem because if you use single-precision float
point numbers then the procedure described above may sometimes fail to find a solution. The way that it fails is that
the program gets “stuck” repeating the same guess over and over. For the challenge problem, change all your
double variables into float variables, and add an int variable that counts the number of times you have gone
through the body of your while loop, starting at zero. Your program should print both the iteration counter and the
guess at each step. Your program should be able to detect the “stuck” case and terminate properly.
The program should function as follows (items underlined are to be entered by the user):
Enter a number: 100
0 1.00000
1 50.50000
2 26.24010
3 15.02553
4 10.84044
5 10.03258
6 10.00005
Estimated square root of 100.00000: 10.00000
The iteration counter column and the guess column should be separated by a tab. When you print the guess, you
should have a minimum of 10 spaces in what you print, and you should print five numbers after the decimal point.
For the final answer, you should print five numbers after the decimal point.
Save your challenge separately as sq_root_c.c
Problem 2
Write a program that asks the user to enter an integer number, n, and computes the following mathematical series:
S = 12 – 22 + 32 – 42 +…+ (-1) n+1 * n2
Your program should use a for loop to compute this series.
The program should function as follows (items underlined are to be entered by the user):
Enter an integer number: 5
The value of the series is: 15
Save your program as series.c
Grading Rubric
Grading will be done for each problem as follows:
Correctly-named file 5%
Header comment 2%
Program compiles 5%
Correctly-reading data from terminal 18%
Correct result printed 20%
Submission details
To submit your project, you will have to use the submission script. You do this by either:
1. Working on an ECC machine
2. Working on the provided VMware
3. Secure Copying your files (See Mac Support for information)
To Submit your project:
• Have a directory called “project3”
• Save your *.c files in that directory
• To submit: (don’t type the ‘’ symbols)
cd project3
submit
The submission script copies all files in the current directory to our directory. You may submit as many times as you
like before the deadline, we only keep the last submission.