Presentation is loading. Please wait.

Presentation is loading. Please wait.

CMSC 104, Version 8/061L14AssignmentOps.ppt Assignment Operators Topics Increment and Decrement Operators Assignment Operators Debugging Tips Reading Section.

Similar presentations


Presentation on theme: "CMSC 104, Version 8/061L14AssignmentOps.ppt Assignment Operators Topics Increment and Decrement Operators Assignment Operators Debugging Tips Reading Section."— Presentation transcript:

1 CMSC 104, Version 8/061L14AssignmentOps.ppt Assignment Operators Topics Increment and Decrement Operators Assignment Operators Debugging Tips Reading Section 5.3

2 CMSC 104, Version 8/062L14AssignmentOps.ppt Increment and Decrement Operators The increment operator ++ The decrement operator -- Precedence: lower than (), but higher than * / and % Associativity: right to left Increment and decrement operators can only be applied to variables, not to constants or expressions

3 CMSC 104, Version 8/063L14AssignmentOps.ppt Increment Operator If we want to add one to a variable, we can say: count = count + 1 ; Programs often contain statements that increment variables, so to save on typing, C provides these shortcuts: count++ ; OR ++count ; Both do the same thing. They change the value of count by adding one to it.

4 CMSC 104, Version 8/064L14AssignmentOps.ppt Post increment Operator The position of the ++ determines when the value is incremented. If the ++ is after the variable, then the incrementing is done last (a post increment). int amount, count ; count = 3 ; amount = 2 * count++ ; amount gets the value of 2 * 3, which is 6, and then 1 gets added to count. So, after executing the last line, amount is 6 and count is 4.

5 CMSC 104, Version 8/065L14AssignmentOps.ppt Preincrement Operator If the ++ is before the variable, then the incrementing is done first (a preincrement). int amount, count ; count = 3 ; amount = 2 * ++count ; 1 gets added to count first, then amount gets the value of 2 * 4, which is 8. So, after executing the last line, amount is 8 and count is 4.

6 CMSC 104, Version 8/066L14AssignmentOps.ppt Code Example Using ++ #include int main ( void ) { int i = 1 ; /* count from 1 to 10 */ while ( i < 11 ) { printf (“%d ”, i) ; i++ ; /* same as ++i */ } return 0 ; }

7 CMSC 104, Version 8/067L14AssignmentOps.ppt Decrement Operator If we want to subtract one from a variable, we can say: count = count - 1 ; Programs often contain statements that decrement variables, so to save on typing, C provides these shortcuts: count-- ; OR --count ; Both do the same thing. They change the value of count by subtracting one from it.

8 CMSC 104, Version 8/068L14AssignmentOps.ppt Post decrement Operator The position of the -- determines when the value is decremented. If the -- is after the variable, then the decrementing is done last (a post decrement). int amount, count ; count = 3 ; amount = 2 * count-- ; amount gets the value of 2 * 3, which is 6, and then 1 gets subtracted from count. So, after executing the last line, amount is 6 and count is 2.

9 CMSC 104, Version 8/069L14AssignmentOps.ppt Predecrement Operator If the -- is before the variable, then the decrementing is done first (a predecrement). int amount, count ; count = 3 ; amount = 2 * --count ; 1 gets subtracted from count first, then amount gets the value of 2 * 2, which is 4. So, after executing the last line, amount is 4 and count is 2.

10 CMSC 104, Version 8/0610L14AssignmentOps.ppt A Hand Trace Example int answer, value = 4 ; Code Value Answer 4garbage value = value + 1 ; value++ ; ++value ; answer = 2 * value++ ; answer = ++value / 2 ; value-- ; --value ; answer = --value * 2 ; answer = value-- / 3 ;

11 CMSC 104, Version 8/0611L14AssignmentOps.ppt Practice Given int a = 1, b = 2, c = 3 ; What is the value of this expression? ++a * b - c-- What are the new values of a, b, and c?

12 CMSC 104, Version 8/0612L14AssignmentOps.ppt More Practice Given int a = 1, b = 2, c = 3, d = 4 ; What is the value of this expression? ++b / c + a * d++ What are the new values of a, b, c, and d?

