如何使用循环打印多个最大值

时间:2019-05-22 05:12:26

标签: c

尝试计算电压达到最大频率时,我能够打印最新的最大频率,但可能会降低电压使其达到最大频率。

通过将循环从+切换到-从或切换到1000000(以10为增量),我可以获得最高或最低的频率。

尝试在VO > voMax内嵌套if语句

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define PI 3.14f
#define Vi 5

#define L 4.3e-4
#define C 5.1e-6

int getFreq();
long getResist();
float getVO(float XL, float XC, int R);
float getXC(int f);
float getXL(int f);

int main()
{
    long resist, freq, fMax;
    float XL, XC, VO, voMax;

    voMax = 0;
    fMax = 0;
    resist = getResist();
    for (freq = 1000000; freq >= 0; freq -= 10)
    {
        XL = getXL(freq);

        XC = getXC(freq);

        VO = getVO(XL, XC, resist);
        if (1000000 == freq)
        {
            fMax = freq;
            voMax = VO;

        }
        else if (VO > voMax)
        {
            fMax = freq;
            voMax = VO;

        }       
    }
    printf("VO = %f Frequency = %d\n", voMax, fMax);
    getch();
    return 0;
}

float getXL(long f)
{
    float XL;

    XL = 2 * PI * f * C;
    return XL;
}

float getXC(long f)
{
    float XC;

    XC = 1 / (2 * PI * f * C);
    return XC;

}

float getVO(float XL, float XC, long R)
{
    float VO;

    VO = (Vi * R) / sqrt((XL - XC) * (XL - XC) + R * R);
    return VO;
}

int getFreq()
{
    int freq;
    freq = 0;
    printf("please enter a frequency:");
    scanf("%d", &freq);
    return freq;
}
long getResist()
{
    int resist;
    resist = 0;
    printf("please enter a resistance:");
    scanf("%d", &resist);
    return resist;
}

我希望电压以多个频率显示最大电压。

1 个答案:

答案 0 :(得分:2)

好吧,您想要的是生成“大量”数据,然后进行一些分析。我实际上将分两步实施:

  1. 生成数据(并将其保存在数组或文件中)
  2. 对这些数据进行任何需要的分析。

通过这种清晰的方法获得所需的结果后,您可以转到下一步并根据您需要的任何优化规则尝试对算法进行优化。


  

我希望电压以多个频率显示最大电压。

我认为您需要进行少量代码更新。您具有以下顺序:

voMax = 0;
fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{

您可能应该拥有:

fMax = 0;
resist = getResist();
for (freq = 1000000; freq >= 0; freq -= 10)
{
    voMax = 0;

(我将“ voMax = 0;”移到了“ for”中)。

这样,您可以计算所有频率的最大电压,而不会受到其他频率的干扰。