首页 > 解决方案 > 如何使用循环打印多个最大值

问题描述

试图计算电压达到最大值的频率,我可以打印最近的最大值,但可能有较低的频率值可以达到最大电压。

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

尝试嵌套 if 语句VO > voMax

#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;
}

我希望电压以多个频率打印最大值。

标签: c

解决方案


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

  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;

(我在“for”中移动了“voMax = 0;”)。

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


推荐阅读