C语言中将一组整形数据min-MAX标准化后输出
时间: 2024-10-06 16:00:57 浏览: 33
在C语言中,将一组整数[min, MAX]范围内的数据标准化通常意味着将它们转换到另一个预设的范围内,比如[0, 1]。这可以使用下面的公式:
```c
#include <stdio.h>
#include <stdlib.h>
void normalize(int input[], int min_val, int max_val, int normalized_output[], size_t size) {
for (size_t i = 0; i < size; ++i) {
double scaled = ((double)(input[i] - min_val)) / (max_val - min_val);
// 将浮点数转换回整数,如果需要保持精度就用rint(),若不需要可以用round()
normalized_output[i] = (int)(scaled * (255.0f)); // 或者(2^16-1)
}
}
int main() {
int original_data[] = {10, 20, 30, 40, 50};
const int min = 0;
const int max = 100;
int normalized_data[5];
size_t array_size = sizeof(original_data) / sizeof(original_data[0]);
normalize(original_data, min, max, normalized_data, array_size);
// 输出标准化后的数据
for (int i = 0; i < array_size; ++i) {
printf("%d ", normalized_data[i]);
}
return 0;
}
```
在这个例子中,我们将原始数据数组`original_data`中每个元素减去最小值`min`,然后除以最大值`max`与最小值之差,得到一个0到1之间的比例。接着,我们将这个比例乘以一个新的上限(如255或`(2^16)-1`),以便将结果映射到新的整数值范围内。
阅读全文