gpt4 book ai didi

c - 查找结构中的最小值/最大值

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:51 26 4
gpt4 key购买 nike

所以我打开了一个 CSV 文件,并将其添加到一个结构中。我想在第三列中找到最高/最低值,在第四列中找到最高/最低值。然后打印出它们出现的每一行。

typedef struct {
float xvalue;
float yvalue;
float uvalue;
float vvalue;
} flow_data;

这里是添加 CSV 文件 -

int total = 0;
flow_data d;
flow_data* dataset = NULL;

while(4 == fscanf(fp, "%f, %f, %f, %f\n", &d.xvalue, &d.yvalue, &d.uvalue, &d.vvalue))
{
dataset = realloc(dataset, sizeof(*dataset) * (total + 1));
dataset[total] = d;
total++;
}

关于操作,我知道这是一种荒谬的做事方式,但我不确定如何提高效率。我如何将所有内容添加到函数中?您可以将整个结构传递给一个函数吗?

float minvalueu = 100000, maxvalueu = 0;
float minvaluev = 100000, maxvaluev = 0;
int ivalueofminu = 0, ivalueofmaxu = 0;
int ivalueofminv = 0, ivalueofmaxv = 0;

for(int i = 0; i < total; i++)
{
flow_data* p = &dataset[i];

if ( p->uvalue > maxvalueu)
{
maxvalueu = p->uvalue;
ivalueofmaxu = i;
}

if ( p->uvalue < minvalueu)
{
minvalueu = p->uvalue;
ivalueofminu = i;
}

if ( p->vvalue > maxvaluev)
{
maxvaluev = p->vvalue;
ivalueofmaxv = i;
}

if ( p->vvalue < minvaluev)
{
minvaluev = p->uvalue;
ivalueofminv = i;
}

printf("%.7f, %.7f, %.7f, %.7f\n", p->xvalue, p->yvalue, p->vvalue, p->uvalue);
}

flow_data* z = &dataset[ivalueofmaxu];
printf("Max of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofmaxv];
printf("Max of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

最佳答案

问题的最后代码块中的整个代码可以移动到一个函数中。该函数的参数将是指向结构 flow_data 的指针和数组中的元素数 (total)。
该函数看起来像这样:

void findAndPrintMaxMinVals(flow_data* dataset, int total)

main() 调用

findAndPrintMaxMinVals(dataset, total)

完整代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
float xvalue;
float yvalue;
float uvalue;
float vvalue;
} flow_data;

void findAndPrintMaxMinVals(flow_data* dataset, int total)
{
float minvalueu = 100000, maxvalueu = 0;
float minvaluev = 100000, maxvaluev = 0;
int ivalueofminu = 0, ivalueofmaxu = 0;
int ivalueofminv = 0, ivalueofmaxv = 0;

for(int i = 0; i < total; i++)
{
flow_data* p = &dataset[i];

if ( p->uvalue > maxvalueu)
{
maxvalueu = p->uvalue;
ivalueofmaxu = i;
}

if ( p->uvalue < minvalueu)
{
minvalueu = p->uvalue;
ivalueofminu = i;
}

if ( p->vvalue > maxvaluev)
{
maxvaluev = p->vvalue;
ivalueofmaxv = i;
}

if ( p->vvalue < minvaluev)
{
minvaluev = p->uvalue;
ivalueofminv = i;
}

printf("%.7f, %.7f, %.7f, %.7f\n", p->xvalue, p->yvalue, p->vvalue, p->uvalue);
}

flow_data* z = &dataset[ivalueofmaxu];
printf("Max of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of U - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofmaxv];
printf("Max of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);

z = &dataset[ivalueofminu];
printf("Min of V - %.7f, %.7f, %.7f, %.7f\n", z->xvalue, z->yvalue, z->vvalue, z->uvalue);
}


int main() {

int total = 4; //total no of datasets for example
int i;
flow_data d;
flow_data* dataset = NULL;

dataset = (flow_data*)malloc(sizeof(flow_data) * total); //memory for 4 elements for testing

//Generate values and fill in
for(i = 0; i < total; i++) {
dataset[i].xvalue = (i+1) * 7;
dataset[i].yvalue = (i+1) * 8;
dataset[i].uvalue = (i+1) * 9;
dataset[i].vvalue = (i+1) * 10;
}
findAndPrintMaxMinVals(dataset, total);
}

关于c - 查找结构中的最小值/最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52052104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com