420 likes | 531 Vues
Chapter 7. Simple Date Types. Dr. Jiung-yao Huang Dept. Comm. Eng. Nat. Chung Cheng Univ. E-mail : comjyh@ccu.edu.tw TA: 鄭筱親 陳昱豪. 本章重點. Enumerated type Declaring a function parameter Bisection method. outline. 7.1 REPRESENTATION AND CONVERSION OF NUMERIC TYPES
E N D
Chapter 7 Simple Date Types Dr. Jiung-yao Huang Dept. Comm. Eng. Nat. Chung Cheng Univ. E-mail : comjyh@ccu.edu.tw TA: 鄭筱親 陳昱豪
本章重點 • Enumerated type • Declaring a function parameter • Bisection method
outline • 7.1 REPRESENTATION AND CONVERSION OF NUMERIC TYPES • 7.2 REPRESENTATION AND CONVERSION OF TYPE CHAR • 7.3 ENUMERATED TYPES • 7.4 ITERATIVE APPROXIMATIONS • CASE STUDY: BISECTION METHOD FOR FINDING ROOTS • 7.5 COMMON PROGRAMMING ERRORS
7.1 Representation and Conversion of Numeric Types • Simple data type • A data type used to store a single value • Uses a single memory cell to store a variable • Different numeric types has different binary strings representation in memory
Figure 7.1 Internal Formats of Type int and Type double mantissa: binary fraction between 0.5~1.0 for positive numbers -0.5~-1.0 for negative numbers exponent: integer real number: mantissa x 2exponent
Figure 7.2 Program to Print Implementation-Specific Ranges for Positive Numeric Data p.857, limits.h, float.h %e : print DBL_MIN, DBL_MAX in scientific notation
7.1 (cont) Numerical Inaccuracies • Representational error (round-off error) • An error due to coding a real number as a finite number of binary digits • Cancellation error • An error resulting from applying an arithmetic operation to operands of vastly different magnitudes; effect of smaller operand is lost
7.1 (cont) Numerical Inaccuracies • Arithmetic underflow • An error in which a very small computational result is represented as zero • Arithmetic overflow • An error that is an attempt to represent a computational result that is too large
7.1 (cont) Automatic Conversion of Data Types • variable initialized • int k = 5, m = 4, n; • double x = 1.5, y = 2.1, z;
7.1 (cont) Explicit Conversion of Data Types p.63 Table 2.9 • cast • an explicit type conversion operation • not change what is stored in the variable • Ex. • frac = (double) n1 / (double) d1; • Average = (double) total_score / num_students(p.63)
7.2 Representation and Conversion of Type char • A single character variable or value may appear on the right-hand side of a character assignment statement. • Character values may also be compared, printed, and converted to type int. #define star ‘*’ char next_letter = ‘A’; if (next_letter < ‘Z’) …
7.2 (cont) Three Common character codes(Appendix A) • Digit character • ASCII ‘0’ ~’9’ have code value 48~57 • ‘0’ < ‘1’ < ‘2’…….< ‘9’ • Uppercase letters • ASCII ‘A’~’Z’ have code values 65~90 • ‘A’ < ‘B’ < ‘C’……< ‘Z’ • Lowercase letters • ASCII ‘a’~’z’ have code values 97~122 • ‘a’ < ‘b’ < ‘c’…….< ‘z’
7.2 (cont) Example 7.1 • collating sequence • A sequence of characters arranged by character code number • Fig. 7.3 uses explicit conversion of type int to type char to print part of C collating sequence
7.3 Enumerated Types • Enumerated type • A data type whose list of values is specified by the programmer in a type declaration • Enumeration constant • An identifier that is one of the values of an enumerated type • Fig. 7.4 shows a program that scans an integer representing an expense code and calls a function that uses a switch statement to display the code meaning.
7.3 (cont) Enumerated Type Definition • Syntax: typedef enum {identifier_list} enum_type; • Example: typedef enum {sunday, monday, tuesday, wednesday, thursday, friday, saturday} day_t;
7.3 (cont) Example 7.3 • The for loop in Fig. 7.5 scans the hours worked each weekday for an employee and accumulates the sum of these hours in week_hours.
7.4 Iterative Approximations • root (zero of a function) • A function argument value that causes the function result to be zero • Bisection method • Repeatedly generates approximate roots until a true root is discovered.
Figure 7.7 Using a Function Parameter • Declaring a function parameter is accomplished by simply including a prototype of the function in the parameter list.
7.4 (cont) Calls to Function evaluate and the Output Produced
xleft + xright xmid = 2.0 7.4 (cont) Case Study: Bisection Method for Finding Roots • Problem • Develop a function bisect that approximates a root of a function f on an interval that contains an odd number of roots. • Analysis
7.4 (cont) Case Study: Bisection Method for Finding Roots • Analysis • Problem Inputs • double x_left • double x_right • double epsilon • double f(double farg) • Problem Outputs • double root • int *errp
Figure 7.9Three PossibilitiesThat Arise When the Interval [xleft, xright] Is Bisected
7.4 (cont) Case Study: Bisection Method for Finding Roots • Design • Initial Algorithm • 1.if the interval contains an even number of roots • 2.Set error flag • 3.Display error message • else • 4.Clear error flag • 5.repeat as long as interval size is greater than • epsilon and root is not found • 6.Compute the function value at the midpoint of the interval • 7.if the function value is zero, the midpoint is a root • else • 8.Choose the left or right half of the interval • in which to continue the search • 9.Return the midpoint of the final interval as the root
7.4 (cont) Case Study: Bisection Method for Finding Roots • Design • Program variables • int root_found • double x_mid • double f_left, f_mid, f_right • Refinement • 1.1 f_left = f(x_left) • 1.2 f_right = f(x_right) • 1.3 if signs of f_left and f_right are the same
7.4 (cont) Case Study: Bisection Method for Finding Roots • Design • Refinement • 5.1 while x_right – x_left > epsilon and !root_found • 8.1 if root is in left half of interval (f_left*f_mid<0.0) 8.2 Change right end to midpoint else 8.3 Change left end to midpoint • Implementation (Figure 7.10)
Figure 7.10 Finding a Function Root Using the Bisection Method
Figure 7.10 Finding a Function Root Using the Bisection Method (cont’d)
Figure 7.10 Finding a Function Root Using the Bisection Method (cont’d)
Figure 7.11 Sample Run of Bisection Program with Trace Code Included
7.5 Common Programming Errors • Arithmetic underflow and overflow resulting from a poor choice of variable type are causes of erroneous results. • Programs that approximate solutions to numerical problems by repeated calculations often magnify small errors. • Not reuse the enumerated identifiers in another type or as a variable name • C does not verify the value validity in enum variables
Chapter Review(1) • Type int and double have different internal representations. • Arithmetic with floating-point data may not be precise, because not all real numbers can be represented exactly. • Type char data are represented by storing a binary code value for each symbol. • Defining an enumerated type requires listing the identifier that are the values of the type.
Chapter Review(2) • A variable or expression can be explicitly converted to another type by writing the new type’s name in parentheses before the value to convert. • A function can take another function as a parameter. • The bisection method is a technique for iterative approximation of a root of a function.