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

标签 c

尝试计算电压在哪些频率下达到最大值,我能够打印出最近的最大值,但可能存在能够达到最大电压的较低频率值。

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

尝试在 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. 生成数据(并将其保存在数组或文件中)
  2. 根据您的需要对该数据进行任何分析。

在使用这种明确的方法获得所需结果后,您可以进入下一步并根据您需要的任何优化规则尝试优化算法。


I want the voltage to print max at multiple freq.

我认为您需要一个小的代码更新。您有以下顺序:

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”中)。

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

关于c - 如何使用循环打印多个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249689/

相关文章:

c - 使用 gdb 访问命令行参数

c - 如果 sigwait() 阻塞,什么时候接受的信号实际上是 "selected"?

c - 从linux内核的pid获取完整进程路径

c - 循环与其他循环的交互

C - 初始化元素不是常量

c - C 中的 Strlen() 功能存在问题

java - 高容量 SVM(机器学习)系统

python - 在 C 中模拟 Python `random.random()` 功能

javascript - 转换 flex/bison 解析器以在浏览器中使用

c - sscanf 循环内出现意外结果