1 / 34

C Fundamentals

C Fundamentals. Professor Jennifer Rexford http://www.cs.princeton.edu/~jrex. Goals of this Lecture. C data types Integers (from last time) Char (in more detail) Floating point: float, double, and long double Operators Arithmetic, assignment, relational, logical, conditional, … sizeof()

mikasi
Download Presentation

C Fundamentals

An Image/Link below is provided (as is) to download presentation 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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C Fundamentals Professor Jennifer Rexford http://www.cs.princeton.edu/~jrex

  2. Goals of this Lecture • C data types • Integers (from last time) • Char (in more detail) • Floating point: float, double, and long double • Operators • Arithmetic, assignment, relational, logical, conditional, … • sizeof() • Statements • Expressions, declarations, if/else, switch, … • While, do-while, for, return, break, continue, goto, … • I/O functions • getchar(), putchar(), printf(), and scanf()

  3. Integral types: * On hats; size is system-dependent C Integral Data Types (Review)

  4. Characters

  5. Using char for Characters • Type char can be used for (limited range) arithmetic, but… • Usually used to store characters – thus the name! • Must use a code to map 1-byte numbers to characters • Common code: ASCII • Other ways to represent characters • Less common: EBCDIC • What about Unicode? “wide” characters (2 bytes)

  6. The ASCII Code American Standard Code for Information Interchange 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 16 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 32 SP ! " # $ % & ' ( ) * + , - . / 48 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 64 @ A B C D E F G H I J K L M N O 80P Q R S T U V W X Y Z [ \ ] ^ _ 96 ` a b c d e f g h i j k l m n o 112p q r s t u v w x y z { | } ~ DEL Lower case: 97-122and upper case: 65-90 E.g., ‘a’ is 97 and ‘A’ is 65 (i.e., 32 apart)

  7. char Constants • C has char constants (sort of) * • Examples Use single quotes for char constant Use double quotes for string constant * Technically 'a' is of type int; automatically truncated to type char when appropriate

  8. More char Constants • Escape characters Used often

  9. Reading and Writing a Character • Subset of C I/O functions: #include <stdio.h> int main(void) { int c; c = getchar(); if (c != EOF) { if ((c >= 'a') && (c <= 'z')) c += 'A' - 'a'; putchar(c); } } ‘a’ is 97 ‘A’ is 65

  10. The “End-of-File Character” • Files do not end with the “EOF character” • Because there is no such thing!!! • EOF is: • A special non-character value returned by getchar() and related functions to indicate failure • #defined in stdio.h; typically as -1

  11. Using EOF • Correct code • Equivalent idiom • Incorrect code int c; c = getchar(); while (c != EOF) { … c = getchar(); } getchar() returns int because: • int is the computer’s natural word size • getchar() must be able to return all valid chars and EOF An expression of the form x = y assigns to x, and evaluates to the new value of x int c; while ((c = getchar()) != EOF) { … } char c; while ((c = getchar()) != EOF) { … } What if stdin contains the 11111111 (ӱ) character?

  12. Strings • Java has a String class • String s; // OK in Java • C does not have a String data type • String s; /* Not OK in C */ • Java and C have string constants • E.g. "hello" • In C, a string is a null-terminated array of characters • 'a'  is a char (01100001) • "a" is a string (01100001 00000000) • More later, after discussing pointers and arrays

  13. Floating-Point Numbers

  14. Floating-point types: * On hats only; size is system-dependent C Floating-Point Data Types

  15. The float Data Type • Description: • A (positive or negative) floating point number • Size: system dependent • bits in float <= bits in double <= bits in long double • Often 4 bytes; limited precision and range; infrequently used • Example constants (assuming 4 bytes) Note “F” suffix

  16. The double Data Type • Description: • A (positive or negative) double-precision floating point number • Size: system dependent • bits in float <= bits in double <= bits in long double • Often 8 bytes • Example constants (assuming 8 bytes) Decimal point or “E” indicates floating point

  17. The long double Data Type • Description: • A (positive or negative) floating point number • Size: system dependent • bits in float <= bits in double <= bits in long double • Often 10 or 12 bytes • Example constants (assuming 12 bytes) Note “L” suffix

  18. Data Types: C vs. Java Recall Java goal: Portability  specify sizes Recall C goal: Create an OS  use natural word size

  19. C Operators Combine with constants and variables to form expressions Most C operators are familiar from Java…

  20. Familiar C Operators • Same as Java • Refer to book for precedence and associativity

  21. The sizeof Operator • Unique among operators: evaluated at compile-time • Evaluates to type size_t; on hats, same as unsigned int • Examples int i = 10; double d = 100.0; … … sizeof(int) … /* On hats, evaluates to 4 */ … sizeof(i) … /* On hats, evaluates to 4 */ … sizeof(double)… /* On hats, evaluates to 8 */ … sizeof(d) … /* On hats, evaluates to 8 */ … sizeof(d + 200.0) … /* On hats, evaluates to 8 */

  22. Determining Data Sizes • To determine data sizes on your computer • Output on hats #include <stdio.h> int main(void) { printf("char: %d\n", (int)sizeof(char)); printf("short: %d\n", (int)sizeof(short)); printf("int: %d\n", (int)sizeof(int)); printf("long: %d\n", (int)sizeof(long)); printf("float: %d\n", (int)sizeof(float)); printf("double: %d\n", (int)sizeof(double)); printf("long double: %d\n", (int)sizeof(long double)); return 0; } char: 1 short: 2 int: 4 long: 4 float: 4 double: 8 long double: 12

  23. The Sequence Operator • Evaluates expr1 and then expr2 • As a whole, evaluates to expr2 • Sometimes used in for statement • Sometimes used accidentally!!! for (i=0, j=0; i<10; i++, j++) … printf(“%d\n”, (1,234)); /* What prints? */

  24. Additional Operators Covered later in the course

  25. Operators: C vs. Java

  26. Operators: C vs. Java (cont.) • Java: demotions are not automaticC: demotions are automatic • Recommendation: Avoid mixed-type expressions int i; char c; … i = c; /* Implicit promotion */ /* OK in Java and C */ c = i; /* Implicit demotion */ /* Java: Compiletime error */ /* C: OK; truncation */ c = (char)i; /* Explicit demotion */ /* Java: OK; truncation */ /* C: OK; truncation */

  27. C Statememts

  28. C Statements Recall: C does not have a boolean type

  29. C Statements (cont.) Recall: C does not have a boolean type

  30. Statements: C vs. Java • Conditional statements (if, while, do...while, for) • C has no boolean data type, so use int instead • 0 => FALSE, non-0 => TRUE • Legal in Java and in C: • Illegal in Java, but legal in C: • Use the -Wall option!!! • Compiler generates warning for 2nd code fragment i = 0;if (i == 5)statement1;elsestatement2; Which statement is executed? What is the value of i afterward? i = 0;if (i = 5)statement1;elsestatement2; Which statement is executed? What is the value of i afterward?

  31. Statements: C vs. Java (cont.) • Labeled Break Statement • Java: Has labeled break statement • C: Does not have labeled break statement • Labeled Continue Statement • Java: Has labeled continue statement • C: Does not have labeled continue statement • Goto Statement • Java: Does not have a goto statement • C: Has a goto statement – but “don’t use it”

  32. Common Idioms • Assignment inside integralexpr • Combines assignment & test for error • Commonly used, saves space, widely accepted • Goto to jump to cleanup code • You’ll likely see it somewhere if ((i = SomeFunction()) != 0)statement1;elsestatement2; returnVal = FAILURE;if ((isFileOpen = OpenSomeFile()) == 0)goto cleanup;DoSomeProcessing();returnVal = SUCCESS;cleanup: if (isFileOpen) CloseFile(); return returnVal;

  33. I/O Functions • Subset of C I/O functions: • stream can be stdin (for input), stdout (for output), or stderr (for output)

  34. Summary • The most fundamental building blocks of C programs • Data types • Integral: char, short, int, long(signed and unsigned) • Floating point: float, double, long double • Range of each type • How to express constants of each type • Operators • Very similar to Java • Statements • Very similar to Java • I/O functions • The non-existent “EOF character” Beware: no boolean data type

More Related