C lecture 1 - Caltech...
Transcript of C lecture 1 - Caltech...
![Page 1: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/1.jpg)
CS 11 C track: lecture 1n Preliminaries
n Need a CMS cluster accountn http://acctreq.cms.caltech.edu/cgi-bin/request.cgi
n Need to know UNIXn IMSS tutorial linked from track home page
n Track home page:n http://courses.cms.caltech.edu/courses/cs11/material
/c/mike/index.html
![Page 2: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/2.jpg)
Assignmentsn 1st assignment is posted now
n Due one week after class, midnight
n Grading system: see "admin page"
linked from track home page
![Page 3: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/3.jpg)
Other administrative stuff
n See admin web page:http://courses.cms.caltech.edu/cs11/material/c/mike
/admin.html
n Covers how to submit labs, collaboration policy, grading, etc.
![Page 4: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/4.jpg)
Textbook
n Kernighan and Ritchie:The C Programming Language, 2nd. ed.
n 1st edition NOT acceptablen "ANSI C"n Only for reference
![Page 5: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/5.jpg)
C: pros and consn What C is good at
n low-level programmingn speed and memory efficiencyn portability (sorta)
n Bad things about Cn unsafe!!!n low level of abstraction
![Page 6: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/6.jpg)
Getting started (1)n The "hello, world!" program:
#include <stdio.h>int main(void){
printf("hello, world!\n");return 0;
}
![Page 7: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/7.jpg)
Getting started (2)n Make this into a file called hello.c using a text
editorn e.g. emacs, vi, nedit, pico
n Compile into a program and run:% gcc hello.c -o hello% ./hellohello, world!%
n Woo hoo!
![Page 8: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/8.jpg)
Source code to executable (1)n What you write is called "source code"n Two kinds of source code files:
n regular code (files end in ".c")n header files (files end in ".h")
n Compiler turns source code into "object code"n (files end in ".o")
n Linker turns object code file(s) into executable (no special file suffix)
![Page 9: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/9.jpg)
Source code to executable (2)n The program gcc is both a compiler and a linkern When you do this:
% gcc hello.c -o hello
n Then gccn compiles hello.c to hello.on links hello.o with system librariesn outputs the binary executable program hellon removes hello.o
![Page 10: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/10.jpg)
Source code to executable (3)n You can do each step individually:
% gcc -c hello.c (compile only)% gcc hello.o -o hello (link only)
n In this case, hello.o is not removedn Sequence:
n compiling: source code to object coden linking: object code to binary executable
![Page 11: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/11.jpg)
The C language - overview
n Programs are built up of functionsn Functions
n take in argumentsn compute somethingn return a result
n The main() functionn is where program execution starts
![Page 12: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/12.jpg)
Data types (1)n All data in C has to have a specified typen Examples:
n int (integer)n char (character)n float or double (approximate real number)n others
n Variables hold data of a particular type onlyn Variables must be declared before use
![Page 13: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/13.jpg)
Data types (2)n Type declarations:
int i; /* name = i type = int */
char c; /* name = c type = char */
double d;
float some_float = 3.14;
n Identifiers: i, c, d, some_float
n Optional initialization (e.g. some_float)n Booleans à 0 or nonzero (usually 1)
![Page 14: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/14.jpg)
Data types (3)
n Strings: arrays of type charchar some_string[9] = "woo hoo!";
char same_string[] = "woo hoo!";
n Much more on strings, arrays later
n Other types: structs, pointers
![Page 15: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/15.jpg)
Operators (1)n Numeric: + - * / %
n Assignment: =
int i = 10; /* initialization */
int j = 20; /* initialization */
i = 2 + i * j; /* assignment */
j = j % 2; /* assignment */
![Page 16: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/16.jpg)
Assignment operatorn Assignment works this way:
n 1) Evaluate the right-hand side (RHS) of the assignment operator
n 2) Assign the resulting value to the left-hand side (LHS) of the assignment operator
![Page 17: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/17.jpg)
Operators (2)n What does
i = 2 + i * j;
mean?a) i = (2 + i) * j;
b) i = 2 + (i * j);
n * has a higher precedence than +
n Use () to force other interpretation
![Page 18: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/18.jpg)
Operators (3)n Other assignment operators:
n +=, -=, *=, ...
i += 2; /* i = i + 2; */
n increment and decrement: ++, --
i++; /* i = i + 1; */
++i; /* same */
![Page 19: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/19.jpg)
Operators (4)n Test operators:
n compare two values
n < <= > >=
n == for testing equality
n != for testing inequality
n read "!" as "not"
![Page 20: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/20.jpg)
Operators (5)n Logical operators:
n arguments are ints used as booleans
n i.e. usually 0 or 1 (false or true)
n ! operator is unary logical "not"
n && operator is binary logical "and"
n || operator is binary logical "or"
![Page 21: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/21.jpg)
Operators (6)
int bool1, bool2, bool3, bool4;
bool1 = 0; /* false */
bool2 = !bool1; /* bool2 --> true */
bool3 = bool1 || bool2; /* value? */
bool4 = bool1 && bool2; /* value? */
![Page 22: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/22.jpg)
Operators (7)n "Unary minus" operator:
int var1 = 10;
int var2;
var2 = -var1;
n Like – with nothing to the left
n Negates the value
![Page 23: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/23.jpg)
Expressions and statementsn i + 2 * j is an expression (has a value)
n i = j * k; is a statementn ends in a semicolon
n also is an expression (value is value of i)
n i = j = k = 0; is allowed
n Equivalent to i = (j = (k = 0));
n NOT ((i = j) = k) = 0;
![Page 24: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/24.jpg)
Comments/* This is a comment. */
/*
* Comments can span
* multiple lines.
*/
// This is NOT a comment!
![Page 25: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/25.jpg)
Functions (1)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
![Page 26: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/26.jpg)
Functions (2)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
name
![Page 27: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/27.jpg)
Functions (3)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
argument list
![Page 28: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/28.jpg)
Functions (4)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
return type
![Page 29: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/29.jpg)
Functions (5)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
body
![Page 30: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/30.jpg)
Functions (6)n Functions take arguments and return values:
int f(int x){
int y = 10;return y * x;
}
return statement
![Page 31: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/31.jpg)
Functions (7)n Calling the function we just defined:/* in another function... */int res;int i = 10;res = f(10);res = f(5 + 5);res = f(i);res = f(i*5 + i/2);
n All of these are valid function callsn Take in arguments, return result
![Page 32: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/32.jpg)
Functions (8)n Functions can take multiple arguments:
int g(int x, int y){
int z = 42;return x * y * z;
}
n Argument names (x, y) preceded by types (int)
n Arguments separated by commas
argument list
![Page 33: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/33.jpg)
Functions (9)n Calling functions that take multiple
arguments:
/* in another function... */int res;int i = 10, j = 20;res = g(10, 20);res = g(5 + 5, 20);res = g(i, j);res = g(i*5 + i/2, j * 10);
![Page 34: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/34.jpg)
Functions (10)n Not all functions return values:
void print_number(int i){
printf("number is: %d\n", i);}
n Return type is void (nothing to return)n Use this when no return value needed
![Page 35: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/35.jpg)
Functions (11)n Not all functions return values:
void print_number(int i){
printf("number is: %d\n", i);return; /* unnecessary */
}n return statement not required
n unless you return in the middle of the function
![Page 36: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/36.jpg)
Functions (12)n Calling this function:
/* In another function... */int i = 10;print_number(20);print_number(i);print_number(i*5 + i/2);n Prints 20, 10, 55 respectively
![Page 37: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/37.jpg)
Functions (13)n Not all functions take arguments:
int five(void){
return 5;}
n No arguments (use void to indicate)
![Page 38: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/38.jpg)
Functions (14)n Calling functions without arguments:int value;value = five();
n Now value equals 5n Note () after five
n means "this function is being called with no arguments"
n Without this, function won't be called!
![Page 39: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/39.jpg)
Functions – type declarationsn Type declarations come at the beginning of
the functionn Need a declaration for every local variableint foo(int x){
int y; /* type declaration */y = x * 2;return y;
}
![Page 40: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/40.jpg)
Functions – type declarationsn This is wrong:int foo(int x){
int y; /* type decl */y = x * 2; /* code *//* type declaration after code: */int z = y * y;return z;
}
n Generates a compiler warning
![Page 41: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/41.jpg)
Local and global variables (1)n Variable declarations can be local or globaln Local: inside a functionn Global: outside a function
n accessible from any function
![Page 42: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/42.jpg)
Local and global variables (2)int x; /* Global variable */int y = 10; /* Initialized global variable */
int foo(int z){int w; /* local variable */x = 42; /* assign to a global variable */w = 10; /* assign to a local variable */return (x + y + z + w);
}
![Page 43: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/43.jpg)
Local and global variables (3)n In general, avoid using global variables!n Global variables can be changed by any
functionn makes debugging much harder
n Global variables are never necessaryn though sometimes convenient
n OK to use global "variables" if they really are constantn i.e. if you don't change their values
![Page 44: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/44.jpg)
printf()
int a = 5;double pi = 3.14159;char s[] = "I am a string!";printf("a = %d, pi = %f, s = %s\n",
a, pi, s);n Substitutes values for %d, %f, %s etc.n %d : int, %f : float, double, %s : stringn \n : new line
![Page 45: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/45.jpg)
The C preprocessor (1)n What does the funky line#include <stdio.h>mean?
n C preprocessor directiven Extra step in compilation:
n cpp: source code -> expanded source coden gcc: compiles source code -> object coden gcc (ld): links object code -> executablen gcc does all this for you
![Page 46: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/46.jpg)
The C preprocessor (2)n What does the funky line#include <stdio.h>mean?
n Includes the declaration of printf()n NOT the implementationn allows your code to use printf()
n The linker adds in the implementation
![Page 47: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/47.jpg)
Conditionals (1)n Need to be able to test for conditions:
int a = 10;if (a < 20){
printf("less than 20\n");}else{
printf("not less than 20\n");}
![Page 48: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/48.jpg)
Conditionals (2)n Test: 0 is "false", anything else is "true":
if (1) /* true */{
printf("less than 20\n");}else{
printf("not less than 20\n");}
![Page 49: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/49.jpg)
Conditionals (3)n VERY common error:int a = 0;if (a = 10) /* always true! */{
printf("a equals 10\n");}else{
printf("a doesn’t equal 10\n");}
![Page 50: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/50.jpg)
Conditionals (4)n Should be:int a = 0;if (a == 10) /* not always true */{
printf("a equals 10\n");}else{
printf("a doesn’t equal 10\n");}
![Page 51: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/51.jpg)
Conditionals (5)n else clause is optional:int a = 0;if (a == 10){
printf("a equals 10\n");}
![Page 52: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/52.jpg)
Conditionals (5)n else if for multiple cases:int a = 0;if (a == 10) {
printf("a equals 10\n");} else if (a < 10) {
printf("a is less than 10\n");} else {
printf("a is greater than 10\n");
}
![Page 53: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/53.jpg)
for loop (1)n Need to do things repeatedly:
int i;for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 54: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/54.jpg)
for loop (2)for (<initialization>;
<test>;<increment>)
{ <body> }
for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 55: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/55.jpg)
for loop (3)for (<initialization>;
<test>;<increment>)
{ <body> }
for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 56: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/56.jpg)
for loop (4)for (<initialization>;
<test>;<increment>)
{ <body> }
for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 57: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/57.jpg)
for loop (5)for (<initialization>;
<test>;<increment>)
{ <body> }
for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 58: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/58.jpg)
for loop (6)for (<initialization>;
<test>;<increment>)
{ <body> }
for (i = 0; i < 10; i++){
printf("cowabunga!!!\n");}
![Page 59: C lecture 1 - Caltech Computingcourses.cms.caltech.edu/cs11/material/c/mike/lectures/C_lecture_1.pdf · nWhat C is good at n low-level programming n speed and memory efficiency n](https://reader035.fdocuments.net/reader035/viewer/2022062600/5adf30177f8b9ac0428bd4d5/html5/thumbnails/59.jpg)
That's all for now!
n Much more on all these topics in later lectures
n Do first assignment to get familiar with basics
n Use "style checker" to avoid style mistakes
n Have fun!