610 likes | 765 Views
Week 3 Chapter 3 Expressions and Interactivity. CS102 Introduction to Computer Programming. Chapter 3 Expressions and Interactivity. The cin object Mathematical Expressions Automatic conversion and promotion Overflow and underflow The typecast operator The power of constants.
E N D
Week 3 Chapter 3 Expressions and Interactivity CS102Introduction to Computer Programming
Chapter 3 Expressions and Interactivity • The cin object • Mathematical Expressions • Automatic conversion and promotion • Overflow and underflow • The typecast operator • The power of constants • Multiple assignments • Combined assignment operators • Formatting output with stream manipulators • Formatted input • More mathematical library functions
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. Concept - The cin object reads information typed at the keyboard
Program 3-1 This program will calculate the area of any rectangle #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"; } Program Output This program calculates the area of a rectangle. What is the length of the rectangle?10 [Enter] What is the width of the rectangle?20 [Enter] The area of the rectangle is 200.
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; } This program does not let the user know what is needed as input. Program Output 10 [Enter] 20 [Enter] The area of the rectangle is 200.
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 Concept - The cin object can gather multiple values at once
Program 3-3 This program accepts multiple entries on one line #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; } Program Output This program calculates the area of a rectangle. Enter the length and width of the rectangle separated by a space. 10 20 [Enter] The area of the rectangle is 200
Program 3-4 or3-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; } Values of different data types can be entered on the same line. They must be entered in the correct order Program Output Enter an integer, a float, and a character: 4 5.7 b [Enter] Whole: 4 Fractional: 5.7 Letter: b
Program 3-5 or3-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; } cin can read strings as well as numbers. Strings are stored in character arrays. Program Output What is your name? Charlie [Enter] Good morning Charlie
Program 3-6 or3-5 version 4 Note that a space is used to separate the two inputs. If you want to read in a string with embedded spaces you can not use the cin command // 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; } Program Output Enter your first and last names and I will reverse them. Johnny Jones [Enter] Jones, Johnny
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.
Check point 3.1 • 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 <iostream> char char customer[53];
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); Concept - C++ allows you to construct complex mathematical expressions using multiple operators and grouping symbols
Program 3-7 or3-6 version 4 Mathematical expressions can be used in cout statements. Note the inputs are integers but they are converted to floats for storage /* 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); } Program Output This program shows the decimal value of a fraction. Enter the numerator: 3 [Enter] Enter the denominator: 16 [Enter] The decimal value is 0.1875
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 ) Mathematical expressions are evaluated left to right
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 + - Associativity is the order in which an operator works with its operands
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
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 Concept - C++ does not have an operator to raise a number to a power. A library function must be used
Program 3-8 or3-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; } This program uses the pow function to find the area of a circle Program Output This program calculates the area of a circle. What is the radius of the circle? 10 [Enter] The area is 314.159
Check Point 3.2 3.11 Write C++ expressions for the following algebraic expressions: y = 6x a = 2b + 4c y = x2 x + 2 g =--------- z2 • 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 y = 6 * x; 21 2 a = (2 * b ) + (4 * c ) ; 31 5 y = pow( x,2); 24 g = (x + 2) / pow( z,2);
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 Concept - When an operator's operands are of different data types, C++ will automatically convert them to the same data type
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
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. Concept - When a variable is assigned a value that is too large or too small in range for that variables data type, the variable underflows or overflows
Program 3-9 or3-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; } This program assumes that an integer is stored in two bytes of memory Program Output 32767 -32768 32767
Program 3-10 or3-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; } This compiler does not generate a runtime error but the value stored may not be usable Program Output 1.#INF 0
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
Program 3-11 or3-10 version 4 This program uses the type cast operator to avoid integer division #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"; Program Output How many books do you plan to read? 30 [Enter] How many months will it take you to read them? 7 [Enter] That is 4.285714 books per month.
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.
Program 3-12 or3-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; } Program Output 65 A
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 Concept - Constants may be given names that symbolically represent them in a program
Program 3-13 or3-12 version 4 The literal 3.14159 has been replaced with a floating point constant. #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; } Program Output This program calculates the area of a circle. What is the radius of the circle? 5 [Enter] The area is 78.5397
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;
Program 3-14 or3-13 version 4 Remember that the preprocessor performs a textual substitution. So each instance of Pi becomes a floating point literal. #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; } Program Output This program calculates the area of a circle. What is the radius of the circle? 5 [Enter] The area is 78.5397
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 / Concept - Multiple assignment means to assign the same value to several variables with one statement.
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; Concept - The combined assignment operators make common arithmetic operations easier
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 • dec • hex • oct • scientific • showpoint • showpos • uppercase Concept - The cout object provides ways to format data as it is being displayed.
Program 3-17 or3-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; } This program displays values with no output formatting. There is no column alignment. Program Output 2897 5 837 34 7 1623 390 3456 12
Program 3-18 or3-16 version 4 The setw command is used to line up the columns. The default is right justified /*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; // Display the second row of numbers cout << setw(4) << Num4 << " "; cout a<< setw(4) << Num5 << " "; cout << setw(4) << Num6 << endl; // Display the third row of numbers cout << setw(4) << Num7 << " "; cout << setw(4) << Num8 << " "; cout << setw(4) << Num9 << endl; } Program Output 2897 5 837 34 7 1623 390 3456 12
Program 3-19 or3-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; } setw can format the output of any data type Program Output ( 3928) ( 91.5) ( John J. Smith)
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.
Program 3-20 or3-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; } setprecision does not truncate numbers it rounds them up Program Output 4.91877 4.9188 4.919 4.92 4.9 5
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
Program 3-21 or3-19 version 4 This program will display 5 significant digits. But what if the total takes 6 /* 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; cout << "\nSales Figures\n"; cout << "-------------\n"; cout << setprecision(5); cout << "Day 1: " << setw(8) << Day1; cout << endl; cout << "Day 2: " << setw(8) << Day2; cout << endl; cout << "Day 3: " << setw(8) << Day3; cout << endl; cout << "Total: " << setw(8) << Total; cout << endl; return 0; }
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
Program 3-22 or3-20 version 4 Program Output (modified) Enter the sales for day 1: 321.00 [Enter] Enter the sales for day 2: 869.26 [Enter] Enter the sales for day 3: 403.77 [Enter] Sales Figures ------------- Day 1: 321 Day 2: 869.26 Day 3: 403.77 Total: 1594.90 #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; } The decimal point is displayed only if there are digits to the right of it.
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.
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.
Program 3-28 or3-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; } cin.getline will read one less character than the second parameter specifies to make room for the NULL character Program Output Enter a sentence: To be, or not to be. [Enter] You entered To be, or not to be.
Program 3-29 or3-23 version 4 cin requires that the user enter only a single. non white space character. All other input is ignored. #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; } Program Output Type a character and press Enter: A [Enter] You entered A
Program 3-30 or3-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; } cin.get will accept any key, particularly the return key Program Output This program has paused. Press Enter to continue. [Enter] Thank you!