Pick C語言之重新來過1

3.1分析並寫出下列程序的運行結果。

(1)

#include<stdio.h>main(){int a = 12,b = 3;float x = 18.5,y = 4.6;printf("%f
",(float)(a*b)/2));printf("%d
",(int)x%(int)y);}

運行截圖

阿飯說:

(a*b)/2 = 36,而(float)(a*b)為強制類型轉換,將(a*b)結果強制轉換為實型數,再將結果除以2,得到18.000000。然後將x、y的值轉換為int,成為了18、4,取余就是2了。

在得出18.000000時,疑問為什麼是六個零,「因為是float型」對於我而言甚是勉強,於是在csdn找到了這樣的答案:

首先printf無論是%f還是%lf沒有區別,因為當printf函數當遇到float類型時會自動轉化為double,從c語言標準來說printf並沒有%lf的定義,雖然大多數編譯器都能接受,但在做題時printf最好用%f,否則可能出現一些莫名其妙的錯誤。對於scanf來說double就應該用%lf float就用%f。

結論:

  1. 有些編譯器 float的有效數字位是 8位 , 有些有效數字位是 7位
  2. 有些編譯器double的有效數字位是 15位, 有些是 16位
  3. 注意printf(「%f」, x); // 默認輸出6位小數(不要和有效數字混淆)

(2)

#include<stdio.h>main(){int x = 32,y = 81,p,q;p = x ++;q=--y;printf("%d %d
",p,q);printf("%d %d
",x,y);}

運行截圖

阿飯說:

對於前綴後綴兩個一元運算符的處理,前綴是在變數使用之前對其執行操作,後綴反之。如果出現多個一元運算符,則自右向左計算。上題可理解為:p=x,x+=x,y=y-1,q=y,易知p=32,x=33,q=80,y=80。

3.2鍵盤輸入三位整數,編程計算並輸出它的逆序數。

#include <stdio.h>main () { int x; int a,b,c; int y; printf(" 請輸入一個數"); scanf("%d
",&x); a = x/100; b = x/10-a*10; //(x%100)/10或x/10%10亦可 c = x%10; y = c*100+b*10+a; printf("The consequence is=%d
",y);}

阿飯說:

注意的是求十位數的計算,開始我寫的是x/10,求得的是十位和百位,後來更正為x/10-a*10。第二個就是輸出語句,和java混淆了,Java是「語句」+結果,我們C語言是「語句=%d/n」,結果。

3.3銀行存款。

#include <stdio.h>#include<math.h>main () { float capital,n; float rate = 0.0225; double deposit; printf("請輸入本金和存款年限
"); scanf("%f,%f
",&capital,&n); deposit = capital*pow(1+rate,n); printf("n年後的本利之和=%lf
",deposit);}

阿飯說

每年的本利之和是本金乘以(1+利率)的年限次方。注意調用了頭文件math.h,pow(x,y)是計算x的y次方;同時輸入多個數時,scanf1中用逗號隔開。

3.4輸出一元二次方程的根

#include <stdio.h>#include<math.h>main () { int a,b,c; int x1,x2; printf("請輸入係數a,b,c
"); scanf("%d,%d,%d
",&a,&b,&c); x1 = (-1*b+sqrt(b*b-4*a*c))/2*a; x2 = (-1*b-sqrt(b*b-4*a*c))/2*a; printf("兩個不相等的實根為=%d,%d
",x1,x2);}

阿飯說

不要想當然的-b、2a,C語言無法識別。

關於scanf(%d%d),scanf(%d,%d)輸入數據前者加空格後者加逗號

實驗題:宏定義與const常量

#include <stdio.h># define PI 3.14main () { float r, v,s; printf("請輸入半徑
"); scanf("%f
",&r); v = 4/3*PI*r*r*r; s = 4*PI*r*r; printf(" 球的體積=%f
",v); printf(" 球的面積=%f
",s);}

#include <stdio.h>main () { const float PI = 3.14; float r, v,s; printf("請輸入半徑
"); scanf("%f
",&r); v = 4/3*PI*r*r*r; s = 4*PI*r*r; printf(" 球的體積=%f
",v); printf(" 球的面積=%f
",s);}

註:本系列對應教材為高等教育社出版C語言程序設計(第3版),蘇小紅等主編。若有紕漏失誤,煩請多多指正,也希望可以一起交流c語言、java學習經驗、問題。


推薦閱讀:

Pick C語言之重新來過3

TAG:C語言設計習題 | C語言程序設計書籍 |