cs222

38
CS222 Week 3 - Friday

Upload: kairos

Post on 23-Feb-2016

29 views

Category:

Documents


0 download

DESCRIPTION

Week 3 - Wednesday. CS222. Last time. What did we talk about last time? Preprocessor directives #define , #include , etc. Other C features sizeof , const ASCII table printf () format strings Introduction to bitwise operations. Questions?. Project 1. Quotes. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CS222

CS222Week 3 - Friday

Page 2: CS222

Last time

What did we talk about last time? Preprocessor directives Other C features

sizeof, const ASCII tableprintf() format strings Bitwise operators

Page 3: CS222

Questions?

Page 4: CS222

Project 1

Page 5: CS222

Quotes

Unix is simple. It just takes a genius to understand its simplicity.

Dennis Ritchie

Page 6: CS222

Why do we care about bitwise operations? The computer uses bitwise

operations for many things These operations are available for

our use and are very fast Shifting is faster than multiplying or

dividing by powers of 2 You can keep a bitmask to keep track

of 32 different conditions That's quite a lot of functionality for 4

bytes!

Page 7: CS222

Precedence

Operators in every programming language have precedence

Some of them are evaluated before others Just like order of operations in math

* and / have higher precedence than + and – = has a very lowest precedence

I don't expect you to memorize them all, but Know where to look them up Don't write confusing code

Page 8: CS222

Precedence tableType Operators Associativity

Primary Expression () [] . -> expr++ expr-- Left to right

Unary * & + - ! ~ ++expr --expr (typecast) sizeof Right to left

Binary

* / %

Left to right

+ -

>> <<

< > <= >=

== !=

&

^

|

&&

||

Ternary ?: Right to leftAssignment = += -= *= /= %= >>= <<= &= ^= |= Right to left

Comma , Left to right

Page 9: CS222

Insane precedence example What happens here?

x++ >> 5 == 4 % 12 & 3 It's also worth noting that precedence doesn't tell the

whole story What about multiple assignments in a single line of

code? C doesn't give you guarantees about what happens

when The following could have different results on different

compilers:printf("%d %d", x++, (x + 5)); a[x] = x++;x = x++;

Page 10: CS222

Control flow Sequences of statements surrounded by

braces are treated like a single statement with no value Braces can be thrown in whenever you want We used to say that "braces were optional" for

one-line blocks, but this is the more accurate way to look at it

An expression can always become a statement

int a = 150;a; //legal in C, illegal in Java

Page 11: CS222

Selection

Page 12: CS222

if statements Like Java, the body of an if statement will

only execute if the condition is true The condition is evaluated to an int True means not zero

An else is used to mark code executed if the condition is false

Sometimes this is natural and clear; at other times it can be cryptic.

Page 13: CS222

The if part

Any expression that has a

value

Any single statement ending in a semicolon or a

block in braces

Anatomy of an if

if( condition ) statement

Page 14: CS222

Anatomy of an if-else

Two different

outcomes

if( condition ) statement1

elsestatement2

Page 15: CS222

Nesting

We can nest if statements inside of other if statements, arbitrarily deep

Just like Java, there is no such thing as an else if statement

But, we can pretend there is because the entire if statement and the statement beneath it (and optionally a trailing else) is treated like a single statement

Page 16: CS222

switch statements switch statements allow us to choose

between many listed possibilities Execution will jump to the matching label or

to default (if present) if none match Labels must be constant (either literal values or #define constants)

Execution will continue to fall through the labels until it reaches the end of the switch or hits a break Don't leave out break statements unless you

really mean to!

Page 17: CS222

Anatomy of a switch statement

switch( data ){

case constant1:statements1

case constant2:statements2

…case constantn:

statementsndefault:

default statements}

Page 18: CS222

Loops

Page 19: CS222

Three loops C has three loops, just like Java

while loop▪ You don't know how many times you want to run

for loop▪ You know how many times you want to run

do-while loop▪ You want to run at least once

Like if statements, the condition for them will be evaluated to an int, which is true as long as it is non-zero All loops execute as long as the condition is true

Page 20: CS222

while loop

A while loop is the keyword while followed by a pair of parentheses

Within the parentheses is a condition If the condition is true, the body of

the loop will be executed At the end of the loop, the condition

is checked again

Page 21: CS222

Anatomy of a while loop

while( condition )

statement

Page 22: CS222

for loop A for loop consists of three parts:

Initialization Condition Increment

The initialization is run when the loop is reached If the condition is true, the body of the loop will

be executed At the end of the loop, the increment will be

executed and the condition checked again If the condition is empty (nothing in it), it is

considered true

Page 23: CS222

Way to Progress

Ending Point

Starting Point

Anatomy of a for loop

for ( initialization ; condition ; increment )

statement

Page 24: CS222

The comma operator

C has a comma operator Expressions can be written and

separated by commas Each will be evaluated, and the last

one will give the value for the entire expression

int a = 10;int b = 5;int c = a, b, ++a, a + b; //16

Page 25: CS222

Adding the comma to for Sometimes you want to do multiple things on each

iteration Consider this code to reverse an array

You can even use a comma in the condition part, but it doesn't usually make sense

int start;int end;int temp;for( start = 0, end = length - 1; start < end; start++, end-- ){temp = array[start];array[start] = array[end];array[end] = temp;}

Page 26: CS222

do-while loops

As in Java, there are do-while loops which are useful only occasionally

They work just like while loops except that that they are guaranteed to execute at least once

Unlike a while loop, the condition isn’t checked the first time you go into the loop

Sometimes this is useful for getting input from the user

Don't forget the semicolon at the end!

Page 27: CS222

Anatomy of a do-while loop

do

statement

while( condition );

Page 28: CS222

Common Loop Errors

Page 29: CS222

Infinite loops

Loops can go on forever if you aren’t careful

int n = 40;int i = 1;

while( i <= 40 ){printf("%d", i);//supposed to print all the numbers//less than 40, but i never increases

}

Page 30: CS222

Infinite for loops

Infinite for loops are unusual, but possible:

This situation is more likely:

for( ; ; )printf("Hey!");

int i;for(i = 0; i < 10; i++ ){printf("%d", i); //lots of other codei--; //whoops, maybe changed from while?

}

Page 31: CS222

(Almost) infinite loops

Overflow and underflow will make some badly written loops eventually terminateint i;

for( i = 1; i <= 40; i-- )//whoops, should have been i++printf("%d", i);

Page 32: CS222

Fencepost errors

Being off by one is a very common loop error

int i;

for( i = 1; i < 40; i++ )//runs 39 timesprintf("%d", i);

Page 33: CS222

Skipping loops entirely

If the condition isn’t true to begin with, the loop will just be skipped

int i;for( i = 1; i >= 40; i++ ) //oops, should be <= printf("%d", i);

Page 34: CS222

Misplaced semicolon A misplaced semicolon can cause an empty loop body to

be executed

Everything looks good, loop even terminates But, only one number will be printed: 41 Misplaced semicolon usually makes a while loop infinite

int i;for( i = 1; i <= 40; i++ );//semicolon is wrong{printf("%d", i);

}

Page 35: CS222

Lab 3

Page 36: CS222

Upcoming

Page 37: CS222

Next time…

Systems programming concepts Functions and prototypes

Page 38: CS222

Reminders

Read LPI chapter 3 and K&R chapter 4

Project 1 due tonight by midnight!

Field trip to Cargas today! Be in the CS lounge around 3:20pm

so that we can leave at 3:30pm sharp!