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

C語言基礎:兩點距離計算與結構體封裝實踐

     編輯:關於C語言

問題背景

給定平面直角坐標系中兩點 A(x1, y1)、B(x2, y2),求兩點之間的歐幾里得距離。公式為:

distance = √((x2-x1)² + (y2-y1)²)

程式實現步驟

  1. 定義 distance() 函式,接受四個整數參數,返回 float 距離。
  2. main() 中提示輸入兩點座標,調用函式並格式化輸出。
  3. 使用 abs() 計算座標差絕對值(其實直接相減平方結果相同,保留可讀性)。
  4. 引入 math.h 使用 sqrt(),編譯時需鏈接數學庫(gcc -lm)。

原始代碼優化版

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 使用結構體封裝點座標,提升語義清晰度
typedef struct { int x, y; } Point;

float distance(Point a, Point b) {
    int dx = a.x - b.x;
    int dy = a.y - b.y;
    return sqrt(dx*dx + dy*dy); // 直接平方,無需 abs()
}

int main() {
    Point p1, p2;
    printf("Enter first point (x y): ");
    if (scanf("%d %d", &p1.x, &p1.y) != 2) return 1;
    printf("Enter second point (x y): ");
    if (scanf("%d %d", &p2.x, &p2.y) != 2) return 1;

    printf("Distance: %.4f\n", distance(p1, p2));
    return 0;
}

進階擴展方向

  • 泛型化:改用 double 型別支援更大範圍與精度。
  • 多維擴展:擴展至 3D/ND 空間,結構體加入 z 或動態陣列。
  • 效能優化:若僅需比較距離大小,可省略 sqrt 直接比較平方和。
  • 誤差分析:大座標值相減平方可能溢位 int,建議轉 long long 或 double 運算。

常見錯誤提醒

  1. 忘記 #include <math.h> 或編譯未加 -lm 導致連結錯誤。
  2. 整數除法導致精度丟失(本題不涉及除法,但計算斜率時需注意)。
  3. scanf 格式字串缺少空格換行,導致輸入緩衝區殘留字元影響後續讀取。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved