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

PAT 基礎編程題解:分支結構實現日K線蠟燭圖判斷

     編輯:關於C語言

題目背景與需求分析

在股票技術分析中,日K線(蠟燭圖)是最基礎也最重要的圖表工具之一。每根K線包含四個關鍵價位:開盤價、收盤價、最高價、最低價。本題要求根據這四個價位,判斷K線的實體類型(陽線/陰線/十字星)以及上下影線的存在情況。

核心邏輯解析

實體類型判斷

  • 陰線(BW-Solid):收盤價 < 開盤價,實體為黑/藍色實心
  • 陽線(R-Hollow):收盤價 > 開盤價,實體為紅/白色空心
  • 十字星(R-Cross):收盤價 = 開盤價,實體縮為一線

影線判斷邏輯

影線反映了當日價格波動的極值範圍:

  • 下影線:最低價 < min(開盤價, 收盤價)
  • 上影線:最高價 > max(開盤價, 收盤價)

注意:十字星因開收盤價相同,上下影線判斷基準統一為該價位。

代碼實現要點

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

int main() {
    float open, close, high, low;
    scanf("%f %f %f %f", &open, &high, &low, &close);

    // 實體類型判斷(互斥關係,建議用 if-else if)
    if (close < open)
        printf("BW-Solid");
    else if (close > open)
        printf("R-Hollow");
    else
        printf("R-Cross");

    // 影線判斷(可並存,需獨立判斷)
    bool hasLower = (low < open && low < close);
    bool hasUpper = (high > open && high > close);

    if (hasLower && hasUpper)
        printf(" with Lower Shadow and Upper Shadow");
    else if (hasLower)
        printf(" with Lower Shadow");
    else if (hasUpper)
        printf(" with Upper Shadow");

    return 0;
}

優化建議與常見陷阱

  1. 條件互斥優化:實體類型判斷應使用 if-else if-else 結構,避免多次判斷
  2. 浮點數比較:題目輸入為浮點數,直接用 == 比較十字星在精度上通常可接受,但工程實踐建議設定微小閾值
  3. 輸出格式控制:題目要求輸出格式嚴格,注意空格與換行,建議最後統一輸出
  4. 邏輯簡化:影線判斷可提取布爾變量,提高可讀性並減少重複計算

測試用例驗證

輸入輸出說明
10.0 12.0 9.0 11.0R-Hollow with Lower Shadow and Upper Shadow陽線,雙影線
10.0 11.0 9.5 9.0BW-Solid with Upper Shadow陰線,僅上影線
10.0 10.0 9.0 11.0R-Cross with Lower Shadow and Upper Shadow十字星,雙影線
10.0 11.0 10.0 10.5R-Hollow陽線,無影線(光頭光腳)

總結

本題考察基礎分支結構與金融數據邏輯的結合。關鍵在於正確理解K線構成要素,將業務規則精確轉化為條件判斷。實際開發中,建議封裝為獨立函數,便於複用與單元測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved