首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言資料型別與運算實戰:整數除法陷阱、浮點數精度、時間差計算與變數交換

     編輯:關於C語言

整數除法的截斷陷阱

int a = 10, b = 3;
printf("%d\n", a / b);   // 輸出 3,小數部分直接捨棄

解決方案:引入浮點數運算

  • 將任一運算元改為浮點常數:10.0 / 3 或 10 / 3.0;
  • 或宣告變數為 double:double x = 10, y = 3; printf("%f", x/y);
  • scanf/printf 格式:double 讀用 %lf,寫用 %f。

實戰範例:時間差計算

int h1, m1, h2, m2;
scanf("%d %d", &h1, &m1);
scanf("%d %d", &h2, &m2);
int t1 = h1 * 60 + m1;
int t2 = h2 * 60 + m2;
int diff = t2 - t1;
printf("時間差 %d 小時 %d 分鐘\n", diff / 60, diff % 60);

求平均值避免溢位

int a, b;
scanf("%d %d", &a, &b);
printf("平均值 %.2f\n", (a + b) / 2.0);   // 強制浮點除法

運算子優先級速記(高→低)

  1. + -(正負號)
  2. * / %
  3. + -(加減)
  4. = += -= *= /= %=

變數交換三種寫法

// 1. 暫存變數(最通用)
int t = a; a = b; b = t;

// 2. 算術交換(僅限數值型,當心溢位)
a = a + b; b = a - b; a = a - b;

// 3. XOR 交換(整數限定,無暫存變數)
a ^= b; b ^= a; a ^= b;

關鍵提醒

  • C 語言無 boolean 型別,關係運算結果:真為 1,假為 0;任何非 0 值在邏輯判斷中視為真;
  • a = b = c = 0 合法(右結合),但 a == b == c 不等同數學連等,實為 (a==b) == c;
  • 除法/取模運算元為負數時,C99 規定商向零截斷,餘數符號同被除數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved