CSC161 2010F Imperative Problem Solving
[Skip to Body]
Primary:
[Front Door]
[Schedule]
-
[Academic Honesty]
[Instructions]
Current:
[Outline]
[EBoard]
-
[Assignment]
[Lab]
Groupings:
[EBoards]
[Assignments]
[Examples]
[Exams]
[Handouts]
[Labs]
[Outlines]
[Readings]
Related Courses:
[CSC195 2003S (Rebelsky)]
[CSC161 2009F (Coahran)]
[CSC161 2010S (Walker)]
Misc:
[SamR]
[ISO]
[GNU Coding Standards]
Summary: In this laboratory, you will begin working with simple conditional statements in C.
Contents
a. Create a directory for this lab. I'd suggest
CSC161/Labs/Conditionals
.
b. In that directory, create our standard Makefile.
a. Write a program, sign
, that prompts the user for a
number, determines the sign of the number, and then prints out a
message about the sign of the number. For example
Please enter a number: 23 23.0 appears to be positive.
Please enter a number -123.2 -123.2 appears to be negative.
Recall that you can use scanf
to read in a number.
b. Experimentally determine whether there are any inputs that you would consider non-zero that your program considers zero.
Write a program that takes an integer as input (either on the command line or read after a prompt) and prints out whether or not the two's bit is set.
Pick five friends with nicknames (real or invented) and write a program that takes a nickname on the command line and prints out the corresponding full name.
% nickname SamR SamR is a nickname for Samuel A. Rebelsky % nickname Herbie Herbie is a nickname for Herbert Q. Namsak % nickname RayK RayK does not appear to be a nickname for anyone I know.
Consider the following program.
#include <stdio.h> #include <stdlib.h> #include <math.h> /** * Fun with approximation. */ int main() { double d = 2.0; double root = sqrt(d); double squared = root * root; printf ("The square root of %lf is %lf\n", d, root); printf ("%lf squared is %lf\n", root, squared); if (d == squared) printf ("Yay! The square of the square root of %lf is %lf.\n", d, d); else printf ("Boo! The square of the square root of %lf differs from %lf.\n", d, d); return EXIT_SUCCESS; } // main
The first two lines of output read
The square root of 2.000000 is 1.414214 1.414214 squared is 2.000000
a. What do you expect the third line of output to be?
b. Check your answer experimentally.
c. Explain the answer you got.
d. How do you expect the output to change if you change the line that
reads d=2
to read d=4
?
e. Check your answer experimentally.
f. Explain the answer you got.
As you discovered in your explorations with numbers, values of
type double
approximate real numbers. One problem with
approximation is that a sequence of operations can lead to less and less
good approximations. For example, you just discovered that if you
square the square root of two, you do not get something exactly equal
to two.
In response to this problem, many programmers write code that determines whether two values are approximately equal.
Write a program that reads in two real numbers and determines whether they are approximately equal. You may choose the metric for approximate equality, but it should be a sensible metric.
Be prepared to share your answer with the class.
Write a program that reads in three numbers and prints them out in order from smallest to largest. For example,
Enter a number: 42 Enter a number: 23 Enter a number: 32 In numerical order: 23 32 42
You might also take the three numbers on the command line.
Monday, 20 September 2010 [Samuel A. Rebelsky]
http://www.cs.grinnell.edu/~rebelsky/Espresso/Labs/conditionals.html
.
Tuesday, 21 September 2010 [Samuel A. Rebelsky]
[Skip to Body]
Primary:
[Front Door]
[Schedule]
-
[Academic Honesty]
[Instructions]
Current:
[Outline]
[EBoard]
-
[Assignment]
[Lab]
Groupings:
[EBoards]
[Assignments]
[Examples]
[Exams]
[Handouts]
[Labs]
[Outlines]
[Readings]
Related Courses:
[CSC195 2003S (Rebelsky)]
[CSC161 2009F (Coahran)]
[CSC161 2010S (Walker)]
Misc:
[SamR]
[ISO]
[GNU Coding Standards]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Sun Sep 26 22:06:23 2010.
The source to the document was last modified on Sun Sep 26 22:06:21 2010.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CSC161/2010F/Labs/conditionals-lab.html
.