首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数在执行while循环时不更新变量。

函数在执行while循环时不更新变量。
EN

Stack Overflow用户
提问于 2015-10-26 13:24:23
回答 3查看 961关注 0票数 1
代码语言:javascript
复制
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <iostream>

using namespace std;
//resistivity ohms*meters
/*
 * 
 */
double diameter (double wiregauge)
{
  double k;
  double diam;

    k=((36-wiregauge)/39);
    diam=(.127)*(pow(92,k));
    diam=(diam/100);

  return diam;
}
double copperWireResistance(double length, double wiregauge)
{
    const long double PI=(atan(1)*4);
    int b; //equals k in the first function
    double diam1; //diameter of the wire
    double cross_area_copper; //denominator of the equation
    double numerator1; //numerator of the equation
    double p; //resistivity of copper
    double coppWireResistance;

    b=((36-wiregauge)/39);
    diam1=(.127*pow(92,b));
    diam1=(diam1/100);
    cross_area_copper=PI*(pow(diam1,2));
    p=(1.678*(pow(10,-8)));
    numerator1=((4*p)*length);

    coppWireResistance=numerator1/cross_area_copper;

        return coppWireResistance;

}

double aluminumWireResistance(double length, double wiregauge)
{
    const long double PI=(atan(1)*4);
    int a;
    double diam2;
    double numerator2;
    double cross_area_alum;
    double p1;
    double alumWireResistance;

    a=((36-wiregauge)/39);
    diam2=(.127*pow(92,a));
    diam2=(diam2/100);
    cross_area_alum=(PI*pow(diam2,2));
    p1=(2.82*pow(10,-8));
    numerator2=((4*p1)*length);

    alumWireResistance=numerator2/cross_area_alum;

        return alumWireResistance;
}


int main(int argc, char** argv) {

    double Max_N; //maximum wire gauge value
    double L; //Length of the wire
    double string_gauge=0;

    cout<<"Maximum wire gauge value: ";
    cin>>Max_N;
    cout<<"Length of Wire: ";
    cin>>L;


    while(string_gauge<Max_N)
    {
    cout<<"String Gauge: "<<string_gauge<<endl;
    cout<<"Diameter of wire: "<<diameter(string_gauge)<<endl;
    cout<<"Copper Wire Resistance: "<<copperWireResistance(L,string_gauge)<<endl;
    cout<<"Aluminum Wire Resistance: "<<aluminumWireResistance(L,string_gauge)<<endl;


    string_gauge++;
    cout<<endl;
    }



    return 0;
}

我试图让铜线电阻和铝电阻更新,当它运行通过一个循环,但在第一个数字之后,它没有更新到新的弦规。有什么理由或者我需要补充的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-26 13:29:57

这两个函数中的每个函数都是wiregauge参数,用于以下计算:

代码语言:javascript
复制
a=((36-wiregauge)/39); // in aluminumWireResistance
b=((36-wiregauge)/39); // in copperWireResistance

因为abint,而wiregauge是从调用更改到另一个调用的唯一参数。ab总是等于0。函数的返回值将始终是相同的。

若要解决此问题并具有更高的精度,可以将a类型更改为double

票数 1
EN

Stack Overflow用户

发布于 2015-10-26 13:33:10

int a杀死了您在a=((36-wiregauge)/39);中的除法,其余的都是不变的,直到你变成负数为止。

票数 0
EN

Stack Overflow用户

发布于 2015-10-26 13:34:27

ab变量在copperWireResistancealuminumWireResistance函数中有些问题。您将它们声明为int,但在您的等式中,您得到了一个值,该值小于整数。

与结果一样,您总是获得从函数返回的相同值。

因此,将类型更改为floatdouble

ps。并将Max_N类型更改为intlong,如果您将数字与<运算符进行比较的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33346906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档