+ All Categories
Home > Documents > Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Date post: 25-Dec-2015
Category:
Upload: gwen-barrett
View: 218 times
Download: 1 times
Share this document with a friend
22
Homework • Homework – Continue Reading K&R Chapter 2 – We’ll go over HW2 – HW3 is posted • Questions?
Transcript
Page 1: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Homework

• Homework– Continue Reading K&R Chapter 2– We’ll go over HW2– HW3 is posted

• Questions?

Page 2: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Review HW2 Solution

• Let’s go over solutions to HW2– Learn to write pseudo code effectively– Learn to think about the problem logically– Learn to write C code from pseudo code

• These are key for being a good programmer

Page 3: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

trim

• Pseudo code for the trim programwhile there is still a line to process

for each character starting at the end of the line

find the first non blank character or the beginning of the line

if a non-blank character is found

add an EOL and a terminating zero

and print out the string

Page 4: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

trim

• While writing the pseudo code, think about:– A good strategy (e.g. scan line from the end

backwards rather than trying to go forwards)– Stopping each scan (e.g. not blank, not tab, etc)– What’s needed to make a shorter line printable

(e.g. add a new EOL and terminating zero)– What indicates that it is time to stop looping on

input lines (e.g. return from getline > 0 is false)

Page 5: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

trim• C code for the trim program

while ((len = getline(line, MAXLINE)) > 0) { stop = 0; for (i=len-1; i>=0 && !stop; --i) { if (line[i] != ' ' && line[i] != '\t' && line[i] != '\n') { stop = 1; /* stop on any non-blank,tab,eol */ line[i+1] = '\n'; /* add an eol */ line[i+2] = '\0'; /* and a zero to term the string */ printf("%s",line); } }}

Page 6: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

reverse

• Pseudo code for the reverse function find length of the string to reverse

for each character from the beginning of the string to half way

copy the character here to a holding variable

copy the character the same distance from end to here

copy the holding variable to the same distance from end

Holding VariableString Array

Page 7: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

reverse

• While writing the pseudo code, think about:– The basic steps needed (e.g., three way move)– The loop conditions (e.g., go halfway through)– The beginning/end as possible special cases

• What about a string that has an odd length?

• What about a string that has an even length?

– Does it matter if we move the middle character in an odd length string out and back in or not?

Page 8: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

reverse

• C code for the reverse function int len, i;

char c;

len = strlen(line) - 1; /* array index = len - 1 */

for (i=0; i<=len/2; ++i) { /* go halfway through the line */

c = line[i]; /* save a character from line */

line[i] = line[len-i]; /* overwrite that character */

line[len-i] = c; /* save reversed character */

}

Page 9: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Forcing Groups of Bits Off• Given char n, how to turn off all bits except

the least significant 5 bits: n = n & ‘\x1f’

n = ‘\xa5’ 10100101

n & ‘\x1f’ 10100101

& 00011111 turn off all bits

00000101 except bottom 5

• Called "masking" the bits -- only see bits on in result where 1's found in mask value

Page 10: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Forcing Groups of Bits Off

• x = x & ~077 (octal for a change)

Sets least significant 6 bits in x to 0

Even if you don't know size of x (e.g. size of int) ~077 = ~00 . . . 00111111

= 11 . . . 11000000 of required size

Extends itself with 1 bits on left for length of x

Page 11: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Forcing Groups of Bits On

• Given n, how to turn on the MS two bits (if already on, leave on). n = n | ‘\xc0’

n = '\xa5'

n | '\xc0': 10100101

| 11000000 turn on MS 2 bits

11100101

Page 12: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

“Encryption” with Exclusive Or

• Show that x ^ (x ^ y) == y

char y =‘\xa5’ 10100101 (plain text bits)

char x =‘\x69’ 01101001 (encryption key)

x ^ y 11001100 (cipher text bits)

x ^ (x ^ y) 10100101 (decrypted bits)

Same as original value of y!

Page 13: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

String Constants• String constant: “I am a string.”

– An array (a pointer to a string) of char values somewhere ending with NUL = '\0', the char with zero value.

– "0" is not same as '0'. The value "0" can't be used in an expression - only in arguments to functions like printf().

• Also have string functions:

See pg. 241, Appendix B and B3, pg. 249

#include <string.h>

With these definitions, can use: len = strlen(msg);

where msg is string in a string array

• NOTE: Write your own string functions for homework!!

Page 14: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Enumeration Symbolic Constants

• enum boolean {FALSE, TRUE};– Enumerated names assigned values starting from 0

• FALSE = 0• TRUE = 1

• Now can declare a variable of type enum boolean:enum boolean x;

x = FALSE; 

• Just a shorthand for creating symbolic constants instead of with #define statements

• Storage requirement is the same as int

Page 15: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Enumeration Symbolic Constants

• If you define months as enum type

enum months {ERR, JAN, FEB, MAR,

APR, MAY, JUN, JUL,

AUG, SEP, OCT, NOV,

DEC};

• Debugger might print value 2 as FEB

Page 16: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Code Example of the enum typeint main()

{

enum month {ERR, JAN, FEB, MAR, APR, MAY, JUN,

JUL, AUG, SEP, OCT, NOV, DEC};

enum month this_month;

this_month = FEB;

}

Page 17: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

const• "const" declaration is like "final" in Java

– warns compiler that variable value shouldn't change const char msg[ ] = "Warning: . . .";

– Commonly used for function arguments int copy(char to[ ], const char from[ ]);

If logic of the copy function attempts to modify the “from” string, compiler will give a warning

• Exact form of warning and actual behavior of the code is installation defined

Page 18: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Operators• Arithmetic Operators:

+ Add- Subtract* Multiply/ Divide% Modulo (Remainder after division ) e.g. 5%7 = 5 7%7 = 0 10%7 = 3

• Examples: int x, y; x / y truncates (no fractional part) x % y is the remainder when x is divided by y. Always true that: x == y*(x/y) + x%y

Page 19: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Operators• Logical Operators:

&& logical and|| logical or! Not

• Example:…

int year; if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

printf( "%d is a leap year\n", year); else

printf( "%d is not a leap year\n", year);

• Why are no inner parentheses needed?See precedence table, P 53. Good questions for exams!!

Page 20: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Precedence and Associativity of Operators

( ) [ ] -> . Left to right! ~ ++ - - + - * & (type) sizeof right to left* / % left to right+ - left to right<< >> left to right< <= > >= left to right= = != left to right& left to right^ left to right| left to right&& left to right|| left to right?: right to left= += -= *= /= %= &= ^= |= <<= >>= right to left, left to right

Pre

cede

nce

sign dereference address casting Associativity

Page 21: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Precedence and Associativity

• Precedence– Operators in the same row have the same precedence

– Operators are in order of decreasing precedence

• Associativity– Determine the order if the operators have the same

precedence

– e.g

x = y +=z -= 4 means

x = y +=(z -= 4)

x =(y +=(z -= 4))

Page 22: Homework –Continue Reading K&R Chapter 2 –We’ll go over HW2 –HW3 is posted Questions?

Relations / Comparisons

• We call a comparison between two arithmetic expressions a "relation" ae1 <= ae2 (Comparisons: <, <=, = =, !=, >=, > )

• A relation is evaluated as true or false (1 or 0) based on values of given arithmetic expressions

• if ( i < lim-1 = = j < k) – What's it mean? – See precedence table P 53

• Instead of c != EOF, could write !(c = = EOF)


Recommended