13 CMSC 104, Version 8/0613L14AssignmentOps.ppt Assignment Operators = +=-= *= /=%= Statement Equivalent Statement a = a + 2 ;a += 2 ; a = a - 3 ;a -= 3 ; a = a * 2 ;a *= 2 ; a = a / 4 ; a /= 4 ; a = a % 2 ;a %= 2 ; b = b + ( c + 2 ) ;b += c + 2 ; d = d * ( e - 5 ) ;d *= e - 5 ;

14 CMSC 104, Version 8/0614L14AssignmentOps.ppt Precedence Operator Associativity ( ) left to right ! ++ -- & right to left * / % left to right + - left to right >= left to right == != left to right && left to right || left to right = += -= *= /= %= right to left

15 CMSC 104, Version 8/0615L14AssignmentOps.ppt Good Programming Practices Always use parenthesis when you have more than two operators!

16 CMSC 104, Version 8/0616L14AssignmentOps.ppt Practice with Assignment Operators int i = 1, j = 2, k = 3, m = 4 ; Expression Value i += j + k j *= k = m + 5 k -= m /= j * 2

17 CMSC 104, Version 8/0617L14AssignmentOps.ppt Code Example Using /= and ++ Counting the Digits in an Integer #include int main ( void ) { int num, temp, digits = 0 ; temp = num = 4327 ; while ( temp > 0 ) { printf (“%d\n”, temp) ; temp /= 10 ; digits++ ; } printf (“There are %d digits in %d.\n”, digits, num) ; return 0 ; }

18 CMSC 104, Version 8/0618L14AssignmentOps.ppt Debugging Tips Trace your code by hand (a hand trace), keeping track of the value of each variable. Insert temporary printf() statements so you can see what your program is doing. o Confirm that the correct value(s) has been read in. o Check the results of arithmetic computations immediately after they are performed.

19 CMSC 104, Version 8/0619L14AssignmentOps.ppt gdb gdb is the Gnu source code debugger. You must compile your program with: o gcc –Wall –ansi –g myprog.c Run the debugger: o gdb a.out

20 CMSC 104, Version 8/0620L14AssignmentOps.ppt myprog.c #include int main( void ) { int a; float b; a = 7; a = a * 2; a = a - 3; b = 3.1; b = b * 2; b = b + 3.1; printf( "a = %d b = %.2f\n", a, b ); return 0; }

21 CMSC 104, Version 8/0621L14AssignmentOps.ppt gdb [burt@linux2 ~/gdb]$ gcc -g -Wall -ansi myprog.c [burt@linux2 ~/gdb]$ gdb a.out GNU gdb Red Hat Linux (6.1post-1.20040607.52rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb)

22 CMSC 104, Version 8/0622L14AssignmentOps.ppt gdb Commands break – set a breakpoint o break main run – execute the program in gdb o set the breakpoint before using this command step – execute until another line is reached x – examine memory at the name of a variable o x/1wd &a -- for int a o x/1wf &b -- for float b

23 CMSC 104, Version 8/0623L14AssignmentOps.ppt Example (gdb) break *main Breakpoint 1 at 0x8048344: file myprog.c, line 4. (gdb) run Starting program: /afs/umbc.edu/users/b/u/burt/home/gdb/a.out Breakpoint 1, main () at myprog.c:4 4 { (gdb) s 7 a = 7; (gdb) s 8 a = a * 2; (gdb) x/1wd &a 0xbffffc14: 7

24 CMSC 104, Version 8/0624L14AssignmentOps.ppt Example – cont’d 10 b = 3.1; (gdb) s 11 b = b * 2; (gdb) x/1wf &b 0xbffffc10: 3.0999999 (gdb) Notice that the computer stored 3.1 with a minor error! This is a problem inherent when using floating point numbers.

25 CMSC 104, Version 8/0625L14AssignmentOps.ppt gdb handout See the gdb handout on the course website for complete list of gdb commands.


Download ppt "CMSC 104, Version 8/061L14AssignmentOps.ppt Assignment Operators Topics Increment and Decrement Operators Assignment Operators Debugging Tips Reading Section."

Similar presentations


Ads by Google