- 60 Views
- Uploaded on
- Presentation posted in: General

Chapter 7

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - 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

- 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

- 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

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

p.805, limits.h, float.h

%e : print DBL_MIN, DBL_MAX in scientific notation

- 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

- 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

- variable initialized
- int k = 5, m = 4, n;
- double x = 1.5, y = 2.1, z;

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)

- 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’) …

- 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’

- 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

- 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.

- Syntax：
typedef enum

{identifier_list}

enum_type;

- Example：
typedef enum

{sunday, monday, tuesday, wednesday, thursday, friday, saturday}

day_t;

- 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.

- 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.

- Declaring a function parameter is accomplished by simply including a prototype of the function in the parameter list.

xleft

+ xright

xmid =

2.0

- Problem
- Develop a function bisect that approximates a root of a function f on an interval that contains an odd number of roots.

- Analysis

- Analysis
- Problem Inputs
- double x_left
- double x_right
- double epsilon
- double f(double farg)

- Problem Outputs
- double root
- int *errp

- Problem Inputs

- 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

- 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

- Program variables

- 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

- Refinement
- Implementation (Figure 7.10)

- 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

- 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.

- 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.