switch.c (2745B)
1 main() 2 { 3 int i; char *s; 4 5 for (s = "bfnrtvx"; *s; s++) 6 printf("%c = 0x%x\n", *s, backslash(*s)); 7 f(); 8 g(); 9 h(); 10 for (i = 0x1000000; i&0x7000000; i += 0x1000000) 11 big(i); 12 limit(); 13 return 0; 14 } 15 16 backslash(c) 17 { 18 switch (c) { 19 case 'b': 20 return '\b'; 21 case 'f': 22 return '\f'; 23 case 'n': 24 return '\n'; 25 case 'r': 26 return '\r'; 27 case 't': 28 return '\t'; 29 case 'v': 30 return '\v'; 31 } 32 return c; 33 } 34 35 f() { 36 int i, x = 0, y; 37 38 printf("f:\n"); 39 for (i = 0; i <= 20; i++) { 40 y = i; 41 switch (i) { 42 case 1: x = i; break; 43 case 2: x = i; break; 44 case 7: x = i; break; 45 case 8: x = i; break; 46 case 9: x = i; break; 47 case 16: x = i; break; 48 case 17: x = i; break; 49 case 18: x = i; break; 50 case 19: x = i; break; 51 case 20: x = i; break; 52 } 53 printf("x = %d\n", x); 54 } 55 } 56 57 g() { 58 int i; 59 60 printf("g:\n"); 61 for (i = 1; i <= 10; i++) 62 switch (i) { 63 case 1: case 2: printf("1 %d\n", i); break; 64 case 3: case 4: case 5: printf("2 %d\n", i); break; 65 case 6: case 7: case 8: printf("3 %d\n", i); 66 default: 67 printf("d %d\n", i); break; 68 case 1001: case 1002: case 1003: case 1004: 69 printf("5 %d\n", i); break; 70 case 3001: case 3002: case 3003: case 3004: 71 printf("6 %d\n", i); break; 72 } 73 } 74 75 h() 76 { 77 int i, n=0; 78 79 printf("h:\n"); 80 for (i = 1; i <= 500; i++) 81 switch (i) { 82 default: n++; continue; 83 case 128: printf("i = %d\n", i); break; 84 case 16: printf("i = %d\n", i); break; 85 case 8: printf("i = %d\n", i); break; 86 case 120: printf("i = %d\n", i); break; 87 case 280: printf("i = %d\n", i); break; 88 case 264: printf("i = %d\n", i); break; 89 case 248: printf("i = %d\n", i); break; 90 case 272: printf("i = %d\n", i); break; 91 case 304: printf("i = %d\n", i); break; 92 case 296: printf("i = %d\n", i); break; 93 case 288: printf("i = %d\n", i); break; 94 case 312: printf("i = %d\n", i); break; 95 } 96 printf("%d defaults\n", n); 97 } 98 99 big(x) unsigned x; { 100 switch(x&0x6000000){ 101 case -1: 102 case -2: 103 case 0x0000000: 104 printf("x = 0x%x\n", x); break; 105 case 0x2000000: 106 printf("x = 0x%x\n", x); break; 107 case 0x4000000: 108 printf("x = 0x%x\n", x); break; 109 default: 110 printf("x = 0x%x (default)\n", x); break; 111 } 112 } 113 114 #include <limits.h> 115 116 limit() { 117 int i; 118 119 for (i = INT_MIN; i <= INT_MIN+5; i++) 120 switch (i) { 121 case INT_MIN: printf("0\n"); break; 122 case INT_MIN+1: printf("1\n"); break; 123 case INT_MIN+2: printf("2\n"); break; 124 case INT_MIN+3: printf("3\n"); break; 125 case INT_MIN+4: printf("4\n"); break; 126 default: printf("5\n"); break; 127 } 128 for (i = INT_MAX; i >= INT_MAX-5; i--) 129 switch (i) { 130 case INT_MAX: printf("0\n"); break; 131 case INT_MAX-1: printf("1\n"); break; 132 case INT_MAX-2: printf("2\n"); break; 133 case INT_MAX-3: printf("3\n"); break; 134 case INT_MAX-4: printf("4\n"); break; 135 default: printf("5\n"); break; 136 } 137 }