練習7-1spa
#include <stdio.h> int main() { int n; printf("%d\t%d\t%d\n", sizeof 1,sizeof(unsigned)-1,sizeof n+2 ); //此行顯示結果爲 4 3 6 由於1的字節就是爲4,而-1的字節也是4再減去-1因此顯示爲3,最後是n+2爲6 printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));//此行顯示結果是 4 7 4 由於1的字節是4,double的字節長是8 -1是7,把(n+2)括起來以後使其爲一個值,因此是4; printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0) );//此行結果是 4 8 8 由於1的字節是4,把double-1都括起來以後,就是double類型字節爲8,同理最後也是8 }
練習7-2code
#include <stdio.h> #include<math.h> int main() { unsigned int number; int x; int i; int number1; printf("請輸入初始值:" ); scanf("%d", &number); number1 = number; printf("左移多少位:"); scanf("%d", &x); number <<= x; printf("左移後的值:%d",number); putchar('\n'); for (i = 0; i < x; i++) { number1 *= 2; } printf("乘以2的指數冪的值:%d", number1); }
#include <stdio.h> #include<math.h> int main() { unsigned int number; int x; int i; int number1; printf("請輸入初始值:" ); scanf("%d", &number); number1 = number; printf("右移多少位:"); scanf("%d", &x); number >>= x; printf("右移後的值:%d",number); putchar('\n'); for (i = 0; i < x; i++) { number1 /= 2; } printf("除以2的指數冪的值:%d", number1); }
練習7-3blog
#include <stdio.h> #include<math.h> unsigned rrotate(unsigned x,int n){ x >>=n; return x; } int main() { unsigned int number; int x; printf("請輸入初始值:"); scanf("%d", &number); printf("右移多少位:"); scanf("%d", &x); printf("右移後的值:%d", rrotate(number, x)); }
#include <stdio.h> #include<math.h> unsigned lrotate(unsigned x,int n){ x <<=n; return x; } int main() { unsigned int number; int x; printf("請輸入初始值:"); scanf("%d", &number); printf("左移多少位:"); scanf("%d", &x); printf("左移後的值:%d", lrotate(number, x)); }
練習7-4io
unsigned set(unsigned x, int pos) { unsigned mask = (1u << pos); x = (mask | x); return x; } //將第pos位設置爲1
unsigned reset(unsigned x, int pos) { unsigned mask = 1u; if (x & (1u<<pos)) return (x ^ (1u << pos)); else return x; } //將第pos爲設置爲0
unsigned inverse(unsigned x, int pos) { unsigned mask = 1u << pos; x = (x ^ mask); return x; } //將第pos位取反
練習7-5class
unsigned set_n(unsigned x, int pos, int n) { int i; for (i = 0; i < n - pos; i++) { unsigned mask = (1u << (pos + i)); x = (mask | x); } return x; } //一個位段都設置爲1
unsigned reset_n(unsigned x, int pos, int n) { unsigned mask = 1u; int i; for (i = 0; i < n-pos; i++) { if (x & (1u<<pos+i)) x= (x ^ (1u << pos+i)); } return x; } //一個位段都設置爲0
unsigned inverse_n(unsigned x, int pos, int n) { int i; unsigned mask = 1u; for (i = 0; i < n - pos; i++) { x = (x ^ (mask << pos + i)); } return x; } //一個位段都取反
練習7-6float
#include <stdio.h> // 顯示unsigned類型的值最大值,同時驗證最大值+1是0. int main() { unsigned a = 0; while (++a > 0); printf("%u", a - 1); putchar('\n'); printf("%u", a); }
練習7-7di
#include <stdio.h> int main() { float a; double b; long double c; scanf("%f",&a); printf("a=%f", a); putchar('\n'); scanf("%lf", &b); printf("b=%f", b); putchar('\n'); scanf("%lf", &c); printf("c=%f", c); }
練習7-8while
#include <stdio.h> int main() { float a; double b; long double c; printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c)); }
練習7-9co
#include <stdio.h> #include<math.h> int main() { double m; double x; printf("正方形的面積是:"); scanf("%lf", &m); printf("邊長是:%.2f", sqrt(m)); }
練習7-10math
#include <stdio.h> int main(void) { float x; int i; float m = 0.0; for (i = 0; i <= 100; i++) { x = i / 100.0; printf("x=%f x=%f\n",m,x); m += 0.01; } return 0; }
練習7-11
#include <stdio.h> int main(void) { float x; int i; float m = 0.0; float sum1 = 0; float sum2 = 0; for (i = 0; i <= 100; i++) { x = i / 100.0; printf("x=%f x=%f\n",m,x); m += 0.01; sum1 += m; sum2 += x; } printf("%f,%f", sum1, sum2); return 0; }