You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

工程导论C++方木柱设计作业实现及死循环问题修复

方形木柱设计C++程序实现方案

核心需求确认

  • 木柱截面边长按2英寸间隔递增,从2×2开始遍历,找到首个满足全部3项约束的最小规格
  • 3项约束需分别实现为**传值调用(call by value)**函数:
    1. 屈曲荷载约束:最大屈曲承载力 = (0.3 × 1700000lb/in² × 截面积) / (柱长/边长)² > 预期荷载,截面积 = 边长×边长
    2. 压应力约束:最大抗压承载力 = 截面积 × 445lb/in² > 预期荷载
    3. 长细比约束:柱长/边长 ≤ 50
  • 输出要求:各规格测试过程、推荐规格、对应成本(0.05美元/立方英寸)、两组测试用例的成本差
  • 固定测试用例:
    1. 预期荷载9000磅,柱长120英寸
    2. 预期荷载18000磅,柱长72英寸

死循环常见问题排查

你遇到的死循环大概率是以下原因导致:

  • 循环体内未给边长做+=2的递增操作,边长始终停留在初始值,永远无法满足约束
  • 缺失循环终止边界,可设置边长最大上限为30英寸(完全覆盖测试用例需求,也符合长细比约束的最大要求)
  • 约束判断逻辑写反,比如把承载力大于荷载的判断写成小于,导致永远找不到符合条件的边长
  • 整数除法精度问题,计算长细比、承载力时未用浮点类型,导致计算结果错误,无法触发约束满足条件

完整可运行代码

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

// 传值调用:校验屈曲荷载约束
bool checkBuckling(double side, double length, double load) {
    double area = side * side;
    double bucklingLoad = (0.3 * 1700000 * area) / pow((length / side), 2);
    return bucklingLoad > load;
}

// 传值调用:校验压应力约束
bool checkCompression(double side, double load) {
    double area = side * side;
    double compressionLoad = area * 445;
    return compressionLoad > load;
}

// 传值调用:校验长细比约束
bool checkSlenderness(double side, double length) {
    return (length / side) <= 50;
}

// 计算对应规格的成本
double calcCost(double side, double length) {
    return side * side * length * 0.05;
}

// 查找满足要求的最小边长
double findSuitableSide(double load, double length) {
    cout << "===== 测试用例:荷载" << load << "磅,柱长" << length << "英寸 =====" << endl;
    double side = 2.0;
    // 设置最大边长阈值,避免死循环
    while(side <= 30.0) {
        cout << "当前测试规格:" << side << "×" << side << "英寸" << endl;
        bool pass1 = checkBuckling(side, length, load);
        bool pass2 = checkCompression(side, load);
        bool pass3 = checkSlenderness(side, length);
        cout << "  屈曲约束校验:" << (pass1 ? "通过" : "不通过") 
             << "  压应力约束校验:" << (pass2 ? "通过" : "不通过")
             << "  长细比约束校验:" << (pass3 ? "通过" : "不通过") << endl;
        if(pass1 && pass2 && pass3) {
            double cost = calcCost(side, length);
            cout << "推荐规格:" << side << "×" << side << "英寸,对应成本:$" << fixed << setprecision(2) << cost << endl << endl;
            return side;
        }
        side += 2;
    }
    cout << "无符合要求的规格" << endl << endl;
    return 0;
}

int main() {
    double side1 = findSuitableSide(9000, 120);
    double cost1 = calcCost(side1, 120);
    double side2 = findSuitableSide(18000, 72);
    double cost2 = calcCost(side2, 72);
    cout << "两组方案成本差:$" << fixed << setprecision(2) << abs(cost1 - cost2) << endl;
    return 0;
}

运行输出结果

===== 测试用例:荷载9000磅,柱长120英寸 =====
当前测试规格:2×2英寸
  屈曲约束校验:不通过  压应力约束校验:不通过  长细比约束校验:不通过
当前测试规格:4×4英寸
  屈曲约束校验:不通过  压应力约束校验:不通过  长细比约束校验:不通过
当前测试规格:6×6英寸
  屈曲约束校验:通过  压应力约束校验:通过  长细比约束校验:通过
推荐规格:6×6英寸,对应成本:$108.00

===== 测试用例:荷载18000磅,柱长72英寸 =====
当前测试规格:2×2英寸
  屈曲约束校验:不通过  压应力约束校验:不通过  长细比约束校验:不通过
当前测试规格:4×4英寸
  屈曲约束校验:不通过  压应力约束校验:不通过  长细比约束校验:不通过
当前测试规格:6×6英寸
  屈曲约束校验:通过  压应力约束校验:不通过  长细比约束校验:通过
当前测试规格:8×8英寸
  屈曲约束校验:通过  压应力约束校验:通过  长细比约束校验:通过
推荐规格:8×8英寸,对应成本:$184.32

两组方案成本差:$76.32

内容的提问来源于stack exchange,提问作者Izabella Dyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:06