1.2 把錯誤關在籠子裡的五道關卡
阿新 • • 發佈:2020-11-01
實驗結果:
ex1:
1 #include <stdio.h> 2 int main() { 3 int a=5, b=7, c=100, d, e, f; 4 5 d = a/b*c; 6 e = a*c/b; 7 f = c/b*a; 8 9 printf("d=%d, e=%d, f=%d\n",d,e,f); 10 11 return 0; 12 }
line5:d=a÷b×c;line6:e=a×c÷b;line7:f=c÷b×a
變數d、e、f計算結果不同的原因是在編譯過程中按順序依次進行計算,且int整形運算無小數,影響了結果。
ex2:
1 #include <stdio.h> 2 int main() { 3 int x=1234; 4 float f=123.456; 5 double m=123.456; 6 char ch='a'; 7 char a[]="Hello, world!"; 8 int y=3, z=4; 9 10 printf("%d %d\n", y, z); 11 printf("y=%d, z=%d\n", y,z); 12 printf("%8d,%2d\n", x,x);13 printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f); 14 printf("%lf\n",m); 15 printf("%3c\n", ch); 16 printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); 17 18 return 0; 19 }
%d:按十進位制整數輸出已儲存的變數
%md:輸出m長度的的資料,若資料長度<m,則在左側用空格補全,反則按實際輸出。
%nf:對輸出的實數的小數點後資料限制位數(四捨五入)。
%e:將資料按指數形式輸出。
%lf:指定資料輸出精度為double型
%3c:按字元輸出且長度為3,長度不足左側補空格。
%m.ns:將字串取n個單位按m長度輸出。
ex3:
1 // ex3.cpp 2 #include <stdio.h> 3 int main() { 4 double x,y; 5 char c1,c2,c3; 6 int a1,a2,a3; 7 8 scanf("%d%d%d",&a1,&a2,&a3); 9 printf("%d,%d,%d\n",a1,a2,a3); 10 scanf("%c%c%c",&c1,&c2,&c3); 11 printf("%c%c%c\n",c1,c2,c3); 12 scanf("%lf,%lf",&x,&y); 13 printf("%.1f,%.1lf\n",x,y); 14 15 return 0; 16 }
ex4:
1 #include <stdio.h> 2 int main() { 3 char x; 4 5 x = getchar(); 6 7 if(x>='1'&&x<='9') 8 printf("%cÊÇÊý×Ö×Ö·û\n", x); 9 else if(x>='a'&&x<='z'||x>='A'&&x<='Z') 10 printf("%cÊÇÓ¢ÎÄ×Öĸ\n", x); 11 else 12 printf("%cÊÇÆäËü×Ö·û\n", x); 13 14 15 return 0; 16 }
ex5:
1 // ex5.cpp 2 #include <stdio.h> 3 int main() { 4 char ans1, ans2; 5 6 printf("複習了沒? (輸入y或Y表示複習了,輸入n或N表示沒複習) : "); 7 ans1 = getchar(); // 從鍵盤輸入一個字元,賦值給ans1 8 9 getchar(); // 思考這裡為什麼要加這一行 10 11 printf("\n動手敲程式碼了沒? (輸入y或Y表示敲了,輸入n或N表示木有敲) : "); 12 ans2 = getchar(); 13 14 if((ans1=='y'||ans1=='Y')&&(ans2=='y'||ans2=='Y')) 15 printf("\n羅馬不是一天建成的:)\n"); 16 else 17 printf("\n羅馬不是一天毀滅的。。。\n"); 18 19 return 0; 20 }
line9中的getchar是為了在程式執行時按任意鍵繼續顯示下一個問題(猜的)
ex6:
1 # include<stdio.h> 2 # include<math.h> 3 int main() 4 { 5 int sum,n; 6 scanf("%d",&n); 7 sum=(1-pow(2,n))/(1-2); 8 printf("n=%d時,sum=%d",n,sum); 9 return 0; 10 }
實驗總結:
格式化輸入與輸出在函式執行時的細節要求真滴嚴格,還是得自己多敲敲啊