600 likes | 903 Views
Chapter 3 Expressions and Interactivity. The cin objectMathematical ExpressionsAutomatic conversion and promotionOverflow and underflowThe typecast operatorThe power of constants. Multiple assignmentsCombined assignment operatorsFormatting output with stream manipulatorsFormatted inputMore mathematical library functions.
E N D
1. CS102Introduction to Computer Programming Week 3
Chapter 3
Expressions and Interactivity
2. Chapter 3 Expressions and Interactivity The cin object
Mathematical Expressions
Automatic conversion and promotion
Overflow and underflow
The typecast operator
The power of constants
3. The cin Object cin is the standard input object
Causes the program to wait until information is typed at the keyboard and the enter key is pressed
Automatically converts the data read to the type of the variable used to store it
Truncates floating point numbers that are to be stored in integer variables
Notice the >> and << operators appear to point in the direction information is flowing.
4. Program 3-1 #include <iostream.h>
void main(void)?
{
int Length, Width, Area;
cout <<"This program calculates the";
cout <<" area of a rectangle.\n";
cout <<"What is the length of the ";
cout <<" rectangle? ";
cin >>Length;
cout <<"What is the width of the";
cout <<" rectangle? ";
cin>>Width;
Area = Length * Width;
cout <<"The area of the rectangle is "
cout << Area << ".\n";
}
5. Program 3-2 /* This program reads the length and width of a rectangle. It calculates the rectangle's area and displays the value on the screen. */
#include <iostream.h>
void main(void)?
{
int Length, Width, Area;
cin >> Length;
cin >> Width;
Area = Length * Width;
cout << "The area of the rectangle is " << Area << endl;
}
6. The cin Object Multiple values are separated by spaces
The Variables are assigned values in the order they are entered.
cin can read character strings into a properly defined variable
If the input string is too large, adjacent memory can be corrupted
Don't forget to leave room for the null character
The string can not contain spaces
7. Program 3-3 #include <iostream.h>
void main(void)?
{
int Length, Width, Area;
cout <<"This program calculates";
cout <<" the area of a rectangle.\n";
cout <<"Enter the length and width";
cout <<" of the rectangle separated";
cout <<" by a space. \n";
cin >> Length >> Width;
Area = Length * Width;
cout <<"The area of the rectangle is ";
cout << Area << endl;
}
8. Program 3-4 or 3-3 version 4 /* This program demonstrates how cin can read multiple values of different data types. */
#include <iostream.h>
void main(void)?
{
int Whole;
float Fractional;
char Letter;
cout << "Enter an integer, a float, ";
cout << "and a character: ";
cin >> Whole >> Fractional >> Letter;
cout << "Whole: " << Whole << endl;
cout << "Fractional: " << Fractional << endl;
cout << "Letter: " << Letter << endl;
}
9. Program 3-5 or 3-4 version 4 // This program demonstrates how cin can read a string into a character array. */
#include <iostream.h>
void main(void)?
{
char Name[21];
cout << "What is your name? ";
cin >> Name;
cout << "Good morning ";
cout << Name << endl;
}
10. Program 3-6 or 3-5 version 4 // This program reads two strings
// into two character arrays.
#include <iostream.h>
void main(void)?
{
char First[16], Last[16];
cout << "Enter your first and last";
cout << " names and I will\n";
cout << "reverse them.\n";
cin >> First >> Last;
cout << Last << ", " << First;
cout <<endl;
}
11. Notes on strings: If a character array is intended to hold strings, it must be at least one character larger than the largest string that will be stored in it.
The cin object will let the user enter a string larger than the array can hold. If this happens, the string will overflow the array’s boundaries and destroy other information in memory.
If you wish the user to enter a string that has spaces in it, you cannot use this input method.
12. 3.1 What header file must be included in programs using cin?
3.2 What type of variable is used to hold a C-string?
3.3 Write a declaration statement for a character array named customer. It should be large enough to hold 52 characters in length.
3.4 T or F: cin requires the user to press the [Enter] key when finished entering data
3.5 Assume value is an integer variable. If the user enters 3.14 in response to the following programming statement, What will be stored in value
cin >> value;
3.14
3
0
Nothing, an error message is displayed Check point 3.1
13. Mathematical Expressions A mathematical expression is a programming statement that has a value
Consists of operators and their operands
operands can be constants or variables
Can be used by the cout object to display the value of the expression.
cout << (Operand1 operator Operand2);
14. Program 3-7 or 3-6 version 4 /* This program asks the user top enter the numerator and denominator of a fraction and it displays the decimal value*/
void main(void)?
{
float Numerator, Denominator;
cout << "This program shows the ";
cout << "decimal value of a fraction.\n";
cout << "Enter the numerator: ";
cin >> Numerator;
cout << "Enter the denominator: ";
cin >> Denominator;
cout << "The decimal value is ";
cout << (Numerator / Denominator);
}
15. Precedence If two operators share an operand the one with the highest precedence works first
highest - (Unary negation)?
* / %
Lowest + -
Example 6 * 7 - 3 = 39 (not 24)?
Example 3 + 12 / 3 = 7 (not 5 )?
16. Associativity Associativity is either left to right or right to left
If two operators sharing an operand have the same precedence, they work according to their Associativity.
Right to left - (Unary negation)?
left to right * / %
left to right + -
17. Grouping With Parentheses Parentheses are used to force some operations to be performed before others
examples:
(5+2)*4 = 28
10 / (5-3) = 5
(4 + 17 ) % 2 -1 = 0
18. No Exponents Please Include the following file in your program to deal with exponents:
#include <cmath> (or math.h, old way)?
Use the pow function to raise a value (x) to the power (y) (x and y may be int or float)?
example: the area of a circle is ?(radius2)?
Area = 3.14 * pow(radius,2);
The pow function returns a double
19. Program 3-8 or 3-7 version 4 /*This program calculates the area of a circle. The formula for the radius of a circle is Pi times the radius squared Pi is 3.14159 */
#include <iostream.h>
#include <math.h>
void main(void)?
{
double Area, Radius;
cout << "This program calculates the ";
cout << " area of a circle.\n";
cout << "What is the radius of ";
cout << "the circle? ";
cin >> Radius;
Area = 3.14159 * pow(Radius,2);
cout << "The area is " << Area;
}
20. 3.10 Complete the table below by writing the value of each expression in the "Value" column.
Expression Value
6 + 3 * 5
12 / 2 – 4
9 + 14 * 2 – 6
5 + 19 % 3 – 1
(6 + 2 ) * 3 Check Point 3.2
21. 3.3 When you Mix Apples and Oranges: Type Coercion Rules Rule 1 - Chars,shorts, and unsigned shorts are automatically promoted to int.
Rule 2 - If two values are of different types the lower-ranking one is promoted to the type of the higher-ranking on
Rule 3 - when the value of an expression is assigned to a variable it will be converted to the data type of the variable
22. 3.4 Overflow and Underflow When a variable is assigned a value that is too large or too small in range for that variable’s data type, the variable overflows or underflows.
Overflow - when a variable is assigned a number that is too large for its data type
Underflow - when a variable is assigned a number that is too small for its data type
23. Overflow and Underflow If an integer variable overflows or underflows the value wraps back around
no warning or error message is generated
If a floating point variable overflows or underflows the result depends on the compiler.
24. Program 3-9 or 3-8 version 4 //This program demonstrates integer overflow and underflow
#include <iostream.h>
void main(void)?
{
short TestVar = 32767;
cout << TestVar << endl;
TestVar = TestVar + 1;
cout << TestVar << endl;
TestVar = TestVar - 1;
cout << TestVar << endl;
}
25. Program 3-10 or 3-9 version 4 //This program can be used to see
// how your system handles floating
// point overflow and underflow.
#include <iostream.h>
void main(void)?
{
float Test;
Test = 2.0e38 * 1000;
// Should overflow Test
cout << Test << endl;
Test = 2.0e-38 / 2.0e38;
// Should underflow Test
cout << Test << endl;
}
26. 3.5 The Typecast Operator The typecast operator manually promotes or demotes a value
works on either an expression or a variable
the conversion is temporary
truncation may occur
Example:
Val = int(number);
Val = float(digit1) / digit2; //prevents integer divide
Val = float (digit1/digit2); //allows integer divide
Val = (int) number; // is also correct
27. Program 3-11 or 3-10 version 4 #include <iostream.h>
void main(void)?
{
int Months, Books;
float PerMonth;
cout << "How many books do you ";
cout << "plan to read? ";
cin >> Books;
cout << "How many months will ";
cout << "it take you to read them? ";
cin >> Months;
PerMonth = float(Books) / Months;
cout << "That is " << PerMonth
cout << " books per month.\n";
28. Typecast Warnings In Program 3-11, the following statement would still have resulted in integer division:
PerMonth = float(Books / Months);
Because the division is performed first and then the result is type cast to a float.
Type casting has no effect on the values it operates on. A temporary variable is created for the duration of the instruction.
29. Program 3-12 or 3-11 version 4 /* This program uses a typecast operator to print a character from a number.*/
#include <iostream.h>
void main(void)?
{
int Number = 65;
cout << Number << endl;
cout << char(Number) << endl;
}
30. The Power of Constants Makes the program more readable
Simplifies maintenance
Example:
const float PI = 3.14159;
or
#define PI 3.14159
Using a named constant will not make the program run more efficiently
31. Program 3-13 or 3-12 version 4 #include <iostream.h>
#include <math.h>
void main(void)?
{
const float Pi = 3.14159;
double Area, Radius;
cout << "This program calculates"; cout << " the area of a circle.\n";
cout << "What is the radius of ";
cout << " the circle? ";
cin >> Radius;
Area = Pi * pow(Radius,2);
cout << "The area is " << Area;
}
32. The #define Directive The older C-style method of creating named constants is with the #define directive, although it is preferable to use the const modifier.
#define PI 3.14159
is roughly the same as
const float PI=3.14159;
33. Program 3-14 or 3-13 version 4 #include <iostream.h>
#include <math.h>
// needed for pow function
#define PI 3.14159
void main(void)?
{
double Area, Radius;
cout << "This program calculates";
cout << " the area of a circle.\n";
cout << "What is the radius of the";
cout << " circle? ";
cin >> Radius;
Area = PI * pow(Radius, 2);
cout << "The area is " << Area;
}
34. Multiple Assignments Groups like-variables in one statement
May be used within an expression
has the lowest precedence of all arithmetic operations
Should be placed within parentheses
May be confusing if not clearly documented
Example:
a = b = c = d = 12
35. Combined Assignment Operators Eliminates the need to enter the variable name twice
Operator Example usage Equivalent to
+= x += 5; x = x + 5;
-= y -=2; y = y - 2;
*= z *= 10; z = z * 10;
/= a /=b; a = a / b;
%= c %= 3; c = c % 3;
36. 3.8 Formatting Output WithString Manipulation setw(n) n = the width of the display
setprecision(n) n = the number of significant digits or decimal places displayed
flags:
left
right
fixed
37. Program 3-17 or 3-15 version 4 //This program displays three rows of numbers
#include<iostream.h>
void main(void)?
{
int Num1 = 2897, Num2 = 5, Num3 = 837,
Num4 = 34, Num5 = 7, Num6 = 1623,
Num7 = 390, Num8 = 3456, Num9 = 12;
// Display the first row of numbers
cout << Num1 << " ";
cout << Num2 << " ";
cout << Num3 << endl;
// Display the second row of numbers
cout << Num4 << " ";
cout << Num5 << " ";
cout << Num6 << endl;
// Display the third row of numbers
cout << Num7 << " ";
cout << Num8 << " ";
cout << Num9 << endl;
}
38. Program 3-18 or 3-16 version 4 /*This program displays three rows of numbers. */
#include <iostream.h>
#include <iomanip.h>
void main(void)?
{
int Num1 = 2897, Num2 = 5, Num3 = 837,
Num4 = 34, Num5 = 7, Num6 = 1623,
Num7 = 390, Num8 = 3456,
Num9 = 12;
// Display the first row of numbers
cout << setw(4) << Num1 << " ";
cout << setw(4) << Num2 << " ";
cout << setw(4) << Num3 << endl;
39. Program 3-19 or 3-17 version 4 /* This program demonstrates the setw manipulator being used with values of various data types. */
#include <iostream.h>
#include <iomanip.h>
void main(void)?
{
int IntValue = 3928;
float FloatValue = 91.5;
char StringValue[14] = "John J. Smith";
cout << "(" << setw(5);
cout << IntValue << ")" << endl;
cout << "(" << setw(8);
cout << FloatValue << ")" << endl;
cout << "(" << setw(16);
cout << StringValue << ")" << endl;
}
40. Precision Floating point values may be rounded to a number of significant digits, or precision, which is the total number of digits that appear before and after the decimal point.
41. Program 3-20 or 3-18 version 4 /* This program demonstrates how setprecision rounds floating point value. */
#include <iostream.h>
#include <iomanip.h>
void main(void)?
{
float Quotient, Number1 = 132.364,
Number2 = 26.91;Quotient = Number1 / Number2;cout << Quotient << endl;cout << setprecision(5) << Quotient << endl;cout << setprecision(4) << Quotient << endl;cout << setprecision(3) << Quotient << endl;cout << setprecision(2) << Quotient << endl;cout << setprecision(1) << Quotient << endl;
}
42. Table 3-11 Number Manipulator Value Displayed
28.92786 setprecision(3) 28.9
21. setprecision(5) 21
109.5 setprecision(4) 109.5
34.28596 setprecision(2) 34
cout << fixed;
28.92786 setprecision(3) 28.928
21. setprecision(5) 21.00000
109.5 setprecision(4) 109.5000
34.28596 setprecision(2) 34.29
43. Program 3-21 or 3-19 version 4 /* This program asks for sales figures for 3 days. The total sales is calculated and displayed in a table*/
#include <iostream>
#include <iomanip>
Using namespace std;
int main()?
{
float Day1, Day2, Day3, Total;
cout << "Enter the sales for day 1: ";
cin >> Day1;
cout << "Enter the sales for day 2: ";
cin >> Day2;
cout << "Enter the sales for day 3: ";
cin >> Day3;
Total = Day1 + Day2 + Day3;
44. Program Output Enter the sales for day 1: 321.57 [Enter]
Enter the sales for day 2: 269.62 [Enter]
Enter the sales for day 3: 1307.77 [Enter]
Sales Figures
-------------
Day 1: 321.57
Day 2: 269.62
Day 3: 1307.8
Total: 1899 The value has been truncated
45. Program 3-22 or 3-20 version 4 #include <iostream>
#include <iomanip>
using namespace std;
int main()?
{
float Day1, Day2, Day3, Total;
cout << "Enter the sales for day 1: ";
cin >> Day1;
cout << "Enter the sales for day 2: ";
cin >> Day2;
cout << "Enter the sales for day 3: ";
cin >> Day3;
Total = Day1 + Day2 + Day3;
cout << "\nSales Figures\n";
cout << "------\n";
cout << setprecision(2) << fixed << showpoint;
cout << "Day 1: " << setw(8) << Day1 << endl;
cout << "Day 2: " << setw(8) << Day2 << endl;
cout << "Day 3: " << setw(8) << Day3 << endl;
cout << "Total: " << setw(8) << Total << endl;
return 0;
}
46. Stream Manipulator fixed Displays floating-point numbers in fixed point notation.
setw(n) Establishes a print field of n spaces.
showpoint Causes a decimal point and trailing zeros to be displayed, even if there is no fractional part.
setprecision(n) Sets the precision of floating-point numbers
left Causes subsequent output to be left justified.
right Causes subsequent output to be right justified.
47. Important points about the way cin handles field widths: The field width only pertains to the very next item entered by the user.
cin stops reading input when it encounters a whitespace character or when it has all the character it needs.
White space characters include the [Enter] key, space, and tab.
48. Program 3-28 or 3-22 version 4 // This program demonstrates cin's
// getline member function.
#include <iostream.h>
#include <iomanip.h>
void main(void)?
{
char String[81];
cout << "Enter a sentence: ";
cin.getline(String, 81);
cout << "You entered ";
cout << String << endl;
}
49. Program 3-29 or 3-23 version 4 #include <iostream.h>
#include <iomanip.h>
void main(void)?
{
char Ch;
cout << "Type a character
cout << " and press
cout << " Enter: ";
cin >> Ch;
cout << "You entered " << Ch << endl;
}
50. Program 3-30 or 3-23 version 4 #include <iostream.h>
#include <iomanip.h>
void main(void)?
{
char Ch;
cout << "This program has"; cout << " paused. Press";
cout << " enter to continue.";
cin.get(Ch);
cout << "Thank you!";
cout << endl;
}
51. Program 3-31 or 3-23? version 4 #include <iostream.h>
#include <iomanip.h>
void main(void)?
{
char Ch;
cout << "Type a character"; cout << " and press Enter: ";
cin.get(Ch);
cout << "You entered ";
cout << Ch << endl;
cout << "Its ASCII code is ";
cout << int(Ch) << endl;
}
52. Mixing cin and cin.get Mixing cin.get with cin can cause an annoying and hard-to-find problem.
Pressing the [Enter] key after inputting a number will cause the newline character to be stored in the keyboard buffer. To avoid this, use cin.ignore:
cin.ignore(20,’\n’); // will skip the next 20 chars in the input buffer or until a newline is encountered, whichever comes first
cin.ignore(); //will skip the very next character in the input buffer
53. More Mathematical Library Functions abs
Absolute Value
exp
ex
fmod
modulus for floating point
54. Table 3-14 or 3-13 version 4 abs y = abs(x);
Returns the absolute value of the argument. The argument and the return value are integers.
cos y = cos(x);
Returns the cosine of the argument. The argument should be an angle expressed in radians. The return type and the argument are doubles.
exp y = exp(x);
Computes the exponential function of the argument, which is x. The return type and the argument are doubles.
55. Table 3-14 continued or 3-13 version 4 fmod y = fmod(x, z);
Returns, as a double, the remainder of the first argument divided by the second argument.
log y = log(x);
Returns the natural logarithm of the argument. The return type and the argument are doubles.
log10 y = log10(x);
Returns the base-10 logarithm of the argument. The return type and the argument are doubles.
56. Table 3-14 continued or 3-13 version 4 sin y = sin(x);
Returns the sine of the argument. The argument should be an angle expressed in radians. The return type and the argument are doubles.
sqrt y = sqrt(x);
Returns the square root of the argument. The return type and argument are doubles.
tan y = tan(x);
Returns the tangent of the argument. The argument should be an angle expressed in radians. The return type and the argument are doubles.
57. Program 3-32 or 3-24 version 4 #include <iostream.h>
#include <math.h> // For sqrt
void main(void)?
{
float A, B, C;
cout << "Enter the length of side A: ";
cin >> A;
cout << "Enter the length of side B: ";
cin >> B;
C = sqrt(pow(A, 2.0) + pow(B, 2.0));
cout.precision(2);
cout << "The length of the ";
cout << "hypotenuse is "<< C << endl;
}
58. Random Numbers
y = rand(); (from the stdlib.h library)?
returns pseudo-random number
C++ returns the same sequence of numbers each time the program executes
srand(x); (from the stdlib.h library)?
seeds the random number generator so that a new sequence of numbers will be generated
59. Program 3-33 or 3-25 version 4 // This program demonstrates random
//numbers.
#include <iostream.h>
#include <stdlib.h>
void main(void)?
{
unsigned Seed;
cout << "Enter a seed value: ";
cin >> Seed;
srand(Seed);
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
}
60. Basic File I/O The file fstream.h contains all the declarations necessary for file operations
#include <fstream.h>
It declares the following data types
ofstream used to open a file for output
ifstream used to open a file for input
fstream used to open a file for both input and output
You must declare an object of one of these data types
i.e ifstream InputFile;
61. Reading from a file Once the file has been opened you can read data from it similar to the way cin is used
InputFile >> Variable_Name
The data is read in the order found in the file
You can create a file using notepad or any other word processor.
Make sure the file name matches the file name in the open statement exactly
The file must be in the same directory that the executable file is located or you will need to specify the exact path.