250 likes | 441 Views
Switch. Associativity, Loopunrolling , printfmulti , stack location “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth. Defect in the switch statement.
E N D
Switch Associativity, Loopunrolling, printfmulti, stack location “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth
Defect in the switch statement • Perhaps the biggest defect in the switch statement is that cases don't break automatically after the actions for a case label. Once a case statement is executed, the flow of control continues down, executing all the following cases until a break statement is reached. The code switch (2) { case 1: printf("case 1 \n"); case 2: printf("case 2 \n"); case 3: printf("case 3 \n"); case 4: printf("case 4 \n"); default: printf("default \n"); }
Print out case 2 case 3 case 4 Default • This is known as "fall through" and was intended to allow common end processing to be done, after some case-specific preparation had occurred. In practice it's a severe misfea-ture, as almost all case actions end with a break;.
Multiline messages usingescaped newlines printf( "A favorite children's book \ is 'Thomas the tank engine and the Naughty Enginedriver \ who \ tied down Thomas's boiler safety valve'\n" );
Order of Evaluation • The moral of all this is that you should always put parentheses around an expressionthat mixes Booleans, arithmetic, or bit-twiddling with anything else.
Excellent advice • Some authorities recommend that there are only two precedence levels to remember in C: multiplication and division come before addition and subtraction. • Everything else should be in parentheses.
What "Associativity" Means - Right-associativity of assignment operators What value a will have ? #include <stdio.h> int main(void){ int a, b=1, c=2; a = b = c; printf("Value of A is : %d\n",a); system("pause"); return 0; }
Right-associativity of assignment operators • Output: Value of A is : 2 • Every operator has a level of precedence and a "left" or "right" associativity assigned to it. • The Right associativityprotocol says that this means the rightmost operation in the expression is evaluated first • The right-associativity of the = operator allows expressions such as a = b = c to be interpreted as a = (b = c), thereby setting both a and b to the value of c.
The stack • The stack provides the storage area for local variables declared inside functions. These are known as "automatic variables" in C terminology.
The approximate location of the stackon your system: #include <stdio.h> int main(){ inti; printf("The stack top is near %p\n", &i); system("pause"); return 0; }
The standard code optimizations are techniques loop unrolling, in-line function expansion, common subexpression elimination, improved register • allocation, omitting runtime checks on array bounds, loop-invariant code motion, operator strength • reduction (turning exponen-tiation into multiplication, turning multiplication into bit-shiftingand/or addition), and so on.
loop unrolling Example Unrolled loop should run faster because of reduction in loop overhead. Normal loop int x; for(x =0; x <100; x++) { printhello(x); }
loop unrolling Example • After loop unrolling for (x = 1; x <=100; x+=5) { printhello(x); printhello(x+1); printhello(x+2); printhello(x+3); printhello(x+4); } As a result of this modification, the new program has to make only 20 iterations, instead of 100.
Algorithm • Computation is any type of calculation or use of computing technology in information processing.
What is the output of the following program? #include<stdio.h> int main() { int a = 5; int b = ++a * a++; printf("%d\n",b); system("pause"); return 0; }
What is the output of the following program? • (a) 25 • (b) 30 • (c) 36 • (d) Undefined Behavior
What is the output of the following switch program? #include<stdio.h> int main() { int a = 5; switch(a) { default: a = 4; case 6: a--; case 5: a = a+1; case 1: a = a-1; } printf("%d \n",a); system("pause"); return 0; }
What is the output of the following switch program? • (a) 5 • (b) 4 • (c) 3 • (d) None of these
Quiz – Sum numbers from 1 – to 10 • The general formula is: • (First term + last term) * (number of terms / 2) (1+10)*(10/2) or 55
Cyclic nature of signedchar • What will be output if you will compile and execute the following c code? void main(){ char c=125; c=c+10; printf("%d",c); System(“pause”); }
Output • (A) 135 • (B) +INF • (C) -121 • (D) -8 • (E) Compiler error
Cyclic nature of signedchar • So, • 125+1= 126 • 125+2= 127 • 125+3=-128 • 125+4=-127 • 125+5=-126 • 125+6=-125 • 125+7=-124 • 125+8=-123 • 125+9=-122 • 125+10=-121
Assignment - 3 • Greatest common divisor • The greatest common divisor (gcd) of two or more non-zero integers, is the largest positive integer that divides the numbers without a remainder. For example, the GCD of 8 and 12 is 4.
Using Euclid's algorithm To compute gcd(48,18), divide 48 by 18 to get a quotient of 2 and a remainder of 12. Then divide 18 by 12 to get a quotient of 1 and a remainder of 6. Then divide 12 by 6 to get a remainder of 0, which means that 6 is the gcd.