Project [3]: Loops
Project Goals
The goals of this project are to:
- Get students familiar with computing iteration using while and for loops
- 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.
- 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.
- 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 doubledata 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 cfile
- 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
- 00000
- 50000
- 24010
- 02553
- 84044
- 03258
- 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
Reviews
There are no reviews yet.