gpt4 book ai didi

C编程基本回调函数

转载 作者:行者123 更新时间:2023-11-30 15:24:18 25 4
gpt4 key购买 nike

问题简要如下:

实现回调函数void data_cb(int raw)。每次分析器(在本例中是我们的测试模块)调用 data_cb(n) 时,您必须根据 n 的值更新模块的内部状态。 不能使用数组。相反,我们有一些模块变量来跟踪统计数据。

这就是我所做的:

// data_cb(n) updates the internal state based on the value of n 
void data_cb(int n)
{
a= n;}

// total_data_points() returns the number of integers processed so far
int total_data_points(void){
count++;
return count;}

// negative_sum() returns the sum of the negative integers processed so far
// NOTE: you do not have to worry about overflow
int negative_sum(void){
if (a<=0)
{
neg_sum = neg_sum+a;
return neg_sum;
}
else
{
return neg_sum;
}}

// positive_sum() returns the sum of the positive integers processed so far
// NOTE: you do not have to worry about overflow
int positive_sum(void){
if (a>=0)
{
pos_sum = pos_sum+a;
return pos_sum;
}
else
{
return pos_sum;}}

total_data_points() 返回处理的整数数量,但它没有给我们我们想要的。考虑下面的例子:

假设已使用以下值调用 data_cb(n):2 5 7 4 1 -3 -6 -5 -3 1 3 5

    assert (total_data_points() == 12);
assert (negative_sum() == -17);
assert (positive_sum() == 28);
assert (data_max() == 7);
assert (data_min() == -6);
assert (data_spread() == 4);

最佳答案

问题是,当您调用 total_data_points()negative_sum() 等函数时,您剩下的唯一数据是最近一次调用 data_cb(5)。内部状态只是保持a = 5

相反,您需要在收到数据时更新某些内容以跟踪统计信息。。我想练习中“不能使用数组”的规定是为了确保您将数据作为流处理,而不是仅仅将所有数据保留在内存中。因此,您需要执行如下操作:

void data_cb(int n)
{
dataPointsSeen++;
if (n > 0) {positiveSum += n;}
if (n < 0) {negativeSum += n;}
//...
}

然后只需在请求时返回这些内容即可:

int total_data_points()
{
return dataPointsSeen;
}

关于C编程基本回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28493819/

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