1. 程式人生 > 實用技巧 >1.2 把錯誤關在籠子裡的五道關卡

1.2 把錯誤關在籠子裡的五道關卡

實驗結果:

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  }

實驗總結:

格式化輸入與輸出在函式執行時的細節要求真滴嚴格,還是得自己多敲敲啊