220 likes | 230 Views
This course provides an introduction to numerical computation, covering topics such as printf() and scanf(), numerical operators, and bitwise operations in the C programming language.
E N D
More on Numerical Computation CS-2301, System Programming for Non-majors (Slides include materials from The C Programming Language, 2nd ed., by Kernighan and Ritchie and from C: How to Program, 5th ed., by Deitel and Deitel) More on Numerical Computation
Reading Assignment • Chapter 2 of Kernighan & Ritchie More on Numerical Computation
Digression on scanf() & printf() • Prints a string in which each conversion specifier is replaced with value of corresponding argument • printf(“string in double quotes”, arg1, arg2, arg3, …); • Conversion specifier:– • Begins with ‘%’ character • Describes how to print one argument • ith conversion specifier in string says how to print argi • Resulting string printed on stdout • Returns number of characters printed More on Numerical Computation
printf()(continued) • %d, %i — decimal number • %u — unsigned decimal number • %c — character • %s — string • %f — floating point number • e.g., 3.14159 • %e, E — floating point number • e.g., 2.9979e+8 or 2.9979E+8 • %% — a single ‘%’ character • See textbook for full list (pp 154, 244) More on Numerical Computation
printf() Optional Controls • %6.4d • ^ – minimum field width • Padded on left • ^ – precision of number • %.12s • ^ – width of string • %-6.4d • ^ – indicates left justify • Padded on right More on Numerical Computation
printf() Examples int j = 24; float twoPi = 2 * pi; printf(“j=%d, k=%f\n”, j, twoPi ); • Output j=24, k=6.28319 printf(“%4d %4d %4d %6d”, 1, 10, 100, 1000); • Output 1 10 100 1000 .. .. .. .. .. .. More on Numerical Computation
scanf() • Reads input, decomposes into individual variables • Opposite of printf() • scanf(“string in double quotes”, &arg1, &arg2, &arg3, …); • Arguments must be locations – use‘&’ • Converts input string according to scan string, stores in variables • Returns number of matched and stored items • Or EOF if end of file is encountered • Stops at end of string or when no match is found More on Numerical Computation
scanf() Examples int i; double x; char c; scanf(“%d%f%c”, &i, &x, &c); • Looks first for an integer • Skips white space • Looks next for a floating point • Skips white space • Looks next for a single character • Does not skip white space; returns the first character it finds More on Numerical Computation
scanf() Formats • %d — any decimal number • %u — an unsigned integer • %c — character • White space not skipped • %e, f, g — floating point number • %s — string • Defer to later in the course • %% — matches a single ‘%’ character • Any other character • Matches that character More on Numerical Computation
scanf() Formats May specify “h” or “l” indicating short or long integer, float vs. double • %d — any decimal number • %u — an unsigned integer • %c — character • White space not skipped • %e, f, g — floating point number • %s — string • Defer to later in the course • %% — matches a single ‘%’ character • Any other character • Matches that character More on Numerical Computation
Questions? More on Numerical Computation
More Numerical Operators • Relational operators • <, <=, >, >=, ==, != • Return 0 if false, 1 if true • Let int a = 3; • Then a < 3 returns 0a >= 3 returns 1a == 3 returns 1a != 3 returns 0 More on Numerical Computation
More Numerical Operators Relational operators are not special in C. They are just like any other operators in expressions • Relational operators • <, <=, >, >=, ==, != • Return 0 if false, 1 if true • Let int a = 3; • Then a < 3 returns 0a >= 3 returns 1a == 3 returns 1a != 3 returns 0 More on Numerical Computation
Precedence of Relational Operators • Comparisons: less than arithmetic operators • Equality & inequality: less than comparisons • See p.53 • Examples • i < lim -1 means i < (lim – 1) • X + (y >= 3) returns the value X (when y < 3)and the value X+1 (when y >= 3) More on Numerical Computation
Increment & Decrement Operators • ++x, --x, x++, x-- • Increments or decrements x by 1 • ++x – increments x, returns new value of x • x++ – increments x, returns old value of x • Used in many situations, especially for loops • --x – decrements x, returns new value of x • x-- – decrements x, returns old value of x • High precedence than *, /, % • Associates right to left More on Numerical Computation
Bitwise Operations • & – bitwise AND • | – bitwise OR (inclusive) • ^ – bitwise exclusive OR • << – left shift • Same as multiplying by 2 (i.e., fills low-order bits with zeros) • >> – right shift • Machine dependent fill on left • ~ – one’s complement • May only be applied to integral types • i.e., int, short, long, char • signed or unsigned More on Numerical Computation
Conditional Expressions • expr1 ? expr2 : expr3 • Evaluate expr1. • If result is true, return expr2 • Otherwise return expr3 • Example, • z = (a < b) ? a : b • Assigns z the value of a if a < b, or b otherwise • See tricky code at end of §2.11 • For use in Homework #1 More on Numerical Computation
Assignment Operator (yet again) • location += expression means • Add expression to the value at location and assign the result back into location • Similarly for-=, *=, /=, %=, ^=. |=, <<=, >>= • E.g., • x *= a is the same as x = x * a • y /= b is the same as y = y * b • z <<= 3 is the same as z = z << 3 More on Numerical Computation
Type Conversion • May be automatic or explicit • See §2.7 • Automatic, for signed operands:– • If either is long double, convert other to long double • Else if either is double, convert other to double • Else if either is float, convert other to float • Otherwise, convert char and short to int and then if either is long, convert other to long • I.e., “promote” numerical types from lower to higher More on Numerical Computation
Type Conversion (continued) • Automatic type conversion of unsigned integer values is • Tricky and • Machine dependent More on Numerical Computation
Explicit Type Conversion • Definition – cast • A unary operator applied to an expression to explicitly force the value to a particular type • Represented as (type)expression • High precedence, equal to unary operators • Associates right-to-left • Example (int) sqrt(2*pi) • Converts the square root of 2π to an integer More on Numerical Computation
Questions? Read or review Chapter 2 More on Numerical Computation